Diff of the two buildlogs:

--
--- b1/build.log	2025-02-16 07:28:21.025695536 +0000
+++ b2/build.log	2025-02-16 11:09:08.028419129 +0000
@@ -1,6 +1,6 @@
 I: pbuilder: network access will be disabled during build
-I: Current time: Fri Mar 20 22:59:23 -12 2026
-I: pbuilder-time-stamp: 1774090763
+I: Current time: Sun Feb 16 21:28:24 +14 2025
+I: pbuilder-time-stamp: 1739690904
 I: Building the build Environment
 I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz]
 I: copying local configuration
@@ -26,52 +26,84 @@
 dpkg-source: info: applying update-packaged-javascript-links.patch
 I: Not using root during the build.
 I: Installing the build-deps
-I: user script /srv/workspace/pbuilder/3553977/tmp/hooks/D02_print_environment starting
+I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/D01_modify_environment starting
+debug: Running on ionos11-amd64.
+I: Changing host+domainname to test build reproducibility
+I: Adding a custom variable just for the fun of it...
+I: Changing /bin/sh to bash
+'/bin/sh' -> '/bin/bash'
+lrwxrwxrwx 1 root root 9 Feb 16 07:28 /bin/sh -> /bin/bash
+I: Setting pbuilder2's login shell to /bin/bash
+I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other
+I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/D01_modify_environment finished
+I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/D02_print_environment starting
 I: set
-  BUILDDIR='/build/reproducible-path'
-  BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other'
-  BUILDUSERNAME='pbuilder1'
-  BUILD_ARCH='amd64'
-  DEBIAN_FRONTEND='noninteractive'
-  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=42 '
-  DISTRIBUTION='unstable'
-  HOME='/root'
-  HOST_ARCH='amd64'
+  BASH=/bin/sh
+  BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath
+  BASH_ALIASES=()
+  BASH_ARGC=()
+  BASH_ARGV=()
+  BASH_CMDS=()
+  BASH_LINENO=([0]="12" [1]="0")
+  BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:.
+  BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment")
+  BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
+  BASH_VERSION='5.2.37(1)-release'
+  BUILDDIR=/build/reproducible-path
+  BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other'
+  BUILDUSERNAME=pbuilder2
+  BUILD_ARCH=amd64
+  DEBIAN_FRONTEND=noninteractive
+  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=20 '
+  DIRSTACK=()
+  DISTRIBUTION=unstable
+  EUID=0
+  FUNCNAME=([0]="Echo" [1]="main")
+  GROUPS=()
+  HOME=/root
+  HOSTNAME=i-capture-the-hostname
+  HOSTTYPE=x86_64
+  HOST_ARCH=amd64
   IFS=' 	
   '
-  INVOCATION_ID='6bf631419cfc4fbd88102821c92ef5a1'
-  LANG='C'
-  LANGUAGE='en_US:en'
-  LC_ALL='C'
-  MAIL='/var/mail/root'
-  OPTIND='1'
-  PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games'
-  PBCURRENTCOMMANDLINEOPERATION='build'
-  PBUILDER_OPERATION='build'
-  PBUILDER_PKGDATADIR='/usr/share/pbuilder'
-  PBUILDER_PKGLIBDIR='/usr/lib/pbuilder'
-  PBUILDER_SYSCONFDIR='/etc'
-  PPID='3553977'
-  PS1='# '
-  PS2='> '
+  INVOCATION_ID=8630b33601374133a70c174dfd4e27fa
+  LANG=C
+  LANGUAGE=et_EE:et
+  LC_ALL=C
+  MACHTYPE=x86_64-pc-linux-gnu
+  MAIL=/var/mail/root
+  OPTERR=1
+  OPTIND=1
+  OSTYPE=linux-gnu
+  PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
+  PBCURRENTCOMMANDLINEOPERATION=build
+  PBUILDER_OPERATION=build
+  PBUILDER_PKGDATADIR=/usr/share/pbuilder
+  PBUILDER_PKGLIBDIR=/usr/lib/pbuilder
+  PBUILDER_SYSCONFDIR=/etc
+  PIPESTATUS=([0]="0")
+  POSIXLY_CORRECT=y
+  PPID=2461830
   PS4='+ '
-  PWD='/'
-  SHELL='/bin/bash'
-  SHLVL='2'
-  SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.Z15QMKHg/pbuilderrc_U6fU --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.Z15QMKHg/b1 --logfile b1/build.log crystal_1.14.0+dfsg-1.dsc'
-  SUDO_GID='110'
-  SUDO_UID='105'
-  SUDO_USER='jenkins'
-  TERM='unknown'
-  TZ='/usr/share/zoneinfo/Etc/GMT+12'
-  USER='root'
-  _='/usr/bin/systemd-run'
-  http_proxy='http://213.165.73.152:3128'
+  PWD=/
+  SHELL=/bin/bash
+  SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix
+  SHLVL=3
+  SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.Z15QMKHg/pbuilderrc_O8EH --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.Z15QMKHg/b2 --logfile b2/build.log crystal_1.14.0+dfsg-1.dsc'
+  SUDO_GID=111
+  SUDO_UID=106
+  SUDO_USER=jenkins
+  TERM=unknown
+  TZ=/usr/share/zoneinfo/Etc/GMT-14
+  UID=0
+  USER=root
+  _='I: set'
+  http_proxy=http://46.16.76.132:3128
 I: uname -a
-  Linux ionos5-amd64 6.12.9+bpo-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.9-1~bpo12+1 (2025-01-19) x86_64 GNU/Linux
+  Linux i-capture-the-hostname 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07) x86_64 GNU/Linux
 I: ls -l /bin
-  lrwxrwxrwx 1 root root 7 Nov 22  2024 /bin -> usr/bin
-I: user script /srv/workspace/pbuilder/3553977/tmp/hooks/D02_print_environment finished
+  lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin
+I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/D02_print_environment finished
  -> Attempting to satisfy build-dependencies
  -> Creating pbuilder-satisfydepends-dummy package
 Package: pbuilder-satisfydepends-dummy
@@ -256,7 +288,7 @@
 Get: 115 http://deb.debian.org/debian unstable/main amd64 llvm-19-tools amd64 1:19.1.7-1+b1 [511 kB]
 Get: 116 http://deb.debian.org/debian unstable/main amd64 llvm-19-dev amd64 1:19.1.7-1+b1 [43.2 MB]
 Get: 117 http://deb.debian.org/debian unstable/main amd64 zlib1g-dev amd64 1:1.3.dfsg+really1.3.1-1+b1 [920 kB]
-Fetched 181 MB in 26s (6897 kB/s)
+Fetched 181 MB in 14s (12.5 MB/s)
 Preconfiguring packages ...
 Selecting previously unselected package libpython3.13-minimal:amd64.
 (Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 19808 files and directories currently installed.)
@@ -645,8 +677,8 @@
 Setting up tzdata (2025a-2) ...
 
 Current default time zone: 'Etc/UTC'
-Local time is now:      Sat Mar 21 11:01:33 UTC 2026.
-Universal Time is now:  Sat Mar 21 11:01:33 UTC 2026.
+Local time is now:      Sun Feb 16 07:32:41 UTC 2025.
+Universal Time is now:  Sun Feb 16 07:32:41 UTC 2025.
 Run 'dpkg-reconfigure tzdata' if you wish to change it.
 
 Setting up liberror-perl (0.17029-2) ...
@@ -751,7 +783,11 @@
 Building tag database...
  -> Finished parsing the build-deps
 I: Building the package
-I: Running cd /build/reproducible-path/crystal-1.14.0+dfsg/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S  > ../crystal_1.14.0+dfsg-1_source.changes
+I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/A99_set_merged_usr starting
+Not re-configuring usrmerge for unstable
+I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/A99_set_merged_usr finished
+hostname: Name or service not known
+I: Running cd /build/reproducible-path/crystal-1.14.0+dfsg/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S  > ../crystal_1.14.0+dfsg-1_source.changes
 dpkg-buildpackage: info: source package crystal
 dpkg-buildpackage: info: source version 1.14.0+dfsg-1
 dpkg-buildpackage: info: source distribution unstable
@@ -761,7 +797,7 @@
  debian/rules clean
 dh clean
    dh_auto_clean
-	make -j42 clean
+	make -j20 clean
 make[1]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg'
 rm -rf .build
 rm -rf ./docs
@@ -780,19 +816,19 @@
    dh_auto_configure
    debian/rules override_dh_auto_build
 make[1]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg'
-dh_auto_build -- release=1 verbose=1 progress=1 threads=42 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1
-	make -j42 "INSTALL=install --strip-program=true" release=1 verbose=1 progress=1 threads=42 CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib CRYSTAL_CACHE_DIR=/tmp/crystal interpreter=1
+dh_auto_build -- release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1
+	make -j20 "INSTALL=install --strip-program=true" release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib CRYSTAL_CACHE_DIR=/tmp/crystal interpreter=1
 make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg'
 Using /usr/bin/llvm-config-19 [version=19.1.7]
-CRYSTAL_CONFIG_BUILD_COMMIT="" CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib SOURCE_DATE_EPOCH="1734712509"  CRYSTAL_CONFIG_LIBRARY_PATH='$ORIGIN/../lib/crystal' ./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 42 --link-flags="-Wl,-z,relro"  -o .build/crystal src/compiler/crystal.cr -D without_openssl -D without_zlib -D use_pcre2
+CRYSTAL_CONFIG_BUILD_COMMIT="" CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib SOURCE_DATE_EPOCH="1734712509"  CRYSTAL_CONFIG_LIBRARY_PATH='$ORIGIN/../lib/crystal' ./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 20 --link-flags="-Wl,-z,relro"  -o .build/crystal src/compiler/crystal.cr -D without_openssl -D without_zlib -D use_pcre2
 [1/13] Parse                             
[1/13] Parse                             
[2/13] Semantic (top level)              
[2/13] Semantic (top level)              
[3/13] Semantic (new)                    
[3/13] Semantic (new)                    
[4/13] Semantic (type declarations)      
[4/13] Semantic (type declarations)      
[5/13] Semantic (abstract def check)     
[5/13] Semantic (abstract def check)     
[6/13] Semantic (restrictions augmenter) 
[6/13] Semantic (restrictions augmenter) 
[7/13] Semantic (ivars initializers)     
[7/13] Semantic (ivars initializers)     
[8/13] Semantic (cvars initializers)     
[8/13] Semantic (cvars initializers)     
[9/13] Semantic (main)                   
[9/13] Semantic (main)                   
[10/13] Semantic (cleanup)                
[10/13] Semantic (cleanup)                
[11/13] Semantic (recursive struct check) 
[11/13] Semantic (recursive struct check) 
[12/13] Codegen (crystal)                 
[12/13] Codegen (crystal)                 
[13/13] Codegen (bc+obj)                  
[13/13] [0/1] Codegen (bc+obj)                  
[13/13] [1/1] Codegen (bc+obj)                  
[13/13] [1/1] Codegen (bc+obj)                  
[14/13] Codegen (linking)                 
[14/13] Codegen (linking)                 
                                       
make[2]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg'
 make[1]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg'
    debian/rules override_dh_auto_test
 make[1]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg'
-make release=1 verbose=1 progress=1 threads=42 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 compiler_spec
+make release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 compiler_spec
 make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg'
 Using /usr/bin/llvm-config-19 [version=19.1.7]
-CRYSTAL_CONFIG_BUILD_COMMIT="" CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib SOURCE_DATE_EPOCH="1734712509" ./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 42 --link-flags="-Wl,-z,relro"  --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/compiler_spec spec/compiler_spec.cr --release
+CRYSTAL_CONFIG_BUILD_COMMIT="" CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib SOURCE_DATE_EPOCH="1734712509" ./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 20 --link-flags="-Wl,-z,relro"  --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/compiler_spec spec/compiler_spec.cr --release
 Using compiled compiler at .build/crystal
 In lib/markd/src/markd/renderers/html_renderer.cr:238:7
 
@@ -801,7 +837,7 @@
 Warning: expanding macro
 
 
-There was a problem expanding macro 'macro_140549799628400'
+There was a problem expanding macro 'macro_140300317817808'
 
 Called macro defined in lib/markd/src/markd/renderers/html_renderer.cr:238:7
 
@@ -817,15232 +853,13243 @@
 
 A total of 1 warnings were found.
 [1/13] Parse                             
[1/13] Parse                             
[2/13] Semantic (top level)              
[2/13] Semantic (top level)              
[3/13] Semantic (new)                    
[3/13] Semantic (new)                    
[4/13] Semantic (type declarations)      
[4/13] Semantic (type declarations)      
[5/13] Semantic (abstract def check)     
[5/13] Semantic (abstract def check)     
[6/13] Semantic (restrictions augmenter) 
[6/13] Semantic (restrictions augmenter) 
[7/13] Semantic (ivars initializers)     
[7/13] Semantic (ivars initializers)     
[8/13] Semantic (cvars initializers)     
[8/13] Semantic (cvars initializers)     
[9/13] Semantic (main)                   
[9/13] Semantic (main)                   
[10/13] Semantic (cleanup)                
[10/13] Semantic (cleanup)                
[11/13] Semantic (recursive struct check) 
[11/13] Semantic (recursive struct check) 
[12/13] Codegen (crystal)                 
[12/13] Codegen (crystal)                 
[13/13] Codegen (bc+obj)                  
[13/13] [0/1] Codegen (bc+obj)                  
[13/13] [1/1] Codegen (bc+obj)                  
[13/13] [1/1] Codegen (bc+obj)                  
[14/13] Codegen (linking)                 
[14/13] Codegen (linking)                 
                                       
.build/compiler_spec -v --order=random   
-Randomized with seed: 68465
-Crystal::Repl::Interpreter
-  casts
-    upcasts between named tuple types, different order
    upcasts between named tuple types, different order
-    upcasts between named tuple types, respects alignment (#14036)
    upcasts between named tuple types, respects alignment (#14036)
-    casts from nilable type to mixed union type (2)
    casts from nilable type to mixed union type (2)
-    discards cast
    discards cast
-    does as? with a type that can't match (#12346)
    does as? with a type that can't match (#12346)
-    casts from mixed union type to another mixed union type for caller
    casts from mixed union type to another mixed union type for caller
-    casts from mixed union type to primitive type
    casts from mixed union type to primitive type
-    upcasts to module type
    upcasts to module type
-    casts from reference to nilable reference
    casts from reference to nilable reference
-    raises when as fails
    raises when as fails
-    upcasts in nilable cast (#12532)
    upcasts in nilable cast (#12532)
-    upcasts GenericClassInstanceMetaclassType to VirtualMetaclassType
    upcasts GenericClassInstanceMetaclassType to VirtualMetaclassType
-    casts nilable from mixed union type to primitive type (nil case)
    casts nilable from mixed union type to primitive type (nil case)
-    does is_a? with virtual metaclass
    does is_a? with virtual metaclass
-    casts to filtered type, not type in as(...)
    casts to filtered type, not type in as(...)
-    upcasts virtual type to union
    upcasts virtual type to union
-    casts from mixed union type to nilable proc type (#12283)
    casts from mixed union type to nilable proc type (#12283)
-    casts nilable from mixed union type to primitive type (non-nil case)
    casts nilable from mixed union type to primitive type (non-nil case)
-    puts named tuple type inside union of different named tuple type (#12243)
    puts named tuple type inside union of different named tuple type (#12243)
-    does as? with no resulting type (#12327)
    does as? with no resulting type (#12327)
-    upcasts mixed union with tuple to mixed union with compatible tuple (3) (#12331)
    upcasts mixed union with tuple to mixed union with compatible tuple (3) (#12331)
-    casts from nilable type to mixed union type
    casts from nilable type to mixed union type
-    puts tuple type inside union of different tuple type (#12243)
    puts tuple type inside union of different tuple type (#12243)
-    upcasts between tuple types, respects alignment (#14036)
    upcasts between tuple types, respects alignment (#14036)
-    upcasts between tuple types
    upcasts between tuple types
-    casts nil to Void*
    casts nil to Void*
-    casts from reference to pointer and back
    casts from reference to pointer and back
-    upcasts mixed union with tuple to mixed union with compatible tuple (2) (#12331)
    upcasts mixed union with tuple to mixed union with compatible tuple (2) (#12331)
-    upcasts between named tuple types, same order
    upcasts between named tuple types, same order
-    puts virtual metaclass into union (#12162)
    puts virtual metaclass into union (#12162)
-    does as? with no resulting type, not from nil (#12327)
    does as? with no resulting type, not from nil (#12327)
-    does is_a? with virtual type (struct)
    does is_a? with virtual type (struct)
-    upcasts mixed union with tuple to mixed union with compatible tuple (1) (#12331)
    upcasts mixed union with tuple to mixed union with compatible tuple (1) (#12331)
-Crystal::Repl::Interpreter
-  blocks
-    interprets block with args that conflict with a local var
    interprets block with args that conflict with a local var
-    interprets simplest block
    interprets simplest block
-    interprets yield with splat, less block arguments
    interprets yield with splat, less block arguments
-    interprets yield with splat, block with splat
    interprets yield with splat, block with splat
-    interprets block with args that conflict with a local var
    interprets block with args that conflict with a local var
-    clears block local variables when calling block
    clears block local variables when calling block
-    interprets break inside block (union, through break)
    interprets break inside block (union, through break)
-    interprets break inside block (union, through normal flow)
    interprets break inside block (union, through normal flow)
-    interprets yield inside def with arguments
    interprets yield inside def with arguments
-    interprets next inside block
    interprets next inside block
-    considers block arg without type as having NoReturn type (2) (#12270)
    considers block arg without type as having NoReturn type (2) (#12270)
-    discards yield expression
    discards yield expression
-    interprets break inside block (union, through return)
    interprets break inside block (union, through return)
-    interprets next inside block (union, through normal exit)
    interprets next inside block (union, through normal exit)
-    interprets yield with splat (2)
    interprets yield with splat (2)
-    interprets yield with splat (1)
    interprets yield with splat (1)
-    interprets yield inside another block
    interprets yield inside another block
-    clears block local variables when calling block (2)
    clears block local variables when calling block (2)
-    returns from block
    returns from block
-    interprets break inside block
    interprets break inside block
-    interprets next inside block (union, through next)
    interprets next inside block (union, through next)
-    interprets yield expressions
    interprets yield expressions
-    yields different values to form a union
    yields different values to form a union
-    interprets block with splat
    interprets block with splat
-    interprets yield expression
    interprets yield expression
-    interprets block with multiple yields
    interprets block with multiple yields
-    considers block arg without type as having NoReturn type (#12270)
    considers block arg without type as having NoReturn type (#12270)
-    caches method with captured block (#12276)
    caches method with captured block (#12276)
-    counts with ... yield scope in block args bytesize (#12316)
    counts with ... yield scope in block args bytesize (#12316)
-    casts yield expression to block var type (not block arg type)
    casts yield expression to block var type (not block arg type)
-    interprets with ... yield with extra arguments (#12296)
    interprets with ... yield with extra arguments (#12296)
-    interprets with ... yield with struct
    interprets with ... yield with struct
-    interprets with ... yield
    interprets with ... yield
-    interprets yield with splat, block with splat (#12227)
    interprets yield with splat, block with splat (#12227)
-    interprets yield return value
    interprets yield return value
-    captures non-closure block
    captures non-closure block
-Semantic: alias
-  errors if declares alias inside if
  errors if declares alias inside if
-  overloads union type through alias
  overloads union type through alias
-  declares alias inside type
  declares alias inside type
-  includes module through alias
  includes module through alias
-  doesn't find type parameter in alias (#3502)
  doesn't find type parameter in alias (#3502)
-  uses constant in alias with math (#3259)
  uses constant in alias with math (#3259)
-  reopens module through alias
  reopens module through alias
-  resolves alias type
  resolves alias type
-  works with alias type as restriction
  works with alias type as restriction
-  doesn't crash by infinite recursion against type alias and generics (#5329)
  doesn't crash by infinite recursion against type alias and generics (#5329)
-  reopens class through alias within itself
  reopens class through alias within itself
-  inherits struct through alias
  inherits struct through alias
-  errors if alias already defined
  errors if alias already defined
-  allows using generic type of recursive alias as restriction (#488)
  allows using generic type of recursive alias as restriction (#488)
-  finds type through alias (#4645)
  finds type through alias (#4645)
-  inherits class through alias
  inherits class through alias
-  can pass recursive alias to proc
  can pass recursive alias to proc
-  errors if alias is already defined as another type
  errors if alias is already defined as another type
-  errors if defining infinite recursive alias in union
  errors if defining infinite recursive alias in union
-  resolves type through alias (#563)
  resolves type through alias (#563)
-  reopens struct through alias
  reopens struct through alias
-  errors if trying to use typeof in alias
  errors if trying to use typeof in alias
-  reopens struct through alias within itself
  reopens struct through alias within itself
-  errors if defining infinite recursive alias
  errors if defining infinite recursive alias
-  looks up alias for macro resolution (#3548)
  looks up alias for macro resolution (#3548)
-  allows recursive array with alias
  allows recursive array with alias
-  errors if trying to resolve type of recursive alias
  errors if trying to resolve type of recursive alias
-  can use .class in alias (#2835)
  can use .class in alias (#2835)
-  reopens module through alias within itself
  reopens module through alias within itself
-  allows defining recursive aliases
  allows defining recursive aliases
-  allows using alias type as generic type
  allows using alias type as generic type
-  uses constant in alias (#3259)
  uses constant in alias (#3259)
-  allows defining recursive fun aliases
  allows defining recursive fun aliases
-  reopens class through alias
  reopens class through alias
-Semantic: yield with scope
-  passes #229
  passes #229
-  mentions with yield scope and current scope in error
  mentions with yield scope and current scope in error
-  errors if using instance variable at top level
  errors if using instance variable at top level
-  uses instance variable of enclosing scope
  uses instance variable of enclosing scope
-  infer type of empty block body
  infer type of empty block body
-  uses method of enclosing scope
  uses method of enclosing scope
-  infer type of block body
  infer type of block body
-  finds macro
  finds macro
-  infer type of block body with yield scope and arguments
  infer type of block body with yield scope and arguments
-  infer type of block body with yield scope
  infer type of block body with yield scope
-  invokes nested calls
  invokes nested calls
-Code gen: void
-  codegens no return assignment
  codegens no return assignment
-  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable
  codegens void assignment in case with local variable
-  returns void from nil functions, doesn't crash when passing value
  returns void from nil functions, doesn't crash when passing value
-  codegens unreachable code
  codegens unreachable code
-  codegens void assignment
  codegens void assignment
-  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case
  codegens void assignment in case
-  allows passing void as argument to method
  allows passing void as argument to method
+Randomized with seed: 76473
+Code gen: C ABI x86_64
+  passes struct less than 64 bits as { i64 }
  passes struct less than 64 bits as { i64 }
+  passes struct between 64 and 128 bits as { i64, i64 }
  passes struct between 64 and 128 bits as { i64, i64 }
+  passes struct between 64 and 128 bits as { i64, i64 } (with multiple modules/contexts)
  passes struct between 64 and 128 bits as { i64, i64 } (with multiple modules/contexts)
+  returns struct less than 64 bits as { i64 }
  returns struct less than 64 bits as { i64 }
+  passes struct less than 64 bits as { i64 } in varargs
  passes struct less than 64 bits as { i64 } in varargs
+  passes struct bigger than128 bits with byval
  passes struct bigger than128 bits with byval
+  returns struct bigger than 128 bits with sret
  returns struct bigger than 128 bits with sret
+  returns struct between 64 and 128 bits as { i64, i64 }
  returns struct between 64 and 128 bits as { i64, i64 }
+Codegen: class var
+  initializes class var with array literal  initializes class var with array literal  initializes class var with array literal  initializes class var with array literal  initializes class var with array literal  initializes class var with array literal  initializes class var with array literal  initializes class var with array literal  initializes class var with array literal
  initializes class var with array literal
+  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module
  doesn't crash with pointerof from another module
+  declares var as uninitialized and initializes it unsafely
  declares var as uninitialized and initializes it unsafely
+  accesses class var from proc literal
  accesses class var from proc literal
+  codegens class var inside module
  codegens class var inside module
+  reads class var before initializing it (hoisting)
  reads class var before initializing it (hoisting)
+  reads class var from virtual type metaclass
  reads class var from virtual type metaclass
+  codegens class var with begin and vars
  codegens class var with begin and vars
+  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)
  doesn't error if class var shares name with const (#7865)
+  codegens class var inside instance method
  codegens class var inside instance method
+  codegens generic class with class var
  codegens generic class with class var
+  inline initialization of simple class var
  inline initialization of simple class var
+  codegens second class var initializer
  codegens second class var initializer
+  initializes class var the moment it reaches it  initializes class var the moment it reaches it  initializes class var the moment it reaches it  initializes class var the moment it reaches it  initializes class var the moment it reaches it  initializes class var the moment it reaches it  initializes class var the moment it reaches it  initializes class var the moment it reaches it  initializes class var the moment it reaches it
  initializes class var the moment it reaches it
+  declares and initializes
  declares and initializes
+  catch infinite loop in class var initializer  catch infinite loop in class var initializer  catch infinite loop in class var initializer  catch infinite loop in class var initializer  catch infinite loop in class var initializer  catch infinite loop in class var initializer  catch infinite loop in class var initializer  catch infinite loop in class var initializer  catch infinite loop in class var initializer
  catch infinite loop in class var initializer
+  initializes class var of union with single type
  initializes class var of union with single type
+  doesn't inherit class var value in subclass
  doesn't inherit class var value in subclass
+  codegens class var with nilable reference type
  codegens class var with nilable reference type
+  writes class var from virtual type
  writes class var from virtual type
+  codegens class var
  codegens class var
+  codegens class var with type declaration begin and vars
  codegens class var with type declaration begin and vars
+  runs class var side effects (#8862)  runs class var side effects (#8862)  runs class var side effects (#8862)  runs class var side effects (#8862)  runs class var side effects (#8862)  runs class var side effects (#8862)  runs class var side effects (#8862)  runs class var side effects (#8862)  runs class var side effects (#8862)
  runs class var side effects (#8862)
+  codegens class var as nil
  codegens class var as nil
+  initializes dependent constant before class var  initializes dependent constant before class var  initializes dependent constant before class var  initializes dependent constant before class var  initializes dependent constant before class var  initializes dependent constant before class var  initializes dependent constant before class var  initializes dependent constant before class var  initializes dependent constant before class var
  initializes dependent constant before class var
+  doesn't use nilable type for initializer
  doesn't use nilable type for initializer
+  gets pointerof class var complex constant
  gets pointerof class var complex constant
+  codegens class var as nil if assigned for the first time inside method
  codegens class var as nil if assigned for the first time inside method
+  gets pointerof class var
  gets pointerof class var
+  uses var in class var initializer
  uses var in class var initializer
+  doesn't inherit class var value in module
  doesn't inherit class var value in module
+  reads simple class var before another complex one
  reads simple class var before another complex one
+  reads class var from virtual type
  reads class var from virtual type
+Semantic: method_missing
+  doesn't look up method_missing in with_yield_scope if call has a receiver (#12097)
  doesn't look up method_missing in with_yield_scope if call has a receiver (#12097)
+  finds method_missing with 'with ... yield'
  finds method_missing with 'with ... yield'
+  errors if method_missing expands to multiple methods
  errors if method_missing expands to multiple methods
+  does method missing for generic type
  does method missing for generic type
+  errors if method_missing expands to an incorrect method
  errors if method_missing expands to an incorrect method
+  does error in method_missing macro with virtual type
  does error in method_missing macro with virtual type
+  does error in method_missing if wrong number of params
  does error in method_missing if wrong number of params
+Code gen: alias
+  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)
  invokes methods on empty array of recursive alias (2)
+  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)
  invokes methods on empty array of recursive alias (3)
+  codegens cast to alias that includes bool
  codegens cast to alias that includes bool
+  overloads alias against generic (1) (#3261)
  overloads alias against generic (1) (#3261)
+  doesn't crash on cast to as recursive alias (#639)
  doesn't crash on cast to as recursive alias (#639)
+  casts to recursive alias  casts to recursive alias  casts to recursive alias  casts to recursive alias  casts to recursive alias  casts to recursive alias  casts to recursive alias  casts to recursive alias  casts to recursive alias
  casts to recursive alias
+  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)
  invokes methods on empty array of recursive alias (1)
+  casts to recursive alias
  casts to recursive alias
+  doesn't break with alias for link attributes
  doesn't break with alias for link attributes
+  lazily solves aliases (#1346)
  lazily solves aliases (#1346)
+  overloads alias against generic (2) (#3261)
  overloads alias against generic (2) (#3261)
+Semantic: fun
+  errors if defining class inside fun through macro (#6874)
  errors if defining class inside fun through macro (#6874)
+Code gen: var
+  codegens bug with var, while, if, break and ssa
  codegens bug with var, while, if, break and ssa
+  works with typeof with assignment (#828)
  works with typeof with assignment (#828)
+  codegens assignment that can never be reached
  codegens assignment that can never be reached
+  codegens ivar assignment when not-nil type filter applies
  codegens ivar assignment when not-nil type filter applies
+  codegens bug with union of int, nil and string (1): assigning nil to union must fill all zeros
  codegens bug with union of int, nil and string (1): assigning nil to union must fill all zeros
+  codegens bug with union of int, nil and string (2): assigning nil to union must fill all zeros
  codegens bug with union of int, nil and string (2): assigning nil to union must fill all zeros
+  codegens bug with instance vars and ssa
  codegens bug with instance vars and ssa
+  codegens var
  codegens var
+  codegens var with type declaration
  codegens var with type declaration
+  assigns to underscore
  assigns to underscore
+Semantic: require
+  file not found
+    require
    require
+    relative wildcard
    relative wildcard
+    wildcard
    wildcard
+    relative require
    relative require
+Code gen: ssa
+  codegens a var that is declared in a block (1)
  codegens a var that is declared in a block (1)
+  codegens ssa bug with if/else on var
  codegens ssa bug with if/else on var
+  codegens a redefined var
  codegens a redefined var
+  codegens declaration of var inside then when false
  codegens declaration of var inside then when false
+  codegens declaration of var inside then when true
  codegens declaration of var inside then when true
+  codegens a var that is re-assigned in a block (1)
  codegens a var that is re-assigned in a block (1)
+  codegens ssa bug (2)
  codegens ssa bug (2)
+  codegens ssa bug (1)
  codegens ssa bug (1)
+  codegens a var that is declared in a block (2)
  codegens a var that is declared in a block (2)
+  codegens a redefined var inside method with argument
  codegens a redefined var inside method with argument
+  codegens a redefined var inside method
  codegens a redefined var inside method
+  codegens a var that is re-assigned in a block (2)
  codegens a var that is re-assigned in a block (2)
+  codegens a var that is re-assigned in a block
  codegens a var that is re-assigned in a block
 Normalize: block
-  normalizes nested unpacking
  normalizes nested unpacking
+  normalizes unpacking with underscore
  normalizes unpacking with underscore
   normalizes unpacking with splat
  normalizes unpacking with splat
   normalizes unpacking with multiple body expressions
  normalizes unpacking with multiple body expressions
-  normalizes multiple nested unpackings
  normalizes multiple nested unpackings
   normalizes unpacking with single expression body
  normalizes unpacking with single expression body
+  normalizes multiple nested unpackings
  normalizes multiple nested unpackings
   normalizes unpacking with empty body
  normalizes unpacking with empty body
-  normalizes unpacking with underscore
  normalizes unpacking with underscore
+  normalizes nested unpacking
  normalizes nested unpacking
+Semantic: private
+  finds private macro in same file
  finds private macro in same file
+  doesn't find private alias in another file
  doesn't find private alias in another file
+  can use types in private type
  can use types in private type
+  gives private constant error in macro
  gives private constant error in macro
+  doesn't find private macro in another file
  doesn't find private macro in another file
+  doesn't find private enum from outside namespace, long name (#8831)
  doesn't find private enum from outside namespace, long name (#8831)
+  doesn't define incorrect type in top-level namespace (#13511)
  doesn't define incorrect type in top-level namespace (#13511)
+  doesn't find private def defined in macro in another file (#7681)
  doesn't find private def defined in macro in another file (#7681)
+  doesn't define incorrect type in top-level namespace (#13511)
  doesn't define incorrect type in top-level namespace (#13511)
+  finds private def in same file
  finds private def in same file
+  finds private type in same file
  finds private type in same file
+  doesn't find private class defined through macro (#8715)
  doesn't find private class defined through macro (#8715)
+  doesn't find private class from outside namespace, long name (#8831)
  doesn't find private class from outside namespace, long name (#8831)
+  doesn't inherit visibility from class node in macro hook (#8794)
  doesn't inherit visibility from class node in macro hook (#8794)
+  find module private macro inside a module, which is inherited by the module
  find module private macro inside a module, which is inherited by the module
+  find module private macro inside the module
  find module private macro inside the module
+  doesn't find private class from outside namespace
  doesn't find private class from outside namespace
+  doesn't find private constant in another file (#7850)
  doesn't find private constant in another file (#7850)
+  doesn't define private constant with global type name
  doesn't define private constant with global type name
+  doesn't find private alias from outside namespace, long name (#8831)
  doesn't find private alias from outside namespace, long name (#8831)
+  doesn't define incorrect type in top-level namespace (#13511)
  doesn't define incorrect type in top-level namespace (#13511)
+  doesn't find module private macro outside the module
  doesn't find module private macro outside the module
+  doesn't define private class with global type name
  doesn't define private class with global type name
+  doesn't find private enum from outside namespace
  doesn't find private enum from outside namespace
+  doesn't find private macro defined through macro (#8715)
  doesn't find private macro defined through macro (#8715)
+  doesn't define incorrect type in top-level namespace (#13511)
  doesn't define incorrect type in top-level namespace (#13511)
+  doesn't define private alias with global type name
  doesn't define private alias with global type name
+  types private def correctly
  types private def correctly
+  doesn't define private module with global type name
  doesn't define private module with global type name
+  doesn't find private module from outside namespace, long name (#8831)
  doesn't find private module from outside namespace, long name (#8831)
+  can use instance var initializer in private type
  can use instance var initializer in private type
+  doesn't define private lib with global type name
  doesn't define private lib with global type name
+  finds private type from inside namespace in subclass
  finds private type from inside namespace in subclass
+  doesn't find private thing defined through recursive macro (#8715)
  doesn't find private thing defined through recursive macro (#8715)
+  finds private class in macro expansion
  finds private class in macro expansion
+  doesn't find private lib from outside namespace
  doesn't find private lib from outside namespace
+  doesn't define incorrect type in top-level namespace (#13511)
  doesn't define incorrect type in top-level namespace (#13511)
+  finds private macro in same file, invoking from another macro (#1265)
  finds private macro in same file, invoking from another macro (#1265)
+  finds private def when invoking from inside macro (#2082)
  finds private def when invoking from inside macro (#2082)
+  doesn't find private def in another file
  doesn't find private def in another file
+  finds private type from inside namespace
  finds private type from inside namespace
+  finds private def in same file that invokes another def
  finds private def in same file that invokes another def
+  doesn't find private module from outside namespace
  doesn't find private module from outside namespace
+  doesn't find private class in another file
  doesn't find private class in another file
+  doesn't find private constant from outside namespace, long name (#8831)
  doesn't find private constant from outside namespace, long name (#8831)
+  doesn't find private alias from outside namespace
  doesn't find private alias from outside namespace
+  doesn't define private enum with global type name
  doesn't define private enum with global type name
+  doesn't find private lib from outside namespace, long name (#8831)
  doesn't find private lib from outside namespace, long name (#8831)
+  doesn't find private module defined through macro (#8715)
  doesn't find private module defined through macro (#8715)
+  doesn't define incorrect type in top-level namespace (#13511)
  doesn't define incorrect type in top-level namespace (#13511)
+  can use class var initializer in private type
  can use class var initializer in private type
+  doesn't find private constant from outside namespace
  doesn't find private constant from outside namespace
+Init invocation
+  errors if files will be overwritten by a generated file
  errors if files will be overwritten by a generated file
+  prints error if a file is already present
  prints error if a file is already present
+  honors the custom set directory name
  honors the custom set directory name
+  doesn't error when asked to skip existing files
  doesn't error when asked to skip existing files
+  doesn't error if files will be overwritten by a generated file and --force is used
  doesn't error if files will be overwritten by a generated file and --force is used
+  produces valid yaml file
  produces valid yaml file
+Semantic: initialize
+  doesn't type instance var as nilable if out
  doesn't type instance var as nilable if out
+  doesn't type instance var as nilable if not used in method call
  doesn't type instance var as nilable if not used in method call
+  doesn't type instance var as nilable if used after method call that doesn't read var
  doesn't type instance var as nilable if used after method call that doesn't read var
+  marks instance variable as nilable in initialize if using self in method
  marks instance variable as nilable in initialize if using self in method
+  types instance var as nilable if not always assigned
  types instance var as nilable if not always assigned
+  marks instance variable as nilable when using self in super
  marks instance variable as nilable when using self in super
+  finishes when analyzing recursive calls
  finishes when analyzing recursive calls
+  types instance var as nilable if assigned in block
  types instance var as nilable if assigned in block
+  types instance var as non-nilable if calls super and super defines it, with one level of indirection
  types instance var as non-nilable if calls super and super defines it, with one level of indirection
+  doesn't type ivar having initializer as nilable even if it is used before assigned inside initialize (#5112)
  doesn't type ivar having initializer as nilable even if it is used before assigned inside initialize (#5112)
+  doesn't type ivar as nilable if super call present and parent has already typed ivar (#4764)
  doesn't type ivar as nilable if super call present and parent has already typed ivar (#4764)
+  types instance var as nilable if used before assignment
  types instance var as nilable if used before assignment
+  types initializer of recursive generic type
  types initializer of recursive generic type
+  doesn't type instance var as nilable if assigned before method call
  doesn't type instance var as nilable if assigned before method call
+  types instance vars as nilable if doesn't invoke super with default arguments
  types instance vars as nilable if doesn't invoke super with default arguments
+  types instance var as non-nilable if calls super and super defines it
  types instance var as non-nilable if calls super and super defines it
+  doesn't type instance var as nilable if used after method call inside typeof
  doesn't type instance var as nilable if used after method call inside typeof
+  doesn't type instance var as nilable if used after global method call
  doesn't type instance var as nilable if used after global method call
+  doesn't type instance var as nilable if used after method call that assigns var
  doesn't type instance var as nilable if used after method call that assigns var
+  marks instance variable as nilable in initialize if using self
  marks instance variable as nilable in initialize if using self
+  types instance var as nilable if used after method call that reads var (2)
  types instance var as nilable if used after method call that reads var (2)
+  doesn't mark instance variable as nilable when using self.class
  doesn't mark instance variable as nilable when using self.class
+  types instance var as nilable if used after method call that reads var through other calls
  types instance var as nilable if used after method call that reads var through other calls
+  checks instance vars of included modules
  checks instance vars of included modules
+  types initializer of generic type after instantiated
  types initializer of generic type after instantiated
+  types instance var as not-nilable if assigned in block but previously assigned
  types instance var as not-nilable if assigned in block but previously assigned
+  marks instance variable as nilable in initialize if assigning self
  marks instance variable as nilable in initialize if assigning self
+  types instance vars as nilable if doesn't invoke super in initialize
  types instance vars as nilable if doesn't invoke super in initialize
+  doesn't mark instance variable as nilable when using self.class in method
  doesn't mark instance variable as nilable when using self.class in method
+  types instance var as nilable if used after method call that reads var
  types instance var as nilable if used after method call that reads var
+  errors on default new when using named arguments (#2245)
  errors on default new when using named arguments (#2245)
+  types instance vars as nilable if doesn't invoke super in initialize with deep subclass
  types instance vars as nilable if doesn't invoke super in initialize with deep subclass
+  errors if found matches for initialize but doesn't cover all (bug #204)
  errors if found matches for initialize but doesn't cover all (bug #204)
+  types instance var as nilable if used in first of two method calls
  types instance var as nilable if used in first of two method calls
+Semantic: metaclass
+  types generic module metaclass
  types generic module metaclass
+  types Object class
  types Object class
+  can't reopen as struct
  can't reopen as struct
+  types Object and Class metaclasses
  types Object and Class metaclasses
+  types metaclass superclass
  types metaclass superclass
+  can't reopen as module
  can't reopen as module
+  types generic instance metaclass superclass
  types generic instance metaclass superclass
+  subtyping relations between metaclasses
+    non-generic classes
    non-generic classes
+    non-generic modules
    non-generic modules
+    generic modules (2)
    generic modules (2)
+    generic classes (1)
    generic classes (1)
+    generic modules (1)
    generic modules (1)
+    generic classes (3)
    generic classes (3)
+    generic modules (3)
    generic modules (3)
+    virtual metaclass type with virtual type (#12628)
    virtual metaclass type with virtual type (#12628)
+    generic classes (2)
    generic classes (2)
+  types Class class
  types Class class
+  types generic class metaclass
  types generic class metaclass
+  types generic metaclass superclass
  types generic metaclass superclass
+  types Reference metaclass
  types Reference metaclass
+Semantic: is_a?
+  checks simple type with union
  checks simple type with union
+  restricts type inside if scope 1
  restricts type inside if scope 1
+  does is_a? from virtual metaclass to generic metaclass (#12302)
  does is_a? from virtual metaclass to generic metaclass (#12302)
+  restricts other types inside if else
  restricts other types inside if else
+  restricts type in else but lazily
  restricts type in else but lazily
+  doesn't fail on untyped is_a (#10317)
  doesn't fail on untyped is_a (#10317)
+  types if is_a? preceded by return if (preserves nops)
  types if is_a? preceded by return if (preserves nops)
+  applies filter inside block
  applies filter inside block
+  is bool
  is bool
+  restricts type inside if else when used with module type
  restricts type inside if else when used with module type
+  restricts type inside if scope 3
  restricts type inside if scope 3
+  restricts type inside if scope 2
  restricts type inside if scope 2
+  restricts in assignment
  restricts in assignment
+  applies negative condition filter if then is no return
  applies negative condition filter if then is no return
+  checks union with union
  checks union with union
+.system
+  failing command
  failing command
+  successful command
  successful command
+sh: line 1: commanddoesnotexist: command not found
+  command does not exist
  command does not exist
+  successful command with output
  successful command with output
+Semantic: array
+  types array literal of int with splats
  types array literal of int with splats
+  types non-empty typed array literal of int
  types non-empty typed array literal of int
+  types array literal of union
  types array literal of union
+  types non-empty typed array literal of int
  types non-empty typed array literal of int
+  types array literal size correctly
  types array literal size correctly
+  types empty typed array literal of int32
  types empty typed array literal of int32
+  assignment in array literal works (#3195)
  assignment in array literal works (#3195)
+  types array literal with splats (2)
  types array literal with splats (2)
+  types array literal with splats
  types array literal with splats
+  types array literal of int
  types array literal of int
+Code gen: proc
+  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)
  codegens proc to implicit self in constant (#647)
+  builds proc type from fun
  builds proc type from fun
+  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises
  call proc pointer of instance method that raises
+  accesses T in macros as a TupleLiteral
  accesses T in macros as a TupleLiteral
+  doesn't crash when taking a proc pointer that multidispatches on the top-level (#3822)
  doesn't crash when taking a proc pointer that multidispatches on the top-level (#3822)
+  call proc pointer of instance method
  call proc pointer of instance method
+  codegens nilable proc type (2)
  codegens nilable proc type (2)
+  calls proc pointer with union (passed by value) arg
  calls proc pointer with union (passed by value) arg
+  call simple proc literal with return
  call simple proc literal with return
+  saves receiver value of proc pointer `->var.foo`
  saves receiver value of proc pointer `->var.foo`
+  saves receiver value of proc pointer `->@ivar.foo`
  saves receiver value of proc pointer `->@ivar.foo`
+  codegens proc with another var
  codegens proc with another var
+  passes proc as &->expr to method that yields
  passes proc as &->expr to method that yields
+  call simple proc literal
  call simple proc literal
+  allows using proc arg name shadowing local variable
  allows using proc arg name shadowing local variable
+  allows proc type of enum type with base type
  allows proc type of enum type with base type
+  allows invoking a function with a subtype when defined as block spec
  allows invoking a function with a subtype when defined as block spec
+  codegens proc that references struct (bug)
  codegens proc that references struct (bug)
+  allows invoking proc literal with smaller type
  allows invoking proc literal with smaller type
+  takes pointerof function pointer
  takes pointerof function pointer
+  calls function pointer  calls function pointer  calls function pointer  calls function pointer  calls function pointer  calls function pointer  calls function pointer  calls function pointer  calls function pointer
  calls function pointer
+  allows proc type of enum type
  allows proc type of enum type
+  codegens proc with union type that returns itself
  codegens proc with union type that returns itself
+  can assign proc that returns anything to proc that returns nil, using union type (#3655)
  can assign proc that returns anything to proc that returns nil, using union type (#3655)
+  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type
  codegens proc that accepts array of type
+  doesn't crash when taking a proc pointer that multidispatches on a module (#3822)
  doesn't crash when taking a proc pointer that multidispatches on a module (#3822)
+  codegens nilable proc type dispatch (1)
  codegens nilable proc type dispatch (1)
+  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)
  codegens proc literal hard type inference (1)
+  codegens proc of generic type
  codegens proc of generic type
+  doesn't crash on #2196
  doesn't crash on #2196
+  builds nilable proc type from fun
  builds nilable proc type from fun
+  call proc literal with arguments
  call proc literal with arguments
+  executes proc pointer on primitive
  executes proc pointer on primitive
+  codegens nilable proc type (1)
  codegens nilable proc type (1)
+  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference
  makes sure that proc pointer is transformed after type inference
+  closures var on ->var.call (#8584)
  closures var on ->var.call (#8584)
+  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)
  uses alias of proc with virtual type (#1347)
+  codegens proc that accepts a union and is called with a single type
  codegens proc that accepts a union and is called with a single type
+  allows redefining fun
  allows redefining fun
+  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)
  raises if returning closure from top-level fun (#14691)
+  mangles strings in such a way they don't conflict with funs (#1006)
  mangles strings in such a way they don't conflict with funs (#1006)
+  gets proc pointer using virtual type (#1337)
  gets proc pointer using virtual type (#1337)
+  returns ProcPointer inside top-level fun (#14691)
  returns ProcPointer inside top-level fun (#14691)
+  casts from function pointer to proc
  casts from function pointer to proc
+  assigns nil and proc to nilable proc type
  assigns nil and proc to nilable proc type
+  call proc literal with return type
  call proc literal with return type
+  codegens proc that returns a virtual type
  codegens proc that returns a virtual type
+  passes block to another function (bug: mangling of both methods was the same)
  passes block to another function (bug: mangling of both methods was the same)
+  call proc pointer with args
  call proc pointer with args
+  codegens captured block that returns tuple
  codegens captured block that returns tuple
+  codegens nilable proc type dispatch (2)
  codegens nilable proc type dispatch (2)
+  codegens proc in instance var initialize (#3016)
  codegens proc in instance var initialize (#3016)
+  binds function pointer to associated call
  binds function pointer to associated call
+  allows invoking a function with a subtype
  allows invoking a function with a subtype
+  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct
  codegens issue with missing byval in proc literal inside struct
+  automatically casts proc that returns something to proc that returns void
  automatically casts proc that returns something to proc that returns void
+  allows proc pointer where self is a class
  allows proc pointer where self is a class
+  call proc pointer
  call proc pointer
+  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`
  saves receiver value of proc pointer `->@@cvar.foo`
+  doesn't crash when taking a proc pointer to a virtual type (#9823)
  doesn't crash when taking a proc pointer to a virtual type (#9823)
+  does new on proc type
  does new on proc type
+  gets proc to lib fun (#504)
  gets proc to lib fun (#504)
+  can assign proc that returns anything to proc that returns nil (#3655)
  can assign proc that returns anything to proc that returns nil (#3655)
+  can pass Proc(T) to Proc(Nil) in type restriction (#8964)
  can pass Proc(T) to Proc(Nil) in type restriction (#8964)
+  returns proc as function pointer inside top-level fun (#14691)
  returns proc as function pointer inside top-level fun (#14691)
+  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically
  allows passing proc type to C automatically
+Lexer string
+  lexes double numeral
  lexes double numeral
+  says syntax error on "\"\\uD800\""
  says syntax error on "\"\\uD800\""
+  raises when identifier doesn't start with a letter or number
  raises when identifier doesn't start with a letter or number
+  lexes string with unicode codepoint in curly multiple times
  lexes string with unicode codepoint in curly multiple times
+  lexes heredoc with spaces before close tag
  lexes heredoc with spaces before close tag
+  says syntax error on "\"\\u{}\""
  says syntax error on "\"\\u{}\""
+  lexes interpolations in heredocs
  lexes interpolations in heredocs
+  says syntax error on "\"\\u{DFFF}\""
  says syntax error on "\"\\u{DFFF}\""
+  lexes simple string with nested %(
  lexes simple string with nested %(
+  lexes string with slash
  lexes string with slash
+  lexes string with only newline
  lexes string with only newline
+  lexes regex string with escaped slash with %r(...)
  lexes regex string with escaped slash with %r(...)
+  lexes regex string with escaped space with /.../
  lexes regex string with escaped space with /.../
+  lexes simple string with nested %{
  lexes simple string with nested %{
+  says syntax error on "\"\\u{D800}\""
  says syntax error on "\"\\u{D800}\""
+  lexes string with interpolation
  lexes string with interpolation
+  lexes string with slash t
  lexes string with slash t
+  lexes string with newline
  lexes string with newline
+  assigns correct location after heredoc (#346)
  assigns correct location after heredoc (#346)
+  lexes simple string
  lexes simple string
+  lexes string with unicode codepoint
  lexes string with unicode codepoint
+  lexes slash with no-escape char
  lexes slash with no-escape char
+  lexes simple string with %(
  lexes simple string with %(
+  says syntax error on "\"\\uDFFF\""
  says syntax error on "\"\\uDFFF\""
+  says syntax error on "\"\\u{110000}\""
  says syntax error on "\"\\u{110000}\""
+  lexes string with backslash
  lexes string with backslash
+  lexes heredoc
  lexes heredoc
+  lexes simple string with nested %<
  lexes simple string with nested %<
+  lexes string with interpolation with double numeral
  lexes string with interpolation with double numeral
+  lexes regex string with escaped slash with /.../
  lexes regex string with escaped slash with /.../
+  lexes heredoc with empty line
  lexes heredoc with empty line
+  raises on unexpected EOF while lexing heredoc
  raises on unexpected EOF while lexing heredoc
+  lexes heredoc with \r\n
  lexes heredoc with \r\n
+  lexes backtick string
  lexes backtick string
+  lexes string with slash quote
  lexes string with slash quote
+  lexes regex string with special chars with /.../
  lexes regex string with special chars with /.../
+  raises on unterminated heredoc
  raises on unterminated heredoc
+  lexes simple string with nested %[
  lexes simple string with nested %[
+  lexes string with numeral
  lexes string with numeral
+  lexes regex string
  lexes regex string
+  lexes string with unicode codepoint in curly
  lexes string with unicode codepoint in curly
+  lexes regex string with escaped space with %r(...)
  lexes regex string with escaped space with %r(...)
+  lexes simple string with %|
  lexes simple string with %|
+  lexes regex string with special chars with %r(...)
  lexes regex string with special chars with %r(...)
+  lexes string with literal newline
  lexes string with literal newline
+  says syntax error on "\"\\uFEDZ\""
  says syntax error on "\"\\uFEDZ\""
+Lexer string array
+  using [ as delimiter
+    lexes simple string array
    lexes simple string array
+  using | as delimiter
+    lexes simple string array
    lexes simple string array
+  lexes simple string array
  lexes simple string array
+  using < as delimiter
+    lexes simple string array
    lexes simple string array
+  using { as delimiter
+    lexes simple string array
    lexes simple string array
+  lexes string array with new line gives correct column for next token
  lexes string array with new line gives correct column for next token
+  lexes string array with new line
  lexes string array with new line
+Normalize: unless
+  normalizes unless
  normalizes unless
+Code gen: C ABI
+  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)
  passes struct between 64 and 128 bits (for real)
+  promotes variadic args (float to double)  promotes variadic args (float to double)  promotes variadic args (float to double)  promotes variadic args (float to double)  promotes variadic args (float to double)  promotes variadic args (float to double)  promotes variadic args (float to double)  promotes variadic args (float to double)  promotes variadic args (float to double)
  promotes variadic args (float to double)
+  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)
  returns struct less than 64 bits (for real)
+  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)
  promotes variadic args (i16 to i32) (#9742)
+  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)
  passes struct bigger than 128 bits (for real)
+  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)
  passes struct less than 64 bits (for real)
+  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)
  passes struct after many other args when returning a large struct (sret return type)
+  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)
  accepts large struct in a callback (for real)
+  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret
  returns struct bigger than 128 bits with sret
+  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)
  promotes variadic args (u16 to i32) (#9742)
+  passes struct after many other args (for real)  passes struct after many other args (for real)  passes struct after many other args (for real)  passes struct after many other args (for real)  passes struct after many other args (for real)  passes struct after many other args (for real)  passes struct after many other args (for real)  passes struct after many other args (for real)  passes struct after many other args (for real)
  passes struct after many other args (for real)
+  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)
  promotes variadic args (i8 to i32) (#9742)
+  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)
  promotes variadic args (u8 to i32) (#9742)
+  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)
  returns struct between 64 and 128 bits (for real)
+Code gen: class
+  reads a virtual type instance var
  reads a virtual type instance var
+  codegens class method
  codegens class method
+  calls class method without self
  calls class method without self
+  assigns type to reference union type
  assigns type to reference union type
+  resolves type declaration when accessing instance var (#348)
  resolves type declaration when accessing instance var (#348)
+  never considers read instance var as closure (#12181)
  never considers read instance var as closure (#12181)
+  doesn't crash on abstract class never instantiated (#2840)
  doesn't crash on abstract class never instantiated (#2840)
+  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)
  works with array in variable initializer in non-generic type (#855)
+  codegens method of class union including Int (#1476)
  codegens method of class union including Int (#1476)
+  allows fixing an instance variable's type
  allows fixing an instance variable's type
+  doesn't crash on #1216 with pointerof
  doesn't crash on #1216 with pointerof
+  codegens new which calls initialize
  codegens new which calls initialize
+  invokes class method inside instance method (#1119)
  invokes class method inside instance method (#1119)
+  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)
  does to_s for virtual metaclass type (3)
+  doesn't crash on #1216
  doesn't crash on #1216
+  runs instance variable initializer at the class level
  runs instance variable initializer at the class level
+  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)
  does to_s for virtual metaclass type (2)
+  codegens assignment of generic metaclasses (2) (#10394)
  codegens assignment of generic metaclasses (2) (#10394)
+  makes .class always be a virtual type even if no subclasses
  makes .class always be a virtual type even if no subclasses
+  does to_s for class  does to_s for class  does to_s for class  does to_s for class  does to_s for class  does to_s for class  does to_s for class  does to_s for class  does to_s for class
  does to_s for class
+  reads a union type instance var (reference union, first type)
  reads a union type instance var (reference union, first type)
+  codegens virtual metaclass union bug (#2597)
  codegens virtual metaclass union bug (#2597)
+  runs instance variable initializer at the class level, for generic type
  runs instance variable initializer at the class level, for generic type
+  codegens virtual generic class instance metaclass (#3819)
  codegens virtual generic class instance metaclass (#3819)
+  transfers initializer from module to generic class
  transfers initializer from module to generic class
+  calls method on Class class
  calls method on Class class
+  codegens singleton (#718)
  codegens singleton (#718)
+  does to_s on class  does to_s on class  does to_s on class  does to_s on class  does to_s on class  does to_s on class  does to_s on class  does to_s on class  does to_s on class
  does to_s on class
+  codegens bug #168
  codegens bug #168
+  codegens assignment of generic metaclasses (4) (#10394)
  codegens assignment of generic metaclasses (4) (#10394)
+  codegens recursive type
  codegens recursive type
+  doesn't skip zero initializers (#3272)
  doesn't skip zero initializers (#3272)
+  codegens assignment of generic metaclasses, base is non-generic (2) (#10394)
  codegens assignment of generic metaclasses, base is non-generic (2) (#10394)
+  doesn't crash if not using undefined instance variable in superclass
  doesn't crash if not using undefined instance variable in superclass
+  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)
  does to_s for virtual metaclass type (1)
+  codegens call to same instance
  codegens call to same instance
+  codegens method call of instance var
  codegens method call of instance var
+  codegens instance var
  codegens instance var
+  codegens assignment of generic metaclasses (3) (#10394)
  codegens assignment of generic metaclasses (3) (#10394)
+  allows using self in class scope
  allows using self in class scope
+  gets class of virtual type
  gets class of virtual type
+  uses number type var
  uses number type var
+  codegens class with recursive tuple to class (#4520)
  codegens class with recursive tuple to class (#4520)
+  codegens assignment of generic metaclasses, base is non-generic (1) (#10394)
  codegens assignment of generic metaclasses, base is non-generic (1) (#10394)
+  codegens initialize with instance var
  codegens initialize with instance var
+  reads other instance var
  reads other instance var
+  calls class method without self (2)
  calls class method without self (2)
+  codegens virtual call that calls another method
  codegens virtual call that calls another method
+  reads a union type instance var (reference union, second type)
  reads a union type instance var (reference union, second type)
+  transfers initializer from generic module to generic class
  transfers initializer from generic module to generic class
+  builds generic class bug
  builds generic class bug
+  codegens method from another method without obj and accesses instance vars
  codegens method from another method without obj and accesses instance vars
+  changes instance variable in method (ssa bug)
  changes instance variable in method (ssa bug)
+  reads a union type instance var (mixed union, second type)
  reads a union type instance var (mixed union, second type)
+  reads a union type instance var (mixed union, first type)
  reads a union type instance var (mixed union, first type)
+  codegens virtual method of generic class
  codegens virtual method of generic class
+  can assign virtual metaclass to virtual metaclass (#3007)
  can assign virtual metaclass to virtual metaclass (#3007)
+  allows using self in class scope  allows using self in class scope  allows using self in class scope  allows using self in class scope  allows using self in class scope  allows using self in class scope  allows using self in class scope  allows using self in class scope  allows using self in class scope
  allows using self in class scope
+  doesn't crash on #1216 (reduced)
  doesn't crash on #1216 (reduced)
+  codegens assignment of generic metaclasses (1) (#10394)
  codegens assignment of generic metaclasses (1) (#10394)
+  transfers initializer from generic module to non-generic class
  transfers initializer from generic module to non-generic class
+  runs with nilable instance var
  runs with nilable instance var
+  codegens virtual class method
  codegens virtual class method
+  doesn't skip false initializers (#3272)
  doesn't skip false initializers (#3272)
+  allows initializing var with constant
  allows initializing var with constant
+  doesn't crash on instance variable assigned a proc, and never instantiated (#923)
  doesn't crash on instance variable assigned a proc, and never instantiated (#923)
+  runs with nil instance var when inheriting
  runs with nil instance var when inheriting
+  notifies superclass recursively on inheritance (#576)
  notifies superclass recursively on inheritance (#576)
+  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)
  works with array in variable initializer in generic type (#855)
+  can use a Main class (#1628)  can use a Main class (#1628)  can use a Main class (#1628)  can use a Main class (#1628)  can use a Main class (#1628)  can use a Main class (#1628)  can use a Main class (#1628)  can use a Main class (#1628)  can use a Main class (#1628)
  can use a Main class (#1628)
+Code gen: multi assign
+  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)
  supports 1 to n assignment, raises if out of bounds (1)
+  without strict_multi_assign
+    supports 1 to n assignment
    supports 1 to n assignment
+    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count
    doesn't raise if value size in 1 to n assignment doesn't match target count
+  supports m to n assignment, with splat on left-hand side (2)
  supports m to n assignment, with splat on left-hand side (2)
+  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)
  supports 1 to n assignment, raises if out of bounds (2)
+  supports 1 to n assignment, with splat on left-hand side (2)
  supports 1 to n assignment, with splat on left-hand side (2)
+  strict_multi_assign
+    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count
    raises if value size in 1 to n assignment doesn't match target count
+    supports 1 to n assignment    supports 1 to n assignment    supports 1 to n assignment    supports 1 to n assignment    supports 1 to n assignment    supports 1 to n assignment    supports 1 to n assignment    supports 1 to n assignment    supports 1 to n assignment
    supports 1 to n assignment
+  supports n to n assignment
  supports n to n assignment
+  supports m to n assignment, splat is empty tuple (3)
  supports m to n assignment, splat is empty tuple (3)
+  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)
  supports 1 to n assignment, splat is empty (1)
+  supports 1 to n assignment, with splat on left-hand side (3)
  supports 1 to n assignment, with splat on left-hand side (3)
+  supports m to n assignment, splat is empty tuple (1)
  supports m to n assignment, splat is empty tuple (1)
+  supports m to n assignment, with splat on left-hand side (1)
  supports m to n assignment, with splat on left-hand side (1)
+  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)
  supports 1 to n assignment, with splat on left-hand side (1)
+  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short
  supports 1 to n assignment, raises if too short
+  supports 1 to n assignment, splat is empty (3)
  supports 1 to n assignment, splat is empty (3)
+  supports m to n assignment, splat is empty tuple (2)
  supports m to n assignment, splat is empty tuple (2)
+  supports m to n assignment, with splat on left-hand side (3)
  supports m to n assignment, with splat on left-hand side (3)
+  supports 1 to n assignment, splat is empty (2)
  supports 1 to n assignment, splat is empty (2)
+Crystal::JSONHierarchyPrinter
+  works
  works
+Code gen: tuple
+  passes empty tuple and empty named tuple to a method (#2852)
  passes empty tuple and empty named tuple to a method (#2852)
+  codegens tuple [2]?
  codegens tuple [2]?
+  codegens tuple metaclass [0..0]
  codegens tuple metaclass [0..0]
+  codegens tuple metaclass [3..2]?
  codegens tuple metaclass [3..2]?
+  codegens tuple [0]
  codegens tuple [0]
+  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)
  codegens tuple union (bug because union size was computed incorrectly)
+  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types
  downcasts union to mixed union with mixed tuple types
+  assigns tuple to compatible tuple
  assigns tuple to compatible tuple
+  merges two tuple types of same size (1)
  merges two tuple types of same size (1)
+  codegens tuple metaclass [2]?
  codegens tuple metaclass [2]?
+  codegens tuple [0..1]
  codegens tuple [0..1]
+  upcasts tuple inside union to union with compatible tuple
  upcasts tuple inside union to union with compatible tuple
+  upcasts tuple union to compatible tuple
  upcasts tuple union to compatible tuple
+  assigns tuple union to compatible tuple
  assigns tuple union to compatible tuple
+  assigns two same-size tuple types to a same var (#3132)
  assigns two same-size tuple types to a same var (#3132)
+  accesses T and creates instance from it
  accesses T and creates instance from it
+  codegens tuple [0..2]
  codegens tuple [0..2]
+  codegens tuple [0..0]?
  codegens tuple [0..0]?
+  codegens tuple [0..1]?
  codegens tuple [0..1]?
+  allows tuple covariance
  allows tuple covariance
+  allows malloc pointer of tuple
  allows malloc pointer of tuple
+  codegens tuple [1] (2)
  codegens tuple [1] (2)
+  codegens tuple [2..2]?
  codegens tuple [2..2]?
+  codegens tuple class
  codegens tuple class
+  codegens tuple metaclass [1]
  codegens tuple metaclass [1]
+  assigns tuple inside union to union with compatible tuple
  assigns tuple inside union to union with compatible tuple
+  merges two tuple types of same size (2)
  merges two tuple types of same size (2)
+  codegens tuple metaclass [0]
  codegens tuple metaclass [0]
+  codegens tuple [1..1]
  codegens tuple [1..1]
+  codegens tuple [1..0]?
  codegens tuple [1..0]?
+  codegens tuple [1]
  codegens tuple [1]
+  gets size at compile time
  gets size at compile time
+  upcasts tuple inside compatible tuple
  upcasts tuple inside compatible tuple
+  provides T as a tuple literal
  provides T as a tuple literal
+  codegens tuple [0..0]
  codegens tuple [0..0]
+  downcasts union inside tuple to value (#3907)
  downcasts union inside tuple to value (#3907)
+  codegens splats inside tuples
  codegens splats inside tuples
+  codegens tuple [0]?
  codegens tuple [0]?
+  codegens tuple [3..2]?
  codegens tuple [3..2]?
+  codegens tuple [1]?
  codegens tuple [1]?
+  codegens tuple [1..0]
  codegens tuple [1..0]
+  codegens tuple metaclass [0..1]
  codegens tuple metaclass [0..1]
+  downcasts union to mixed tuple type
  downcasts union to mixed tuple type
+  codegens tuple [-3..2]?
  codegens tuple [-3..2]?
+  codegens tuple [0..2]?
  codegens tuple [0..2]?
+  codegens tuple [1..1]?
  codegens tuple [1..1]?
+  codegens tuple [2..2]
  codegens tuple [2..2]
+  codegens union of tuple of float with tuple of tuple of float
  codegens union of tuple of float with tuple of tuple of float
+  codegens tuple metaclass [1..0]
  codegens tuple metaclass [1..0]
+  passed tuple to def
  passed tuple to def
 Crystal::Repl::Interpreter
   special vars
-    sets special var inside call inside block (#12250)
    sets special var inside call inside block (#12250)
     does special var that's a reference inside block
    does special var that's a reference inside block
-    does special var that's a reference for multidispatch
    does special var that's a reference for multidispatch
+    does special var that's a struct
    does special var that's a struct
     does special var that's a reference
    does special var that's a reference
+    sets special var inside call inside block (#12250)
    sets special var inside call inside block (#12250)
+    does special var that's a reference for multidispatch
    does special var that's a reference for multidispatch
     does special var that's a reference when there are optional arguments
    does special var that's a reference when there are optional arguments
-    does special var that's a struct
    does special var that's a struct
+Code gen: sizeof
+  gets sizeof int
  gets sizeof int
+  can use instance_sizeof of virtual type
  can use instance_sizeof of virtual type
+  doesn't precompute sizeof of module (#7741)
  doesn't precompute sizeof of module (#7741)
+  can use instance_sizeof in type argument
  can use instance_sizeof in type argument
+  gets sizeof union
  gets sizeof union
+  gets instance_sizeof a generic type with type vars
  gets instance_sizeof a generic type with type vars
+  gets sizeof NoReturn
  gets sizeof NoReturn
+  alignof
+    gets alignof struct
    gets alignof struct
+    gets alignof union
    gets alignof union
+    alignof mixed union is not less than alignof its variant types
    alignof mixed union is not less than alignof its variant types
+    gets alignof class
    gets alignof class
+    gets alignof primitive types
    gets alignof primitive types
+  instance_alignof
+    gets instance_alignof a generic type with type vars
    gets instance_alignof a generic type with type vars
+    gets instance_alignof class
    gets instance_alignof class
+  doesn't precompute sizeof of abstract struct (#7741)
  doesn't precompute sizeof of abstract struct (#7741)
+  can use sizeof in type argument (2)
  can use sizeof in type argument (2)
+  can use sizeof of virtual type
  can use sizeof of virtual type
+  gets sizeof Bool (#8272)
  gets sizeof Bool (#8272)
+  returns correct sizeof for abstract struct (#4319)
  returns correct sizeof for abstract struct (#4319)
+  gets sizeof struct
  gets sizeof struct
+  gets sizeof Void
  gets sizeof Void
+  gets instance_sizeof class
  gets instance_sizeof class
+  gets sizeof Nil (#7644)
  gets sizeof Nil (#7644)
+  can use sizeof in type argument (1)
  can use sizeof in type argument (1)
+  gets sizeof class
  gets sizeof class
+Crystal::Doc::Method
+  doc
+    gets doc from underlying method
    gets doc from underlying method
+    inherits doc from ancestor (no extra comment)
    inherits doc from ancestor (no extra comment)
+    inherits doc from ancestor (use :inherit:)
    inherits doc from ancestor (use :inherit:)
+    trailing comment is not part of a doc comment
    trailing comment is not part of a doc comment
+    inherits doc from previous def (no extra comment)
    inherits doc from previous def (no extra comment)
+    inherits doc from ancestor (use :inherit: plus more content)
    inherits doc from ancestor (use :inherit: plus more content)
+    trailing comment is not a doc comment
    trailing comment is not a doc comment
+  args_to_s
+    shows simple args
    shows simple args
+    shows underscore restriction
    shows underscore restriction
+    shows double splat args
    shows double splat args
+    shows return type restriction
    shows return type restriction
+    shows args and return type restriction
    shows args and return type restriction
+    shows block args with underscore
    shows block args with underscore
+    shows splat args
    shows splat args
+    shows external name of arg
    shows external name of arg
+    shows block args if a def has `yield`
    shows block args if a def has `yield`
+    shows external name of arg with quotes and escaping
    shows external name of arg with quotes and escaping
+    shows typeof restriction of arg with highlighting
    shows typeof restriction of arg with highlighting
+    shows default value of arg with highlighting
    shows default value of arg with highlighting
+    shows block args
    shows block args
+Semantic: offsetof
+  can be used with generic types
  can be used with generic types
+  errors on undefined instance variable
  errors on undefined instance variable
+  errors on offsetof element of uninstantiated generic type
  errors on offsetof element of uninstantiated generic type
+  gives error if using offsetof on Tuples with instance variables
  gives error if using offsetof on Tuples with instance variables
+  gives error if using offsetof on something that's neither a class, a struct nor a Tuple
  gives error if using offsetof on something that's neither a class, a struct nor a Tuple
+  gives error if using offsetof on something that can't have instance variables
  gives error if using offsetof on something that can't have instance variables
+  gives error if using offsetof on Tuples with indexes greater than tuple size
  gives error if using offsetof on Tuples with indexes greater than tuple size
+  types offsetof
  types offsetof
+  gives error if using offsetof on non-Tuples with an index
  gives error if using offsetof on non-Tuples with an index
+  can be used with classes
  can be used with classes
+  gives error if using offsetof on Tuples with negative indexes
  gives error if using offsetof on Tuples with negative indexes
+  errors on typeof inside offsetof expression
  errors on typeof inside offsetof expression
+Crystal::TextHierarchyPrinter
+  shows correct total size of generic class if known
  shows correct total size of generic class if known
+  works
  works
+  shows correct size for Bool member
  shows correct size for Bool member
+  shows correct size for Proc inside extern struct
  shows correct size for Proc inside extern struct
+  shows correct size for members with bound types
  shows correct size for members with bound types
+Code gen: method_missing
+  does method_missing macro without args (with call)
  does method_missing macro without args (with call)
+  works with named arguments (#3654)
  works with named arguments (#3654)
+  does method_missing with assignment (bug)
  does method_missing with assignment (bug)
+  does method_missing macro with top level method involved
  does method_missing macro with top level method involved
+  does method_missing macro with block
  does method_missing macro with block
+  does method_missing macro with virtual type (3)
  does method_missing macro with virtual type (3)
+  does method_missing macro with args (with call)
  does method_missing macro with args (with call)
+  does method_missing macro with virtual type (7)
  does method_missing macro with virtual type (7)
+  does method_missing macro with virtual type (2)
  does method_missing macro with virtual type (2)
+  does method_missing macro without args
  does method_missing macro without args
+  finds method_missing with 'with ... yield'
  finds method_missing with 'with ... yield'
+  does method_missing macro with block but not using it
  does method_missing macro with block but not using it
+  does method_missing macro with virtual type (1)
  does method_missing macro with virtual type (1)
+  works with named arguments that aren't legal variable names (#10381)
  works with named arguments that aren't legal variable names (#10381)
+  does method_missing macro with included module
  does method_missing macro with included module
+  does method_missing with assignment (2) (bug)
  does method_missing with assignment (2) (bug)
+  does method_missing macro with virtual type (5)
  does method_missing macro with virtual type (5)
+  does method_missing macro with virtual type (8)
  does method_missing macro with virtual type (8)
+  does method_missing generating method
  does method_missing generating method
+  does method_missing macro with virtual type (4)
  does method_missing macro with virtual type (4)
+  does method_missing macro with virtual type (6)
  does method_missing macro with virtual type (6)
+  forwards
  forwards
+  does method_missing macro with module involved
  does method_missing macro with module involved
+  does method_missing macro with args
  does method_missing macro with args
+Semantic: macro overload
+  doesn't overwrite last macro definition if named args differs
  doesn't overwrite last macro definition if named args differs
+Semantic: not
+  filters types inside if/else
  filters types inside if/else
+  filters types inside if
  filters types inside if
+  doesn't restrict and in while (#4243)
  doesn't restrict and in while (#4243)
+  doesn't restrict and
  doesn't restrict and
+  types not
  types not
+  types not as NoReturn if exp is NoReturn
  types not as NoReturn if exp is NoReturn
+  filters types with !is_a?
  filters types with !is_a?
+Code gen: virtual type
+  codegens new for virtual class with two types  codegens new for virtual class with two types  codegens new for virtual class with two types  codegens new for virtual class with two types  codegens new for virtual class with two types  codegens new for virtual class with two types  codegens new for virtual class with two types  codegens new for virtual class with two types  codegens new for virtual class with two types
  codegens new for virtual class with two types
+  returns type with virtual type def type
  returns type with virtual type def type
+  codegens virtual call with explicit self
  codegens virtual call with explicit self
+  correctly dispatch call with block when the obj is a virtual type
  correctly dispatch call with block when the obj is a virtual type
+  dispatches on virtual metaclass (1)
  dispatches on virtual metaclass (1)
+  calls class method 3
  calls class method 3
+  codegens virtual call with explicit self and nilable type
  codegens virtual call with explicit self and nilable type
+  call base overwritten method
  call base overwritten method
+  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated
  initializes ivars to nil even if object never instantiated
+  codegens new for virtual class with one type  codegens new for virtual class with one type  codegens new for virtual class with one type  codegens new for virtual class with one type  codegens new for virtual class with one type  codegens new for virtual class with one type  codegens new for virtual class with one type  codegens new for virtual class with one type  codegens new for virtual class with one type
  codegens new for virtual class with one type
+  codegens allocate for virtual type with custom new
  codegens allocate for virtual type with custom new
+  codegens virtual method of abstract metaclass
  codegens virtual method of abstract metaclass
+  dispatch call with nilable virtual arg
  dispatch call with nilable virtual arg
+  dispatches on virtual metaclass (3)
  dispatches on virtual metaclass (3)
+  lookup instance variables in parent types
  lookup instance variables in parent types
+  doesn't lookup in Value+ when virtual type is Object+
  doesn't lookup in Value+ when virtual type is Object+
+  call overwritten method
  call overwritten method
+  call base method
  call base method
+  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)
  codegens new for new on virtual abstract class (#3835)
+  calls class method 1
  calls class method 1
+  dispatches on virtual metaclass (2)
  dispatches on virtual metaclass (2)
+  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type
  codegens call to Object#to_s from nilable type
+  assign instance variable in virtual type
  assign instance variable in virtual type
+  casts virtual type to union
  casts virtual type to union
+  calls class method 2
  calls class method 2
+  casts union to virtual
  casts union to virtual
+  codegens new twice for virtual
  codegens new twice for virtual
+  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type
  codegens call to Object#to_s from virtual type
+  casts virtual type to base virtual type
  casts virtual type to base virtual type
+  casts metaclass union type to virtual metaclass type (#6298)
  casts metaclass union type to virtual metaclass type (#6298)
+  dispatch call with virtual type argument
  dispatch call with virtual type argument
+  can belong to union
  can belong to union
+  codegens new for simple type, then for virtual
  codegens new for simple type, then for virtual
+  codegens non-virtual call that calls virtual call to another virtual call
  codegens non-virtual call that calls virtual call to another virtual call
+Crystal::TablePrint
+  rows with horizontal separators
  rows with horizontal separators
+  single row with separator
  single row with separator
+  single cell
  single cell
+  multiple rows with separator
  multiple rows with separator
+  aligns cell content
  aligns cell content
+  colspan a cell that fits the available size
  colspan a cell that fits the available size
+  aligns columns borders
  aligns columns borders
+Code gen: case
+  codegens case with one condition  codegens case with one condition  codegens case with one condition  codegens case with one condition  codegens case with one condition  codegens case with one condition  codegens case with one condition  codegens case with one condition  codegens case with one condition
  codegens case with one condition
+  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call
  codegens case when cond is a call
+  does case when with metaclass
  does case when with metaclass
+  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions
  codegens case with two conditions
+  codegens case with class
  codegens case with class
+  codegens case that always returns  codegens case that always returns  codegens case that always returns  codegens case that always returns  codegens case that always returns  codegens case that always returns  codegens case that always returns  codegens case that always returns  codegens case that always returns
  codegens case that always returns
+  codegens case when constant bug (#1028)
  codegens case when constant bug (#1028)
+  codegens value-less case
  codegens value-less case
+  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else
  codegens case without whens but else
+  codegens case with else  codegens case with else  codegens case with else  codegens case with else  codegens case with else  codegens case with else  codegens case with else  codegens case with else  codegens case with else
  codegens case with else
+Normalize: multi assign
+  normalizes 1 to n, with splat on left-hand side, splat before other targets
  normalizes 1 to n, with splat on left-hand side, splat before other targets
+  normalizes m to n, with splat on left-hand side, splat is non-empty
  normalizes m to n, with splat on left-hand side, splat is non-empty
+  normalizes m to n, with *_ on left-hand side (3)
  normalizes m to n, with *_ on left-hand side (3)
+  without strict_multi_assign
+    normalizes 1 to n with []
    normalizes 1 to n with []
+    normalizes 1 to n with call
    normalizes 1 to n with call
+    normalizes 1 to n
    normalizes 1 to n
+  normalizes n to splat on left-hand side
  normalizes n to splat on left-hand side
+  normalizes n to *_ on left-hand side
  normalizes n to *_ on left-hand side
+  normalizes n to n with call
  normalizes n to n with call
+  strict_multi_assign
+    normalizes 1 to n with call
    normalizes 1 to n with call
+    normalizes 1 to n with []
    normalizes 1 to n with []
+    normalizes 1 to n
    normalizes 1 to n
+  normalizes n to n with []
  normalizes n to n with []
+  normalizes 1 to splat on left-hand side
  normalizes 1 to splat on left-hand side
+  normalizes m to n, with *_ on left-hand side (1)
  normalizes m to n, with *_ on left-hand side (1)
+  normalizes 1 to n, with splat on left-hand side, splat after other targets
  normalizes 1 to n, with splat on left-hand side, splat after other targets
+  normalizes n to n
  normalizes n to n
+  normalizes m to n, with splat on left-hand side, splat is empty
  normalizes m to n, with splat on left-hand side, splat is empty
+  normalizes 1 to n, with *_ on left-hand side (1)
  normalizes 1 to n, with *_ on left-hand side (1)
+  normalizes 1 to *_ on left-hand side
  normalizes 1 to *_ on left-hand side
+  normalizes 1 to n, with splat on left-hand side
  normalizes 1 to n, with splat on left-hand side
+  normalizes 1 to n, with *_ on left-hand side (3)
  normalizes 1 to n, with *_ on left-hand side (3)
+  normalizes 1 to n, with *_ on left-hand side (2)
  normalizes 1 to n, with *_ on left-hand side (2)
+  normalizes m to n, with *_ on left-hand side (2)
  normalizes m to n, with *_ on left-hand side (2)
+Semantic: yield with scope
+  yields virtual type (#2171) (2)
  yields virtual type (#2171) (2)
+  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope
  it invokes global method inside block of yield scope
+  it uses self for instance method  it uses self for instance method  it uses self for instance method  it uses self for instance method  it uses self for instance method  it uses self for instance method  it uses self for instance method  it uses self for instance method  it uses self for instance method
  it uses self for instance method
+  yields with dispatch (#2171) (1)
  yields with dispatch (#2171) (1)
+  uses instance variable of enclosing scope
  uses instance variable of enclosing scope
+  uses scope in global method  uses scope in global method  uses scope in global method  uses scope in global method  uses scope in global method  uses scope in global method  uses scope in global method  uses scope in global method  uses scope in global method
  uses scope in global method
+  uses method of with object
  uses method of with object
+  doesn't explode if specifying &block but never using it (#181)
  doesn't explode if specifying &block but never using it (#181)
+  generate right code when yielding struct as scope
  generate right code when yielding struct as scope
+  uses method of enclosing scope
  uses method of enclosing scope
+  uses scope in instance method  uses scope in instance method  uses scope in instance method  uses scope in instance method  uses scope in instance method  uses scope in instance method  uses scope in instance method  uses scope in instance method  uses scope in instance method
  uses scope in instance method
 Crystal::Repl::Interpreter
-  autocast
-    autocasts integer var to integer (#12560)
    autocasts integer var to integer (#12560)
-    autocasts float32 var to float64 (#12560)
    autocasts float32 var to float64 (#12560)
-    autocasts symbol to enum in multidispatch (#11782)
    autocasts symbol to enum in multidispatch (#11782)
-    autocasts int in multidispatch
    autocasts int in multidispatch
-    autocasts number literal to float
    autocasts number literal to float
-    autocasts symbol to enum in ivar initializer (#12216)
    autocasts symbol to enum in ivar initializer (#12216)
-    autocasts symbol to enum
    autocasts symbol to enum
-    autocasts integer var to float (#12560)
    autocasts integer var to float (#12560)
-    autocasts number literal to integer
    autocasts number literal to integer
-Code gen: enum
-  can use macro calls inside enum value, with receiver (#424)
  can use macro calls inside enum value, with receiver (#424)
-  codegens enum bitflags None
  codegens enum bitflags None
-  codegens enum without explicit value
  codegens enum without explicit value
-  codegens enum bitflags (4)
  codegens enum bitflags (4)
-  can define flags enum : UInt128 with 128 values
  can define flags enum : UInt128 with 128 values
-  codegens enum bitflags (2)
  codegens enum bitflags (2)
-  does ~ at compile time for enum member
  does ~ at compile time for enum member
-  creates enum from value
  creates enum from value
-  can define flags enum : UInt128 with compile-time interpreted values
  can define flags enum : UInt128 with compile-time interpreted values
-  codegens enum
  codegens enum
-  automatically defines question method for each enum member (false case)
  automatically defines question method for each enum member (false case)
-  codegens enum bitflags (1)
  codegens enum bitflags (1)
-  automatically defines question method for each enum member (flags, true case)
  automatically defines question method for each enum member (flags, true case)
-  automatically defines question method for each enum member (true case)
  automatically defines question method for each enum member (true case)
-  can redefine Enum.new and use previous_def
  can redefine Enum.new and use previous_def
-  adds a none? method to flags enum
  adds a none? method to flags enum
-  codegens enum All redefined
  codegens enum All redefined
-  codegens enum None redefined
  codegens enum None redefined
-  uses enum value before declaration (hoisting)
  uses enum value before declaration (hoisting)
-  can use macro calls inside enum value (#424)
  can use macro calls inside enum value (#424)
-  codegens enum bitflags All
  codegens enum bitflags All
-  can define flags enum : UInt64 with more than 32 values (#7268)
  can define flags enum : UInt64 with more than 32 values (#7268)
-  allows class vars in enum
  allows class vars in enum
-  codegens enum value
  codegens enum value
-  automatically defines question method for each enum member (flags, false case)
  automatically defines question method for each enum member (flags, false case)
-  casts All value to base type
  casts All value to base type
-  can use macro calls inside enum value, macro defined outside enum (#424)
  can use macro calls inside enum value, macro defined outside enum (#424)
-Crystal::Playground::Agent
-  should send json messages and return inspected value
  should send json messages and return inspected value
-Compiler
-  has a valid version
  has a valid version
-  treats all arguments post-filename as program arguments
  treats all arguments post-filename as program arguments
-  compiles a file  compiles a file  compiles a file  compiles a file  compiles a file  compiles a file  compiles a file  compiles a file  compiles a file
  compiles a file
-  runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename 
  runs subcommand in preference to a filename 
-Normalize: range literal
-  normalizes not exclusive
  normalizes not exclusive
-  normalizes exclusive
  normalizes exclusive
+  symbol
+    symbol equality
    symbol equality
+    Symbol#to_i
    Symbol#to_i
+    Symbol#to_s
    Symbol#to_s
+Code gen: if
+  doesn't crash no NoReturn var (true left cond) (#1823)
  doesn't crash no NoReturn var (true left cond) (#1823)
+  codes if with two whiles
  codes if with two whiles
+  codegens if without an else with false
  codegens if without an else with false
+  codegens if of nilable type in else 3
  codegens if of nilable type in else 3
+  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter
  codegens if with return in else preserves type filter
+  codegens if inside def without an else with true
  codegens if inside def without an else with true
+  codegens if with int
  codegens if with int
+  doesn't crash with if !is_a? using var in then
  doesn't crash with if !is_a? using var in then
+  codegens if with nil
  codegens if with nil
+  considers or truthy/falsey right
  considers or truthy/falsey right
+  codegen if with union type and else without type
  codegen if with union type and else without type
+  codegens if without an else with true
  codegens if without an else with true
+  codegens if of nilable type in then 2
  codegens if of nilable type in then 2
+  codegens if with union
  codegens if with union
+  codegens nested if with var (ssa bug)
  codegens nested if with var (ssa bug)
+  codegens if of nilable type in then
  codegens if of nilable type in then
+  codegens if with an else with true
  codegens if with an else with true
+  codegens #3104
  codegens #3104
+  codegens if with pointer 0x100000000 pointer
  codegens if with pointer 0x100000000 pointer
+  doesn't crash no NoReturn var (non-true left cond) (#1823)
  doesn't crash no NoReturn var (non-true left cond) (#1823)
+  codegens if with return in both branches
  codegens if with return in both branches
+  codegen if inside if
  codegen if inside if
+  codegens if with virtual
  codegens if with virtual
+  codegens if with an else with false
  codegens if with an else with false
+  codegen if with nested if that returns
  codegen if with nested if that returns
+  codegens if value from then
  codegens if value from then
+  codegen if with union type and then without type
  codegen if with union type and then without type
+  codegens if with return and no else
  codegens if with return and no else
+  doesn't crash with if !var using var in else
  doesn't crash with if !var using var in else
+  restricts with || always falsey
  restricts with || always falsey
+  codegens if of nilable type in else
  codegens if of nilable type in else
+  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises
  codegens if with nested if that raises
+  codegens bug #1729
  codegens bug #1729
+  doesn't generate truthy if branch if doesn't need value (bug)
  doesn't generate truthy if branch if doesn't need value (bug)
+Restrictions
+  errors if using typeof inside generic type
  errors if using typeof inside generic type
+  works with static array that uses underscore
  works with static array that uses underscore
+  works with generic class metaclass vs. generic class metaclass
  works with generic class metaclass vs. generic class metaclass
+  restricts aliased typedef type (#9474)
  restricts aliased typedef type (#9474)
+  doesn't error if using NamedTuple with no args
  doesn't error if using NamedTuple with no args
+  sets number as unbound generic type var (#13110)
  sets number as unbound generic type var (#13110)
+  works with generic class metaclass vs. generic instance class metaclass
  works with generic class metaclass vs. generic instance class metaclass
+  matches number in bound free variable (#13605)
  matches number in bound free variable (#13605)
+  works with static array (#637)
  works with static array (#637)
+  restricts class union type to overloads with classes
  restricts class union type to overloads with classes
+  errors on T::Type that's union when used from type restriction
  errors on T::Type that's union when used from type restriction
+  errors if using typeof
  errors if using typeof
+  errors if using typeof in block restriction
  errors if using typeof in block restriction
+  restricts class union type to overloads with classes (2)
  restricts class union type to overloads with classes (2)
+  does not treat single path as free variable when given number (1) (#11859)
  does not treat single path as free variable when given number (1) (#11859)
+  doesn't error if using Tuple with no args
  doesn't error if using Tuple with no args
+  restriction_of?
+    Metaclass vs Metaclass
+      keeps typed Metaclass before untyped Metaclass
      keeps typed Metaclass before untyped Metaclass
+      inserts typed Metaclass before untyped Metaclass
      inserts typed Metaclass before untyped Metaclass
+    Path vs NumberLiteral
+      inserts number literal before constant of same value with generic arguments
      inserts number literal before constant of same value with generic arguments
+      inserts constant before number literal of same value with generic arguments
      inserts constant before number literal of same value with generic arguments
+    Union
+      handles redefinitions (2) (#12330)
      handles redefinitions (2) (#12330)
+      handles redefinitions (1) (#12330)
      handles redefinitions (1) (#12330)
+      orders union before generic (#12330)
      orders union before generic (#12330)
+    Generic vs Path
+      keeps typed Generic before untyped Path
      keeps typed Generic before untyped Path
+      inserts untyped Generic before untyped Path
      inserts untyped Generic before untyped Path
+      inserts typed Generic before untyped Path
      inserts typed Generic before untyped Path
+      inserts untyped Generic before untyped Path (2)
      inserts untyped Generic before untyped Path (2)
+      keeps untyped Generic before untyped Path
      keeps untyped Generic before untyped Path
+    Path vs Path
+      inserts typed Path before untyped Path
      inserts typed Path before untyped Path
+      keeps typed Path before untyped Path
      keeps typed Path before untyped Path
+    GenericClassType vs GenericClassInstanceType
+      inserts GenericClassInstanceType before GenericClassType
      inserts GenericClassInstanceType before GenericClassType
+      works with classes in different namespaces
      works with classes in different namespaces
+      doesn't mix different generic classes
      doesn't mix different generic classes
+      keeps GenericClassInstanceType before GenericClassType
      keeps GenericClassInstanceType before GenericClassType
+    Metaclass vs Path
+      keeps metaclass before Value
      keeps metaclass before Value
+      doesn't error if path is undefined and method is not called (2) (#12516)
      doesn't error if path is undefined and method is not called (2) (#12516)
+      keeps metaclass before Class
      keeps metaclass before Class
+      inserts metaclass before Class
      inserts metaclass before Class
+      inserts metaclass before Object
      inserts metaclass before Object
+      doesn't error if path is undefined and method is not called (1) (#12516)
      doesn't error if path is undefined and method is not called (1) (#12516)
+      inserts metaclass before Value
      inserts metaclass before Value
+      keeps metaclass before Object
      keeps metaclass before Object
+    Generic vs Generic
+      inserts typed Generic before untyped Generic
      inserts typed Generic before untyped Generic
+      keeps typed Generic before untyped Generic
      keeps typed Generic before untyped Generic
+    NamedTuple vs NamedTuple
+      doesn't mix incompatible NamedTuples (#10238)
      doesn't mix incompatible NamedTuples (#10238)
+      keeps more specialized NamedTuple before less specialized one
      keeps more specialized NamedTuple before less specialized one
+      inserts more specialized NamedTuple before less specialized one
      inserts more specialized NamedTuple before less specialized one
+    Underscore vs Path
+      keeps underscore after Path (#12854)
      keeps underscore after Path (#12854)
+      works with splats and modules, under -Dpreview_overload_order (#12854)
      works with splats and modules, under -Dpreview_overload_order (#12854)
+      inserts Path before underscore (#12854)
      inserts Path before underscore (#12854)
+    free variables
+      keeps path before free variable with same name
      keeps path before free variable with same name
+      keeps constant before free variable with same name
      keeps constant before free variable with same name
+      inserts constant before free variable with same name
      inserts constant before free variable with same name
+      inserts path before free variable with same name
      inserts path before free variable with same name
+      keeps path before free variable even if free var resolves to a more specialized type
      keeps path before free variable even if free var resolves to a more specialized type
+      inserts path before free variable even if free var resolves to a more specialized type
      inserts path before free variable even if free var resolves to a more specialized type
+  allows passing recursive type to free var (#1076)
  allows passing recursive type to free var (#1076)
+  errors if using free var without forall
  errors if using free var without forall
+  makes metaclass subclass pass parent metaclass restriction (#2079)
  makes metaclass subclass pass parent metaclass restriction (#2079)
+  errors if using NamedTuple with positional args
  errors if using NamedTuple with positional args
+  errors if using Tuple with named args
  errors if using Tuple with named args
+  errors if can't find type on lookup with nested type
  errors if can't find type on lookup with nested type
+  errors if can't find type on lookup
  errors if can't find type on lookup
+  restricts virtual metaclass type against metaclass (#3438)
  restricts virtual metaclass type against metaclass (#3438)
+  passes #278
  passes #278
+  matches alias against alias in block type
  matches alias against alias in block type
+  matches virtual type against alias
  matches virtual type against alias
+  self always matches instance type in return type
  self always matches instance type in return type
+  errors on T::Type that's a union when used from block type restriction
  errors on T::Type that's a union when used from block type restriction
+  restrict
+    restricts module with another module
    restricts module with another module
+    restricts type with same type
    restricts type with same type
+    restricts type with superclass
    restricts type with superclass
+    restricts generic module instance with class
    restricts generic module instance with class
+    restricts virtual generic class against uninstantiated generic subclass (1)
    restricts virtual generic class against uninstantiated generic subclass (1)
+    restricts virtual generic class against uninstantiated generic subclass (2)
    restricts virtual generic class against uninstantiated generic subclass (2)
+    restricts type with another type
    restricts type with another type
+    restricts generic module instance with another generic module instance
    restricts generic module instance with another generic module instance
+    restricts virtual type with included module 1
    restricts virtual type with included module 1
+    restricts virtual type with included module 2
    restricts virtual type with included module 2
+    restricts class against uninstantiated generic base class through multiple inheritance (2) (#9660)
    restricts class against uninstantiated generic base class through multiple inheritance (2) (#9660)
+    restricts module through generic include (#4287)
    restricts module through generic include (#4287)
+    restricts type with included module
    restricts type with included module
+    restricts class against uninstantiated generic base class through multiple inheritance (1) (#9660)
    restricts class against uninstantiated generic base class through multiple inheritance (1) (#9660)
+    restricts generic module instance with another module
    restricts generic module instance with another module
+  works with generic compared to fixed (primitive) type
  works with generic compared to fixed (primitive) type
+  does not treat single path as free variable when given number (2) (#11859)
  does not treat single path as free variable when given number (2) (#11859)
+  errors if using typeof in block restriction
  errors if using typeof in block restriction
+  should not let GenericChild(Base) pass as a GenericBase(Child) (#1294)
  should not let GenericChild(Base) pass as a GenericBase(Child) (#1294)
+  self always matches instance type in restriction
  self always matches instance type in restriction
+  matches free variable for type variable
  matches free variable for type variable
+  sets number as free variable (#2699)
  sets number as free variable (#2699)
+  works with union against unions of generics
  works with union against unions of generics
+Codegen: extern struct
+  doesn't crash with proc with extern struct that's a closure
  doesn't crash with proc with extern struct that's a closure
+  declares extern union, sets and gets instance var
  declares extern union, sets and gets instance var
+  invokes proc with extern struct with sret
  invokes proc with extern struct with sret
+  invokes proc with extern struct
  invokes proc with extern struct
+  codegens extern proc call twice (#4982)
  codegens extern proc call twice (#4982)
+  declares extern struct with no constructor, assigns var
  declares extern struct with no constructor, assigns var
+  sets callback on extern struct  sets callback on extern struct  sets callback on extern struct  sets callback on extern struct  sets callback on extern struct  sets callback on extern struct  sets callback on extern struct  sets callback on extern struct  sets callback on extern struct
  sets callback on extern struct
+  codegens proc that takes and returns large extern struct by value
  codegens proc that takes and returns large extern struct by value
+  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI
  codegens proc that takes and returns an extern struct with C ABI
+  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil
  codegens proc that takes an extern struct with C ABI, callback returns nil
+  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI
  codegens proc that takes an extern struct with C ABI
+  declares extern union with no constructor
  declares extern union with no constructor
+  sets callback on extern union  sets callback on extern union  sets callback on extern union  sets callback on extern union  sets callback on extern union  sets callback on extern union  sets callback on extern union  sets callback on extern union  sets callback on extern union
  sets callback on extern union
+  declares extern struct, sets and gets instance var
  declares extern struct, sets and gets instance var
+  declares extern struct with no constructor
  declares extern struct with no constructor
+  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret
  codegens proc that takes and returns an extern struct with sret
+  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI
  codegens proc that takes and returns an extern struct with C ABI
+  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)
  codegens proc that takes an extern struct with C ABI (2)
+Semantic: annotation
+  errors if wanting to add type inside annotation (2) (#8614)
  errors if wanting to add type inside annotation (2) (#8614)
+  #annotation
+    finds annotation in instance var (assignment)
    finds annotation in instance var (assignment)
+    errors if using invalid annotation on fun
    errors if using invalid annotation on fun
+    finds annotation in generic parent (#7885)
    finds annotation in generic parent (#7885)
+    finds annotation on method arg
    finds annotation on method arg
+    finds annotation in enum
    finds annotation in enum
+    can't find annotation in module
    can't find annotation in module
+    can't find annotation in instance var, when other annotations are present
    can't find annotation in instance var, when other annotations are present
+    overrides annotation value in type
    overrides annotation value in type
+    overrides annotation in instance var
    overrides annotation in instance var
+    finds annotation on method splat arg
    finds annotation on method splat arg
+    errors if annotation doesn't exist
    errors if annotation doesn't exist
+    finds annotation in module
    finds annotation in module
+    finds annotation in instance var (declaration)
    finds annotation in instance var (declaration)
+    doesn't carry link annotation from lib to fun
    doesn't carry link annotation from lib to fun
+    errors if using annotation other than ThreadLocal for class vars
    errors if using annotation other than ThreadLocal for class vars
+    finds annotation in instance var (declaration, generic)
    finds annotation in instance var (declaration, generic)
+    can't find annotation on def
    can't find annotation on def
+    uses annotation value, keyword
    uses annotation value, keyword
+    can't find annotation in module, when other annotations are present
    can't find annotation in module, when other annotations are present
+    adds annotation on def
    adds annotation on def
+    finds annotation in struct
    finds annotation in struct
+    finds annotation in class
    finds annotation in class
+    finds annotation on method double splat arg
    finds annotation on method double splat arg
+    can't find annotation in instance var
    can't find annotation in instance var
+    can't find annotation on def, when other annotations are present
    can't find annotation on def, when other annotations are present
+    finds annotation on an restricted method block arg
    finds annotation on an restricted method block arg
+    errors if annotation doesn't point to an annotation type
    errors if annotation doesn't point to an annotation type
+    finds annotation in lib
    finds annotation in lib
+    uses annotation value, positional
    uses annotation value, positional
+  arguments
+    returns a correctly with named and positional args
    returns a correctly with named and positional args
+    #named_args
+      returns an empty NamedTupleLiteral if there are none defined
      returns an empty NamedTupleLiteral if there are none defined
+      returns a NamedTupleLiteral if there are named arguments defined
      returns a NamedTupleLiteral if there are named arguments defined
+    #args
+      returns an empty TupleLiteral if there are none defined
      returns an empty TupleLiteral if there are none defined
+      returns a TupleLiteral if there are positional arguments defined
      returns a TupleLiteral if there are positional arguments defined
+  #annotations
+    all types
+      finds annotations on a enum
      finds annotations on a enum
+      finds annotations on a class
      finds annotations on a class
+      finds annotations on a lib
      finds annotations on a lib
+      find annotations on method parameters
      find annotations on method parameters
+      finds annotations on a module
      finds annotations on a module
+      finds annotations on a struct
      finds annotations on a struct
+      finds annotations in instance var (declaration)
      finds annotations in instance var (declaration)
+      adds annotations on def
      adds annotations on def
+      finds annotations in instance var (declaration, generic)
      finds annotations in instance var (declaration, generic)
+      returns an empty array if there are none defined
      returns an empty array if there are none defined
+      finds annotations in generic parent (#7885)
      finds annotations in generic parent (#7885)
+    of a specific type
+      returns an empty array if there are none defined
      returns an empty array if there are none defined
+      uses annotations value, positional
      uses annotations value, positional
+      finds annotations in struct
      finds annotations in struct
+      adds annotations on def
      adds annotations on def
+      collects annotations values in type
      collects annotations values in type
+      can't find annotations on def
      can't find annotations on def
+      can't find annotations in instance var
      can't find annotations in instance var
+      uses annotations value, keyword
      uses annotations value, keyword
+      find annotations on method parameters
      find annotations on method parameters
+      finds annotations in instance var (declaration)
      finds annotations in instance var (declaration)
+      can't find annotations on def, when other annotations are present
      can't find annotations on def, when other annotations are present
+      finds annotations in generic parent (#7885)
      finds annotations in generic parent (#7885)
+      finds annotations in class
      finds annotations in class
+      finds annotations in instance var (declaration, generic)
      finds annotations in instance var (declaration, generic)
+      finds annotations in lib
      finds annotations in lib
+      finds annotations in enum
      finds annotations in enum
+      overrides annotations value in type
      overrides annotations value in type
+      finds annotations on a module
      finds annotations on a module
+      can't find annotations in instance var, when other annotations are present
      can't find annotations in instance var, when other annotations are present
+  errors if wanting to add type inside annotation (1) (#8614)
  errors if wanting to add type inside annotation (1) (#8614)
+  declares annotation
  declares annotation
+  doesn't bleed annotation from class into class variable (#8314)
  doesn't bleed annotation from class into class variable (#8314)
+  errors when annotate instance variable in subclass
  errors when annotate instance variable in subclass
+Codegen: responds_to?
+  codegens responds_to? with union gives true
  codegens responds_to? with union gives true
+  works with generic virtual superclass (2)
  works with generic virtual superclass (2)
+  works with generic virtual superclass (1)
  works with generic virtual superclass (1)
+  works with virtual type
  works with virtual type
+  doesn't error if result is discarded (#14113)
  doesn't error if result is discarded (#14113)
+  codegens responds_to? with generic class (1)
  codegens responds_to? with generic class (1)
+  works with virtual class type (1) (#1926)
  works with virtual class type (1) (#1926)
+  works with virtual class type (2) (#1926)
  works with virtual class type (2) (#1926)
+  works with generic virtual module (2) (#8334)
  works with generic virtual module (2) (#8334)
+  codegens responds_to? true for simple type
  codegens responds_to? true for simple type
+  codegens responds_to? with generic class (2)
  codegens responds_to? with generic class (2)
+  codegens responds_to? with nilable gives false because other type 2
  codegens responds_to? with nilable gives false because other type 2
+  works with two virtual types
  works with two virtual types
+  works with generic virtual module (1)
  works with generic virtual module (1)
+  codegens responds_to? with nilable gives false because other type 1
  codegens responds_to? with nilable gives false because other type 1
+  works with module
  works with module
+  codegens responds_to? with nilable gives true
  codegens responds_to? with nilable gives true
+  does for generic instance type metaclass (#4353)
  does for generic instance type metaclass (#4353)
+  codegens responds_to? with union gives false
  codegens responds_to? with union gives false
+  codegens responds_to? false for simple type
  codegens responds_to? false for simple type
+Semantic: closure
+  correctly captures type of closured block arg
  correctly captures type of closured block arg
+  doesn't crash for non-existing variable (#3789)
  doesn't crash for non-existing variable (#3789)
+  doesn't mark var as closured if only used in two block
  doesn't mark var as closured if only used in two block
+  marks variable as closured inside block in fun
  marks variable as closured inside block in fun
+  marks method as self closured if instance var is written
  marks method as self closured if instance var is written
+  marks outer fun inside a block as closured
  marks outer fun inside a block as closured
+  doesn't mark self var as closured, but marks method as self closured
  doesn't mark self var as closured, but marks method as self closured
+  marks outer fun as closured when using self
  marks outer fun as closured when using self
+  lookups return type in correct scope
  lookups return type in correct scope
+  says can't send closure to C with captured block
  says can't send closure to C with captured block
+  transforms block to proc literal with free var
  transforms block to proc literal with free var
+  gives error when doing yield inside proc literal
  gives error when doing yield inside proc literal
+  errors if giving more block args when transforming block to proc literal
  errors if giving more block args when transforming block to proc literal
+  errors if sending closured proc pointer to C (3)
  errors if sending closured proc pointer to C (3)
+  marks method as self closured if explicit self call is made
  marks method as self closured if explicit self call is made
+  marks method as self closured if used inside a block
  marks method as self closured if used inside a block
+  marks variable as closured in program on assign
  marks variable as closured in program on assign
+  errors when transforming block to proc literal if type mismatch
  errors when transforming block to proc literal if type mismatch
+  errors if sending closured proc pointer to C (1.2)
  errors if sending closured proc pointer to C (1.2)
+  does assign all types to metavar if closured but only assigned to once in a loop through block
  does assign all types to metavar if closured but only assigned to once in a loop through block
+  can use fun typedef as block type
  can use fun typedef as block type
+  marks variable as closured in def
  marks variable as closured in def
+  transforms block to proc literal without parameters
  transforms block to proc literal without parameters
+  says can't send closure to C with new notation
  says can't send closure to C with new notation
+  errors if sending closured proc pointer to C (1)
  errors if sending closured proc pointer to C (1)
+  errors if sending closured proc pointer to C (2)
  errors if sending closured proc pointer to C (2)
+  unifies types of closured var (1)
  unifies types of closured var (1)
+  doesn't assign all types to metavar if closured but declared inside block and re-assigned inside the same context before the closure
  doesn't assign all types to metavar if closured but declared inside block and re-assigned inside the same context before the closure
+  marks method as self closured if implicit self call is made
  marks method as self closured if implicit self call is made
+  correctly detects previous var as closured (#5609)
  correctly detects previous var as closured (#5609)
+  doesn't closure typeof instance var (#9479)
  doesn't closure typeof instance var (#9479)
+  marks method as self closured if instance var is read
  marks method as self closured if instance var is read
+  does assign all types to metavar if closured but only assigned to once in a loop
  does assign all types to metavar if closured but only assigned to once in a loop
+  errors if forwarding block param doesn't match input type size
  errors if forwarding block param doesn't match input type size
+  does assign all types to metavar if closured but only assigned to once in a loop through captured block
  does assign all types to metavar if closured but only assigned to once in a loop through captured block
+  marks variable as closured in program
  marks variable as closured in program
+  errors if forwarding block param doesn't match input type
  errors if forwarding block param doesn't match input type
+  doesn't closure typeof local var
  doesn't closure typeof local var
+  transforms block to proc literal
  transforms block to proc literal
+  doesn't assign all types to metavar if closured but declared inside block and never re-assigned
  doesn't assign all types to metavar if closured but declared inside block and never re-assigned
+  gives error when doing yield inside proc literal
  gives error when doing yield inside proc literal
+  doesn't assign all types to metavar if closured but only assigned to once
  doesn't assign all types to metavar if closured but only assigned to once
+  marks variable as closured in block
  marks variable as closured in block
+  allows passing block as proc literal to new and to initialize
  allows passing block as proc literal to new and to initialize
+  unifies types of closured var (2)
  unifies types of closured var (2)
+  allows giving less block args when transforming block to proc literal
  allows giving less block args when transforming block to proc literal
+  is considered as closure if assigned once but comes from a method arg
  is considered as closure if assigned once but comes from a method arg
+  passes #227
  passes #227
+  transforms block to proc literal with void type
  transforms block to proc literal with void type
+  errors if sending closured proc literal to C
  errors if sending closured proc literal to C
+  doesn't mark var as closured if only used in block
  doesn't mark var as closured if only used in block
+  considers var as closure-readonly if it was assigned multiple times before it was closured
  considers var as closure-readonly if it was assigned multiple times before it was closured
+Code gen: primitives
+  codegens f32
  codegens f32
+  defined method that calls primitive (bug)
  defined method that calls primitive (bug)
+  va_arg
+    uses llvm's va_arg instruction
    uses llvm's va_arg instruction
+    works with C code    works with C code    works with C code    works with C code    works with C code    works with C code    works with C code    works with C code    works with C code
    works with C code
+  codegens crystal_type_id for class
  codegens crystal_type_id for class
+  codegens int128  codegens int128  codegens int128  codegens int128  codegens int128  codegens int128  codegens int128  codegens int128  codegens int128
  codegens int128
+  gets crystal class instance type id
  gets crystal class instance type id
+  codegens int
  codegens int
+  can invoke binary on primitive typedef (#614)
  can invoke binary on primitive typedef (#614)
+  codegens string
  codegens string
+  allows @[Primitive] on fun declarations
  allows @[Primitive] on fun declarations
+  doesn't optimize away call whose obj is not passed as self (#2226)
  doesn't optimize away call whose obj is not passed as self (#2226)
+  sums two numbers out of an [] of Number
  sums two numbers out of an [] of Number
+  codegens pointer of int
  codegens pointer of int
+  codegens bool
  codegens bool
+  codegens char
  codegens char
+  allows redefining a primitive method
  allows redefining a primitive method
+  codegens f64
  codegens f64
+  codegens uint128  codegens uint128  codegens uint128  codegens uint128  codegens uint128  codegens uint128  codegens uint128  codegens uint128  codegens uint128
  codegens uint128
+  codegens char ord
  codegens char ord
+  can invoke cast on primitive typedef (#614)
  can invoke cast on primitive typedef (#614)
+  codegens __LINE__
  codegens __LINE__
+  codegens crystal_type_id with union type
  codegens crystal_type_id with union type
+  codegens long
  codegens long
+  doesn't treat `(1 == 1) == true` as `1 == 1 == true` (#328)
  doesn't treat `(1 == 1) == true` as `1 == 1 == true` (#328)
+  allows @[Primitive] on method that has body
  allows @[Primitive] on method that has body
+  uses built-in llvm function that returns a tuple
  uses built-in llvm function that returns a tuple
+  passes issue #328
  passes issue #328
+  arithmetic primitives
+    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2
    codegens 1 - 2
+    codegens 16.unsafe_shr 2
    codegens 16.unsafe_shr 2
+    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16
    codegens 1.to_i16
+    codegens 1.to_f!
    codegens 1.to_f!
+    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f
    codegens 1.to_f
+    codegens 8.unsafe_div 3
    codegens 8.unsafe_div 3
+    codegens 1 &- 2
    codegens 1 &- 2
+    codegens 2 &* 3
    codegens 2 &* 3
+    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3
    codegens 2 * 3
+    codegens 16.unsafe_shl 2
    codegens 16.unsafe_shl 2
+    codegens 1.to_i16!
    codegens 1.to_i16!
+    codegens 8.unsafe_mod 3
    codegens 8.unsafe_mod 3
+    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2
    codegens 1 + 2
+    skips bounds checking when to_i produces same type
    skips bounds checking when to_i produces same type
+    codegens 1 &+ 2
    codegens 1 &+ 2
+  atomicrmw
+    codegens atomicrmw with enums
    codegens atomicrmw with enums
+    codegens atomicrmw with symbols
    codegens atomicrmw with symbols
+    codegens atomicrmw with enums
    codegens atomicrmw with enums
+Semantic: cast
+  doesn't eagerly try to check cast type (#12268)
  doesn't eagerly try to check cast type (#12268)
+  casts to same type is ok
  casts to same type is ok
+  doesn't crash with typeof no-type (#7441)
  doesn't crash with typeof no-type (#7441)
+  doesn't cast to unbound generic type (as?) (#5927)
  doesn't cast to unbound generic type (as?) (#5927)
+  casts to generic virtual type
  casts to generic virtual type
+  disallows casting int to pointer
  disallows casting int to pointer
+  casts from union to compatible union
  casts from union to compatible union
+  can cast to metaclass (bug)
  can cast to metaclass (bug)
+  casts to target type even if can't infer casted value type (obsolete)
  casts to target type even if can't infer casted value type (obsolete)
+  doesn't cast to unbound generic type (as) (#5927)
  doesn't cast to unbound generic type (as) (#5927)
+  casts to module
  casts to module
+  disallows casting to Reference
  disallows casting to Reference
+  casts pointer of one type to another type
  casts pointer of one type to another type
+  can cast from Void* to virtual type (#3014)
  can cast from Void* to virtual type (#3014)
+  disallows casting to Class
  disallows casting to Class
+  considers else to be unreachable (#9658)
  considers else to be unreachable (#9658)
+  casts from union to incompatible union gives error
  casts from union to incompatible union gives error
+  errors if casting nil to Object inside typeof (#2403)
  errors if casting nil to Object inside typeof (#2403)
+  can cast to metaclass (2) (#11121)
  can cast to metaclass (2) (#11121)
+  casts pointer to another type
  casts pointer to another type
+  doesn't cast to virtual primitive (bug)
  doesn't cast to virtual primitive (bug)
+  doesn't allow upcast of generic type var (#996)
  doesn't allow upcast of generic type var (#996)
+  allows casting reference union to void pointer
  allows casting reference union to void pointer
+  allows casting object to void pointer
  allows casting object to void pointer
+  casts to compatible type and use it
  casts to compatible type and use it
+  casts to base class making it virtual (2)
  casts to base class making it virtual (2)
+  errors on cast inside a call that can't be instantiated
  errors on cast inside a call that can't be instantiated
+  doesn't error if casting to a generic type
  doesn't error if casting to a generic type
+  disallows casting fun to pointer
  disallows casting fun to pointer
+  casts from pointer to generic class gives error
  casts from pointer to generic class gives error
+  disallows casting pointer to fun
  disallows casting pointer to fun
+  casts to base class making it virtual (1)
  casts to base class making it virtual (1)
+  allows casting NoReturn to any type (#2132)
  allows casting NoReturn to any type (#2132)
+  should error if can't cast even if not instantiated
  should error if can't cast even if not instantiated
+  casts uninstantiated generic class to itself (#10882)
  casts uninstantiated generic class to itself (#10882)
+  disallows casting to Object (#815)
  disallows casting to Object (#815)
+  casts to incompatible type gives error
  casts to incompatible type gives error
+  casts to bigger union
  casts to bigger union
 Crystal::Doc::ProjectInfo
+  .find_git_version
  .find_git_version
+  .find_source_url_pattern
  .find_source_url_pattern
   .read_shard_properties
-    duplicate properties uses first one
    duplicate properties uses first one
-    strip quotes
    strip quotes
     indented properties
    indented properties
-    only name
    only name
     strip whitespace
    strip whitespace
-    empty properties
    empty properties
     ignores comments
    ignores comments
+    duplicate properties uses first one
    duplicate properties uses first one
     no shard.yml
    no shard.yml
-    without name and version properties
    without name and version properties
+    strip quotes
    strip quotes
+    empty properties
    empty properties
     name and version
    name and version
-  #source_url
-    builds url
    builds url
-    builds url
    builds url
-    fails if pattern is missing
    fails if pattern is missing
-    returns nil for empty pattern
    returns nil for empty pattern
-    fails if refname is missing
    fails if refname is missing
-    fails if pattern is missing
    fails if pattern is missing
-  .find_git_version
  .find_git_version
-  .find_source_url_pattern
  .find_source_url_pattern
+    only name
    only name
+    without name and version properties
    without name and version properties
+  .git_remote
+    no git workdir
    no git workdir
+    no origin remote
    no origin remote
+    origin plus other
    origin plus other
+    simple origin
    simple origin
+    no remote
    no remote
   #fill_with_defaults
+    no shard.yml, but git tagged version
    no shard.yml, but git tagged version
     empty folder
    empty folder
     with shard.yml
       git tagged version
      git tagged version
-      git missing
      git missing
-      git non-tagged commit
      git non-tagged commit
-      git untracked file doesn't prevent detection
      git untracked file doesn't prevent detection
       git with remote
      git with remote
-      not in a git folder
      not in a git folder
       git but no commit
      git but no commit
+      git untracked file doesn't prevent detection
      git untracked file doesn't prevent detection
+      git missing
      git missing
       git non-tagged commit dirty
      git non-tagged commit dirty
       git tagged version dirty
      git tagged version dirty
-    no shard.yml, but git tagged version
    no shard.yml, but git tagged version
-  .git_remote
-    no git workdir
    no git workdir
-    simple origin
    simple origin
-    no remote
    no remote
-    origin plus other
    origin plus other
-    no origin remote
    no origin remote
+      not in a git folder
      not in a git folder
+      git non-tagged commit
      git non-tagged commit
+  #source_url
+    fails if pattern is missing
    fails if pattern is missing
+    builds url
    builds url
+    fails if pattern is missing
    fails if pattern is missing
+    returns nil for empty pattern
    returns nil for empty pattern
+    fails if refname is missing
    fails if refname is missing
+    builds url
    builds url
+Normalize: until
+  normalizes until
  normalizes until
+Semantic: restrictions augmenter
+  augments Bool
  augments Bool
+  augments relative public type
  augments relative public type
+  augments Int32.class
  augments Int32.class
+  augments Char
  augments Char
+  augments Tuple(Int32, Char)
  augments Tuple(Int32, Char)
+  doesn't augment if the no_restrictions_augmenter flag is present
  doesn't augment if the no_restrictions_augmenter flag is present
+  augments Char | Int32 | String
  augments Char | Int32 | String
+  augments virtual type
  augments virtual type
+  augments Int32
  augments Int32
+  augments relative private type in same namespace
  augments relative private type in same namespace
+  doesn't augment if assigned inside if
  doesn't augment if assigned inside if
+  augments Char | Int32 | String
  augments Char | Int32 | String
+  augments Enumerable(Int32).class
  augments Enumerable(Int32).class
+  augments Nil
  augments Nil
+  augments Float32
  augments Float32
+  augments Proc(Int32, Char)
  augments Proc(Int32, Char)
+  augments for class var
  augments for class var
+  augments Array(String)
  augments Array(String)
+  augments virtual metaclass type
  augments virtual metaclass type
+  augments for Union(*T) (#12435)
  augments for Union(*T) (#12435)
+  augments typedef
  augments typedef
+  augments StaticArray(Int32, 8)
  augments StaticArray(Int32, 8)
+  augments NoReturn
  augments NoReturn
+  augments String
  augments String
+  augments recursive alias type (#12134)
  augments recursive alias type (#12134)
+  doesn't augment if assigned inside while
  doesn't augment if assigned inside while
+  augments Pointer(Void)
  augments Pointer(Void)
+  augments generic uninstantiated type
  augments generic uninstantiated type
+  augments Array(Int32).class
  augments Array(Int32).class
+  augments NamedTuple(a: Int32, b: Char)
  augments NamedTuple(a: Int32, b: Char)
+  doesn't crash on macro that yields and defines class (#12142)
  doesn't crash on macro that yields and defines class (#12142)
+  doesn't augment if assigned inside block
  doesn't augment if assigned inside block
+  augments Proc(Int32, Nil)
  augments Proc(Int32, Nil)
+  augments Symbol
  augments Symbol
+  augments relative private type
  augments relative private type
+  augments type splat
  augments type splat
+Codegen: while
+  doesn't crash on #2767 (2)
  doesn't crash on #2767 (2)
+  codegens while with declared var 3
  codegens while with declared var 3
+  codegens while with declared var 1
  codegens while with declared var 1
+  codegens while with declared var 2
  codegens while with declared var 2
+  endless break with value
  endless break with value
+  doesn't crash on #2767 (3)
  doesn't crash on #2767 (3)
+  codegens while with false
  codegens while with false
+  skip block with next
  skip block with next
+  break without value
  break without value
+  codegens def with while
  codegens def with while
+  conditional break without value
  conditional break without value
+  endless conditional break with value
  endless conditional break with value
+  doesn't crash on #2767
  doesn't crash on #2767
+  break with value, condition fails
  break with value, condition fails
+  doesn't crash on #2767 (4)
  doesn't crash on #2767 (4)
+  conditional break with value
  conditional break with value
+  codegens while with non-false condition
  codegens while with non-false condition
+  break with value
  break with value
+  doesn't crash on a = NoReturn
  doesn't crash on a = NoReturn
+  doesn't crash on while true begin break rescue (#7786)
  doesn't crash on while true begin break rescue (#7786)
+  codegens endless while
  codegens endless while
+Crystal::Config
+  .linux_runtime_libc
  .linux_runtime_libc
+  .host_target
  .host_target
+Semantic: primitives
+  types char ord
  types char ord
+  can invoke cast on primitive typedef (#614)
  can invoke cast on primitive typedef (#614)
+  Reference.pre_initialize
+    types with virtual reference type
    types with virtual reference type
+    types with reference type
    types with reference type
+    errors on uninstantiated generic type
    errors on uninstantiated generic type
+    errors on abstract type
    errors on abstract type
+  types a float32
  types a float32
+  types 1 + 2
  types 1 + 2
+  types a float64
  types a float64
+  types pointer of int
  types pointer of int
+  types a char
  types a char
+  types va_arg primitive
  types va_arg primitive
+  errors if @[Primitive] has no args
  errors if @[Primitive] has no args
+  types nop
  types nop
+  types a symbol
  types a symbol
+  types a bool
  types a bool
+  extends from Number and doesn't find to_i method
  extends from Number and doesn't find to_i method
+  types an expression
  types an expression
+  Slice.literal
+    with element type
+      types empty literal
      types empty literal
+      errors if element type is not primitive int or float
      errors if element type is not primitive int or float
+      types primitive float literal
      types primitive float literal
+      errors if element is out of range
      errors if element is out of range
+      errors if element is not number literal
      errors if element is not number literal
+      types primitive int literal
      types primitive int literal
+  types nil
  types nil
+  correctly types first hash from type vars (bug)
  correctly types first hash from type vars (bug)
+  computes correct hash value type if it's a function literal (#320)
  computes correct hash value type if it's a function literal (#320)
+  can invoke binary on primitive typedef (#614)
  can invoke binary on primitive typedef (#614)
+  types a string
  types a string
+  errors if using instance variable inside primitive type
  errors if using instance variable inside primitive type
+  types a uint128
  types a uint128
+  types an int32
  types an int32
+  types @[Primitive] method
  types @[Primitive] method
+  errors when comparing void (#225)
  errors when comparing void (#225)
+  can invoke binary on primitive typedef (2) (#614)
  can invoke binary on primitive typedef (2) (#614)
+  extends from Number and doesn't find + method
  extends from Number and doesn't find + method
+  looks up return type in correct scope (#13652)
  looks up return type in correct scope (#13652)
+  types a int128
  types a int128
+  types a int64
  types a int64
+  errors if @[Primitive] has non-symbol arg
  errors if @[Primitive] has non-symbol arg
+  extends from Number and doesn't find >= method
  extends from Number and doesn't find >= method
+  allows @[Primitive] on method that has body
  allows @[Primitive] on method that has body
+Crystal::Repl
+  can return static and runtime type information for
+    VirtualType
    VirtualType
+    MixedUnionType
    MixedUnionType
+    Non Union
    Non Union
+    UnionType
    UnionType
+  can parse and evaluate snippets
  can parse and evaluate snippets
+Code gen: hooks
+  does added method macro
  does added method macro
+  does finished
  does finished
+  fixes empty types in hooks (#3946)
  fixes empty types in hooks (#3946)
+  does inherited macro recursively
  does inherited macro recursively
+  does inherited macro before class body  does inherited macro before class body  does inherited macro before class body  does inherited macro before class body  does inherited macro before class body  does inherited macro before class body  does inherited macro before class body  does inherited macro before class body  does inherited macro before class body
  does inherited macro before class body
+  does extended macro
  does extended macro
+  does included macro
  does included macro
+  does inherited macro
  does inherited macro
+Codegen: super
+  codegens super that calls subclass method 6
  codegens super that calls subclass method 6
+  codegens super without arguments and instance variable
  codegens super without arguments and instance variable
+  does super in virtual type including module
  does super in virtual type including module
+  build super on generic class (bug)
  build super on generic class (bug)
+  codegens super that calls subclass method 4
  codegens super that calls subclass method 4
+  doesn't invoke super twice in inherited generic types (#942)
  doesn't invoke super twice in inherited generic types (#942)
+  codegens super that calls subclass method 3
  codegens super that calls subclass method 3
+  calls super in metaclass (#1522)  calls super in metaclass (#1522)  calls super in metaclass (#1522)  calls super in metaclass (#1522)  calls super in metaclass (#1522)  calls super in metaclass (#1522)  calls super in metaclass (#1522)  calls super in metaclass (#1522)  calls super in metaclass (#1522)
  calls super in metaclass (#1522)
+  codegens super inside closure forwarding args
  codegens super inside closure forwarding args
+  codegens super inside closure
  codegens super inside closure
+  calls super from virtual metaclass type (#2841)
  calls super from virtual metaclass type (#2841)
+  codegens super without arguments
  codegens super without arguments
+  codegens super that calls subclass method 5
  codegens super that calls subclass method 5
+  calls super on an object (#10004)
  calls super on an object (#10004)
+  calls super in generic module method
  calls super in generic module method
+  codegens super that calls subclass method 2
  codegens super that calls subclass method 2
+  calls super in module method (#556)
  calls super in module method (#556)
+  codegens super that calls subclass method
  codegens super that calls subclass method
+  codegens super without arguments but parent has arguments
  codegens super without arguments but parent has arguments
+  calls super with dispatch (#2318)
  calls super with dispatch (#2318)
+Semantic: new
+  errors if using self call in default argument (2)
  errors if using self call in default argument (2)
+  evaluates initialize default value at the instance scope (2) (#731)
  evaluates initialize default value at the instance scope (2) (#731)
+  doesn't have default new for inherited class from generic type
  doesn't have default new for inherited class from generic type
+  evaluates initialize default value at the instance scope (4) (#731)
  evaluates initialize default value at the instance scope (4) (#731)
+  inherits initialize and new methods if doesn't define new (#3238)
  inherits initialize and new methods if doesn't define new (#3238)
+  errors if using self call in default argument (1)
  errors if using self call in default argument (1)
+  evaluates initialize default value at the instance scope (6) (#731)
  evaluates initialize default value at the instance scope (6) (#731)
+  errors if using self call in default argument (3)
  errors if using self call in default argument (3)
+  evaluates initialize default value at the instance scope (5) (#731)
  evaluates initialize default value at the instance scope (5) (#731)
+  uses correct receiver for `initialize` in namespaced generic classes (#4086)
  uses correct receiver for `initialize` in namespaced generic classes (#4086)
+  evaluates initialize default value at the instance scope (1) (#731)
  evaluates initialize default value at the instance scope (1) (#731)
+  evaluates initialize default value at the instance scope (3) (#731)
  evaluates initialize default value at the instance scope (3) (#731)
+  doesn't incorrectly redefines new for generic class
  doesn't incorrectly redefines new for generic class
+Code gen: new
+  finds new in superclass if no initialize is defined (1)
  finds new in superclass if no initialize is defined (1)
+  evaluates initialize default value at the instance scope (3) (#731)
  evaluates initialize default value at the instance scope (3) (#731)
+  codegens instance method with new
  codegens instance method with new
+  evaluates initialize default value at the instance scope (4) (#731)
  evaluates initialize default value at the instance scope (4) (#731)
+  evaluates initialize default value at the instance scope (2) (#731)
  evaluates initialize default value at the instance scope (2) (#731)
+  finds super in deep hierarchy
  finds super in deep hierarchy
+  defines new for module
  defines new for module
+  can create Reference
  can create Reference
+  inherits initialize for generic type
  inherits initialize for generic type
+  overloads new and initialize, 2 (#2489)
  overloads new and initialize, 2 (#2489)
+  finds new in superclass for Enum
  finds new in superclass for Enum
+  codegens instance method with new and instance var
  codegens instance method with new and instance var
+  inherits initialize
  inherits initialize
+  overloads new and initialize, 3 (#2489)
  overloads new and initialize, 3 (#2489)
+  can create Tuple with Tuple.new  can create Tuple with Tuple.new  can create Tuple with Tuple.new  can create Tuple with Tuple.new  can create Tuple with Tuple.new  can create Tuple with Tuple.new  can create Tuple with Tuple.new  can create Tuple with Tuple.new  can create Tuple with Tuple.new
  can create Tuple with Tuple.new
+  codegens instance method with allocate
  codegens instance method with allocate
+  overloads new and initialize, 1 (#2489)
  overloads new and initialize, 1 (#2489)
+  evaluates initialize default value at the instance scope (1) (#731)
  evaluates initialize default value at the instance scope (1) (#731)
+  finds new in superclass if no initialize is defined (2)
  finds new in superclass if no initialize is defined (2)
+Semantic: multi assign
+  without strict_multi_assign
+    errors if assigning non-Indexable to splat (#11414)
    errors if assigning non-Indexable to splat (#11414)
+    doesn't error if assigning non-Indexable (#11414)
    doesn't error if assigning non-Indexable (#11414)
+    doesn't error if assigning tuple to fewer targets
    doesn't error if assigning tuple to fewer targets
+  strict_multi_assign
+    errors if assigning non-Indexable (#11414)
    errors if assigning non-Indexable (#11414)
+    errors if assigning tuple to more targets
    errors if assigning tuple to more targets
+    doesn't error if some type in union matches target count
    doesn't error if some type in union matches target count
+    errors if assigning tuple to fewer targets
    errors if assigning tuple to fewer targets
+    errors if assigning non-Indexable to splat (#11414)
    errors if assigning non-Indexable to splat (#11414)
+    doesn't error if some type in union has no constant size
    doesn't error if some type in union has no constant size
+    errors if assigning union of tuples to fewer targets
    errors if assigning union of tuples to fewer targets
+  can pass splat variable at top-level to macros (#11596)
  can pass splat variable at top-level to macros (#11596)
+Semantic: while
+  doesn't fail on new variables inside typeof condition
  doesn't fail on new variables inside typeof condition
+  uses var type inside while if endless loop
  uses var type inside while if endless loop
+  doesn't type var as nilable after break inside rescue
  doesn't type var as nilable after break inside rescue
+  finds while cond assign target in Not (#10345)
  finds while cond assign target in Not (#10345)
+  restricts type after while (#4242)
  restricts type after while (#4242)
+  types endless while with break without value
  types endless while with break without value
+  doesn't use type at end of endless while if variable is reassigned (2)
  doesn't use type at end of endless while if variable is reassigned (2)
+  types endless while with multiple breaks with value
  types endless while with multiple breaks with value
+  doesn't restrict type after while if there's a break (#4242)
  doesn't restrict type after while if there's a break (#4242)
+  rebinds condition variable after while body (#6158)
  rebinds condition variable after while body (#6158)
+  types while with && (#1425)
  types while with && (#1425)
+  marks variable as nil if breaking before assigning to it in an endless loop (2)
  marks variable as nil if breaking before assigning to it in an endless loop (2)
+  reports break cannot be used outside a while
  reports break cannot be used outside a while
+  types while with assignment
  types while with assignment
+  restricts type after `while` with `not` and `and` (#4242)
  restricts type after `while` with `not` and `and` (#4242)
+  types while with assignment and &&
  types while with assignment and &&
+  types endless while with break with value
  types endless while with break with value
+  types while (true) as NoReturn
  types while (true) as NoReturn
+  doesn't fail on Expressions condition (2)
  doesn't fail on Expressions condition (2)
+  types variable as nilable if raise before assign
  types variable as nilable if raise before assign
+  uses type at end of endless while if variable is reassigned, but not before first break (2)
  uses type at end of endless while if variable is reassigned, but not before first break (2)
+  restricts type after while with not (#4242)
  restricts type after while with not (#4242)
+  types while with multiple breaks with value
  types while with multiple breaks with value
+  finds all while cond assign targets in expressions (6)
  finds all while cond assign targets in expressions (6)
+  doesn't use type at end of endless while if variable is reassigned
  doesn't use type at end of endless while if variable is reassigned
+  types while with break with value
  types while with break with value
+  finds all while cond assign targets in expressions (5)
  finds all while cond assign targets in expressions (5)
+  types while with assignment and call
  types while with assignment and call
+  types while with break without value
  types while with break without value
+  doesn't fail on Expressions condition (1)
  doesn't fail on Expressions condition (1)
+  doesn't fail on nested conditionals inside typeof condition
  doesn't fail on nested conditionals inside typeof condition
+  finds all while cond assign targets in expressions (4)
  finds all while cond assign targets in expressions (4)
+  uses type at end of endless while if variable is reassigned, but not before first break
  uses type at end of endless while if variable is reassigned, but not before first break
+  finds all while cond assign targets in expressions (#10350)
  finds all while cond assign targets in expressions (#10350)
+  doesn't modify var's type before while
  doesn't modify var's type before while
+  doesn't use type at end of endless while if variable is reassigned (3)
  doesn't use type at end of endless while if variable is reassigned (3)
+  types while true as NoReturn
  types while true as NoReturn
+  uses var type inside while if endless loop (2)
  uses var type inside while if endless loop (2)
+  types while
  types while
+  reports next cannot be used outside a while
  reports next cannot be used outside a while
+  finds all while cond assign targets in expressions (3)
  finds all while cond assign targets in expressions (3)
+  marks variable as nil if breaking before assigning to it in an endless loop
  marks variable as nil if breaking before assigning to it in an endless loop
+  types while ((true)) as NoReturn
  types while ((true)) as NoReturn
+  finds all while cond assign targets in expressions (2)
  finds all while cond assign targets in expressions (2)
+Codegen: thread local
+  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer
  compiles with class variable referenced from initializer
+  works with class variables  works with class variables  works with class variables  works with class variables  works with class variables  works with class variables  works with class variables  works with class variables  works with class variables
  works with class variables
+  works with class variable in main thread  works with class variable in main thread  works with class variable in main thread  works with class variable in main thread  works with class variable in main thread  works with class variable in main thread  works with class variable in main thread  works with class variable in main thread  works with class variable in main thread
  works with class variable in main thread
+Semantic: struct
+  types struct getter with keyword name
  types struct getter with keyword name
+  errors if includes and field already exists, the other way around
  errors if includes and field already exists, the other way around
+  errors if invoking to_unsafe and got error in that call
  errors if invoking to_unsafe and got error in that call
+  errors if already defined with another type (2)
  errors if already defined with another type (2)
+  errors on struct setter if different type via new
  errors on struct setter if different type via new
+  includes another struct
  includes another struct
+  supports macro if inside struct
  supports macro if inside struct
+  allows inline forward declaration
  allows inline forward declaration
+  errors if already defined
  errors if already defined
+  automatically converts numeric type in struct field assignment
  automatically converts numeric type in struct field assignment
+  types struct
  types struct
+  errors if setting closure
  errors if setting closure
+  types Struct#new
  types Struct#new
+  errors on struct if no field
  errors on struct if no field
+  errors if using void in struct field type
  errors if using void in struct field type
+  errors on struct setter if different type
  errors on struct setter if different type
+  errors if already defined with another type
  errors if already defined with another type
+  marks as packed
  marks as packed
+  errors if includes and field already exists
  errors if includes and field already exists
+  errors if using void via typedef in struct field type
  errors if using void via typedef in struct field type
+  errors if includes non-cstruct type
  errors if includes non-cstruct type
+  can access instance var from the outside (#1092)
  can access instance var from the outside (#1092)
+  types struct getter multiple levels via new
  types struct getter multiple levels via new
+  types struct getter on pointer type
  types struct getter on pointer type
+  errors if invoking to_i32! and got wrong type
  errors if invoking to_i32! and got wrong type
+  errors if invoking to_unsafe and got different type
  errors if invoking to_unsafe and got different type
+  errors on empty c struct (#633)
  errors on empty c struct (#633)
+  types struct setter
  types struct setter
+  errors if includes unknown type
  errors if includes unknown type
+  types struct getter to struct
  types struct getter to struct
+  errors if invoking to_i32! and got error in that call
  errors if invoking to_i32! and got error in that call
+  types struct getter
  types struct getter
+Crystal::Repl::Interpreter
+  extern
+    discards primitive struct_or_union_set and get (struct)
    discards primitive struct_or_union_set and get (struct)
+    discards primitive struct_or_union_set because it's a copy
    discards primitive struct_or_union_set because it's a copy
+    sets struct field through pointer
    sets struct field through pointer
+    interprets primitive struct_or_union_set and get (union)
    interprets primitive struct_or_union_set and get (union)
+    interprets primitive struct_or_union_set and get (struct)
    interprets primitive struct_or_union_set and get (struct)
+    sets extern struct proc field
    sets extern struct proc field
+    does automatic C cast
    does automatic C cast
+Semantic: automatic cast
+  casts integer variable to larger type (Int64 to Int128) (#9565)
  casts integer variable to larger type (Int64 to Int128) (#9565)
+  says ambiguous call for integer var to larger type (#9565)
  says ambiguous call for integer var to larger type (#9565)
+  casts integer variable to larger type (#9565)
  casts integer variable to larger type (#9565)
+  casts Int32 -> Int64 in arg restriction
  casts Int32 -> Int64 in arg restriction
+  doesn't autocast number on union (#8655)
  doesn't autocast number on union (#8655)
+  casts Int32 to Int64 in ivar assignment
  casts Int32 to Int64 in ivar assignment
+  doesn't say 'ambiguous call' when there's an exact match for symbol (#6601)
  doesn't say 'ambiguous call' when there's an exact match for symbol (#6601)
+  casts literal integer in private top-level method (#7016)
  casts literal integer in private top-level method (#7016)
+  casts literal integer (Int32 -> Float32)
  casts literal integer (Int32 -> Float32)
+  casts literal integer (Int32 -> no restriction)
  casts literal integer (Int32 -> no restriction)
+  casts Symbol to Enum in ivar type declaration
  casts Symbol to Enum in ivar type declaration
+  casts literal integer through alias with union
  casts literal integer through alias with union
+  casts literal integer (Int64 -> Int32, ok)
  casts literal integer (Int64 -> Int32, ok)
+  can autocast to union in default value
  can autocast to union in default value
+  casts Symbol to Enum in ivar assignment
  casts Symbol to Enum in ivar assignment
+  can match multiple times with the same argument type (#7578)
  can match multiple times with the same argument type (#7578)
+  says ambiguous call for integer
  says ambiguous call for integer
+  casts Symbol to Enum in cvar type declaration
  casts Symbol to Enum in cvar type declaration
+  autocasts nested type from non-nested type (#10315)
  autocasts nested type from non-nested type (#10315)
+  errors if symbol name doesn't match enum member
  errors if symbol name doesn't match enum member
+  doesn't do multidispatch if an overload matches exactly (#8217)
  doesn't do multidispatch if an overload matches exactly (#8217)
+  can autocast to union in default value (multiple enums)
  can autocast to union in default value (multiple enums)
+  casts Int32 to Int64 in lvar assignment
  casts Int32 to Int64 in lvar assignment
+  casts symbol literal to enum
  casts symbol literal to enum
+  casts literal float (Float64 -> Float32)
  casts literal float (Float64 -> Float32)
+  casts literal integer through alias with union
  casts literal integer through alias with union
+  can use automatic cast with `with ... yield` (#7736)
  can use automatic cast with `with ... yield` (#7736)
+  says ambiguous call for integer (2)
  says ambiguous call for integer (2)
+  doesn't cast integer variable to larger type (not #9565)
  doesn't cast integer variable to larger type (not #9565)
+  doesn't do multidispatch if an overload matches exactly (#8217)
  doesn't do multidispatch if an overload matches exactly (#8217)
+  casts integer expression to larger type (#9565)
  casts integer expression to larger type (#9565)
+  can autocast to union in default value (symbol and int)
  can autocast to union in default value (symbol and int)
+  says ambiguous call for integer on alias (#6620)
  says ambiguous call for integer on alias (#6620)
+  can't cast integer to another type when it doesn't fit (#9565)
  can't cast integer to another type when it doesn't fit (#9565)
+  autocasts integer variable to float type (#9565)
  autocasts integer variable to float type (#9565)
+  doesn't say 'ambiguous call' when there's an exact match for integer (#6601)
  doesn't say 'ambiguous call' when there's an exact match for integer (#6601)
+  can autocast to alias in default value
  can autocast to alias in default value
+  says ambiguous call for integer var to union type (#9565)
  says ambiguous call for integer var to union type (#9565)
+  casts literal integer (Int64 -> Int32, too big)
  casts literal integer (Int64 -> Int32, too big)
+  autocasts float32 variable to float64 type (#9565)
  autocasts float32 variable to float64 type (#9565)
+  casts literal float (Float32 -> Float64)
  casts literal float (Float32 -> Float64)
+  matches correct overload
  matches correct overload
+  autocasts first argument and second matches without autocast
  autocasts first argument and second matches without autocast
+  casts literal integer (Int32 -> Float64)
  casts literal integer (Int32 -> Float64)
+  casts Int32 to Int64 in cvar type declaration
  casts Int32 to Int64 in cvar type declaration
+  casts literal integer (Int32 -> Int64)
  casts literal integer (Int32 -> Int64)
+  casts Int32 to Int64 in ivar type declaration
  casts Int32 to Int64 in ivar type declaration
+  casts Int32 to Int64 in ivar type declaration in generic
  casts Int32 to Int64 in ivar type declaration in generic
+  says ambiguous call for symbol
  says ambiguous call for symbol
+  says ambiguous call on union (#8655)
  says ambiguous call on union (#8655)
+  casts Int32 to Int64 in cvar assignment
  casts Int32 to Int64 in cvar assignment
+  errors when autocast default value doesn't match enum member
  errors when autocast default value doesn't match enum member
+Block inference
+  errors if using ( -> Object) as block return type (#2358)
  errors if using ( -> Object) as block return type (#2358)
+  ignores block parameter if not used
  ignores block parameter if not used
+  matches block arg return type
  matches block arg return type
+  infer type of block parameter
  infer type of block parameter
+  errors if returns from captured block
  errors if returns from captured block
+  respects block arg restriction when block has a splat parameter (#6473)
  respects block arg restriction when block has a splat parameter (#6473)
+  does next from captured block
  does next from captured block
+  doesn't crash on #2531
  doesn't crash on #2531
+  reports error if yields a type that's not that one in the block specification
  reports error if yields a type that's not that one in the block specification
+  reports error if yields a type that later changes and that's not that one in the block specification
  reports error if yields a type that later changes and that's not that one in the block specification
+  infer type of empty block body
  infer type of empty block body
+  reports error on method instantiate (#4543)
  reports error on method instantiate (#4543)
+  allows underscore in block return type even if the return type can't be computed
  allows underscore in block return type even if the return type can't be computed
+  preserves type filters in block
  preserves type filters in block
+  errors if declares class inside captured block
  errors if declares class inside captured block
+  uses free var in return type with tuple type
  uses free var in return type with tuple type
+  reports mismatch with generic argument type in input type
  reports mismatch with generic argument type in input type
+  errors if declares class inside block
  errors if declares class inside block
+  infers type of block before call
  infers type of block before call
+  errors if declares fun inside block
  errors if declares fun inside block
+  errors on recursive yield
  errors on recursive yield
+  maps block of union types to union types
  maps block of union types to union types
+  checks block type with virtual type
  checks block type with virtual type
+  errors when using local variable with block parameter name
  errors when using local variable with block parameter name
+  reports error if block type doesn't match
  reports error if block type doesn't match
+  auto-unpacks tuple, less than max
  auto-unpacks tuple, less than max
+  returns from proc literal
  returns from proc literal
+  errors if proc is not instantiated
  errors if proc is not instantiated
+  uses splat in block parameter
  uses splat in block parameter
+  infer type of yield
  infer type of yield
+  error with self output type doesn't match
  error with self output type doesn't match
+  binds to proc, not only to its body (#1796)
  binds to proc, not only to its body (#1796)
+  unpacks block argument
  unpacks block argument
+  auto-unpacks tuple, captured block with multiple statements
  auto-unpacks tuple, captured block with multiple statements
+  infer type of block body
  infer type of block body
+  error with self input type doesn't match
  error with self input type doesn't match
+  ignores void return type (4)
  ignores void return type (4)
+  auto-unpacks tuple
  auto-unpacks tuple
+  errors if alias is not a fun type
  errors if alias is not a fun type
+  auto-unpacks with block arg type
  auto-unpacks with block arg type
+  yields splat and non splat
  yields splat and non splat
+  errors if doing next in proc literal
  errors if doing next in proc literal
+  errors if declares lib inside block
  errors if declares lib inside block
+  reports mismatch with generic argument type in output type
  reports mismatch with generic argument type in output type
+  sets captured block type to that of restriction with alias
  sets captured block type to that of restriction with alias
+  yields splat
  yields splat
+  errors if declares extend inside block
  errors if declares extend inside block
+  errors if yields from top level
  errors if yields from top level
+  reports error if block changes type
  reports error if block changes type
+  errors if splat parameter becomes a union
  errors if splat parameter becomes a union
+  auto-unpacks tuple, too many args, captured block
  auto-unpacks tuple, too many args, captured block
+  renders expected block return type of a free variable on mismatch
  renders expected block return type of a free variable on mismatch
+  doesn't mix local var with block var, using next (#2314)
  doesn't mix local var with block var, using next (#2314)
+  errors if breaks from captured block
  errors if breaks from captured block
+  allows initialize with yield (#224)
  allows initialize with yield (#224)
+  errors if invoking new with block when no initialize is defined
  errors if invoking new with block when no initialize is defined
+  passes #262
  passes #262
+  passes #233: block with initialize with default args
  passes #233: block with initialize with default args
+  infer type of local variable
  infer type of local variable
+  doesn't auto-unpack tuple, more args
  doesn't auto-unpack tuple, more args
+  errors on recursive yield with ProcNotation restriction
  errors on recursive yield with ProcNotation restriction
+  types bug with yield not_nil! that is never not nil
  types bug with yield not_nil! that is never not nil
+  doesn't assign block variable type to last value (#694)
  doesn't assign block variable type to last value (#694)
+  infer type with union
  infer type with union
+  errors if declares enum inside block
  errors if declares enum inside block
+  break from block without value
  break from block without value
+  can infer block type given that the method has a return type (#7160)
  can infer block type given that the method has a return type (#7160)
+  passes &->f
  passes &->f
+  infers type of block with generic type
  infers type of block with generic type
+  recalculates call that uses block arg output as free var
  recalculates call that uses block arg output as free var
+  reports error if yields a type that's not that one in the block specification
  reports error if yields a type that's not that one in the block specification
+  uses splat in block parameter, many args
  uses splat in block parameter, many args
+  does next from block without value
  does next from block without value
+  allows yielding multiple types when a union is expected
  allows yielding multiple types when a union is expected
+  respects block arg restriction when block has a splat parameter (2) (#9524)
  respects block arg restriction when block has a splat parameter (2) (#9524)
+  errors on recursive yield with non ProcNotation restriction (#6896)
  errors on recursive yield with non ProcNotation restriction (#6896)
+  auto-unpacks tuple, less than max, captured block
  auto-unpacks tuple, less than max, captured block
+  ignores void return type (3) (#427)
  ignores void return type (3) (#427)
+  ignores void return type (2) (#427)
  ignores void return type (2) (#427)
+  uses free var in return type in captured block
  uses free var in return type in captured block
+  types empty block
  types empty block
+  errors if using Object as block return type (#2358)
  errors if using Object as block return type (#2358)
+  uses splat in block parameter, but not enough yield expressions
  uses splat in block parameter, but not enough yield expressions
+  uses block var with same name as local var
  uses block var with same name as local var
+  doesn't mix local var with block var, using break (#2314)
  doesn't mix local var with block var, using break (#2314)
+  binds block return type free variable even if there are no block parameters (#1797)
  binds block return type free variable even if there are no block parameters (#1797)
+  auto-unpacks tuple, captured block
  auto-unpacks tuple, captured block
+  yields in overload, matches type
  yields in overload, matches type
+  doesn't fail with 'already had enclosing call' (#11200)
  doesn't fail with 'already had enclosing call' (#11200)
+  errors if using Bar | Object as block return type (#2358)
  errors if using Bar | Object as block return type (#2358)
+  allows invoking method on a object of a captured block with a type that was never instantiated
  allows invoking method on a object of a captured block with a type that was never instantiated
+  errors if using (Object ->) as block return type (#2358)
  errors if using (Object ->) as block return type (#2358)
+  correctly types unpacked tuple block arg after block (#3339)
  correctly types unpacked tuple block arg after block (#3339)
+  infers type of block before call taking other args free vars into account
  infers type of block before call taking other args free vars into account
+  doesn't crash on cleaning up typeof node without dependencies (#8669)
  doesn't crash on cleaning up typeof node without dependencies (#8669)
+  finds type inside module in block
  finds type inside module in block
+  does next from block with value
  does next from block with value
+  reports error if missing arguments to yield
  reports error if missing arguments to yield
+  infer type with self block arg
  infer type with self block arg
+  uses block arg, too many parameters
  uses block arg, too many parameters
+  allows alias as block fun type
  allows alias as block fun type
+  errors if declares def inside block
  errors if declares def inside block
+  break without value has nil type
  break without value has nil type
+  errors if declares alias inside block
  errors if declares alias inside block
+  reports error if block didn't return expected type
  reports error if block didn't return expected type
+  errors if declares include inside block
  errors if declares include inside block
+  errors if declares module inside block
  errors if declares module inside block
+  uses block return type as return type, even if can't infer block type
  uses block return type as return type, even if can't infer block type
+  does next from block with value 2
  does next from block with value 2
+  matches block with generic type and free var
  matches block with generic type and free var
+  sets captured block type to that of restriction
  sets captured block type to that of restriction
+  ignores void return type (#427)
  ignores void return type (#427)
+  auto-unpacks tuple, too many args
  auto-unpacks tuple, too many args
+  yields with different types
  yields with different types
+  errors if declares macro inside block
  errors if declares macro inside block
+  auto-unpacks tuple, captured empty block
  auto-unpacks tuple, captured empty block
+  types recursive hash assignment
  types recursive hash assignment
+semantic: case
+  checks exhaustiveness for tuple literal, and passes
  checks exhaustiveness for tuple literal, and passes
+  checks exhaustiveness of enum via const
  checks exhaustiveness of enum via const
+  checks exhaustiveness for tuple literal with bool and underscore at first position
  checks exhaustiveness for tuple literal with bool and underscore at first position
+  checks exhaustiveness for tuple literal of 2 elements, first is enum
  checks exhaustiveness for tuple literal of 2 elements, first is enum
+  checks exhaustiveness for tuple literal with bool and underscore at second position, with partial match
  checks exhaustiveness for tuple literal with bool and underscore at second position, with partial match
+  checks exhaustiveness of enum (all cases covered)
  checks exhaustiveness of enum (all cases covered)
+  checks exhaustiveness for tuple literal with bool and underscore at first position
  checks exhaustiveness for tuple literal with bool and underscore at first position
+  checks exhaustiveness of single type (generic)
  checks exhaustiveness of single type (generic)
+  checks exhaustiveness of enum via question method
  checks exhaustiveness of enum via question method
+  checks exhaustiveness for tuple literal with bool and underscore at second position
  checks exhaustiveness for tuple literal with bool and underscore at second position
+  can't prove case is exhaustive for @[Flags] enum, tuple case
  can't prove case is exhaustive for @[Flags] enum, tuple case
+  checks exhaustiveness, covers in base type covers (generic type)
  checks exhaustiveness, covers in base type covers (generic type)
+  checks exhaustiveness for tuple literal with bool and underscore at second position
  checks exhaustiveness for tuple literal with bool and underscore at second position
+  checks exhaustiveness of enum through method (all cases covered)
  checks exhaustiveness of enum through method (all cases covered)
+  can prove case is exhaustive for @[Flags] enum when matching type
  can prove case is exhaustive for @[Flags] enum when matching type
+  checks exhaustiveness for tuple literal of 3 elements, all enums
  checks exhaustiveness for tuple literal of 3 elements, all enums
+  checks exhaustiveness for tuple literal, with call
  checks exhaustiveness for tuple literal, with call
+  checks exhaustiveness of bool type with other types
  checks exhaustiveness of bool type with other types
+  checks exhaustiveness, covers in base type covers
  checks exhaustiveness, covers in base type covers
+  checks exhaustiveness for tuple literal of 3 elements, and warns
  checks exhaustiveness for tuple literal of 3 elements, and warns
+  checks exhaustiveness of bool type (missing true)
  checks exhaustiveness of bool type (missing true)
+  checks exhaustiveness for tuple literal with types and underscore at second position
  checks exhaustiveness for tuple literal with types and underscore at second position
+  checks exhaustiveness for tuple literal with types and underscore at first position
  checks exhaustiveness for tuple literal with types and underscore at first position
+  checks exhaustiveness for tuple literal of 3 elements, all bool
  checks exhaustiveness for tuple literal of 3 elements, all bool
+  checks exhaustiveness of union type with virtual type
  checks exhaustiveness of union type with virtual type
+  checks exhaustiveness of bool type (missing false)
  checks exhaustiveness of bool type (missing false)
+  checks exhaustiveness for tuple literal with bool and underscore at first position, partial match
  checks exhaustiveness for tuple literal with bool and underscore at first position, partial match
+  checks exhaustiveness of nil type with nil literal
  checks exhaustiveness of nil type with nil literal
+  checks exhaustiveness of nilable type with nil literal
  checks exhaustiveness of nilable type with nil literal
+  can't prove case is exhaustive for @[Flags] enum
  can't prove case is exhaustive for @[Flags] enum
+  checks exhaustiveness for tuple literal of 2 elements, first is bool
  checks exhaustiveness for tuple literal of 2 elements, first is bool
+  checks exhaustiveness of single type (T.class)
  checks exhaustiveness of single type (T.class)
+  checks exhaustiveness for tuple literal with bool and underscore at second position, partial match
  checks exhaustiveness for tuple literal with bool and underscore at second position, partial match
+  checks exhaustiveness of enum combined with another type
  checks exhaustiveness of enum combined with another type
+  checks exhaustiveness for tuple literal of 2 elements, and warns
  checks exhaustiveness for tuple literal of 2 elements, and warns
+  checks exhaustiveness for tuple literal with bool and underscore at first position, with partial match
  checks exhaustiveness for tuple literal with bool and underscore at first position, with partial match
+  errors if casing against a constant
  errors if casing against a constant
+  doesn't check exhaustiveness when using 'when'
  doesn't check exhaustiveness when using 'when'
+  checks exhaustiveness of single type (Foo(T).class)
  checks exhaustiveness of single type (Foo(T).class)
+  checks exhaustiveness of union with bool
  checks exhaustiveness of union with bool
+  checks exhaustiveness of single type
  checks exhaustiveness of single type
+  covers all types
  covers all types
+Normalize: array literal
+  normalizes non-empty with of
  normalizes non-empty with of
+  normalizes non-empty without of, with splat only
  normalizes non-empty without of, with splat only
+  normalizes empty with of
  normalizes empty with of
+  hoists complex element expressions
  hoists complex element expressions
+  hoists complex element expressions, with splat
  hoists complex element expressions, with splat
+  normalizes non-empty with of, with splat
  normalizes non-empty with of, with splat
+  normalizes non-empty without of, with splat
  normalizes non-empty without of, with splat
+  hoists complex element expressions, array-like generic
  hoists complex element expressions, array-like generic
+  normalizes non-empty without of
  normalizes non-empty without of
+  hoists complex element expressions, array-like
  hoists complex element expressions, array-like
+Code gen: uninitialized
+  codegens value (#3641)
  codegens value (#3641)
+  doesn't break on inherited declared var (#390)
  doesn't break on inherited declared var (#390)
+  codegens declare var and changes it
  codegens declare var and changes it
+  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)
  works inside while/begin/rescue (bug inside #759)
+  works with uninitialized NoReturn (#3314)
  works with uninitialized NoReturn (#3314)
+  codegens declare instance var with static array type
  codegens declare instance var with static array type
+  codegens declare var and read it
  codegens declare var and read it
+  codegens declare instance var
  codegens declare instance var
+Semantic: super
+  types super without arguments and instance variable
  types super without arguments and instance variable
+  types super with named arguments, def has bare splat parameter (#8895)
  types super with named arguments, def has bare splat parameter (#8895)
+  errors if invoking super and match isn't found in direct superclass in initialize (even though it's find in one superclass)
  errors if invoking super and match isn't found in direct superclass in initialize (even though it's find in one superclass)
+  gives correct error when calling super and target is abstract method (#2675)
  gives correct error when calling super and target is abstract method (#2675)
+  calls super in module method (3) (#556)
  calls super in module method (3) (#556)
+  calls super in module method (2) (#556)
  calls super in module method (2) (#556)
+  errors on super outside method (#4481)
  errors on super outside method (#4481)
+  calls super in module method (1) (#556)
  calls super in module method (1) (#556)
+  types super without arguments
  types super without arguments
+  finds super initialize if not explicitly defined in superclass, 1 (#273)
  finds super initialize if not explicitly defined in superclass, 1 (#273)
+  types super with named arguments, def has bare splat parameter (2) (#8895)
  types super with named arguments, def has bare splat parameter (2) (#8895)
+  errors no superclass method in top-level
  errors no superclass method in top-level
+  errors no superclass method in top-level def
  errors no superclass method in top-level def
+  errors no superclass method
  errors no superclass method
+  types super with forwarded arguments, def has bare splat parameter (#8895)
  types super with forwarded arguments, def has bare splat parameter (#8895)
+  finds super initialize if not explicitly defined in superclass, 2 (#273)
  finds super initialize if not explicitly defined in superclass, 2 (#273)
+  types super when container method is defined in parent class two levels up
  types super when container method is defined in parent class two levels up
+  types super when inside fun and forwards args
  types super when inside fun and forwards args
+  doesn't error if invoking super and match isn't found in direct superclass (even though it's find in one superclass)
  doesn't error if invoking super and match isn't found in direct superclass (even though it's find in one superclass)
+  calls super in generic module method
  calls super in generic module method
+  types super when container method is defined in parent class
  types super when container method is defined in parent class
+  types super with forwarded arguments, different internal names (#8895)
  types super with forwarded arguments, different internal names (#8895)
+  types super with forwarded arguments, parent has parameters
  types super with forwarded arguments, parent has parameters
+  types super with forwarded arguments, def has double splat parameter (#8895)
  types super with forwarded arguments, def has double splat parameter (#8895)
+  types super when inside fun
  types super when inside fun
+  errors if calling super on module method and not found
  errors if calling super on module method and not found
+  errors on super where only target would be a top level method (#5201)
  errors on super where only target would be a top level method (#5201)
+  says correct error message when no overload matches in super call (#272)
  says correct error message when no overload matches in super call (#272)
+  invokes super inside macro (#6636)
  invokes super inside macro (#6636)
+Crystal::Repl::Interpreter
+  bugs
+    doesn't pass self to top-level method
    doesn't pass self to top-level method
+    does leading zeros
    does leading zeros
+    does multidispatch on virtual struct union nil
    does multidispatch on virtual struct union nil
+    doesn't pass self to top-level method (FileNode)
    doesn't pass self to top-level method (FileNode)
+    correctly puts virtual metaclass type in union
    correctly puts virtual metaclass type in union
+    does multidispatch on virtual struct
    does multidispatch on virtual struct
+    doesn't override local variable value with block var with the same name
    doesn't override local variable value with block var with the same name
+    breaks from current block, not from outer block
    breaks from current block, not from outer block
+    doesn't incorrectly consider a non-closure as closure
    doesn't incorrectly consider a non-closure as closure
+Crystal::Repl::Interpreter
+  exception handling
+    does ensure with explicit return
    does ensure with explicit return
+    executes ensure when exception is raised in rescue
    executes ensure when exception is raised in rescue
+    does ensure for else when else raises
    does ensure for else when else raises
+    executes ensure when breaking from a block
    executes ensure when breaking from a block
+    raises and rescues specific exception type
    raises and rescues specific exception type
+    does ensure without rescue/raise
    does ensure without rescue/raise
+    raises and rescues anything
    raises and rescues anything
+    executes ensure when returning from a block
    executes ensure when returning from a block
+    executes ensure when returning a big value from a block
    executes ensure when returning a big value from a block
+    does ensure for else
    does ensure for else
+    executes ensure when exception is raised in body
    executes ensure when exception is raised in body
+    does else
    does else
+    raises and rescues anything, does ensure when an exception is rescued
    raises and rescues anything, does ensure when an exception is rescued
+    executes ensure when returning from a block (2)
    executes ensure when returning from a block (2)
+    captures exception in variable
    captures exception in variable
+    does rescue when nothing is raised
    does rescue when nothing is raised
+Crystal::Doc::Generator
+  #formatted_summary
+    with a Deprecated annotation, and docs
+      should generate both the docs and Deprecated tag
      should generate both the docs and Deprecated tag
+    with a Deprecated annotation, and no docs
+      should generate just the Deprecated tag
      should generate just the Deprecated tag
+    with a Experimental annotation, and no docs
+      should generate just the Experimental tag
      should generate just the Experimental tag
+    with no annotation, and no docs
+      should generate nothing
      should generate nothing
+    should generate the first sentence
    should generate the first sentence
+    should exclude whitespace before the summary line
    should exclude whitespace before the summary line
+    with a Experimental annotation, and docs
+      should generate both the docs and Experimental tag
      should generate both the docs and Experimental tag
+    should generate the first line
    should generate the first line
+  generates sitemap
  generates sitemap
+  #must_include_toplevel?
+    returns true if program has method
    returns true if program has method
+    returns false if program has macro which is defined in other place
    returns false if program has macro which is defined in other place
+    returns false if program has constant which is defined in other place
    returns false if program has constant which is defined in other place
+    returns true if program has macro
    returns true if program has macro
+    returns false if program has method which is defined in other place
    returns false if program has method which is defined in other place
+    returns false if program has nothing
    returns false if program has nothing
+    returns true if program has constant
    returns true if program has constant
+  #formatted_doc
+    with a Deprecated annotation, and docs
+      should generate both the docs and Deprecated tag
      should generate both the docs and Deprecated tag
+    should generate the full document
    should generate the full document
+    with a Experimental annotation, and docs
+      should generate both the docs and Experimental tag
      should generate both the docs and Experimental tag
+    with no annotation, and no docs
+      should generate nothing
      should generate nothing
+    should generate the full document
    should generate the full document
+    with a Experimental annotation, and no docs
+      should generate just the Experimental tag
      should generate just the Experimental tag
+    with a Deprecated annotation, and no docs
+      should generate just the Deprecated tag
      should generate just the Deprecated tag
+  crystal repo
+    inserts pseudo methods
    inserts pseudo methods
+  #collect_constants
+    returns empty array when constants are private
    returns empty array when constants are private
+Crystal::Repl::Interpreter
+  blocks
+    counts with ... yield scope in block args bytesize (#12316)
    counts with ... yield scope in block args bytesize (#12316)
+    caches method with captured block (#12276)
    caches method with captured block (#12276)
+    interprets yield return value
    interprets yield return value
+    interprets break inside block (union, through return)
    interprets break inside block (union, through return)
+    interprets yield with splat (1)
    interprets yield with splat (1)
+    interprets yield inside def with arguments
    interprets yield inside def with arguments
+    interprets yield expressions
    interprets yield expressions
+    casts yield expression to block var type (not block arg type)
    casts yield expression to block var type (not block arg type)
+    interprets break inside block (union, through normal flow)
    interprets break inside block (union, through normal flow)
+    interprets next inside block
    interprets next inside block
+    interprets block with splat
    interprets block with splat
+    interprets break inside block (union, through break)
    interprets break inside block (union, through break)
+    interprets yield with splat, block with splat (#12227)
    interprets yield with splat, block with splat (#12227)
+    interprets with ... yield with struct
    interprets with ... yield with struct
+    interprets yield with splat, less block arguments
    interprets yield with splat, less block arguments
+    captures non-closure block
    captures non-closure block
+    interprets block with args that conflict with a local var
    interprets block with args that conflict with a local var
+    interprets next inside block (union, through normal exit)
    interprets next inside block (union, through normal exit)
+    interprets with ... yield with extra arguments (#12296)
    interprets with ... yield with extra arguments (#12296)
+    interprets block with multiple yields
    interprets block with multiple yields
+    interprets break inside block
    interprets break inside block
+    interprets yield expression
    interprets yield expression
+    yields different values to form a union
    yields different values to form a union
+    interprets yield with splat (2)
    interprets yield with splat (2)
+    clears block local variables when calling block (2)
    clears block local variables when calling block (2)
+    considers block arg without type as having NoReturn type (2) (#12270)
    considers block arg without type as having NoReturn type (2) (#12270)
+    returns from block
    returns from block
+    interprets next inside block (union, through next)
    interprets next inside block (union, through next)
+    interprets with ... yield
    interprets with ... yield
+    considers block arg without type as having NoReturn type (#12270)
    considers block arg without type as having NoReturn type (#12270)
+    interprets block with args that conflict with a local var
    interprets block with args that conflict with a local var
+    interprets yield inside another block
    interprets yield inside another block
+    clears block local variables when calling block
    clears block local variables when calling block
+    interprets simplest block
    interprets simplest block
+    discards yield expression
    discards yield expression
+    interprets yield with splat, block with splat
    interprets yield with splat, block with splat
+error reporting
+  reports unexpected named argument
  reports unexpected named argument
+  reports unexpected named argument (2)
  reports unexpected named argument (2)
+  reports unexpected block
  reports unexpected block
+  reports wrong number of arguments, with optional parameters
  reports wrong number of arguments, with optional parameters
+  uses correct name for top-level macro methods
  uses correct name for top-level macro methods
+  reports wrong number of arguments
  reports wrong number of arguments
+  reports missing block
  reports missing block
 read_file
   with absolute path
     reads file (doesn't exist)
    reads file (doesn't exist)
     reads file (exists)
    reads file (exists)
   with relative path
-    reads file (exists)
    reads file (exists)
     reads file (doesn't exist)
    reads file (doesn't exist)
+    reads file (exists)
    reads file (exists)
+types to_s of
+  nilable type with more than two elements, Nil at the end
  nilable type with more than two elements, Nil at the end
+  does for type contained in generic class
  does for type contained in generic class
+  non-instantiated array
  non-instantiated array
+  union types
+    should not have extra parens
+      in pointers
      in pointers
+      in arrays
      in arrays
+      in tuples
      in tuples
+    should have parens
+      as return type
      as return type
+      as arg type
      as arg type
+  nilable reference type
  nilable reference type
+  named tuple
  named tuple
+  does for type contained in generic module
  does for type contained in generic module
+  union of simple types
  union of simple types
+  nilable value type
  nilable value type
+  array of simple types
  array of simple types
+Lexer comments
+  lexes without comments enabled
  lexes without comments enabled
+  lexes with comments enabled
  lexes with comments enabled
+  lexes with comments enabled (2)
  lexes with comments enabled (2)
+  lexes correct number of spaces
  lexes correct number of spaces
+Crystal::Loader
+  .parse
+    parses directory paths
    parses directory paths
+    parses library names
    parses library names
+    prepends directory paths before default search paths
    prepends directory paths before default search paths
+    parses static
    parses static
+    parses file paths
    parses file paths
+  .default_search_paths
+    DYLD_LIBRARY_PATH
    DYLD_LIBRARY_PATH
+    LD_LIBRARY_PATH
    LD_LIBRARY_PATH
+  .read_ld_conf
+    basic
    basic
+    with include
    with include
+  dynlib
+    #load_library?
+      library name
      library name
+      does not implicitly find dependencies
      does not implicitly find dependencies
+      full path
      full path
+      lookup in order
      lookup in order
+    does not find global symbols
    does not find global symbols
+    #load_file?
+      finds function symbol
      finds function symbol
+    validate that lib handles are properly closed
    validate that lib handles are properly closed
+Semantic: virtual metaclass
+  allows passing metaclass to virtual metaclass restriction
  allows passing metaclass to virtual metaclass restriction
+  merges metaclass types
  merges metaclass types
+  restricts virtual metaclass to Class (#11376)
  restricts virtual metaclass to Class (#11376)
+  allows passing metaclass to virtual metaclass restriction
  allows passing metaclass to virtual metaclass restriction
+  types virtual metaclass method
  types virtual metaclass method
+  types virtual metaclass
  types virtual metaclass
+  yields virtual type in block arg if class is abstract
  yields virtual type in block arg if class is abstract
+  merges metaclass types with 3 types
  merges metaclass types with 3 types
+  types metaclass node
  types metaclass node
+  allows allocating virtual type when base class is abstract
  allows allocating virtual type when base class is abstract
+Semantic: type
+  errors if original type doesn't support instance variables
  errors if original type doesn't support instance variables
+  can call methods of parent type
  can call methods of parent type
+  can call methods of original type
  can call methods of original type
+  can access instance variables of original type
  can access instance variables of original type
+implementations
+  find implementation inside contained file private class' class method
  find implementation inside contained file private class' class method
+  find full trace for macro expansions
  find full trace for macro expansions
+  find method calls inside if
  find method calls inside if
+  find const implementation
  find const implementation
+  find method calls inside rescue
  find method calls inside rescue
+  find alias implementation
  find alias implementation
+  find implementation inside contained file private method
  find implementation inside contained file private method
+  find class implementation
  find class implementation
+  find implementation from macro expansions
  find implementation from macro expansions
+  find implementation inside contained class' class method
  find implementation inside contained class' class method
+  find open class implementation
  find open class implementation
+  find enum value implementation
  find enum value implementation
+  find enum implementation
  find enum implementation
+  find top level method calls
  find top level method calls
+  find method calls inside while cond
  find method calls inside while cond
+  find implementors of different classes
  find implementors of different classes
+  find method calls inside while
  find method calls inside while
+  find struct implementation
  find struct implementation
+  find class inside method
  find class inside method
+  find implementors of classes that are only used
  find implementors of classes that are only used
+  can display json output
  can display json output
+  find implementation in generic class methods
  find implementation in generic class methods
+  find method calls inside trailing if
  find method calls inside trailing if
+  can display text output
  can display text output
+  find class defined by macro
  find class defined by macro
+  find implementation in generic class
  find implementation in generic class
+  find implementation in class methods
  find implementation in class methods
+  find module implementation
  find module implementation
+  find implementation inside a module class
  find implementation inside a module class
 Crystal::Repl::Interpreter
-  structs
-    interprets read instance var of struct
    interprets read instance var of struct
-    sets multiple instance vars in virtual abstract struct call (#12187)
    sets multiple instance vars in virtual abstract struct call (#12187)
-    mutates struct stored in class var
    mutates struct stored in class var
-    does allocate, set instance var and get instance var
    does allocate, set instance var and get instance var
-    does simple class instance var initializer
    does simple class instance var initializer
-    does call receiver by value from VirtualType abstract struct to concrete struct (#12190)
    does call receiver by value from VirtualType abstract struct to concrete struct (#12190)
-    inlines struct method that returns self (#12253)
    inlines struct method that returns self (#12253)
-    does constructor
    does constructor
-    does complex class instance var initializer
    does complex class instance var initializer
-    does call receiver by value from VirtualType abstract struct to union
    does call receiver by value from VirtualType abstract struct to union
-    casts def body to def type
    casts def body to def type
+  downcasts virtual type to its only type (#12351)
  downcasts virtual type to its only type (#12351)
+  inlines instance var access from virtual type with a single type (#39520)
  inlines instance var access from virtual type with a single type (#39520)
+  classes
+    calls implicit struct self method
    calls implicit struct self method
     discards allocate
    discards allocate
-    mutates struct inside union
    mutates struct inside union
-    does simple struct instance var initializer
    does simple struct instance var initializer
-    does class instance var initializer inheritance
    does class instance var initializer inheritance
-Parser
-  parses "1+2*3"
  parses "1+2*3"
-  parses "def foo(a, @[Foo] &block); end"
  parses "def foo(a, @[Foo] &block); end"
-  parses "foo.|(1, 2) { 3 }"
  parses "foo.|(1, 2) { 3 }"
-  parses "n <= 2"
  parses "n <= 2"
-  parses "break {1 => 2}"
  parses "break {1 => 2}"
-  parses "next {1, 2}"
  parses "next {1, 2}"
-  parses "def foo(@def); end"
  parses "def foo(@def); end"
-  parses "def foo(x @case); end"
  parses "def foo(x @case); end"
-  parses "->Foo.>(Int32)"
  parses "->Foo.>(Int32)"
-  parses "def foo(@[Foo] *args); end"
  parses "def foo(@[Foo] *args); end"
-  says syntax error on "foo { |next| }"
  says syntax error on "foo { |next| }"
-  says syntax error on "A = begin; B = 1; end"
  says syntax error on "A = begin; B = 1; end"
-  parses "%x(`which(foo)`)"
  parses "%x(`which(foo)`)"
-  parses "def >=; end;"
  parses "def >=; end;"
-  parses "x = 1; foo x { }"
  parses "x = 1; foo x { }"
-  parses "@foo"
  parses "@foo"
-  says syntax error on "next >= 1"
  says syntax error on "next >= 1"
-  parses "def //(); end"
  parses "def //(); end"
-  says syntax error on "def foo(foo yield); end"
  says syntax error on "def foo(foo yield); end"
-  parses "begin\n1\nensure\n2\nend"
  parses "begin\n1\nensure\n2\nend"
-  says syntax error on "next >> 1"
  says syntax error on "next >> 1"
-  parses "return *{1, 2}"
  parses "return *{1, 2}"
-  parses "Foo({X: X, Y: Y})"
  parses "Foo({X: X, Y: Y})"
-  parses "def foo(x y); y; end"
  parses "def foo(x y); y; end"
-  parses "def **(); end;"
  parses "def **(); end;"
-  parses "macro foo\n{%\nif 1\n2\nelse\n3\nend\n%}end"
  parses "macro foo\n{%\nif 1\n2\nelse\n3\nend\n%}end"
-  parses "false"
  parses "false"
-  parses ":/"
  parses ":/"
-  parses "foo.& 1, 2"
  parses "foo.& 1, 2"
-  says syntax error on "def foo x y; end"
  says syntax error on "def foo x y; end"
-  parses "::foo"
  parses "::foo"
-  parses "n & 2"
  parses "n & 2"
-  parses ":\u304B\u305F\u306A"
  parses ":\u304B\u305F\u306A"
-  says syntax error on "return[0]= 1"
  says syntax error on "return[0]= 1"
-  parses "foo.[0] = 1"
  parses "foo.[0] = 1"
-  parses "def foo(alias foo); end"
  parses "def foo(alias foo); end"
-  says syntax error on "break ... 1"
  says syntax error on "break ... 1"
-  parses "def foo(x @@if); end"
  parses "def foo(x @@if); end"
-  parses "a.b /=\n1"
  parses "a.b /=\n1"
-  parses "Foo()?"
  parses "Foo()?"
-  parses "foo[] /2"
  parses "foo[] /2"
-  parses "instance_alignof(\n  Int32\n)"
  parses "instance_alignof(\n  Int32\n)"
-  says syntax error on "foo { |a b| }"
  says syntax error on "foo { |a b| }"
-  parses "Foo(X, instance_sizeof(Int32))"
  parses "Foo(X, instance_sizeof(Int32))"
-  parses "foo[\n1\n]"
  parses "foo[\n1\n]"
-  parses "f.x **= 2"
  parses "f.x **= 2"
-  says syntax error on "*a if true = 2"
  says syntax error on "*a if true = 2"
-  parses "Foo?"
  parses "Foo?"
-  parses "a = 1; a +=\n1"
  parses "a = 1; a +=\n1"
-  says syntax error on "yield break"
  says syntax error on "yield break"
-  parses "foo = 1; foo {}"
  parses "foo = 1; foo {}"
-  parses "foo %i()"
  parses "foo %i()"
-  parses "foo(a: n < 2)"
  parses "foo(a: n < 2)"
-  parses "def +; end;"
  parses "def +; end;"
-  says syntax error on "next % 1"
  says syntax error on "next % 1"
-  parses "def foo\n1\nend"
  parses "def foo\n1\nend"
-  parses "def foo(@[Foo] @[Bar] var : Int32); end"
  parses "def foo(@[Foo] @[Bar] var : Int32); end"
-  parses "asm(\"nop\" ::)"
  parses "asm(\"nop\" ::)"
-  parses "macro x\n%{}\nend"
  parses "macro x\n%{}\nend"
-  parses "lib LibC\nfun getchar : (->)?\nend"
  parses "lib LibC\nfun getchar : (->)?\nend"
-  says syntax error on "def is_a?; end"
  says syntax error on "def is_a?; end"
-  says syntax error on "def foo(foo unless); end"
  says syntax error on "def foo(foo unless); end"
-  parses "def foo(x @@alias); end"
  parses "def foo(x @@alias); end"
-  says syntax error on "foo { |(class)| }"
  says syntax error on "foo { |(class)| }"
-  parses "1.!(\n)"
  parses "1.!(\n)"
-  parses "foo%i"
  parses "foo%i"
-  says syntax error on "foo &.&&()"
  says syntax error on "foo &.&&()"
-  says syntax error on "<<-'HERE\n"
  says syntax error on "<<-'HERE\n"
-  parses "lib LibC\nfun getch = \"get.char\" : Int32\nend"
  parses "lib LibC\nfun getch = \"get.char\" : Int32\nend"
-  says syntax error on "a = return"
  says syntax error on "a = return"
-  parses "def foo(x @out); end"
  parses "def foo(x @out); end"
-  parses "a = 1; a /= 1"
  parses "a = 1; a /= 1"
-  parses "a.b &=\n1"
  parses "a.b &=\n1"
-  parses "->Foo.&(Int32)"
  parses "->Foo.&(Int32)"
-  parses "def self.!~; end;"
  parses "def self.!~; end;"
-  says syntax error on "{a[]: 1}"
  says syntax error on "{a[]: 1}"
-  parses "def foo(@@yield); end"
  parses "def foo(@@yield); end"
-  parses "foo(a: n / 2)"
  parses "foo(a: n / 2)"
-  says syntax error on "foo { |(a b)| }"
  says syntax error on "foo { |(a b)| }"
-  parses "macro -;end"
  parses "macro -;end"
-  parses "foo = 1; b = 2; foo -b"
  parses "foo = 1; b = 2; foo -b"
-  parses "next *1"
  parses "next *1"
-  parses "def foo(x @@while); end"
  parses "def foo(x @@while); end"
-  parses "def foo(x @begin); end"
  parses "def foo(x @begin); end"
-  says syntax error on "foo **bar, *x"
  says syntax error on "foo **bar, *x"
-  parses "abstract def foo; 1"
  parses "abstract def foo; 1"
-  parses "Foo(x: U, y: V)"
  parses "Foo(x: U, y: V)"
-  says syntax error on "def foo(foo lib); end"
  says syntax error on "def foo(foo lib); end"
-  parses "return 1, *2"
  parses "return 1, *2"
-  says syntax error on "case 1 == 1; when 2 a; end"
  says syntax error on "case 1 == 1; when 2 a; end"
-  says syntax error on "break.as(Int32)"
  says syntax error on "break.as(Int32)"
-  parses "property require : Int32"
  parses "property require : Int32"
-  parses "macro foo;var if true;end"
  parses "macro foo;var if true;end"
-  parses "*a = 1"
  parses "*a = 1"
-  parses "def foo(x @unless); end"
  parses "def foo(x @unless); end"
-  parses "foo(0, n | 2)"
  parses "foo(0, n | 2)"
-  parses "def foo(@alias); end"
  parses "def foo(@alias); end"
-  parses "macro *;end"
  parses "macro *;end"
-  says syntax error on "[\n\"foo\"\n\"bar\"\n]"
  says syntax error on "[\n\"foo\"\n\"bar\"\n]"
-  says syntax error on "foo(break)"
  says syntax error on "foo(break)"
-  says syntax error on "break << 1"
  says syntax error on "break << 1"
-  parses "def foo(x : U) forall U; end"
  parses "def foo(x : U) forall U; end"
-  parses "n << 2"
  parses "n << 2"
-  says syntax error on "def foo(enum); end"
  says syntax error on "def foo(enum); end"
-  parses "{% begin %}%r{\\A}{% end %}"
  parses "{% begin %}%r{\\A}{% end %}"
-  global regex match data
-    says syntax error on "$99999999999999999999999?"
    says syntax error on "$99999999999999999999999?"
-    parses "$?"
    parses "$?"
-    says syntax error on "$0, $1 = [1, 2]"
    says syntax error on "$0, $1 = [1, 2]"
-    parses "$? = 1"
    parses "$? = 1"
-    parses "$~ = 1"
    parses "$~ = 1"
-    parses "$?.foo"
    parses "$?.foo"
-    parses "$1"
    parses "$1"
-    says syntax error on "$0, a = {1, 2}"
    says syntax error on "$0, a = {1, 2}"
-    parses "$~.foo"
    parses "$~.foo"
-    parses "foo $?"
    parses "foo $?"
-    parses "$1?"
    parses "$1?"
-    parses "foo $1"
    parses "foo $1"
-    says syntax error on "$0 = 1"
    says syntax error on "$0 = 1"
-    parses "$~"
    parses "$~"
-    parses "$0"
    parses "$0"
-    says syntax error on "$2147483648"
    says syntax error on "$2147483648"
-  parses "property if : Int32"
  parses "property if : Int32"
-  parses "foo(0, n % 2)"
  parses "foo(0, n % 2)"
-  parses "[1,\n 2,]"
  parses "[1,\n 2,]"
-  parses "->Foo.[]=(Int32)"
  parses "->Foo.[]=(Int32)"
-  parses "foo(0, n &* 2)"
  parses "foo(0, n &* 2)"
-  parses "as(Bar)"
  parses "as(Bar)"
-  says syntax error on "foo { |(true)| }"
  says syntax error on "foo { |(true)| }"
-  parses "(1; 2; 3)"
  parses "(1; 2; 3)"
-  says syntax error on "def foo 1; end"
  says syntax error on "def foo 1; end"
-  parses "def ===(); end"
  parses "def ===(); end"
-  parses "a : Foo"
  parses "a : Foo"
-  parses "instance_sizeof(\n  Int32\n)"
  parses "instance_sizeof(\n  Int32\n)"
-  parses "lib LibC; fun foo(a : Int*); end"
  parses "lib LibC; fun foo(a : Int*); end"
-  parses "def foo(@case); end"
  parses "def foo(@case); end"
-  parses "case 1; when 0, 1; 2; else; 3; end"
  parses "case 1; when 0, 1; 2; else; 3; end"
-  parses "def foo; yield 1; yield; end"
  parses "def foo; yield 1; yield; end"
-  parses "a = 1; b = 2; c = 3; a-b -c"
  parses "a = 1; b = 2; c = 3; a-b -c"
-  parses "lib LibC; struct Foo; x : Int; y : Float; end end"
  parses "lib LibC; struct Foo; x : Int; y : Float; end end"
-  parses "puts %i(one two)"
  parses "puts %i(one two)"
-  parses "def ~(); end;"
  parses "def ~(); end;"
-  parses "fun : Int32"
  parses "fun : Int32"
-  says syntax error on "break - 1"
  says syntax error on "break - 1"
-  parses "foo &.block[0]"
  parses "foo &.block[0]"
-  parses "case :foo; when :bar; 2; end"
  parses "case :foo; when :bar; 2; end"
-  parses "def !~(); end;"
  parses "def !~(); end;"
-  says syntax error on "foo { |extend| }"
  says syntax error on "foo { |extend| }"
-  says syntax error on "def foo(foo self); end"
  says syntax error on "def foo(foo self); end"
-  says syntax error on "def foo(def); end"
  says syntax error on "def foo(def); end"
-  parses "call(foo : A, end : B)"
  parses "call(foo : A, end : B)"
-  parses "foo.| do end"
  parses "foo.| do end"
-  parses "foo(0, n &- 2)"
  parses "foo(0, n &- 2)"
-  parses "\"foo\#{\"bar\"}baz\""
  parses "\"foo\#{\"bar\"}baz\""
-  parses "foo 1, a: 1, b: 2\n1"
  parses "foo 1, a: 1, b: 2\n1"
-  parses "foo.** do end"
  parses "foo.** do end"
-  parses "foo % x()"
  parses "foo % x()"
-  parses "foo.<=(1, 2)"
  parses "foo.<=(1, 2)"
-  parses "lib LibC\nfun SomeFun\nend"
  parses "lib LibC\nfun SomeFun\nend"
-  parses "def ==(*args, **opts, &); end"
  parses "def ==(*args, **opts, &); end"
-  sets correct location of annotation in lib
  sets correct location of annotation in lib
-  says syntax error on "{{ {{ 1 }} }}"
  says syntax error on "{{ {{ 1 }} }}"
-  says syntax error on "{one: :two, three: :four} of Symbol => Symbol"
  says syntax error on "{one: :two, three: :four} of Symbol => Symbol"
-  parses "<<-HERE\n   One\n  Zero\n  HERE"
  parses "<<-HERE\n   One\n  Zero\n  HERE"
-  parses "<<-HERE\n  foo\#{1}bar\n   baz\n  HERE"
  parses "<<-HERE\n  foo\#{1}bar\n   baz\n  HERE"
-  parses "macro |;end"
  parses "macro |;end"
-  parses "lib LibC\n@[Bar]; end"
  parses "lib LibC\n@[Bar]; end"
-  parses "class Foo(T); end"
  parses "class Foo(T); end"
-  says syntax error on "def foo(until); end"
  says syntax error on "def foo(until); end"
-  parses "foo /a/"
  parses "foo /a/"
-  parses "foo.% do end"
  parses "foo.% do end"
-  parses "next *1, 2"
  parses "next *1, 2"
-  parses "foo = 1; ->foo.foo="
  parses "foo = 1; ->foo.foo="
-  parses "asm(\n\"nop\"\n:\n\"a\"(0)\n:\n\"b\"(1),\n\"c\"(2)\n)"
  parses "asm(\n\"nop\"\n:\n\"a\"(0)\n:\n\"b\"(1),\n\"c\"(2)\n)"
-  parses "def foo(@@var); end"
  parses "def foo(@@var); end"
-  parses "asm(\"nop\" : : )"
  parses "asm(\"nop\" : : )"
-  says syntax error on "foo { |typeof| }"
  says syntax error on "foo { |typeof| }"
-  says syntax error on "foo { |(struct)| }"
  says syntax error on "foo { |(struct)| }"
-  says syntax error on "fun Foo : Int64\nend"
  says syntax error on "fun Foo : Int64\nend"
-  parses "macro foo;bar{% if x %}body{% elsif y %}body2{% else %}body3{%end%}baz;end"
  parses "macro foo;bar{% if x %}body{% elsif y %}body2{% else %}body3{%end%}baz;end"
-  parses "<<-FOO\n\t 1\n\t FOO"
  parses "<<-FOO\n\t 1\n\t FOO"
-  parses "->@@foo.foo="
  parses "->@@foo.foo="
-  parses "lib LibC; type A = B.class; end"
  parses "lib LibC; type A = B.class; end"
-  parses "rescue : Int32"
  parses "rescue : Int32"
-  says syntax error on "def foo(x, *); 1; end"
  says syntax error on "def foo(x, *); 1; end"
-  parses "foo[0] = 1 if 2"
  parses "foo[0] = 1 if 2"
-  parses "%r(/)"
  parses "%r(/)"
-  says syntax error on "def foo(out); end"
  says syntax error on "def foo(out); end"
-  parses "foo &.+(2)"
  parses "foo &.+(2)"
-  parses "return 1, 2"
  parses "return 1, 2"
-  parses "a = 1\ncase 1\nwhen a then 1\nend"
  parses "a = 1\ncase 1\nwhen a then 1\nend"
-  says syntax error on "{a: 1, \"\": 2}"
  says syntax error on "{a: 1, \"\": 2}"
-  parses "foo.^ do end"
  parses "foo.^ do end"
-  parses "def foo(@@lib); end"
  parses "def foo(@@lib); end"
-  says syntax error on " {1, 2, 3 end"
  says syntax error on " {1, 2, 3 end"
-  parses "foo.%(1, 2) { 3 }"
  parses "foo.%(1, 2) { 3 }"
-  says syntax error on "class Foo(T, U V)"
  says syntax error on "class Foo(T, U V)"
-  parses "Int"
  parses "Int"
-  says syntax error on "def foo(**x, &x); end"
  says syntax error on "def foo(**x, &x); end"
-  parses "def type(type); end"
  parses "def type(type); end"
-  parses "1 / -2"
  parses "1 / -2"
-  parses "foo bar.baz(1) do\nend"
  parses "foo bar.baz(1) do\nend"
-  parses "asm(\"nop\" \n)"
  parses "asm(\"nop\" \n)"
-  says syntax error on "require 1"
  says syntax error on "require 1"
-  parses "foo(Bar) { 1 }"
  parses "foo(Bar) { 1 }"
-  parses "foo x, y do\nend"
  parses "foo x, y do\nend"
-  parses "foo.!~(1, 2)"
  parses "foo.!~(1, 2)"
-  parses "lib LibC; fun foo : Int*; end"
  parses "lib LibC; fun foo : Int*; end"
-  parses "{% begin %}%i| %s |{% end %}"
  parses "{% begin %}%i| %s |{% end %}"
-  parses "abstract struct Foo; end"
  parses "abstract struct Foo; end"
-  parses "1 .. 2"
  parses "1 .. 2"
-  parses "def <=; end;"
  parses "def <=; end;"
-  parses "f ->{ a do\n end\n }"
  parses "f ->{ a do\n end\n }"
-  parses "def foo(@@break); end"
  parses "def foo(@@break); end"
-  parses "@a = uninitialized Foo"
  parses "@a = uninitialized Foo"
-  parses ":<="
  parses ":<="
-  parses "foo.bar.as(Bar)"
  parses "foo.bar.as(Bar)"
-  parses "yield if true"
  parses "yield if true"
-  parses "foo.< do end"
  parses "foo.< do end"
-  parses "foo(0, n - 2)"
  parses "foo(0, n - 2)"
-  says syntax error on "{a: 1, a: 2}"
  says syntax error on "{a: 1, a: 2}"
-  parses "Foo(\n)"
  parses "Foo(\n)"
-  parses "  def foo(\n    @[Foo]\n    id : Int32,\n    @[Bar] name : String\n  ); end"
  parses "  def foo(\n    @[Foo]\n    id : Int32,\n    @[Bar] name : String\n  ); end"
-  parses "->::foo?"
  parses "->::foo?"
-  parses "def foo(x @alias); end"
  parses "def foo(x @alias); end"
-  parses "macro <;end"
  parses "macro <;end"
-  says syntax error on "foo **bar, out x"
  says syntax error on "foo **bar, out x"
-  says syntax error on "def foo(include); end"
  says syntax error on "def foo(include); end"
-  says syntax error on "1 while 3"
  says syntax error on "1 while 3"
-  parses "foo a: 1, b: 2"
  parses "foo a: 1, b: 2"
-  parses "def foo(@self); end"
  parses "def foo(@self); end"
-  parses "foo % r()"
  parses "foo % r()"
-  parses "a = 1; a ||= 1"
  parses "a = 1; a ||= 1"
-  parses "def self./; end;"
  parses "def self./; end;"
-  parses "def !=; end;"
  parses "def !=; end;"
-  parses "yield 1"
  parses "yield 1"
-  parses "foo.^"
  parses "foo.^"
-  parses "/ /\n/ /"
  parses "/ /\n/ /"
-  parses "foo.!= 1, 2"
  parses "foo.!= 1, 2"
-  says syntax error on "foo { |lib| }"
  says syntax error on "foo { |lib| }"
-  parses "->foo(Int32, Float64)"
  parses "->foo(Int32, Float64)"
-  parses "begin; 1; rescue; 2; else; 3; end"
  parses "begin; 1; rescue; 2; else; 3; end"
-  parses "macro &;end"
  parses "macro &;end"
-  parses "1 <= 2 <= 3"
  parses "1 <= 2 <= 3"
-  parses "property else : Int32"
  parses "property else : Int32"
-  parses "foo begin\nbar do\nend\nend"
  parses "foo begin\nbar do\nend\nend"
-  parses "Foo(X: U, Y: V)"
  parses "Foo(X: U, Y: V)"
-  says syntax error on "{foo: 1, bar: 2\nbaz: 3}"
  says syntax error on "{foo: 1, bar: 2\nbaz: 3}"
-  parses "def foo(x @@class); end"
  parses "def foo(x @@class); end"
-  parses "x : *T -> R"
  parses "x : *T -> R"
-  parses "1 ? a : b"
  parses "1 ? a : b"
-  parses "<<-HERE\n   One\n\n  Zero\n  HERE"
  parses "<<-HERE\n   One\n\n  Zero\n  HERE"
-  parses "foo(0, n < 2)"
  parses "foo(0, n < 2)"
-  parses "1 / 2"
  parses "1 / 2"
-  says syntax error on "macro foo(x, *); 1; end"
  says syntax error on "macro foo(x, *); 1; end"
-  parses "property alias : Int32"
  parses "property alias : Int32"
-  parses "next"
  parses "next"
-  says syntax error on "x++"
  says syntax error on "x++"
-  parses "Foo({String, ->})"
  parses "Foo({String, ->})"
-  parses "def =~; end;"
  parses "def =~; end;"
-  says syntax error on "def foo(alias); end"
  says syntax error on "def foo(alias); end"
-  parses "def foo(x @@struct); end"
  parses "def foo(x @@struct); end"
-  parses "foo.>=(1, 2)"
  parses "foo.>=(1, 2)"
-  says syntax error on "*a, b, c, d, e = 1, 2"
  says syntax error on "*a, b, c, d, e = 1, 2"
-  parses "def foo(var : (Int, Float -> Double)); end"
  parses "def foo(var : (Int, Float -> Double)); end"
-  parses "def foo(x @@with); end"
  parses "def foo(x @@with); end"
-  parses "def foo(&block : Int ->\n); end"
  parses "def foo(&block : Int ->\n); end"
-  parses "property false : Int32"
  parses "property false : Int32"
-  parses "def foo; 1; 2; end"
  parses "def foo; 1; 2; end"
-  says syntax error on "def foo(foo protected); end"
  says syntax error on "def foo(foo protected); end"
-  parses "def foo(macro foo); end"
  parses "def foo(macro foo); end"
-  parses "def self.<(); end;"
  parses "def self.<(); end;"
-  parses "def foo(@@offsetof); end"
  parses "def foo(@@offsetof); end"
-  parses "class : Int32"
  parses "class : Int32"
-  says syntax error on "foo &.&&"
  says syntax error on "foo &.&&"
-  parses "{% begin %}%Q< %s >{% end %}"
  parses "{% begin %}%Q< %s >{% end %}"
-  parses "def foo;bar(end: 1);end"
  parses "def foo;bar(end: 1);end"
-  parses "\"hello \" \\\n \"world\""
  parses "\"hello \" \\\n \"world\""
-  says syntax error on "def foo(yield); end"
  says syntax error on "def foo(yield); end"
-  parses "macro foo;bar{% unless x %}body{% end %}baz;end"
  parses "macro foo;bar{% unless x %}body{% end %}baz;end"
-  parses "foo(n / 2)"
  parses "foo(n / 2)"
-  parses "def foo(@@asm); end"
  parses "def foo(@@asm); end"
-  parses "lib LibC\nfun getchar(a : Int)\nend"
  parses "lib LibC\nfun getchar(a : Int)\nend"
-  parses "1_i64"
  parses "1_i64"
-  parses "fun foo(x : Int32) : Int64\nx\nend"
  parses "fun foo(x : Int32) : Int64\nx\nend"
-  says syntax error on "fun foo\nFoo = 1"
  says syntax error on "fun foo\nFoo = 1"
-  says syntax error on "def foo!=; end"
  says syntax error on "def foo!=; end"
-  says syntax error on "/foo)/"
  says syntax error on "/foo)/"
-  parses "<<-HERE\nHello, mom! I am HERE.\nHER dress is beautiful.\nHE is OK.\n  HERESY\nHERE"
  parses "<<-HERE\nHello, mom! I am HERE.\nHER dress is beautiful.\nHE is OK.\n  HERESY\nHERE"
-  parses "->Foo.+(Int32)"
  parses "->Foo.+(Int32)"
-  parses "foo = 1; ->foo.[](Int32)"
  parses "foo = 1; ->foo.[](Int32)"
-  parses "def foo(@[Foo] **args); end"
  parses "def foo(@[Foo] **args); end"
-  parses "::Foo{\"x\" => \"y\"}"
  parses "::Foo{\"x\" => \"y\"}"
-  parses "foo(x: result : Int32); result"
  parses "foo(x: result : Int32); result"
-  parses "a.b &-=\n1"
  parses "a.b &-=\n1"
-  parses "a ?\n              b ? b1 : b2\n              : c ? 3\n              : 0"
  parses "a ?\n              b ? b1 : b2\n              : c ? 3\n              : 0"
-  parses "def foo(x @until); end"
  parses "def foo(x @until); end"
-  parses "a : Foo | Int32"
  parses "a : Foo | Int32"
-  says syntax error on "while next; end"
  says syntax error on "while next; end"
-  parses "foo(*bar)"
  parses "foo(*bar)"
-  parses "{% begin %}%q( %s ){% end %}"
  parses "{% begin %}%q( %s ){% end %}"
-  parses "lib LibC; struct Foo; include Bar; end; end"
  parses "lib LibC; struct Foo; include Bar; end; end"
-  says syntax error on "{1 2}"
  says syntax error on "{1 2}"
-  says syntax error on "pointerof(self)"
  says syntax error on "pointerof(self)"
-  parses "def !=(*args, **opts); end"
  parses "def !=(*args, **opts); end"
-  parses "def foo(@protected); end"
  parses "def foo(@protected); end"
-  parses "def foo;{{@type}};end"
  parses "def foo;{{@type}};end"
-  parses "{% begin %}%x[ %s ]{% end %}"
  parses "{% begin %}%x[ %s ]{% end %}"
-  parses "a = 1; a rescue a"
  parses "a = 1; a rescue a"
-  parses "asm(\n\"nop\"\n:\n\"a\"(0),\n\"b\"(1)\n:\n\"c\"(2),\n\"d\"(3)\n)"
  parses "asm(\n\"nop\"\n:\n\"a\"(0),\n\"b\"(1)\n:\n\"c\"(2),\n\"d\"(3)\n)"
-  parses "case {1}\nin {_}; 2; end"
  parses "case {1}\nin {_}; 2; end"
-  parses "foo = 1; ->foo.<<(Int32)"
  parses "foo = 1; ->foo.<<(Int32)"
-  parses "foo(\n1)"
  parses "foo(\n1)"
-  parses "foo x, *bar"
  parses "foo x, *bar"
-  parses "foo &.block"
  parses "foo &.block"
-  parses "offsetof(X, 1)"
  parses "offsetof(X, 1)"
-  says syntax error on "{a: 1 b: 2}"
  says syntax error on "{a: 1 b: 2}"
-  parses "foo(a: 1\n)"
  parses "foo(a: 1\n)"
-  parses "property rescue : Int32"
  parses "property rescue : Int32"
-  parses "def self.===; end;"
  parses "def self.===; end;"
-  says syntax error on "foo[break]"
  says syntax error on "foo[break]"
-  says syntax error on "break | 1"
  says syntax error on "break | 1"
-  parses "macro foo; 1 + 2 {{ foo }} 3 + 4; end"
  parses "macro foo; 1 + 2 {{ foo }} 3 + 4; end"
-  parses "1 ? a : b ? c : 3"
  parses "1 ? a : b ? c : 3"
-  parses "@@foo/2"
  parses "@@foo/2"
-  says syntax error on "module Foo; require \"bar\"; end"
  says syntax error on "module Foo; require \"bar\"; end"
-  parses "->Foo.foo"
  parses "->Foo.foo"
-  parses "Foo({X, Y})"
  parses "Foo({X, Y})"
-  says syntax error on "return &+ 1"
  says syntax error on "return &+ 1"
-  says syntax error on "foo 1,"
  says syntax error on "foo 1,"
-  parses "lib LibC; struct Foo; end end"
  parses "lib LibC; struct Foo; end end"
-  parses "Foo(T)"
  parses "Foo(T)"
-  parses "/fo\\so/"
  parses "/fo\\so/"
-  parses "a = 1; a %= 1"
  parses "a = 1; a %= 1"
-  says syntax error on "foo { |class| }"
  says syntax error on "foo { |class| }"
-  parses "def foo(\"bar qux\" y); y; end"
  parses "def foo(\"bar qux\" y); y; end"
-  parses "def foo(sizeof foo); end"
  parses "def foo(sizeof foo); end"
-  parses "{\n{1}\n}"
  parses "{\n{1}\n}"
-  parses "foo(z: 0, a: n =~ 2)"
  parses "foo(z: 0, a: n =~ 2)"
-  says syntax error on "foo { |(case)| }"
  says syntax error on "foo { |(case)| }"
-  parses "1\n+2"
  parses "1\n+2"
-  says syntax error on "$foo :: Foo"
  says syntax error on "$foo :: Foo"
-  parses "{% begin %}%w( %s ){% end %}"
  parses "{% begin %}%w( %s ){% end %}"
-  says syntax error on "foo { |protected| }"
  says syntax error on "foo { |protected| }"
-  parses "def foo(a, &block : Int -> Double); end"
  parses "def foo(a, &block : Int -> Double); end"
-  parses "lib LibC\nfun getch = \"get.char\"\nend"
  parses "lib LibC\nfun getch = \"get.char\"\nend"
-  parses "def foo(nil foo); end"
  parses "def foo(nil foo); end"
-  parses "foo(z: 0, a: n << 2)"
  parses "foo(z: 0, a: n << 2)"
-  parses "__FILE__"
  parses "__FILE__"
-  parses "1.responds_to?(\n  :foo\n)"
  parses "1.responds_to?(\n  :foo\n)"
-  parses "case : Int32"
  parses "case : Int32"
-  parses "puts a if true"
  parses "puts a if true"
-  says syntax error on "a() = 1"
  says syntax error on "a() = 1"
-  parses "(a;\nb)"
  parses "(a;\nb)"
-  says syntax error on "A = foo(B = 1)"
  says syntax error on "A = foo(B = 1)"
-  parses "foo.is_a?(Foo | Bar)"
  parses "foo.is_a?(Foo | Bar)"
-  says syntax error on "unless next; end"
  says syntax error on "unless next; end"
-  parses "foo(bar:\"a\", baz:\"b\")"
  parses "foo(bar:\"a\", baz:\"b\")"
-  parses "a = 1; a ^=\n1"
  parses "a = 1; a ^=\n1"
-  parses "foo %q()"
  parses "foo %q()"
-  says syntax error on "return &* 1"
  says syntax error on "return &* 1"
-  parses "def foo(@@self); end"
  parses "def foo(@@self); end"
-  parses "def foo(@begin); end"
  parses "def foo(@begin); end"
-  parses "{% for x in y %}body{% end %}"
  parses "{% for x in y %}body{% end %}"
-  says syntax error on "foo { |enum| }"
  says syntax error on "foo { |enum| }"
-  parses "def >; end;"
  parses "def >; end;"
-  says syntax error on "break >> 1"
  says syntax error on "break >> 1"
-  parses "{% a = 1 if 2 %}"
  parses "{% a = 1 if 2 %}"
-  says syntax error on "return ? 1 : 2"
  says syntax error on "return ? 1 : 2"
-  parses "case {1, 2}\nwhen {.foo, .bar}\n5\nend"
  parses "case {1, 2}\nwhen {.foo, .bar}\n5\nend"
-  parses "def foo(var : self*); end"
  parses "def foo(var : self*); end"
-  says syntax error on "def foo=(**kwargs); end"
  says syntax error on "def foo=(**kwargs); end"
-  parses "1 if /x/"
  parses "1 if /x/"
-  says syntax error on "def foo(x @x); 1; end"
  says syntax error on "def foo(x @x); 1; end"
-  says syntax error on "{\"x\": [] of Int32,\n}\n1.foo("
  says syntax error on "{\"x\": [] of Int32,\n}\n1.foo("
-  parses "/=/"
  parses "/=/"
-  parses "def foo(@yield); end"
  parses "def foo(@yield); end"
-  parses "Foo.bar x.y do\nend"
  parses "Foo.bar x.y do\nend"
-  parses "foo do\n//\nend"
  parses "foo do\n//\nend"
-  says syntax error on "a = a"
  says syntax error on "a = a"
-  parses "def !=(*args, **opts, &); end"
  parses "def !=(*args, **opts, &); end"
-  parses "macro //;end"
  parses "macro //;end"
-  says syntax error on "a = 1, b = 2"
  says syntax error on "a = 1, b = 2"
-  parses "def foo(include foo); end"
  parses "def foo(include foo); end"
-  parses "self"
  parses "self"
-  parses "def foo(x = __FILE__); end"
  parses "def foo(x = __FILE__); end"
-  parses "def foo(x @self); end"
  parses "def foo(x @self); end"
-  parses "Foo(Bar(T | U))"
  parses "Foo(Bar(T | U))"
-  parses "foo(n &** 2)"
  parses "foo(n &** 2)"
-  parses "def self.foo\n1\nend"
  parses "def self.foo\n1\nend"
-  says syntax error on "class Foo; require \"bar\"; end"
  says syntax error on "class Foo; require \"bar\"; end"
-  parses "def foo(@@case); end"
  parses "def foo(@@case); end"
-  parses "def <=(); end;"
  parses "def <=(); end;"
-  says syntax error on "offsetof(X, 1.0)"
  says syntax error on "offsetof(X, 1.0)"
-  parses "def foo(@@next); end"
  parses "def foo(@@next); end"
-  parses "def foo(x @@end); end"
  parses "def foo(x @@end); end"
-  parses "def foo(x @include); end"
  parses "def foo(x @include); end"
-  parses "{A::B => 1, C::D => 2}"
  parses "{A::B => 1, C::D => 2}"
-  parses "def foo(x @asm); end"
  parses "def foo(x @asm); end"
-  says syntax error on "@@foo :: Foo"
  says syntax error on "@@foo :: Foo"
-  parses "def foo(x, **args)\n1\nend"
  parses "def foo(x, **args)\n1\nend"
-  says syntax error on "def foo(**args = 1); end"
  says syntax error on "def foo(**args = 1); end"
-  parses "foo &.as?(T).bar"
  parses "foo &.as?(T).bar"
-  parses "yield foo do\nend"
  parses "yield foo do\nend"
-  parses "foo(out x); x"
  parses "foo(out x); x"
-  parses "f.x %= 2"
  parses "f.x %= 2"
-  parses "def =~; end"
  parses "def =~; end"
-  parses "foo.bar = (1).abs"
  parses "foo.bar = (1).abs"
-  parses "/ /; / /"
  parses "/ /; / /"
-  parses "{% begin %}%Q( %s ){% end %}"
  parses "{% begin %}%Q( %s ){% end %}"
-  parses "begin\n/ /\nend"
  parses "begin\n/ /\nend"
-  parses "foo.<"
  parses "foo.<"
-  parses "{% begin %}%q| %s |{% end %}"
  parses "{% begin %}%q| %s |{% end %}"
-  parses "+1_i64"
  parses "+1_i64"
-  parses "foo +1"
  parses "foo +1"
-  parses "protected def foo; end"
  parses "protected def foo; end"
-  parses "<<-FOO\n\t1\n\tFOO"
  parses "<<-FOO\n\t1\n\tFOO"
-  parses "macro foo;if var;true;end;end"
  parses "macro foo;if var;true;end;end"
-  parses "1 && 2"
  parses "1 && 2"
-  says syntax error on "case break; when 1; end; end"
  says syntax error on "case break; when 1; end; end"
-  parses "Foo()"
  parses "Foo()"
-  says syntax error on "a.b {}, c = 1"
  says syntax error on "a.b {}, c = 1"
-  parses "foo &.!"
  parses "foo &.!"
-  parses ":\"\\\\foo\""
  parses ":\"\\\\foo\""
-  parses "def foo; end; if false; 1; else; 2; end"
  parses "def foo; end; if false; 1; else; 2; end"
-  parses "def foo(@@out); end"
  parses "def foo(@@out); end"
-  parses "lib LibC; struct Foo; {% if 1 %}2{% end %}; end; end"
  parses "lib LibC; struct Foo; {% if 1 %}2{% end %}; end; end"
-  parses "f.x &-= 2"
  parses "f.x &-= 2"
-  says syntax error on "return >= 1"
  says syntax error on "return >= 1"
-  parses "foo % i()"
  parses "foo % i()"
-  parses "def foo(begin foo); end"
  parses "def foo(begin foo); end"
-  parses "def ==(*args, **opts); end"
  parses "def ==(*args, **opts); end"
-  parses "foo.>= do end"
  parses "foo.>= do end"
-  says syntax error on "def foo\ndef\nend"
  says syntax error on "def foo\ndef\nend"
-  parses "foo(\na: 1,\n)"
  parses "foo(\na: 1,\n)"
-  parses "def foo(x @select); end"
  parses "def foo(x @select); end"
-  parses "foo.%(1, 2)"
  parses "foo.%(1, 2)"
-  parses "foo(a: n % 2)"
  parses "foo(a: n % 2)"
-  parses "{{ //.options }}"
  parses "{{ //.options }}"
-  parses "x[+ 1]"
  parses "x[+ 1]"
-  parses "Foo.foo(count: 3).bar { }"
  parses "Foo.foo(count: 3).bar { }"
-  parses "def foo(offsetof foo); end"
  parses "def foo(offsetof foo); end"
-  parses "a, *b = 1"
  parses "a, *b = 1"
-  parses "foo.==="
  parses "foo.==="
-  parses "begin; rescue; end"
  parses "begin; rescue; end"
-  parses "case {1, 2}\nwhen {3, 4}, {5, 6}\n7\nend"
  parses "case {1, 2}\nwhen {3, 4}, {5, 6}\n7\nend"
-  parses "foo(a: n &- 2)"
  parses "foo(a: n &- 2)"
-  parses "foo = 1; ->foo.foo!"
  parses "foo = 1; ->foo.foo!"
-  parses ":!"
  parses ":!"
-  parses "def foo(var : Int, Float -> Double); end"
  parses "def foo(var : Int, Float -> Double); end"
-  parses "break"
  parses "break"
-  parses "macro foo(x); 1 + 2; end"
  parses "macro foo(x); 1 + 2; end"
-  parses "property begin : Int32"
  parses "property begin : Int32"
-  parses ":|"
  parses ":|"
-  parses "Foo({*X, *{Y}})"
  parses "Foo({*X, *{Y}})"
-  parses "def foo(x @var); end"
  parses "def foo(x @var); end"
-  sets correct location of splat in multiple assignment
  sets correct location of splat in multiple assignment
-  parses "while true; 1; end;"
  parses "while true; 1; end;"
-  parses "typeof : Int32"
  parses "typeof : Int32"
-  says syntax error on "next - 1"
  says syntax error on "next - 1"
-  parses "foo a: 1, &block"
  parses "foo a: 1, &block"
-  parses "case {1}\nin {true}; 2; end"
  parses "case {1}\nin {true}; 2; end"
-  parses "[] of ->\n"
  parses "[] of ->\n"
-  parses "a.b %=\n1"
  parses "a.b %=\n1"
-  parses "n == 2"
  parses "n == 2"
-  parses "foo.==(1, 2) { 3 }"
  parses "foo.==(1, 2) { 3 }"
-  says syntax error on "x, self = 1, 2"
  says syntax error on "x, self = 1, 2"
-  parses "def foo(@@module); end"
  parses "def foo(@@module); end"
-  says syntax error on "def Foo(Int32).bar;end"
  says syntax error on "def Foo(Int32).bar;end"
-  parses "1;-2"
  parses "1;-2"
-  parses "foo.[]=(1, 2) { 3 }"
  parses "foo.[]=(1, 2) { 3 }"
-  parses "def downto(n)\n1\nend"
  parses "def downto(n)\n1\nend"
-  says syntax error on "foo { |(out)| }"
  says syntax error on "foo { |(out)| }"
-  parses "def foo(@module); end"
  parses "def foo(@module); end"
-  parses "n - 2"
  parses "n - 2"
-  parses "begin; 1; rescue ::Foo; 2; end"
  parses "begin; 1; rescue ::Foo; 2; end"
-  parses "a; if / /; / /; elsif / /; / /; end"
  parses "a; if / /; / /; elsif / /; / /; end"
-  says syntax error on "foo { |if| }"
  says syntax error on "foo { |if| }"
-  says syntax error on "a = next"
  says syntax error on "a = next"
-  parses "->(x : Int32) : Int32 { }"
  parses "->(x : Int32) : Int32 { }"
-  parses "def self.^(); end;"
  parses "def self.^(); end;"
-  parses "foo.!=(1, 2)"
  parses "foo.!=(1, 2)"
-  says syntax error on "*a == 1"
  says syntax error on "*a == 1"
-  says syntax error on "unless 1 == 1 a; end"
  says syntax error on "unless 1 == 1 a; end"
-  parses "->foo(Void*)"
  parses "->foo(Void*)"
-  parses "foo(**bar)"
  parses "foo(**bar)"
-  parses "def foo(@select); end"
  parses "def foo(@select); end"
-  parses "def foo; x { |a| a }; end"
  parses "def foo; x { |a| a }; end"
-  says syntax error on "macro foo(\"\" y); end"
  says syntax error on "macro foo(\"\" y); end"
-  parses "module Foo(*T); end"
  parses "module Foo(*T); end"
-  parses "macro : Int32"
  parses "macro : Int32"
-  parses "else : Int32"
  parses "else : Int32"
-  parses "sizeof : Int32"
  parses "sizeof : Int32"
-  parses "foo(0, n << 2)"
  parses "foo(0, n << 2)"
-  parses "x.y=(1).to_s"
  parses "x.y=(1).to_s"
-  says syntax error on "a = 1; a += return"
  says syntax error on "a = 1; a += return"
-  parses "{% begin %}%i{ %s }{% end %}"
  parses "{% begin %}%i{ %s }{% end %}"
-  parses "%q{hello \\n world}"
  parses "%q{hello \\n world}"
-  parses "1 -\n2"
  parses "1 -\n2"
-  says syntax error on "return - 1"
  says syntax error on "return - 1"
-  says syntax error on "self, x = 1, 2"
  says syntax error on "self, x = 1, 2"
-  parses ":!="
  parses ":!="
-  parses "case {1}\nin {Int32}; 2; end"
  parses "case {1}\nin {Int32}; 2; end"
-  parses "a.b +=\n1"
  parses "a.b +=\n1"
-  parses "require : Int32"
  parses "require : Int32"
-  parses "def foo(@lib); end"
  parses "def foo(@lib); end"
-  says syntax error on "a, B = 1, 2"
  says syntax error on "a, B = 1, 2"
-  parses "def foo(x @pointerof); end"
  parses "def foo(x @pointerof); end"
-  parses "foo(0, n ^ 2)"
  parses "foo(0, n ^ 2)"
-  says syntax error on "foo(\"bar\" \"baz\")"
  says syntax error on "foo(\"bar\" \"baz\")"
-  says syntax error on "while return; end"
  says syntax error on "while return; end"
-  parses "property return : Int32"
  parses "property return : Int32"
-  parses "1.0_f32"
  parses "1.0_f32"
-  says syntax error on "next ** 1"
  says syntax error on "next ** 1"
-  parses "lib LibC; fun getchar(a : Int, b : Float) : Int; end"
  parses "lib LibC; fun getchar(a : Int, b : Float) : Int; end"
-  says syntax error on "return & 1"
  says syntax error on "return & 1"
-  says syntax error on "def foo(foo select); end"
  says syntax error on "def foo(foo select); end"
-  parses "foo(0, n >= 2)"
  parses "foo(0, n >= 2)"
-  parses "next : Int32"
  parses "next : Int32"
-  parses "def self.<; end;"
  parses "def self.<; end;"
-  parses "foo(n <= 2)"
  parses "foo(n <= 2)"
-  says syntax error on "def foo(asm); end"
  says syntax error on "def foo(asm); end"
-  parses "foo.*(1, 2) { 3 }"
  parses "foo.*(1, 2) { 3 }"
-  parses "def foo(@[Foo]  var); end"
  parses "def foo(@[Foo]  var); end"
-  parses "1 * -2"
  parses "1 * -2"
-  says syntax error on "def foo(private); end"
  says syntax error on "def foo(private); end"
-  parses "macro foo; 1 + 2 {{foo}} 3 + 4; end"
  parses "macro foo; 1 + 2 {{foo}} 3 + 4; end"
-  parses "->() { }"
  parses "->() { }"
-  parses "@a : Foo = 1"
  parses "@a : Foo = 1"
-  parses "{% begin %}%r|\\A|{% end %}"
  parses "{% begin %}%r|\\A|{% end %}"
-  says syntax error on "def foo :String\nend"
  says syntax error on "def foo :String\nend"
-  parses "{1 => 2 / 3}"
  parses "{1 => 2 / 3}"
-  parses "<<-SOME\n  Sa\n  Se\n  SOME"
  parses "<<-SOME\n  Sa\n  Se\n  SOME"
-  parses "*a, b = 1"
  parses "*a, b = 1"
-  parses "{% begin %}%x| %s |{% end %}"
  parses "{% begin %}%x| %s |{% end %}"
-  parses "abstract def foo\n1"
  parses "abstract def foo\n1"
-  parses "def ^(); end;"
  parses "def ^(); end;"
-  parses "/foo/m"
  parses "/foo/m"
-  parses "macro &-;end"
  parses "macro &-;end"
-  parses "foo %Q()"
  parses "foo %Q()"
-  parses "macro foo(@[Foo] *args);end"
  parses "macro foo(@[Foo] *args);end"
-  parses "1_i128"
  parses "1_i128"
-  says syntax error on "def foo() :String\nend"
  says syntax error on "def foo() :String\nend"
-  parses "foo(*{1})"
  parses "foo(*{1})"
-  parses "def foo(@pointerof); end"
  parses "def foo(@pointerof); end"
-  parses "foo.[]="
  parses "foo.[]="
-  says syntax error on "return / 1"
  says syntax error on "return / 1"
-  says syntax error on "class Foo(); end"
  says syntax error on "class Foo(); end"
-  parses "Foo(T?)"
  parses "Foo(T?)"
-  sets correct location of tuple type
  sets correct location of tuple type
-  parses "case 1\nin false; 2; end"
  parses "case 1\nin false; 2; end"
-  says syntax error on "def foo(var : Foo+); end"
  says syntax error on "def foo(var : Foo+); end"
-  says syntax error on "return == 1"
  says syntax error on "return == 1"
-  parses "alias Foo = Bar"
  parses "alias Foo = Bar"
-  says syntax error on "\"hello\" foo"
  says syntax error on "\"hello\" foo"
-  parses "def ===; end;"
  parses "def ===; end;"
-  parses "def foo(x @@false); end"
  parses "def foo(x @@false); end"
-  parses "def foo(&@block); end"
  parses "def foo(&@block); end"
-  parses "Foo(*T)"
  parses "Foo(*T)"
-  parses "def self.=~(); end;"
  parses "def self.=~(); end;"
-  parses "def foo(@@pointerof); end"
  parses "def foo(@@pointerof); end"
-  says syntax error on "break >= 1"
  says syntax error on "break >= 1"
-  says syntax error on "foo { |(instance_sizeof)| }"
  says syntax error on "foo { |(instance_sizeof)| }"
-  parses "foo[\nfoo[\n1\n]\n]"
  parses "foo[\nfoo[\n1\n]\n]"
-  parses "def foo(@@macro); end"
  parses "def foo(@@macro); end"
-  parses "->@foo.foo="
  parses "->@foo.foo="
-  parses "begin; 1; ensure; 2; end"
  parses "begin; 1; ensure; 2; end"
-  parses "def foo(var : self?); end"
  parses "def foo(var : self?); end"
-  parses "class Foo(T, *U); end"
  parses "class Foo(T, *U); end"
-  says syntax error on "@foo :: Foo"
  says syntax error on "@foo :: Foo"
-  parses "enum Foo; {% if 1 %}2{% end %}; end"
  parses "enum Foo; {% if 1 %}2{% end %}; end"
-  parses "{% begin %}%q[ %s ]{% end %}"
  parses "{% begin %}%q[ %s ]{% end %}"
-  parses "def foo(@@var); 1; end"
  parses "def foo(@@var); 1; end"
-  parses "Foo::Bar"
  parses "Foo::Bar"
-  parses "while true; end;"
  parses "while true; end;"
-  says syntax error on "foo { |(lib)| }"
  says syntax error on "foo { |(lib)| }"
-  parses "def foo(@out); end"
  parses "def foo(@out); end"
-  says syntax error on "case next; when 1; end; end"
  says syntax error on "case next; when 1; end; end"
-  parses "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2))"
  parses "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2))"
-  parses "macro foo(@[Foo] outer inner);end"
  parses "macro foo(@[Foo] outer inner);end"
-  parses "def foo(extend foo); end"
  parses "def foo(extend foo); end"
-  parses "macro &+;end"
  parses "macro &+;end"
-  parses "macro foo\n\"\\\\\"\nend"
  parses "macro foo\n\"\\\\\"\nend"
-  parses "lib LibC; fun foo : Int**; end"
  parses "lib LibC; fun foo : Int**; end"
-  parses "asm(\"nop\" : \"a\"(0))"
  parses "asm(\"nop\" : \"a\"(0))"
-  parses "def self.~(); end;"
  parses "def self.~(); end;"
-  says syntax error on "foo[1] = return"
  says syntax error on "foo[1] = return"
-  parses "foo(n - 2)"
  parses "foo(n - 2)"
-  parses "return *1"
  parses "return *1"
-  parses "def foo(@@protected); end"
  parses "def foo(@@protected); end"
-  says syntax error on "x { |*a, *b| }"
  says syntax error on "x { |*a, *b| }"
-  parses "\"foo\#{bar}baz\""
  parses "\"foo\#{bar}baz\""
-  parses "foo(n > 2)"
  parses "foo(n > 2)"
-  parses "lib LibC\nend"
  parses "lib LibC\nend"
-  parses "{A: 1, B: 2}"
  parses "{A: 1, B: 2}"
-  says syntax error on "a {} = 1"
  says syntax error on "a {} = 1"
-  parses "case 1; when x then 2; else; 3; end"
  parses "case 1; when x then 2; else; 3; end"
-  parses "{% begin %}%r(\\A){% end %}"
  parses "{% begin %}%r(\\A){% end %}"
-  parses "foo x do\n//\nend"
  parses "foo x do\n//\nend"
-  parses "def foo(a); a; end"
  parses "def foo(a); a; end"
-  parses "foo &.each do\nend"
  parses "foo &.each do\nend"
-  parses "foo = 1; ->foo.//(Int32)"
  parses "foo = 1; ->foo.//(Int32)"
-  parses "n % 2"
  parses "n % 2"
-  parses "def foo(x @macro); end"
  parses "def foo(x @macro); end"
-  parses "1.[]?(2)"
  parses "1.[]?(2)"
-  says syntax error on "foo { |pointerof| }"
  says syntax error on "foo { |pointerof| }"
-  says syntax error on "def foo(instance_sizeof); end"
  says syntax error on "def foo(instance_sizeof); end"
-  parses "foo +1_i64"
  parses "foo +1_i64"
-  says syntax error on "foo { |(abstract)| }"
  says syntax error on "foo { |(abstract)| }"
-  parses "lib LibC; Foo = 1; end"
  parses "lib LibC; Foo = 1; end"
-  parses "foo(n &+ 2)"
  parses "foo(n &+ 2)"
-  sets correct location of annotation on method parameter
  sets correct location of annotation on method parameter
-  parses ":~"
  parses ":~"
-  says syntax error on "next < 1"
  says syntax error on "next < 1"
-  parses "def foo(struct foo); end"
  parses "def foo(struct foo); end"
-  parses "1..;"
  parses "1..;"
-  says syntax error on "\n      lib LibFoo\n        fun foo(x : Int32\n              y : Float64)\n      end\n      "
  says syntax error on "\n      lib LibFoo\n        fun foo(x : Int32\n              y : Float64)\n      end\n      "
-  parses "nil"
  parses "nil"
-  parses "break 1"
  parses "break 1"
-  parses ":[]="
  parses ":[]="
-  parses "lib LibC\nfun getchar\nend"
  parses "lib LibC\nfun getchar\nend"
-  parses "def foo(in foo); end"
  parses "def foo(in foo); end"
-  parses "def foo(x @end); end"
  parses "def foo(x @end); end"
-  parses "->(x : Int32) { x }"
  parses "->(x : Int32) { x }"
-  parses "foo(z: 0, a: n &* 2)"
  parses "foo(z: 0, a: n &* 2)"
-  parses "/\\//"
  parses "/\\//"
-  parses "Foo({x: X, y: Y})"
  parses "Foo({x: X, y: Y})"
-  parses "{[] of Foo, Bar::Baz ** 2}"
  parses "{[] of Foo, Bar::Baz ** 2}"
-  parses "x, y = <<-FOO, <<-BAR\nhello\nFOO\nworld\nBAR"
  parses "x, y = <<-FOO, <<-BAR\nhello\nFOO\nworld\nBAR"
-  parses "def foo(private foo); end"
  parses "def foo(private foo); end"
-  parses "Foo({->})"
  parses "Foo({->})"
-  parses "Foo(\nT\n)"
  parses "Foo(\nT\n)"
-  says syntax error on "def foo(end); end"
  says syntax error on "def foo(end); end"
-  parses "def foo(lib foo); end"
  parses "def foo(lib foo); end"
-  says syntax error on "def foo(foo pointerof); end"
  says syntax error on "def foo(foo pointerof); end"
-  says syntax error on "foo { |out| }"
  says syntax error on "foo { |out| }"
-  says syntax error on "if 1 == 1 a; end"
  says syntax error on "if 1 == 1 a; end"
-  parses "def foo(if foo); end"
  parses "def foo(if foo); end"
-  parses "a\nwhile / /; / /; end"
  parses "a\nwhile / /; / /; end"
-  parses "def self.foo=()\n1\nend"
  parses "def self.foo=()\n1\nend"
-  parses "foo.<(1, 2)"
  parses "foo.<(1, 2)"
-  says syntax error on "until break; end"
  says syntax error on "until break; end"
-  parses "a = 1; a &-=\n1"
  parses "a = 1; a &-=\n1"
-  parses "def foo(break foo); end"
  parses "def foo(break foo); end"
-  parses "foo(z: 0, a: n + 2)"
  parses "foo(z: 0, a: n + 2)"
-  parses "yield"
  parses "yield"
-  parses "def foo(var : (Int, Float) -> Double); end"
  parses "def foo(var : (Int, Float) -> Double); end"
-  parses "def foo(until foo); end"
  parses "def foo(until foo); end"
-  parses "foo./ do end"
  parses "foo./ do end"
-  parses "def >=(other, file = 1); end"
  parses "def >=(other, file = 1); end"
-  says syntax error on "foo { |(private)| }"
  says syntax error on "foo { |(private)| }"
-  parses "lib LibC; enum Foo; A\nB; C\nD = 1; end end"
  parses "lib LibC; enum Foo; A\nB; C\nD = 1; end end"
-  says syntax error on "foo { |(typeof)| }"
  says syntax error on "foo { |(typeof)| }"
-  parses "begin; 1; rescue Foo | Bar; 2; end"
  parses "begin; 1; rescue Foo | Bar; 2; end"
-  parses ":foo"
  parses ":foo"
-  says syntax error on "foo x: 1, x: 1"
  says syntax error on "foo x: 1, x: 1"
-  parses "def foo(@@typeof); end"
  parses "def foo(@@typeof); end"
-  parses "f.x //= 2"
  parses "f.x //= 2"
-  parses "foo.bar=(*baz)"
  parses "foo.bar=(*baz)"
-  parses "module Foo; end"
  parses "module Foo; end"
-  parses "foo./ 1, 2"
  parses "foo./ 1, 2"
-  parses "property nil : Int32"
  parses "property nil : Int32"
-  parses "2.3_f32"
  parses "2.3_f32"
-  says syntax error on "next == 1"
  says syntax error on "next == 1"
-  says syntax error on "foo { |end| }"
  says syntax error on "foo { |end| }"
-  says syntax error on "def foo(x : U) forall U, U; end"
  says syntax error on "def foo(x : U) forall U, U; end"
-  says syntax error on "'''"
  says syntax error on "'''"
-  parses "property do : Int32"
  parses "property do : Int32"
-  parses "def `(cmd); 1; end"
  parses "def `(cmd); 1; end"
-  parses "Foo(typeof(1), typeof(2))"
  parses "Foo(typeof(1), typeof(2))"
-  parses "x[1, ..2]"
  parses "x[1, ..2]"
-  says syntax error on "\"foo\" \"bar\""
  says syntax error on "\"foo\" \"bar\""
-  parses "a = 1; a //=\n1"
  parses "a = 1; a //=\n1"
-  parses "def foo(@@sizeof); end"
  parses "def foo(@@sizeof); end"
-  parses "a = 1; a += 10 if a += 20"
  parses "a = 1; a += 10 if a += 20"
-  parses "my_def def foo\nloop do\nend\nend"
  parses "my_def def foo\nloop do\nend\nend"
-  parses "begin; 1; rescue ::Foo | ::Bar; 2; end"
  parses "begin; 1; rescue ::Foo | ::Bar; 2; end"
-  parses "lib LibC\nalias Foo = Bar\nend"
  parses "lib LibC\nalias Foo = Bar\nend"
-  parses "(bar do\nend)"
  parses "(bar do\nend)"
-  parses "def self.!~(); end;"
  parses "def self.!~(); end;"
-  parses "1 + 2"
  parses "1 + 2"
-  parses "Foo(\"foo bar\": U)"
  parses "Foo(\"foo bar\": U)"
-  parses "->Foo.&**(Int32)"
  parses "->Foo.&**(Int32)"
-  parses "foo = 1; foo(-1)"
  parses "foo = 1; foo(-1)"
-  parses "def foo(@class); end"
  parses "def foo(@class); end"
-  parses "enum Foo; {{1}}; end"
  parses "enum Foo; {{1}}; end"
-  parses "ensure : Int32"
  parses "ensure : Int32"
-  parses "/(fo\#{\"bar\"}\#{1}o)/"
  parses "/(fo\#{\"bar\"}\#{1}o)/"
-  parses "def foo(x @@module); end"
  parses "def foo(x @@module); end"
-  parses "foo(0, n <= 2)"
  parses "foo(0, n <= 2)"
-  says syntax error on "+next"
  says syntax error on "+next"
-  parses "foo.^ 1, 2"
  parses "foo.^ 1, 2"
-  says syntax error on "def foo(foo break); end"
  says syntax error on "def foo(foo break); end"
-  parses "def foo(a, b = a); end"
  parses "def foo(a, b = a); end"
-  parses "Foo({x: X})"
  parses "Foo({x: X})"
-  parses ":<<"
  parses ":<<"
-  says syntax error on "foo { |private| }"
  says syntax error on "foo { |private| }"
-  says syntax error on "foo { |(until)| }"
  says syntax error on "foo { |(until)| }"
-  says syntax error on "foo { |struct| }"
  says syntax error on "foo { |struct| }"
-  parses "Foo(X, instance_alignof(Int32))"
  parses "Foo(X, instance_alignof(Int32))"
-  parses "foo(a: n &* 2)"
  parses "foo(a: n &* 2)"
-  parses "begin; 1; rescue; 2; end"
  parses "begin; 1; rescue; 2; end"
-  parses "a = 1; b = 2; c = 3; a-b-c"
  parses "a = 1; b = 2; c = 3; a-b-c"
-  parses "instance_alignof(X)"
  parses "instance_alignof(X)"
-  parses "{% begin %}%q{ %s }{% end %}"
  parses "{% begin %}%q{ %s }{% end %}"
-  parses "case \nwhen 1\n2\nend"
  parses "case \nwhen 1\n2\nend"
-  parses "lib LibC; struct Foo; x : Int**; end end"
  parses "lib LibC; struct Foo; x : Int**; end end"
-  parses "{% begin %}%w| %s |{% end %}"
  parses "{% begin %}%w| %s |{% end %}"
-  says syntax error on "macro Foo;end"
  says syntax error on "macro Foo;end"
-  parses "1 - 2"
  parses "1 - 2"
-  parses "x([] of Foo, Bar.new)"
  parses "x([] of Foo, Bar.new)"
-  says syntax error on "foo { |def| }"
  says syntax error on "foo { |def| }"
-  parses "foo.% 1, 2"
  parses "foo.% 1, 2"
-  parses "foo.<= do end"
  parses "foo.<= do end"
-  parses "def foo(var : Int | Double); end"
  parses "def foo(var : Int | Double); end"
-  parses "begin; 1; 2; 3; end;"
  parses "begin; 1; 2; 3; end;"
-  parses "macro foo=;end"
  parses "macro foo=;end"
-  says syntax error on "next ^ 1"
  says syntax error on "next ^ 1"
-  says syntax error on "foo :: Foo"
  says syntax error on "foo :: Foo"
-  parses "foo.> do end"
  parses "foo.> do end"
-  parses "foo(n !~ 2)"
  parses "foo(n !~ 2)"
-  says syntax error on "macro foo.bar;end"
  says syntax error on "macro foo.bar;end"
-  parses "->Foo.-(Int32)"
  parses "->Foo.-(Int32)"
-  parses "def foo(x, *args, y = 2, w, z = 3); 1; end"
  parses "def foo(x, *args, y = 2, w, z = 3); 1; end"
-  says syntax error on "case return; when 1; end; end"
  says syntax error on "case return; when 1; end; end"
-  says syntax error on "def foo(foo typeof); end"
  says syntax error on "def foo(foo typeof); end"
-  parses "a = 1; a/b"
  parses "a = 1; a/b"
-  says syntax error on "def foo(false); end"
  says syntax error on "def foo(false); end"
-  parses "1 =~ 2"
  parses "1 =~ 2"
-  parses "`foo`"
  parses "`foo`"
-  parses "def <(); end;"
  parses "def <(); end;"
-  parses "1 unless 3"
  parses "1 unless 3"
-  parses "b.c &&= 1"
  parses "b.c &&= 1"
-  parses "*a.foo, a.bar = 1"
  parses "*a.foo, a.bar = 1"
-  parses "[] of {String, ->}"
  parses "[] of {String, ->}"
-  parses "def foo(@@struct); end"
  parses "def foo(@@struct); end"
-  parses "<<-FOO\n \t1\n \tFOO"
  parses "<<-FOO\n \t1\n \tFOO"
-  says syntax error on "def foo(foo include); end"
  says syntax error on "def foo(foo include); end"
-  parses "next if true"
  parses "next if true"
-  parses "def foo(x @@select); end"
  parses "def foo(x @@select); end"
-  parses "foo(&.!)"
  parses "foo(&.!)"
-  parses "def ===(); end;"
  parses "def ===(); end;"
-  parses "macro foo(@[Foo] **args);end"
  parses "macro foo(@[Foo] **args);end"
-  parses "macro foo;bar{% for x in y %}body{% end %}baz;end"
  parses "macro foo;bar{% for x in y %}body{% end %}baz;end"
-  parses "{1 =>\n2, 3 =>\n4}"
  parses "{1 =>\n2, 3 =>\n4}"
-  says syntax error on "case 1; when break; end; end"
  says syntax error on "case 1; when break; end; end"
-  says syntax error on "next &* 1"
  says syntax error on "next &* 1"
-  parses "def foo(x : U) forall T, U; end"
  parses "def foo(x : U) forall T, U; end"
-  says syntax error on "a = 1; a += next"
  says syntax error on "a = 1; a += next"
-  parses "def foo(self foo); end"
  parses "def foo(self foo); end"
-  says syntax error on "{% unless 1; 2; elsif 3; 4; end %}"
  says syntax error on "{% unless 1; 2; elsif 3; 4; end %}"
-  parses "var.@foo"
  parses "var.@foo"
-  parses "foo 1;"
  parses "foo 1;"
-  parses "foo.&(1, 2) { 3 }"
  parses "foo.&(1, 2) { 3 }"
-  says syntax error on "case 1\nin .nil?; 2"
  says syntax error on "case 1\nin .nil?; 2"
-  parses "foo(z: 0, a: n ** 2)"
  parses "foo(z: 0, a: n ** 2)"
-  parses "def []; end"
  parses "def []; end"
-  parses "macro foo(x = __LINE__);end"
  parses "macro foo(x = __LINE__);end"
-  parses "a = 1; a &-= 1"
  parses "a = 1; a &-= 1"
-  says syntax error on "FOO, BAR = 1, 2"
  says syntax error on "FOO, BAR = 1, 2"
-  parses "{{a = 1 if 2}}"
  parses "{{a = 1 if 2}}"
-  parses "[\n1\n]"
  parses "[\n1\n]"
-  parses "a ? 1\n              : b ? 2\n              : c ? 3\n              : 0"
  parses "a ? 1\n              : b ? 2\n              : c ? 3\n              : 0"
-  parses "def !~; end;"
  parses "def !~; end;"
-  says syntax error on "foo { |true| }"
  says syntax error on "foo { |true| }"
-  parses "{% begin %}%i< %s >{% end %}"
  parses "{% begin %}%i< %s >{% end %}"
-  parses "def self.-(); end;"
  parses "def self.-(); end;"
-  parses "/foo/imximx"
  parses "/foo/imximx"
-  parses "def ==; end;"
  parses "def ==; end;"
-  parses "foo = 1; ->foo.|(Int32)"
  parses "foo = 1; ->foo.|(Int32)"
-  parses "def foo(x @@typeof); end"
  parses "def foo(x @@typeof); end"
-  parses "Int[]"
  parses "Int[]"
-  says syntax error on "yield next"
  says syntax error on "yield next"
-  parses "a.b -=\n1"
  parses "a.b -=\n1"
-  parses "def foo(@@def); end"
  parses "def foo(@@def); end"
-  parses "foo.Bar"
  parses "foo.Bar"
-  parses "def foo(@require); end"
  parses "def foo(@require); end"
-  parses "f.x &*= 2"
  parses "f.x &*= 2"
-  parses "def foo(x @if); end"
  parses "def foo(x @if); end"
-  parses ":\"foo\""
  parses ":\"foo\""
-  says syntax error on "foo(1, 2, 3 end"
  says syntax error on "foo(1, 2, 3 end"
-  parses "def ==(); end;"
  parses "def ==(); end;"
-  parses "a = 1; a &+=\n1"
  parses "a = 1; a &+=\n1"
-  says syntax error on "foo { |(nil)| }"
  says syntax error on "foo { |(nil)| }"
-  parses "a.b &+=\n1"
  parses "a.b &+=\n1"
-  says syntax error on "class Foo(*T, *U); end"
  says syntax error on "class Foo(*T, *U); end"
-  parses "__DIR__"
  parses "__DIR__"
-  parses "{A::B}"
  parses "{A::B}"
-  parses "foo -1.0, -2.0"
  parses "foo -1.0, -2.0"
-  parses "1 rescue 2 if 3"
  parses "1 rescue 2 if 3"
-  says syntax error on "case 1; when next; end; end"
  says syntax error on "case 1; when next; end; end"
-  says syntax error on "macro foo&&;end"
  says syntax error on "macro foo&&;end"
-  parses "nil?(  )"
  parses "nil?(  )"
-  says syntax error on "next * 1"
  says syntax error on "next * 1"
-  says syntax error on "next & 1"
  says syntax error on "next & 1"
-  parses "enum : Int32"
  parses "enum : Int32"
-  parses "begin\n1\nend\nif true; end"
  parses "begin\n1\nend\nif true; end"
-  parses "{..2}"
  parses "{..2}"
-  parses "a; if / /\n/ /\nelsif / /\n/ /\nend"
  parses "a; if / /\n/ /\nelsif / /\n/ /\nend"
-  parses "...2"
  parses "...2"
-  parses "a.b &*=\n1"
  parses "a.b &*=\n1"
-  parses "require \"foo\"; [1]"
  parses "require \"foo\"; [1]"
-  parses "foo[*baz] = 1"
  parses "foo[*baz] = 1"
-  says syntax error on "1 2"
  says syntax error on "1 2"
-  parses "case;when true;1;end"
  parses "case;when true;1;end"
-  parses "def foo(@instance_sizeof); end"
  parses "def foo(@instance_sizeof); end"
-  parses "macro foo;unless var;true;end;end"
  parses "macro foo;unless var;true;end;end"
-  parses "break 1 if true"
  parses "break 1 if true"
-  parses "foo%w"
  parses "foo%w"
-  parses "def foo(x @@sizeof); end"
  parses "def foo(x @@sizeof); end"
-  says syntax error on "def foo(foo alias); end"
  says syntax error on "def foo(foo alias); end"
-  parses "self / number"
  parses "self / number"
-  parses "def foo(false foo); end"
  parses "def foo(false foo); end"
-  parses "foo(1, **bar, &block)"
  parses "foo(1, **bar, &block)"
-  parses "lib LibC\n$errno = Foo : Int32\nend"
  parses "lib LibC\n$errno = Foo : Int32\nend"
-  says syntax error on "a() += 1"
  says syntax error on "a() += 1"
-  parses "property while : Int32"
  parses "property while : Int32"
-  parses "while true; end\nif true; end"
  parses "while true; end\nif true; end"
-  parses ":=="
  parses ":=="
-  parses "..2"
  parses "..2"
-  parses "foo %r"
  parses "foo %r"
-  parses "include Foo\nif true; end"
  parses "include Foo\nif true; end"
-  parses "a { |x| x } / b"
  parses "a { |x| x } / b"
-  parses "def self./; end;"
  parses "def self./; end;"
-  parses "def foo(@var); end"
  parses "def foo(@var); end"
-  says syntax error on "def foo(foo abstract); end"
  says syntax error on "def foo(foo abstract); end"
-  parses "lib LibC; struct Foo; {{ 1 }}; end; end"
  parses "lib LibC; struct Foo; {{ 1 }}; end; end"
-  says syntax error on "foo { |(include)| }"
  says syntax error on "foo { |(include)| }"
-  parses "<<-HERE\r\n   One\r\n  Zero\r\n  HERE\r\n"
  parses "<<-HERE\r\n   One\r\n  Zero\r\n  HERE\r\n"
-  parses "def foo(@@with); end"
  parses "def foo(@@with); end"
-  says syntax error on "def !; end"
  says syntax error on "def !; end"
-  parses "true : Int32"
  parses "true : Int32"
-  parses "1 % 2"
  parses "1 % 2"
-  parses "foo.===(1, 2)"
  parses "foo.===(1, 2)"
-  parses "foo(1)"
  parses "foo(1)"
-  parses "macro foo\n  <<-FOO\n    %foo\n  FOO\nend"
  parses "macro foo\n  <<-FOO\n    %foo\n  FOO\nend"
-  says syntax error on "return % 1"
  says syntax error on "return % 1"
-  says syntax error on "def foo(\"bar \#{1} qux\" y); y; end"
  says syntax error on "def foo(\"bar \#{1} qux\" y); y; end"
-  parses "foo 1\n"
  parses "foo 1\n"
-  single splats inside container literals
-    says syntax error on "case {*1}\nwhen {2}; 3; end"
    says syntax error on "case {*1}\nwhen {2}; 3; end"
-    parses "Set {*{1} * 2}"
    parses "Set {*{1} * 2}"
-    parses "[*[*[1]], *[2]]"
    parses "[*[*[1]], *[2]]"
-    parses "{1, *2}"
    parses "{1, *2}"
-    parses "case 1\nwhen {*2}; 3; end"
    parses "case 1\nwhen {*2}; 3; end"
-    parses "[*1, 2]"
    parses "[*1, 2]"
-    parses "x = {*1}"
    parses "x = {*1}"
-    says syntax error on "{1 => 2, *3}"
    says syntax error on "{1 => 2, *3}"
-    parses "{*1, 2}"
    parses "{*1, 2}"
-    says syntax error on "{*1 => 2}"
    says syntax error on "{*1 => 2}"
-    parses "{*1 * 2}"
    parses "{*1 * 2}"
-    parses "{1, *2, 3, *4, 5}"
    parses "{1, *2, 3, *4, 5}"
-    parses "[1, *2, 3, *4, 5]"
    parses "[1, *2, 3, *4, 5]"
-    parses "Set {*1, 2, *3}"
    parses "Set {*1, 2, *3}"
-    parses "{*1, *2}"
    parses "{*1, *2}"
-    parses "[*1, *2]"
    parses "[*1, *2]"
-    says syntax error on "{a: 1, *2}"
    says syntax error on "{a: 1, *2}"
-    parses "[*1]"
    parses "[*1]"
-    says syntax error on "case {1}\nwhen {*2}; 3; end"
    says syntax error on "case {1}\nwhen {*2}; 3; end"
-    says syntax error on "{*a: 1}"
    says syntax error on "{*a: 1}"
-    parses "{*1}"
    parses "{*1}"
-    parses "[1, *2]"
    parses "[1, *2]"
-    parses "[*1 ** 2]"
    parses "[*1 ** 2]"
-  says syntax error on "{a[0]: 1}"
  says syntax error on "{a[0]: 1}"
-  says syntax error on "macro !;end"
  says syntax error on "macro !;end"
-  parses "n > 2"
  parses "n > 2"
-  parses "def self.&; end;"
  parses "def self.&; end;"
-  parses "property elsif : Int32"
  parses "property elsif : Int32"
-  parses "foo./(1, 2)"
  parses "foo./(1, 2)"
-  says syntax error on "a.[]() = 1"
  says syntax error on "a.[]() = 1"
-  parses "def foo; a = 1; x { a }; end"
  parses "def foo; a = 1; x { a }; end"
-  parses "def foo(x @@unless); end"
  parses "def foo(x @@unless); end"
-  parses "foo &.block(1)"
  parses "foo &.block(1)"
-  parses "def foo(@enum); end"
  parses "def foo(@enum); end"
-  parses "property module : Int32"
  parses "property module : Int32"
-  parses "a = 1; a &*= 1"
  parses "a = 1; a &*= 1"
-  parses "def foo(@return); end"
  parses "def foo(@return); end"
-  parses "x = 1; foo x do\nend"
  parses "x = 1; foo x do\nend"
-  parses "foo.bar(1, 2) { 3 }"
  parses "foo.bar(1, 2) { 3 }"
-  parses "foo(0, n + 2)"
  parses "foo(0, n + 2)"
-  parses "def foo(with foo); end"
  parses "def foo(with foo); end"
-  says syntax error on "1 unless return"
  says syntax error on "1 unless return"
-  parses "break 1, 2"
  parses "break 1, 2"
-  says syntax error on "next > 1"
  says syntax error on "next > 1"
-  parses "puts %w{one two}"
  parses "puts %w{one two}"
-  parses "foo.>= 1, 2"
  parses "foo.>= 1, 2"
-  parses "foo.!~(1, 2) { 3 }"
  parses "foo.!~(1, 2) { 3 }"
-  parses "def self.[]?; end"
  parses "def self.[]?; end"
-  parses "1.[]=(2, 3)"
  parses "1.[]=(2, 3)"
-  parses "1..\n2.."
  parses "1..\n2.."
-  parses "1"
  parses "1"
-  parses "foo[0] = 1"
  parses "foo[0] = 1"
-  parses "def %(); end"
  parses "def %(); end"
-  parses "def self.foo()\n1\nend"
  parses "def self.foo()\n1\nend"
-  says syntax error on "foo.||"
  says syntax error on "foo.||"
-  says syntax error on "foo { |(x, x)| }"
  says syntax error on "foo { |(x, x)| }"
-  parses "macro =~;end"
  parses "macro =~;end"
-  parses "lib Foo::Bar\nend"
  parses "lib Foo::Bar\nend"
-  parses "foo +1.0"
  parses "foo +1.0"
-  says syntax error on "Set {1, 2, 3} of Int32"
  says syntax error on "Set {1, 2, 3} of Int32"
-  parses "def foo(@@abstract); end"
  parses "def foo(@@abstract); end"
-  parses "macro foo\n  <<-FOO, <<-BAR + \"\"\n  FOO\n  BAR\nend"
  parses "macro foo\n  <<-FOO, <<-BAR + \"\"\n  FOO\n  BAR\nend"
-  parses "macro foo;%var if true;end"
  parses "macro foo;%var if true;end"
-  parses "qux \"foo\#{bar do end}baz\""
  parses "qux \"foo\#{bar do end}baz\""
-  parses "{{ foo.nil? }}"
  parses "{{ foo.nil? }}"
-  parses "enum Foo; A = 1; B; end"
  parses "enum Foo; A = 1; B; end"
-  parses "def foo; with a yield; end"
  parses "def foo; with a yield; end"
-  parses "1 - 2"
  parses "1 - 2"
-  parses "return : Int32"
  parses "return : Int32"
-  parses "typeof(\n  1\n)"
  parses "typeof(\n  1\n)"
-  parses "- 1"
  parses "- 1"
-  parses "f.x &+= 2"
  parses "f.x &+= 2"
-  says syntax error on "macro foo; {% foo = 1 }; end"
  says syntax error on "macro foo; {% foo = 1 }; end"
-  says syntax error on "macro foo x\n 1 + 2; end"
  says syntax error on "macro foo x\n 1 + 2; end"
-  says syntax error on "def foo(x x); 1; end"
  says syntax error on "def foo(x x); 1; end"
-  parses "foo(0, n === 2)"
  parses "foo(0, n === 2)"
-  parses "foo(n == 2)"
  parses "foo(n == 2)"
-  parses "f.x /= 2"
  parses "f.x /= 2"
-  parses "def Foo::Bar.foo\n1\nend"
  parses "def Foo::Bar.foo\n1\nend"
-  parses "def foo; yield 1; end"
  parses "def foo; yield 1; end"
-  says syntax error on " {1 => end"
  says syntax error on " {1 => end"
-  parses "n &+ 2"
  parses "n &+ 2"
-  parses "@[Foo(\n1, foo: 2\n)]"
  parses "@[Foo(\n1, foo: 2\n)]"
-  parses "foo do; 1; end"
  parses "foo do; 1; end"
-  parses "def ===(*args, **opts); end"
  parses "def ===(*args, **opts); end"
-  parses "foo = 1; ->foo.%(Int32)"
  parses "foo = 1; ->foo.%(Int32)"
-  parses "break : Int32"
  parses "break : Int32"
-  parses "foo(a: n ** 2)"
  parses "foo(a: n ** 2)"
-  parses "foo.!~ do end"
  parses "foo.!~ do end"
-  parses "{\"\".id}"
  parses "{\"\".id}"
-  parses "def foo; a = 1; with a yield a; end"
  parses "def foo; a = 1; with a yield a; end"
-  says syntax error on "def foo(foo enum); end"
  says syntax error on "def foo(foo enum); end"
-  parses "foo(0, n > 2)"
  parses "foo(0, n > 2)"
-  parses ":&**"
  parses ":&**"
-  parses "{% if x %}body{% end %}"
  parses "{% if x %}body{% end %}"
-  says syntax error on "select\nwhen 1\n2\nend"
  says syntax error on "select\nwhen 1\n2\nend"
-  parses "def foo(@[Foo] outer inner); end"
  parses "def foo(@[Foo] outer inner); end"
-  parses "pointerof(\n  foo\n)"
  parses "pointerof(\n  foo\n)"
-  parses "/foo/i"
  parses "/foo/i"
-  parses ":+"
  parses ":+"
-  parses "def /(); end;"
  parses "def /(); end;"
-  parses "def []=(other, file = 1); end"
  parses "def []=(other, file = 1); end"
-  parses "Foo(X, alignof(Int32))"
  parses "Foo(X, alignof(Int32))"
-  parses "foo(1, **bar)"
  parses "foo(1, **bar)"
-  parses "foo = 1; ->foo.===(Int32)"
  parses "foo = 1; ->foo.===(Int32)"
-  parses "{% begin %}%x{ %s }{% end %}"
  parses "{% begin %}%x{ %s }{% end %}"
-  parses "alignof(\n  Int32\n)"
  parses "alignof(\n  Int32\n)"
-  parses "-> do; 1; rescue; 2; end"
  parses "-> do; 1; rescue; 2; end"
-  parses "*_ = 1, 2"
  parses "*_ = 1, 2"
-  says syntax error on "x--"
  says syntax error on "x--"
-  parses "with : Int32"
  parses "with : Int32"
-  parses "def foo(asm foo); end"
  parses "def foo(asm foo); end"
-  parses "a = uninitialized Foo; a"
  parses "a = uninitialized Foo; a"
-  parses "next {1 => 2}"
  parses "next {1 => 2}"
-  parses "1.foo do; 1; end"
  parses "1.foo do; 1; end"
-  says syntax error on "a, b, *c, d = 1, 2"
  says syntax error on "a, b, *c, d = 1, 2"
-  parses "def foo(x @instance_sizeof); end"
  parses "def foo(x @instance_sizeof); end"
-  parses "foo(&.is_a?(T))"
  parses "foo(&.is_a?(T))"
-  parses "lib LibC\nfun getchar(...)\nend"
  parses "lib LibC\nfun getchar(...)\nend"
-  parses "@@a = uninitialized Foo"
  parses "@@a = uninitialized Foo"
-  parses "def foo(@include); end"
  parses "def foo(@include); end"
-  parses "foo.is_a?(Const)"
  parses "foo.is_a?(Const)"
-  parses "{% begin %}%w{ %s }{% end %}"
  parses "{% begin %}%w{ %s }{% end %}"
-  parses "macro foo; 1 + 2 {{foo}}\\ 3 + 4; end"
  parses "macro foo; 1 + 2 {{foo}}\\ 3 + 4; end"
-  parses "foo { |(_, c)| c }"
  parses "foo { |(_, c)| c }"
-  parses "&+ 1"
  parses "&+ 1"
-  parses "->Foo.&+(Int32)"
  parses "->Foo.&+(Int32)"
-  parses "foo(z: 0, a: n !~ 2)"
  parses "foo(z: 0, a: n !~ 2)"
-  parses "foo(0, n &+ 2)"
  parses "foo(0, n &+ 2)"
-  parses "case\nend"
  parses "case\nend"
-  says syntax error on "until return; end"
  says syntax error on "until return; end"
-  says syntax error on "asm(\"nop\" ::: \"\#{foo}\")"
  says syntax error on "asm(\"nop\" ::: \"\#{foo}\")"
-  parses "+1.0_f32"
  parses "+1.0_f32"
-  parses "case when 1\n2\nend"
  parses "case when 1\n2\nend"
-  says syntax error on "<<-HERE\n One\n  \#{1}\n  HERE"
  says syntax error on "<<-HERE\n One\n  \#{1}\n  HERE"
-  parses "return 1.bar do\nend"
  parses "return 1.bar do\nend"
-  sets correct location of global path in class def
  sets correct location of global path in class def
-  parses "def foo(x @return); end"
  parses "def foo(x @return); end"
-  says syntax error on "*a, b, c, d = 1, 2"
  says syntax error on "*a, b, c, d = 1, 2"
-  parses "1.as?(\n  Int32\n)"
  parses "1.as?(\n  Int32\n)"
-  parses ":foo"
  parses ":foo"
-  parses "foo[*baz]"
  parses "foo[*baz]"
-  parses "macro foo;{% verbatim do %}1{% foo %}2{% end %};end"
  parses "macro foo;{% verbatim do %}1{% foo %}2{% end %};end"
-  says syntax error on "foo { |include| }"
  says syntax error on "foo { |include| }"
-  says syntax error on "a.b, c.d() = 1"
  says syntax error on "a.b, c.d() = 1"
-  parses "Foo(\"foo\": U, \"bar\": V)"
  parses "Foo(\"foo\": U, \"bar\": V)"
-  parses "foo %w()"
  parses "foo %w()"
-  parses "1 ? 2 : 3"
  parses "1 ? 2 : 3"
-  parses "1.0"
  parses "1.0"
-  parses "a = 1; a //= 1"
  parses "a = 1; a //= 1"
-  parses "foo &.baz.qux do\nend"
  parses "foo &.baz.qux do\nend"
-  parses "{a: 1}"
  parses "{a: 1}"
-  says syntax error on "macro foo;{%end};end"
  says syntax error on "macro foo;{%end};end"
-  says syntax error on "foo(foo(&.block)"
  says syntax error on "foo(foo(&.block)"
-  says syntax error on "return .. 1"
  says syntax error on "return .. 1"
-  parses "1 | 2"
  parses "1 | 2"
-  parses "foo = 1; foo +1"
  parses "foo = 1; foo +1"
-  says syntax error on "foo { |(select)| }"
  says syntax error on "foo { |(select)| }"
-  parses "foo(out @x); @x"
  parses "foo(out @x); @x"
-  parses "def foo(x @@next); end"
  parses "def foo(x @@next); end"
-  parses "->(x) { x }"
  parses "->(x) { x }"
-  parses "foo(0, n ** 2)"
  parses "foo(0, n ** 2)"
-  parses "Foo(X, sizeof(Int32))"
  parses "Foo(X, sizeof(Int32))"
-  parses "foo.**(1, 2)"
  parses "foo.**(1, 2)"
-  parses "def foo(x @nil); end"
  parses "def foo(x @nil); end"
-  parses "select\nwhen foo\n2\nwhen bar\n4\nend"
  parses "select\nwhen foo\n2\nwhen bar\n4\nend"
-  parses "f.x += 2"
  parses "f.x += 2"
-  parses "@[Foo]"
  parses "@[Foo]"
-  parses "case {1}\nin {.bar?}; 2; end"
  parses "case {1}\nin {.bar?}; 2; end"
-  parses "def foo(bar = 1\n); 2; end"
  parses "def foo(bar = 1\n); 2; end"
-  says syntax error on "break <= 1"
  says syntax error on "break <= 1"
-  says syntax error on "def foo(nil); end"
  says syntax error on "def foo(nil); end"
-  parses "def foo(@@in); end"
  parses "def foo(@@in); end"
-  parses "until : Int32"
  parses "until : Int32"
-  parses "def foo(@[Foo] &@block); end"
  parses "def foo(@[Foo] &@block); end"
-  parses "def foo(a, &block : Foo); end"
  parses "def foo(a, &block : Foo); end"
-  parses ":>"
  parses ":>"
-  parses "a = 1; a &=\n1"
  parses "a = 1; a &=\n1"
-  parses "foo(a: n | 2)"
  parses "foo(a: n | 2)"
-  parses "@[Foo(\"hello\")]"
  parses "@[Foo(\"hello\")]"
-  parses "def foo; x { |a, *b| b }; end"
  parses "def foo; x { |a, *b| b }; end"
-  parses "_ = 1"
  parses "_ = 1"
-  parses "{1 => 2, 3 => 4}"
  parses "{1 => 2, 3 => 4}"
-  says syntax error on "{\"\": 1}"
  says syntax error on "{\"\": 1}"
-  parses "def foo(@@private); end"
  parses "def foo(@@private); end"
-  parses "foo { |a| 1 }"
  parses "foo { |a| 1 }"
-  parses "macro ^;end"
  parses "macro ^;end"
-  parses "->foo="
  parses "->foo="
-  parses "1.nil?(\n)"
  parses "1.nil?(\n)"
-  parses "begin; 1; end;"
  parses "begin; 1; end;"
-  says syntax error on "next + 1"
  says syntax error on "next + 1"
-  parses "break;"
  parses "break;"
-  parses "foo !false"
  parses "foo !false"
-  parses "module Foo(T); end"
  parses "module Foo(T); end"
-  says syntax error on "class Foo(T U)"
  says syntax error on "class Foo(T U)"
-  parses "property with : Int32"
  parses "property with : Int32"
-  parses "def foo(var : self); end"
  parses "def foo(var : self); end"
-  parses "is_a?(Const)"
  parses "is_a?(Const)"
-  parses "def foo(var : Int?); end"
  parses "def foo(var : Int?); end"
-  says syntax error on "foo { |(begin)| }"
  says syntax error on "foo { |(begin)| }"
-  parses "foo(n ^ 2)"
  parses "foo(n ^ 2)"
-  parses "lib LibC; {% if 1 %}2{% end %}; end"
  parses "lib LibC; {% if 1 %}2{% end %}; end"
-  parses "def foo(require foo); end"
  parses "def foo(require foo); end"
-  parses "def foo(@until); end"
  parses "def foo(@until); end"
-  parses "a, b = 1"
  parses "a, b = 1"
-  parses "a = 1; a[2] &&= 3"
  parses "a = 1; a[2] &&= 3"
-  parses "2 * 3 + 4 * 5"
  parses "2 * 3 + 4 * 5"
-  parses "foo = 1; ->foo.foo"
  parses "foo = 1; ->foo.foo"
-  parses "a.foo &block"
  parses "a.foo &block"
-  parses "return 1"
  parses "return 1"
-  says syntax error on "unless break; end"
  says syntax error on "unless break; end"
-  parses "foo(1, a: 1, b: 2)"
  parses "foo(1, a: 1, b: 2)"
-  says syntax error on "foo(next)"
  says syntax error on "foo(next)"
-  parses "1.as? Bar"
  parses "1.as? Bar"
-  parses "macro **;end"
  parses "macro **;end"
-  says syntax error on "{1, ->{ |_| x } }"
  says syntax error on "{1, ->{ |_| x } }"
-  parses "foo(z: 0, a: n &** 2)"
  parses "foo(z: 0, a: n &** 2)"
-  parses "def [](x); end"
  parses "def [](x); end"
-  parses "foo rescue 2"
  parses "foo rescue 2"
-  parses "a = 1; a |= 1"
  parses "a = 1; a |= 1"
-  parses "foo &.%(1)"
  parses "foo &.%(1)"
-  says syntax error on "def nil?; end"
  says syntax error on "def nil?; end"
-  parses "def <; end;"
  parses "def <; end;"
-  parses "extend Foo"
  parses "extend Foo"
-  says syntax error on "a.b(), c.d = 1"
  says syntax error on "a.b(), c.d = 1"
-  says syntax error on "A = begin; 1; rescue; 1; else; B = 1; end"
  says syntax error on "A = begin; 1; rescue; 1; else; B = 1; end"
-  says syntax error on "break.foo"
  says syntax error on "break.foo"
-  parses "->(x : Int32) { }"
  parses "->(x : Int32) { }"
-  says syntax error on "case 1\nin _;"
  says syntax error on "case 1\nin _;"
-  parses "def foo(@false); end"
  parses "def foo(@false); end"
-  parses "a.foo(&block)"
  parses "a.foo(&block)"
-  says syntax error on "macro responds_to?; end"
  says syntax error on "macro responds_to?; end"
-  parses "as?(Bar)"
  parses "as?(Bar)"
-  parses "{\"foo\": 1, \"bar\": 2}"
  parses "{\"foo\": 1, \"bar\": 2}"
-  parses "def foo(x @@include); end"
  parses "def foo(x @@include); end"
-  parses "property def : Int32"
  parses "property def : Int32"
-  parses "-1"
  parses "-1"
-  parses "puts ~1"
  parses "puts ~1"
-  parses "<<-HERE1; <<-HERE2\nHERE1\nhere2\nHERE2"
  parses "<<-HERE1; <<-HERE2\nHERE1\nhere2\nHERE2"
-  says syntax error on "lib Foo; fun foo(x : Int32, x : Int64); end"
  says syntax error on "lib Foo; fun foo(x : Int32, x : Int64); end"
-  parses "foo { |(a, *b, c)| }"
  parses "foo { |(a, *b, c)| }"
-  parses "if foo; 1; end"
  parses "if foo; 1; end"
-  parses "@a : Foo | Int32"
  parses "@a : Foo | Int32"
-  parses "lib LibC\nfun getch = \"get.char\"(x : Int32)\nend"
  parses "lib LibC\nfun getch = \"get.char\"(x : Int32)\nend"
-  says syntax error on "return < 1"
  says syntax error on "return < 1"
-  parses "1 rescue 2"
  parses "1 rescue 2"
-  says syntax error on "break[0]"
  says syntax error on "break[0]"
-  parses "def foo(@macro); end"
  parses "def foo(@macro); end"
-  parses "\"hello \"\\\n\"world\""
  parses "\"hello \"\\\n\"world\""
-  parses "@@a : Foo"
  parses "@@a : Foo"
-  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\" : \"volatile\", \"alignstack\", \"intel\")"
  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\" : \"volatile\", \"alignstack\", \"intel\")"
-  parses "%Q{hello \\n world}"
  parses "%Q{hello \\n world}"
-  parses "foo(0, n !~ 2)"
  parses "foo(0, n !~ 2)"
-  parses "def foo; a; end"
  parses "def foo; a; end"
-  says syntax error on "return << 1"
  says syntax error on "return << 1"
-  parses "def foo(x)\n x\nend; foo = 1; b = 2; foo -b"
  parses "def foo(x)\n x\nend; foo = 1; b = 2; foo -b"
-  sets correct location of named tuple type
  sets correct location of named tuple type
-  parses "a.b *=\n1"
  parses "a.b *=\n1"
-  parses "case;end"
  parses "case;end"
-  parses "foo &.block=(0)"
  parses "foo &.block=(0)"
-  parses "x = 2; foo do bar x end"
  parses "x = 2; foo do bar x end"
-  parses "next *{1, 2}"
  parses "next *{1, 2}"
-  parses "foo(n === 2)"
  parses "foo(n === 2)"
-  parses "x = 1; foo.bar x do\nend"
  parses "x = 1; foo.bar x do\nend"
-  parses "def foo(unless foo); end"
  parses "def foo(unless foo); end"
-  parses "macro &*;end"
  parses "macro &*;end"
-  says syntax error on "+break"
  says syntax error on "+break"
-  parses "<<-FOO\n \t 1\n \t FOO"
  parses "<<-FOO\n \t 1\n \t FOO"
-  parses "def <=(*args, **opts); end"
  parses "def <=(*args, **opts); end"
-  parses "foo\n   .bar"
  parses "foo\n   .bar"
-  says syntax error on "macro foo"
  says syntax error on "macro foo"
-  parses "macro foo(a, @[Foo] var);end"
  parses "macro foo(a, @[Foo] var);end"
-  says syntax error on "return ... 1"
  says syntax error on "return ... 1"
-  parses "def foo(class foo); end"
  parses "def foo(class foo); end"
-  parses "a = 1; a &+= 1"
  parses "a = 1; a &+= 1"
-  says syntax error on "{\"foo\" => 1, \"bar\": 2}"
  says syntax error on "{\"foo\" => 1, \"bar\": 2}"
-  parses "def foo(a, &block); end"
  parses "def foo(a, &block); end"
-  says syntax error on "yield return"
  says syntax error on "yield return"
-  parses "\n\n__LINE__"
  parses "\n\n__LINE__"
-  parses "foo (1 + 2), 3"
  parses "foo (1 + 2), 3"
-  parses "{/ /, / /}"
  parses "{/ /, / /}"
-  says syntax error on "return do\nend"
  says syntax error on "return do\nend"
-  parses "1.as?(Bar)"
  parses "1.as?(Bar)"
-  parses "a = 1; a -= 1"
  parses "a = 1; a -= 1"
-  parses "{% begin %}%{ %s }{% end %}"
  parses "{% begin %}%{ %s }{% end %}"
-  parses "enum Foo; @@foo = 1\n A \n end"
  parses "enum Foo; @@foo = 1\n A \n end"
-  says syntax error on "1 foo"
  says syntax error on "1 foo"
-  says syntax error on "def foo(foo if); end"
  says syntax error on "def foo(foo if); end"
-  parses "foo x do\nend"
  parses "foo x do\nend"
-  parses "{% begin %}%< %s >{% end %}"
  parses "{% begin %}%< %s >{% end %}"
-  parses "foo(a: n - 2)"
  parses "foo(a: n - 2)"
-  parses "def foo(a, &block : -> Double); end"
  parses "def foo(a, &block : -> Double); end"
-  parses "1 !~ 2"
  parses "1 !~ 2"
-  says syntax error on "macro foo(**x, y)"
  says syntax error on "macro foo(**x, y)"
-  parses "f.x *= 2"
  parses "f.x *= 2"
-  parses ":\"\\u{61}\""
  parses ":\"\\u{61}\""
-  says syntax error on "break == 1"
  says syntax error on "break == 1"
-  parses "foo.< 1, 2"
  parses "foo.< 1, 2"
-  parses "1 !~ 2"
  parses "1 !~ 2"
-  parses "def foo(@[Foo] @var); end"
  parses "def foo(@[Foo] @var); end"
-  parses "def %(); end;"
  parses "def %(); end;"
-  parses "def foo(a, &block : Int, self -> Double); end"
  parses "def foo(a, &block : Int, self -> Double); end"
-  parses "-1.0_f32"
  parses "-1.0_f32"
-  parses "<<-HERE\n  \#{1} \#{2}\n  HERE"
  parses "<<-HERE\n  \#{1} \#{2}\n  HERE"
-  says syntax error on "x[1:-2]"
  says syntax error on "x[1:-2]"
-  parses "property protected : Int32"
  parses "property protected : Int32"
-  parses "foo(0, n &** 2)"
  parses "foo(0, n &** 2)"
-  parses "def foo(@fun); end"
  parses "def foo(@fun); end"
-  parses "foo.+(1, 2) { 3 }"
  parses "foo.+(1, 2) { 3 }"
-  parses "[1, 2]"
  parses "[1, 2]"
-  says syntax error on "next ... 1"
  says syntax error on "next ... 1"
-  says syntax error on "break &* 1"
  says syntax error on "break &* 1"
-  parses ":\"\\a\\b\\n\\r\\t\\v\\f\\e\""
  parses ":\"\\a\\b\\n\\r\\t\\v\\f\\e\""
-  parses "->@foo.foo?"
  parses "->@foo.foo?"
-  parses "1 == 2"
  parses "1 == 2"
-  parses "macro foo(@[Foo]  var);end"
  parses "macro foo(@[Foo]  var);end"
-  parses "select\nwhen foo\n2\nelse\n3\nend"
  parses "select\nwhen foo\n2\nelse\n3\nend"
-  parses "def foo(x @@out); end"
  parses "def foo(x @@out); end"
-  says syntax error on "A = begin; 1; ensure; B = 1; end"
  says syntax error on "A = begin; 1; ensure; B = 1; end"
-  parses "1 || 2"
  parses "1 || 2"
-  sets correct location of parameter in proc literal
  sets correct location of parameter in proc literal
-  parses "def <(); end"
  parses "def <(); end"
-  says syntax error on "def foo(x: Int32); end"
  says syntax error on "def foo(x: Int32); end"
-  parses "def foo(@@select); end"
  parses "def foo(@@select); end"
-  parses "Foo{\"x\" => \"y\"}"
  parses "Foo{\"x\" => \"y\"}"
-  parses "foo(a: n ^ 2)"
  parses "foo(a: n ^ 2)"
-  says syntax error on "1 ... break"
  says syntax error on "1 ... break"
-  says syntax error on "def foo(foo while); end"
  says syntax error on "def foo(foo while); end"
-  says syntax error on "*a if true"
  says syntax error on "*a if true"
-  parses "def []?; end"
  parses "def []?; end"
-  parses "unless foo; 1; end"
  parses "unless foo; 1; end"
-  parses "a.b <<=\n1"
  parses "a.b <<=\n1"
-  parses "foo \"foo bar\": 1, \"baz\": 2"
  parses "foo \"foo bar\": 1, \"baz\": 2"
-  sets correct location of protected macro in enum
  sets correct location of protected macro in enum
-  says syntax error on "def foo(foo with); end"
  says syntax error on "def foo(foo with); end"
-  parses "case 1\nwhen 1\n2\nend\nif a\nend"
  parses "case 1\nwhen 1\n2\nend\nif a\nend"
-  parses "case a\nwhen b\n1 / 2\nelse\n1 / 2\nend"
  parses "case a\nwhen b\n1 / 2\nelse\n1 / 2\nend"
-  parses "foo(//)"
  parses "foo(//)"
-  parses "foo(bar do\nend)"
  parses "foo(bar do\nend)"
-  parses "case 1\nin Foo(Int32); 2; end"
  parses "case 1\nin Foo(Int32); 2; end"
-  parses "macro foo;var unless true;end"
  parses "macro foo;var unless true;end"
-  parses "foo(n % 2)"
  parses "foo(n % 2)"
-  parses "{\n1\n}"
  parses "{\n1\n}"
-  parses "->() : Int32 { }"
  parses "->() : Int32 { }"
-  parses "return *1, 2"
  parses "return *1, 2"
-  says syntax error on "foo(**bar, out x)"
  says syntax error on "foo(**bar, out x)"
-  parses "1 ^ 2"
  parses "1 ^ 2"
-  parses "foo &.@bar"
  parses "foo &.@bar"
-  parses "def foo(a, @[Foo] var); end"
  parses "def foo(a, @[Foo] var); end"
-  says syntax error on "A = B = 1"
  says syntax error on "A = B = 1"
-  parses "%q{hello \#{foo} world}"
  parses "%q{hello \#{foo} world}"
-  parses "1.~"
  parses "1.~"
-  parses "def Foo.foo\n1\nend"
  parses "def Foo.foo\n1\nend"
-  parses "x, y, z = <<-FOO, <<-BAR, <<-BAZ\nhello\nFOO\nworld\nBAR\n!\nBAZ"
  parses "x, y, z = <<-FOO, <<-BAR, <<-BAZ\nhello\nFOO\nworld\nBAR\n!\nBAZ"
-  parses "abstract def foo"
  parses "abstract def foo"
-  says syntax error on "Foo(T, U V)"
  says syntax error on "Foo(T, U V)"
-  parses "foo(n < 2)"
  parses "foo(n < 2)"
-  parses "foo.+ do end"
  parses "foo.+ do end"
-  parses "{% unless 1; 2; end %}"
  parses "{% unless 1; 2; end %}"
-  parses "Foo(typeof(1))"
  parses "Foo(typeof(1))"
-  parses "foo.-(1, 2) { 3 }"
  parses "foo.-(1, 2) { 3 }"
-  says syntax error on "*1, a = 2"
  says syntax error on "*1, a = 2"
-  parses "def foo(**args : **Foo)\n1\nend"
  parses "def foo(**args : **Foo)\n1\nend"
-  parses "case 1; when 1 then 2; else; 3; end"
  parses "case 1; when 1 then 2; else; 3; end"
-  parses "def foo(x @@instance_sizeof); end"
  parses "def foo(x @@instance_sizeof); end"
-  parses "def foo(x @false); end"
  parses "def foo(x @false); end"
-  parses "foo.+ 1, 2"
  parses "foo.+ 1, 2"
-  parses "def foo(fun foo); end"
  parses "def foo(fun foo); end"
-  parses "def foo(x = 1, **args)\n1\nend"
  parses "def foo(x = 1, **args)\n1\nend"
-  parses "foo(z: 0, a: n > 2)"
  parses "foo(z: 0, a: n > 2)"
-  says syntax error on "def foo(unless); end"
  says syntax error on "def foo(unless); end"
-  parses "call @foo.bar"
  parses "call @foo.bar"
-  parses "a.b() /3"
  parses "a.b() /3"
-  parses "if foo; 1; elsif bar; 2; else 3; end"
  parses "if foo; 1; elsif bar; 2; else 3; end"
-  parses "begin; 1; rescue ex : ::Foo | ::Bar; 2; end"
  parses "begin; 1; rescue ex : ::Foo | ::Bar; 2; end"
-  parses "foo./"
  parses "foo./"
-  parses "offsetof(X, @a)"
  parses "offsetof(X, @a)"
-  parses "foo { a = 1 }; a"
  parses "foo { a = 1 }; a"
-  parses "->::foo"
  parses "->::foo"
-  parses "foo.== 1, 2"
  parses "foo.== 1, 2"
-  says syntax error on "case 1\nin Int32; 2; when 2"
  says syntax error on "case 1\nin Int32; 2; when 2"
-  parses "foo &./(1)"
  parses "foo &./(1)"
-  parses "foo { 1 }"
  parses "foo { 1 }"
-  parses ":^"
  parses ":^"
-  says syntax error on "foo { |(module)| }"
  says syntax error on "foo { |(module)| }"
-  says syntax error on "[\n]"
  says syntax error on "[\n]"
-  says syntax error on "macro Foo.bar;end"
  says syntax error on "macro Foo.bar;end"
-  parses "def self.|(); end;"
  parses "def self.|(); end;"
-  parses "foo = 1; ->foo.**(Int32)"
  parses "foo = 1; ->foo.**(Int32)"
-  parses "Foo(X, offsetof(Foo, @a))"
  parses "Foo(X, offsetof(Foo, @a))"
-  says syntax error on "{{ {% begin %} }}"
  says syntax error on "{{ {% begin %} }}"
-  parses "def <=(other, file = 1); end"
  parses "def <=(other, file = 1); end"
-  parses "def foo\n1\nend\nif 1\nend"
  parses "def foo\n1\nend\nif 1\nend"
-  parses "def &; end;"
  parses "def &; end;"
-  parses "{[] of Foo, self.foo}"
  parses "{[] of Foo, self.foo}"
-  says syntax error on "return 1 foo"
  says syntax error on "return 1 foo"
-  parses "def foo(x); end; x"
  parses "def foo(x); end; x"
-  says syntax error on "def foo(self); end"
  says syntax error on "def foo(self); end"
-  says syntax error on "a.b() += 1"
  says syntax error on "a.b() += 1"
-  parses "foo(z: 0, a: n - 2)"
  parses "foo(z: 0, a: n - 2)"
-  parses "property end : Int32"
  parses "property end : Int32"
-  parses "foo = 1; ->foo.&-(Int32)"
  parses "foo = 1; ->foo.&-(Int32)"
-  parses "{[] of Foo, ::foo}"
  parses "{[] of Foo, ::foo}"
-  parses "foo = 1; ->foo.=~(Int32)"
  parses "foo = 1; ->foo.=~(Int32)"
-  parses "def foo(**args)\n1\nend"
  parses "def foo(**args)\n1\nend"
-  parses "lib LibC; type A = B*; end"
  parses "lib LibC; type A = B*; end"
-  parses "macro ===;end"
  parses "macro ===;end"
-  parses "foo { |a, b, | 1 }"
  parses "foo { |a, b, | 1 }"
-  parses "lib LibC; union Foo; end end"
  parses "lib LibC; union Foo; end end"
-  parses "case 1\nwhen .!()\n2\nend"
  parses "case 1\nwhen .!()\n2\nend"
-  parses "foo"
  parses "foo"
-  parses "def foo(var : Int32 = 1); end"
  parses "def foo(var : Int32 = 1); end"
-  says syntax error on "def foo(foo require); end"
  says syntax error on "def foo(foo require); end"
-  parses "def foo(x @@case); end"
  parses "def foo(x @@case); end"
-  parses "1 + /foo/"
  parses "1 + /foo/"
-  parses "{% unless 1; 2; else 3; end %}"
  parses "{% unless 1; 2; else 3; end %}"
-  parses "def self.>=(); end;"
  parses "def self.>=(); end;"
-  parses "asm(\"nop\" ::: :)"
  parses "asm(\"nop\" ::: :)"
-  says syntax error on "->::@foo.foo"
  says syntax error on "->::@foo.foo"
-  parses "macro ~;end"
  parses "macro ~;end"
-  parses "def foo(case foo); end"
  parses "def foo(case foo); end"
-  parses "def foo(x, *, y, &); 1; end"
  parses "def foo(x, *, y, &); 1; end"
-  parses "def foo(@@extend); end"
  parses "def foo(@@extend); end"
-  parses "def foo(n); foo(n -1); end"
  parses "def foo(n); foo(n -1); end"
-  parses "a.b //=\n1"
  parses "a.b //=\n1"
-  parses "def -(); end"
  parses "def -(); end"
-  parses "[] of Int"
  parses "[] of Int"
-  parses "a.b / 2"
  parses "a.b / 2"
-  parses "1.tap do |x|; 1; rescue; x; end"
  parses "1.tap do |x|; 1; rescue; x; end"
-  parses "foo %x()"
  parses "foo %x()"
-  parses "a() /3"
  parses "a() /3"
-  says syntax error on "foo { |(end)| }"
  says syntax error on "foo { |(end)| }"
-  parses "1 &** 2"
  parses "1 &** 2"
-  says syntax error on "next &** 1"
  says syntax error on "next &** 1"
-  parses "def -(); end;"
  parses "def -(); end;"
-  parses "->\n:\nInt32\n{\n}"
  parses "->\n:\nInt32\n{\n}"
-  parses "macro []=;end"
  parses "macro []=;end"
-  parses "def foo(**args : Foo)\n1\nend"
  parses "def foo(**args : Foo)\n1\nend"
-  parses "unless foo; 1; else; 2; end"
  parses "unless foo; 1; else; 2; end"
-  says syntax error on "macro foo(x y z); end"
  says syntax error on "macro foo(x y z); end"
-  parses "->Foo.*(Int32)"
  parses "->Foo.*(Int32)"
-  says syntax error on "1 as? Bar"
  says syntax error on "1 as? Bar"
-  parses "def foo ; 1 ; end"
  parses "def foo ; 1 ; end"
-  parses "foo &.[0] = 1"
  parses "foo &.[0] = 1"
-  parses "foo = 1; ->foo.foo?"
  parses "foo = 1; ->foo.foo?"
-  parses "foo(/a/)"
  parses "foo(/a/)"
-  parses "def %; end;"
  parses "def %; end;"
-  parses "pointerof : Int32"
  parses "pointerof : Int32"
-  parses "case {1, 2}\nwhen {3, 4}\n5\nend"
  parses "case {1, 2}\nwhen {3, 4}\n5\nend"
-  parses "1 +2_i64"
  parses "1 +2_i64"
-  parses "puts {{\n1\n}}"
  parses "puts {{\n1\n}}"
-  parses "case {1, 2}\nwhen foo\n5\nend"
  parses "case {1, 2}\nwhen foo\n5\nend"
-  parses "def foo(x @true); end"
  parses "def foo(x @true); end"
-  says syntax error on "foo { |(pointerof)| }"
  says syntax error on "foo { |(pointerof)| }"
-  parses "foo(a: n & 2)"
  parses "foo(a: n & 2)"
-  parses "if foo\n1\nelse\n2\nend"
  parses "if foo\n1\nelse\n2\nend"
-  parses "def /; end;"
  parses "def /; end;"
-  parses "foo a: b(1) do\nend"
  parses "foo a: b(1) do\nend"
-  parses "a : Foo*"
  parses "a : Foo*"
-  says syntax error on "break === 1"
  says syntax error on "break === 1"
-  parses "b.c ||= 1"
  parses "b.c ||= 1"
-  says syntax error on "break * 1"
  says syntax error on "break * 1"
-  parses "Foo(T, U, 1)"
  parses "Foo(T, U, 1)"
-  parses "foo(z: 0, a: n &- 2)"
  parses "foo(z: 0, a: n &- 2)"
-  says syntax error on "def foo(foo fun); end"
  says syntax error on "def foo(foo fun); end"
-  parses "foo(a: n + 2)"
  parses "foo(a: n + 2)"
-  parses "asm(\"nop\" : \"a\"(0) : \"b\"(1))"
  parses "asm(\"nop\" : \"a\"(0) : \"b\"(1))"
-  parses "foo &.block = 0"
  parses "foo &.block = 0"
-  parses "foo = 1; ->foo.+(Int32)"
  parses "foo = 1; ->foo.+(Int32)"
-  parses "foo &.as(T)"
  parses "foo &.as(T)"
-  says syntax error on "foo &.||"
  says syntax error on "foo &.||"
-  parses "def foo(x @abstract); end"
  parses "def foo(x @abstract); end"
-  parses "a.b |=\n1"
  parses "a.b |=\n1"
-  parses "{{ nil?(foo) }}"
  parses "{{ nil?(foo) }}"
-  says syntax error on "def foo(pointerof); end"
  says syntax error on "def foo(pointerof); end"
-  says syntax error on " (1, 2, 3 end"
  says syntax error on " (1, 2, 3 end"
-  parses "case 1\nwhen .responds_to?(:foo)\n2\nend"
  parses "case 1\nwhen .responds_to?(:foo)\n2\nend"
-  parses "enum Foo; def foo; 1; end; end"
  parses "enum Foo; def foo; 1; end; end"
-  parses "<<-'HERE COMES HEREDOC'\n  hello \\n world\n  \#{1}\n  HERE COMES HEREDOC"
  parses "<<-'HERE COMES HEREDOC'\n  hello \\n world\n  \#{1}\n  HERE COMES HEREDOC"
-  parses "def foo(@@until); end"
  parses "def foo(@@until); end"
-  says syntax error on "break & 1"
  says syntax error on "break & 1"
-  says syntax error on "def f end"
  says syntax error on "def f end"
-  says syntax error on "return // 1"
  says syntax error on "return // 1"
-  parses "typeof(a = 1); a"
  parses "typeof(a = 1); a"
-  parses "1 \\\r\n + 2"
  parses "1 \\\r\n + 2"
-  parses "foo if 3"
  parses "foo if 3"
-  parses "def foo(select foo); end"
  parses "def foo(select foo); end"
-  parses "Foo::Bar?"
  parses "Foo::Bar?"
-  parses "1.x; foo do\nend"
  parses "1.x; foo do\nend"
-  says syntax error on "Foo({x: X, x: Y})"
  says syntax error on "Foo({x: X, x: Y})"
-  parses "def =~(); end;"
  parses "def =~(); end;"
-  parses "lib LibC\nfun getchar(a : Int, b : Float)\nend"
  parses "lib LibC\nfun getchar(a : Int, b : Float)\nend"
-  says syntax error on "{1 => 2 3 => 4}"
  says syntax error on "{1 => 2 3 => 4}"
-  parses "def foo(@offsetof); end"
  parses "def foo(@offsetof); end"
-  parses "1 & 2"
  parses "1 & 2"
-  parses "`foo\#{1}bar`"
  parses "`foo\#{1}bar`"
-  says syntax error on "->(x, y z) { }"
  says syntax error on "->(x, y z) { }"
-  parses "foo(&.as?(T).bar)"
  parses "foo(&.as?(T).bar)"
-  parses "1.=~(2)"
  parses "1.=~(2)"
-  parses "1 <= 2"
  parses "1 <= 2"
-  parses "macro foo;%var;end"
  parses "macro foo;%var;end"
-  parses "x.foo a: 1, b: 2 "
  parses "x.foo a: 1, b: 2 "
-  parses "property enum : Int32"
  parses "property enum : Int32"
-  says syntax error on "def foo(foo until); end"
  says syntax error on "def foo(foo until); end"
-  parses "Int[8, 4]"
  parses "Int[8, 4]"
-  parses "macro foo\n'\\''\nend"
  parses "macro foo\n'\\''\nend"
-  says syntax error on "a = 1; b = 2; a, b += 1, 2"
  says syntax error on "a = 1; b = 2; a, b += 1, 2"
-  parses "foo.%"
  parses "foo.%"
-  parses "def *(); end"
  parses "def *(); end"
-  says syntax error on "foo { |self| }"
  says syntax error on "foo { |self| }"
-  parses "foo z: out x; x"
  parses "foo z: out x; x"
-  parses "def foo(while foo); end"
  parses "def foo(while foo); end"
-  parses "foo(z: 0, a: n == 2)"
  parses "foo(z: 0, a: n == 2)"
-  parses "lib LibC; enum Foo; A = 1; B; end end"
  parses "lib LibC; enum Foo; A = 1; B; end end"
-  parses "next 1 if true"
  parses "next 1 if true"
-  parses "foo 1, **bar"
  parses "foo 1, **bar"
-  parses "1 ** 2"
  parses "1 ** 2"
-  parses "foo.=== do end"
  parses "foo.=== do end"
-  parses "foo = 1; ->foo.!~(Int32)"
  parses "foo = 1; ->foo.!~(Int32)"
-  parses "def foo(@@instance_sizeof); end"
  parses "def foo(@@instance_sizeof); end"
-  says syntax error on "foo { |(offsetof)| }"
  says syntax error on "foo { |(offsetof)| }"
-  parses "->Foo::Bar::Baz.foo"
  parses "->Foo::Bar::Baz.foo"
-  says syntax error on "def foo(foo out); end"
  says syntax error on "def foo(foo out); end"
-  says syntax error on "foo { |false| }"
  says syntax error on "foo { |false| }"
-  parses "def self.+; end;"
  parses "def self.+; end;"
-  parses "a = 1"
  parses "a = 1"
-  parses "foo.bar [1]"
  parses "foo.bar [1]"
-  parses "case 1\nin nil; 2; end"
  parses "case 1\nin nil; 2; end"
-  parses "asm(\"nop\" : \"a\"(0), \"b\"(1) : \"c\"(2), \"d\"(3))"
  parses "asm(\"nop\" : \"a\"(0), \"b\"(1) : \"c\"(2), \"d\"(3))"
-  parses "def foo(x = 1, *y); 1; end"
  parses "def foo(x = 1, *y); 1; end"
-  parses "n &** 2"
  parses "n &** 2"
-  says syntax error on "while break; end"
  says syntax error on "while break; end"
-  parses "foo [1]"
  parses "foo [1]"
-  parses "def =~(); end"
  parses "def =~(); end"
-  parses "property sizeof : Int32"
  parses "property sizeof : Int32"
-  parses "[\n1,2\n]"
  parses "[\n1,2\n]"
-  parses "def /(); end;"
  parses "def /(); end;"
-  parses "x[..2]"
  parses "x[..2]"
-  parses "private : Int32"
  parses "private : Int32"
-  parses "a.b /2/"
  parses "a.b /2/"
-  parses "->Foo.<=(Int32)"
  parses "->Foo.<=(Int32)"
-  parses "case 1\nelse\n2\nend"
  parses "case 1\nelse\n2\nend"
-  parses "def foo(x @with); end"
  parses "def foo(x @with); end"
-  parses "->Foo.==(Int32)"
  parses "->Foo.==(Int32)"
-  parses "Foo??"
  parses "Foo??"
-  parses "Foo(T)?"
  parses "Foo(T)?"
-  parses "def >=(*args, **opts, &); end"
  parses "def >=(*args, **opts, &); end"
-  parses "1.as(Bar)"
  parses "1.as(Bar)"
-  parses "def &(); end"
  parses "def &(); end"
-  says syntax error on "foo { |(if)| }"
  says syntax error on "foo { |(if)| }"
-  parses "foo = 1; ->foo.&**(Int32)"
  parses "foo = 1; ->foo.&**(Int32)"
-  parses "def ===(other, file = 1); end"
  parses "def ===(other, file = 1); end"
-  parses "foo(n & 2)"
  parses "foo(n & 2)"
-  parses "foo out @x; @x"
  parses "foo out @x; @x"
-  says syntax error on "->() :Int32 { }"
  says syntax error on "->() :Int32 { }"
-  says syntax error on "def foo &block : Int -> Double ; end"
  says syntax error on "def foo &block : Int -> Double ; end"
-  parses "property macro : Int32"
  parses "property macro : Int32"
-  parses "a.foo, a.bar = 1, 2"
  parses "a.foo, a.bar = 1, 2"
-  parses "a : Foo = 1"
  parses "a : Foo = 1"
-  parses "def foo; a = 1; a; end"
  parses "def foo; a = 1; a; end"
-  parses "n >> 2"
  parses "n >> 2"
-  parses "def self.~; end;"
  parses "def self.~; end;"
-  parses "def foo(@in); end"
  parses "def foo(@in); end"
-  parses "lib LibC; type A = B**; end"
  parses "lib LibC; type A = B**; end"
-  says syntax error on "if next; end"
  says syntax error on "if next; end"
-  parses "def |; end;"
  parses "def |; end;"
-  parses "next 1"
  parses "next 1"
-  parses "foo &block"
  parses "foo &block"
-  sets correct location of global path in annotation
  sets correct location of global path in annotation
-  says syntax error on "def foo(while); end"
  says syntax error on "def foo(while); end"
-  parses ":\"\\\"foo\""
  parses ":\"\\\"foo\""
-  parses ":\"\\\"foo\\\"\""
  parses ":\"\\\"foo\\\"\""
-  parses "[/ /, / /]"
  parses "[/ /, / /]"
-  parses "-@@foo"
  parses "-@@foo"
-  parses "foo.bar(1).baz"
  parses "foo.bar(1).baz"
-  parses "foo.bar= *baz"
  parses "foo.bar= *baz"
-  says syntax error on "def foo(var = x : Int); end"
  says syntax error on "def foo(var = x : Int); end"
-  parses "def foo(x @@require); end"
  parses "def foo(x @@require); end"
-  says syntax error on "<<-HERE\n   One\n \#{1}\n  Zero\n  HERE"
  says syntax error on "<<-HERE\n   One\n \#{1}\n  Zero\n  HERE"
-  parses "class Foo; end\nwhile true; end"
  parses "class Foo; end\nwhile true; end"
-  parses "@[Foo(1, foo: 2\n)]"
  parses "@[Foo(1, foo: 2\n)]"
-  parses "foo /;/"
  parses "foo /;/"
-  parses "def ^; end;"
  parses "def ^; end;"
-  parses "enum Foo; macro foo;end; end"
  parses "enum Foo; macro foo;end; end"
-  parses "+1"
  parses "+1"
-  says syntax error on "def foo(\"\" y); y; end"
  says syntax error on "def foo(\"\" y); y; end"
-  parses "{% x unless 1 %}"
  parses "{% x unless 1 %}"
-  parses "def foo; yield; end"
  parses "def foo; yield; end"
-  parses "{% begin %}%Q[ %s ]{% end %}"
  parses "{% begin %}%Q[ %s ]{% end %}"
-  parses "foo = 1; ->foo.<(Int32)"
  parses "foo = 1; ->foo.<(Int32)"
-  parses ":[]?"
  parses ":[]?"
-  says syntax error on "return &- 1"
  says syntax error on "return &- 1"
-  parses "def foo(next foo); end"
  parses "def foo(next foo); end"
-  parses "def foo(pointerof foo); end"
  parses "def foo(pointerof foo); end"
-  parses "def foo(abstract foo); end"
  parses "def foo(abstract foo); end"
-  says syntax error on "def foo(_ y); y; end"
  says syntax error on "def foo(_ y); y; end"
-  parses "def foo(@@var = 1); 1; end"
  parses "def foo(@@var = 1); 1; end"
-  parses "a = 1; a |=\n1"
  parses "a = 1; a |=\n1"
-  says syntax error on "def foo(select); end"
  says syntax error on "def foo(select); end"
-  parses "a = 1; a <<= 1"
  parses "a = 1; a <<= 1"
-  parses "if foo; 1; else; 2; end"
  parses "if foo; 1; else; 2; end"
-  says syntax error on "foo[1] = next"
  says syntax error on "foo[1] = next"
-  parses "def foo : Int32\n1\nend"
  parses "def foo : Int32\n1\nend"
-  parses "def foo(x @extend); end"
  parses "def foo(x @extend); end"
-  parses "~ 1"
  parses "~ 1"
-  parses "1\\\r\n + 2"
  parses "1\\\r\n + 2"
-  parses "foo(a: n &** 2)"
  parses "foo(a: n &** 2)"
-  parses "def foo(protected foo); end"
  parses "def foo(protected foo); end"
-  parses "{% begin %}{% if true %}if true{% end %}\n{% if true %}end{% end %}{% end %}"
  parses "{% begin %}{% if true %}if true{% end %}\n{% if true %}end{% end %}{% end %}"
-  parses "def foo(x @@self); end"
  parses "def foo(x @@self); end"
-  parses "foo = 1; foo -1"
  parses "foo = 1; foo -1"
-  says syntax error on "foo { |(self)| }"
  says syntax error on "foo { |(self)| }"
-  parses "{} of Int32 -> Int32 => Int32"
  parses "{} of Int32 -> Int32 => Int32"
-  parses "if : Int32"
  parses "if : Int32"
-  parses "foo(z: 0, a: n >> 2)"
  parses "foo(z: 0, a: n >> 2)"
-  parses "->::foo!"
  parses "->::foo!"
-  parses "next 1, *2"
  parses "next 1, *2"
-  parses "a = b = 2"
  parses "a = b = 2"
-  parses "1 +\n2"
  parses "1 +\n2"
-  parses "Foo?"
  parses "Foo?"
-  says syntax error on "{% unless 1 %} 2 {% elsif 3 %} 3 {% end %}"
  says syntax error on "{% unless 1 %} 2 {% elsif 3 %} 3 {% end %}"
-  parses "Set(Int32) {1, 2, 3}"
  parses "Set(Int32) {1, 2, 3}"
-  parses "require \"foo\""
  parses "require \"foo\""
-  parses "Foo(_)"
  parses "Foo(_)"
-  parses "offsetof(\n  Foo,\n  @foo\n)"
  parses "offsetof(\n  Foo,\n  @foo\n)"
-  parses "foo./(1, 2) { 3 }"
  parses "foo./(1, 2) { 3 }"
-  parses "foo(x, *bar, *baz, y)"
  parses "foo(x, *bar, *baz, y)"
-  parses "1_u128"
  parses "1_u128"
-  parses "break *{1, 2}"
  parses "break *{1, 2}"
-  says syntax error on "{\n1 => 2, 3 => 4\n5 => 6}"
  says syntax error on "{\n1 => 2, 3 => 4\n5 => 6}"
-  parses "begin; 1; rescue ex; 2; end"
  parses "begin; 1; rescue ex; 2; end"
-  parses "{% begin %}%r<\\A>{% end %}"
  parses "{% begin %}%r<\\A>{% end %}"
-  parses "case 1\nin Int32.class; 2; end"
  parses "case 1\nin Int32.class; 2; end"
-  parses "f.x |= 2"
  parses "f.x |= 2"
-  parses "def *(); end;"
  parses "def *(); end;"
-  parses "1\n-2"
  parses "1\n-2"
-  parses "a = 1; a[2] ||= 3"
  parses "a = 1; a[2] ||= 3"
-  parses "def >>(); end"
  parses "def >>(); end"
-  parses "alias Foo::Bar = Baz"
  parses "alias Foo::Bar = Baz"
-  parses "def foo(@typeof); end"
  parses "def foo(@typeof); end"
-  parses "\"\""
  parses "\"\""
-  says syntax error on "offsetof(X, 'c')"
  says syntax error on "offsetof(X, 'c')"
-  parses "foo(a: n !~ 2)"
  parses "foo(a: n !~ 2)"
-  parses "{% x if 1 %}"
  parses "{% x if 1 %}"
-  says syntax error on "break // 1"
  says syntax error on "break // 1"
-  parses "{% begin %}%w[ %s ]{% end %}"
  parses "{% begin %}%w[ %s ]{% end %}"
-  parses "->Foo.>>(Int32)"
  parses "->Foo.>>(Int32)"
-  says syntax error on "1 ? : 2 : 3"
  says syntax error on "1 ? : 2 : 3"
-  parses "module Foo\ndef foo; end; end"
  parses "module Foo\ndef foo; end; end"
-  parses "foo % Q()"
  parses "foo % Q()"
-  parses "def foo(@@enum); end"
  parses "def foo(@@enum); end"
-  says syntax error on "foo(&block) {}"
  says syntax error on "foo(&block) {}"
-  says syntax error on "def foo(extend); end"
  says syntax error on "def foo(extend); end"
-  parses "foo.<=(1, 2) { 3 }"
  parses "foo.<=(1, 2) { 3 }"
-  parses "property lib : Int32"
  parses "property lib : Int32"
-  says syntax error on "<<-FOO\n1\nFOO + 2"
  says syntax error on "<<-FOO\n1\nFOO + 2"
-  parses "macro foo;end"
  parses "macro foo;end"
-  parses "1 &* 2"
  parses "1 &* 2"
-  says syntax error on "break &+ 1"
  says syntax error on "break &+ 1"
-  says syntax error on "return > 1"
  says syntax error on "return > 1"
-  parses "lib LibC; {{ 1 }}; end"
  parses "lib LibC; {{ 1 }}; end"
-  parses "def foo(x) : Int32\n1\nend"
  parses "def foo(x) : Int32\n1\nend"
-  parses "[] of ->;"
  parses "[] of ->;"
-  parses "foo.** 1, 2"
  parses "foo.** 1, 2"
-  parses "{% if true %}\n{% end %}\n{% if true %}\n{% end %}"
  parses "{% if true %}\n{% end %}\n{% if true %}\n{% end %}"
-  parses "1 &+ 2"
  parses "1 &+ 2"
-  parses "<<-HERE\nHERE"
  parses "<<-HERE\nHERE"
-  parses "a = 1; a -=\n1"
  parses "a = 1; a -=\n1"
-  parses "Foo({\"foo\": X, \"bar\": Y})"
  parses "Foo({\"foo\": X, \"bar\": Y})"
-  parses "foo[1] /2"
  parses "foo[1] /2"
-  parses "def foo(@true); end"
  parses "def foo(@true); end"
-  parses "case 1\nin true; 2; end"
  parses "case 1\nin true; 2; end"
-  says syntax error on "break[0]= 1"
  says syntax error on "break[0]= 1"
-  parses "foo.| 1, 2"
  parses "foo.| 1, 2"
-  parses "{foo:a, bar:b}"
  parses "{foo:a, bar:b}"
-  parses "->Foo.!~(Int32)"
  parses "->Foo.!~(Int32)"
-  parses "T::U/1"
  parses "T::U/1"
-  parses "()"
  parses "()"
-  parses "foo(z: 0, a: n >= 2)"
  parses "foo(z: 0, a: n >= 2)"
-  says syntax error on "macro foo x y; end"
  says syntax error on "macro foo x y; end"
-  says syntax error on "asm(\"\" ::: \"\"(var))"
  says syntax error on "asm(\"\" ::: \"\"(var))"
-  says syntax error on "next &+ 1"
  says syntax error on "next &+ 1"
-  parses "foo.=~"
  parses "foo.=~"
-  says syntax error on "if return; end"
  says syntax error on "if return; end"
-  parses "foo()"
  parses "foo()"
-  parses "foo &->bar"
  parses "foo &->bar"
-  parses "def foo; / /; end"
  parses "def foo; / /; end"
-  parses "pointerof(@a)"
  parses "pointerof(@a)"
-  parses "foo = 1; ->foo.-(Int32)"
  parses "foo = 1; ->foo.-(Int32)"
-  says syntax error on "return | 1"
  says syntax error on "return | 1"
-  parses "x : Foo(A, *B, C)"
  parses "x : Foo(A, *B, C)"
-  parses "call foo : A, end : B"
  parses "call foo : A, end : B"
-  says syntax error on "{\n1 => 2\n3 => 4\n}"
  says syntax error on "{\n1 => 2\n3 => 4\n}"
-  says syntax error on "a, b.<="
  says syntax error on "a, b.<="
-  says syntax error on "case 1\nwhen Int32; 2; in 2"
  says syntax error on "case 1\nwhen Int32; 2; in 2"
-  parses "a = 1; a >>=\n1"
  parses "a = 1; a >>=\n1"
-  parses "foo.===(1, 2) { 3 }"
  parses "foo.===(1, 2) { 3 }"
-  parses "foo(&.block)"
  parses "foo(&.block)"
-  parses "foo(Foo: 1, Bar: 2)"
  parses "foo(Foo: 1, Bar: 2)"
-  parses "\"hello \"\\\r\n\"world\""
  parses "\"hello \"\\\r\n\"world\""
-  parses "def foo(var : self.class); end"
  parses "def foo(var : self.class); end"
-  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\"\n: \"volatile\", \"alignstack\"\n,\n\"intel\"\n)"
  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\"\n: \"volatile\", \"alignstack\"\n,\n\"intel\"\n)"
-  parses "macro foo(x)\n 1 + 2; end"
  parses "macro foo(x)\n 1 + 2; end"
-  says syntax error on "def foo(foo end); end"
  says syntax error on "def foo(foo end); end"
-  parses "def self.-; end;"
  parses "def self.-; end;"
-  says syntax error on "foo { |in| }"
  says syntax error on "foo { |in| }"
-  parses "yield 1 if true"
  parses "yield 1 if true"
-  parses "<<-HERE\n   \#{1}One\n  \#{2}Zero\n  HERE"
  parses "<<-HERE\n   \#{1}One\n  \#{2}Zero\n  HERE"
-  parses "_, *_, _, _ = 1, 2, 3"
  parses "_, *_, _, _ = 1, 2, 3"
-  says syntax error on "foo **bar, 1"
  says syntax error on "foo **bar, 1"
-  parses "def foo(\nvar); end"
  parses "def foo(\nvar); end"
-  parses "foo.|"
  parses "foo.|"
-  parses "def foo(@@begin); end"
  parses "def foo(@@begin); end"
-  says syntax error on "1 until 3"
  says syntax error on "1 until 3"
-  parses "foo.=="
  parses "foo.=="
-  says syntax error on "foo { |(enum)| }"
  says syntax error on "foo { |(enum)| }"
-  says syntax error on "foo { |macro| }"
  says syntax error on "foo { |macro| }"
-  says syntax error on "def foo(abstract); end"
  says syntax error on "def foo(abstract); end"
-  says syntax error on "fun foo\nclass"
  says syntax error on "fun foo\nclass"
-  says syntax error on "def foo(foo false); end"
  says syntax error on "def foo(foo false); end"
-  says syntax error on "foo { |(yield)| }"
  says syntax error on "foo { |(yield)| }"
-  says syntax error on "fun foo(Int32); end"
  says syntax error on "fun foo(Int32); end"
-  parses "def self.<=; end;"
  parses "def self.<=; end;"
-  parses "def >(); end"
  parses "def >(); end"
-  parses "->Foo.foo?"
  parses "->Foo.foo?"
-  says syntax error on "foo { |module| }"
  says syntax error on "foo { |module| }"
-  parses "a = 1; yield a rescue a"
  parses "a = 1; yield a rescue a"
-  parses "def self.*; end;"
  parses "def self.*; end;"
-  parses "foo unless 3"
  parses "foo unless 3"
-  parses "!a && b"
  parses "!a && b"
-  parses "asm(\"nop\" ::::)"
  parses "asm(\"nop\" ::::)"
-  parses "1.tap do; 1; rescue; 2; end"
  parses "1.tap do; 1; rescue; 2; end"
-  parses "{% if 1\n  x\nend %}"
  parses "{% if 1\n  x\nend %}"
-  says syntax error on "def foo(module); end"
  says syntax error on "def foo(module); end"
-  parses "{% begin %}%( %s ){% end %}"
  parses "{% begin %}%( %s ){% end %}"
-  parses "def foo(x @@return); end"
  parses "def foo(x @@return); end"
-  parses "def foo(@break); end"
  parses "def foo(@break); end"
-  parses "def self.**; end;"
  parses "def self.**; end;"
-  parses "foo(a: 1, &block)"
  parses "foo(a: 1, &block)"
-  parses "case 1; end"
  parses "case 1; end"
-  says syntax error on "break &- 1"
  says syntax error on "break &- 1"
-  parses "lib LibC\n$errno : Int32\n$errno2 : Int32\nend"
  parses "lib LibC\n$errno : Int32\n$errno2 : Int32\nend"
-  parses "x = 1; foo x {\n}"
  parses "x = 1; foo x {\n}"
-  parses "a = 1\nfoo - a"
  parses "a = 1\nfoo - a"
-  parses "macro <=>;end"
  parses "macro <=>;end"
-  says syntax error on "def foo var\n end"
  says syntax error on "def foo var\n end"
-  says syntax error on "def foo var; end"
  says syntax error on "def foo var; end"
-  parses "foo a, / /"
  parses "foo a, / /"
-  parses "macro foo; bar class: 1; end"
  parses "macro foo; bar class: 1; end"
-  says syntax error on "x : String, a = 4"
  says syntax error on "x : String, a = 4"
-  parses "A.new(\"x\", B.new(\"y\"))"
  parses "A.new(\"x\", B.new(\"y\"))"
-  parses "n =~ 2"
  parses "n =~ 2"
-  parses "->Foo.%(Int32)"
  parses "->Foo.%(Int32)"
-  parses "foo(1 + 2)"
  parses "foo(1 + 2)"
-  parses "foo = 1; ->foo.==(Int32)"
  parses "foo = 1; ->foo.==(Int32)"
-  parses "foo Bar { 1 }"
  parses "foo Bar { 1 }"
-  says syntax error on "return ^ 1"
  says syntax error on "return ^ 1"
-  says syntax error on "return <= 1"
  says syntax error on "return <= 1"
-  says syntax error on "{1, ->{ |x| x } }"
  says syntax error on "{1, ->{ |x| x } }"
-  end locations
-    gets corrects end location for "1.."
    gets corrects end location for "1.."
-    gets corrects end location for "puts obj.foo"
    gets corrects end location for "puts obj.foo"
-    sets correct location of `else` of if statement
    sets correct location of `else` of if statement
-    gets corrects end location for "Foo { 1 }"
    gets corrects end location for "Foo { 1 }"
-    says syntax error on "def foo(x : 1); end"
    says syntax error on "def foo(x : 1); end"
-    gets corrects end location for "{%\nif foo\n  bar\n end\n%}"
    gets corrects end location for "{%\nif foo\n  bar\n end\n%}"
-    gets corrects end location for "foo : Foo[42]"
    gets corrects end location for "foo : Foo[42]"
-    gets corrects end location for "foo 1, 2"
    gets corrects end location for "foo 1, 2"
-    parses "%w{one{} two}"
    parses "%w{one{} two}"
-    sets location of lib fun name
    sets location of lib fun name
-    gets corrects end location for "sizeof(Foo)"
    gets corrects end location for "sizeof(Foo)"
-    gets corrects end location for "a = 123"
    gets corrects end location for "a = 123"
-    gets corrects end location for var
    gets corrects end location for var
-    gets corrects end location for "[1, 2,]"
    gets corrects end location for "[1, 2,]"
-    sets correct location of proc literal
    sets correct location of proc literal
-    parses "%i((one two))"
    parses "%i((one two))"
-    says syntax error on "foo(1\n,2)"
    says syntax error on "foo(1\n,2)"
-    says syntax error on "case x; when :a; 2; when :a; end"
    says syntax error on "case x; when :a; 2; when :a; end"
-    gets corrects end location for "a, b = 1, 2 if 3"
    gets corrects end location for "a, b = 1, 2 if 3"
-    gets corrects end location for ":foo"
    gets corrects end location for ":foo"
-    parses "%i(foo(bar) baz)"
    parses "%i(foo(bar) baz)"
-    gets corrects end location for "foo : Foo*"
    gets corrects end location for "foo : Foo*"
-    gets corrects end location for "foo.@foo"
    gets corrects end location for "foo.@foo"
-    parses "annotation Foo::Bar\n\nend"
    parses "annotation Foo::Bar\n\nend"
-    gets corrects end location for "foo ->self.bar"
    gets corrects end location for "foo ->self.bar"
-    says syntax error on "case x; when 1..2; 2; when 1..2; end"
    says syntax error on "case x; when 1..2; 2; when 1..2; end"
-    gets corrects end location for "f.x=(foo).bar"
    gets corrects end location for "f.x=(foo).bar"
-    says syntax error on "%i("
    says syntax error on "%i("
-    gets corrects end location for "pointerof(@foo)"
    gets corrects end location for "pointerof(@foo)"
-    sets correct locations of keywords of exception handler
    sets correct locations of keywords of exception handler
-    parses "%w{\\{one}"
    parses "%w{\\{one}"
-    gets corrects end location for "%w(one two)"
    gets corrects end location for "%w(one two)"
-    says syntax error on "def foo(x : Int32 | (Int32, Int32)); end"
    says syntax error on "def foo(x : Int32 | (Int32, Int32)); end"
-    gets corrects end location for "macro foo;end"
    gets corrects end location for "macro foo;end"
-    gets corrects end location for block with { ... }
    gets corrects end location for block with { ... }
-    gets corrects end location for "\"hello\""
    gets corrects end location for "\"hello\""
-    gets corrects end location for "Foo?"
    gets corrects end location for "Foo?"
-    gets correct location of empty exception handler inside def
    gets correct location of empty exception handler inside def
-    sets correct location of vars in C struct
    sets correct location of vars in C struct
-    sets correct location of trailing rescue
    sets correct location of trailing rescue
-    gets corrects end location for "foo *bar"
    gets corrects end location for "foo *bar"
-    gets corrects end location for "::foo"
    gets corrects end location for "::foo"
-    gets corrects end location for "foo ->bar(Baz)"
    gets corrects end location for "foo ->bar(Baz)"
-    says syntax error on "%i{one}}"
    says syntax error on "%i{one}}"
-    sets correct locations of macro if / else / elsif
    sets correct locations of macro if / else / elsif
-    gets corrects end location for "foo.!()"
    gets corrects end location for "foo.!()"
-    parses "%i(one\\ two)"
    parses "%i(one\\ two)"
-    says syntax error on "%Q("
    says syntax error on "%Q("
-    gets corrects end location for "/foo/"
    gets corrects end location for "/foo/"
-    gets corrects end location for "foo ->@bar.baz"
    gets corrects end location for "foo ->@bar.baz"
-    sets correct location for fun def with return type
    sets correct location for fun def with return type
-    sets correct location of call name
    sets correct location of call name
-    gets corrects end location for "123"
    gets corrects end location for "123"
-    gets corrects end location for "f.x = foo"
    gets corrects end location for "f.x = foo"
-    says syntax error on "case x; when {1, 2}; 2; when {1, 2}; end"
    says syntax error on "case x; when {1, 2}; 2; when {1, 2}; end"
-    gets corrects end location for "def foo; 1; end"
    gets corrects end location for "def foo; 1; end"
-    gets corrects end location for "abstract def foo : Int32"
    gets corrects end location for "abstract def foo : Int32"
-    sets correct location of var in type declaration
    sets correct location of var in type declaration
-    gets corrects end location for "foo ->@@bar.baz="
    gets corrects end location for "foo ->@@bar.baz="
-    parses "%w{one\\ two}"
    parses "%w{one\\ two}"
-    gets corrects end location for "return 1"
    gets corrects end location for "return 1"
-    gets corrects end location for "1..3"
    gets corrects end location for "1..3"
-    gets corrects end location for "foo ->bar"
    gets corrects end location for "foo ->bar"
-    gets corrects end location for "a || b"
    gets corrects end location for "a || b"
-    sets correct locations of macro if / else
    sets correct locations of macro if / else
-    sets correct location for fun def
    sets correct location for fun def
-    says syntax error on "def foo(x : Array({sizeof(Int32), 2})); end"
    says syntax error on "def foo(x : Array({sizeof(Int32), 2})); end"
-    gets corrects end location for "foo ->Bar.baz="
    gets corrects end location for "foo ->Bar.baz="
-    says syntax error on "case x; when 1; when _; end"
    says syntax error on "case x; when 1; when _; end"
-    gets corrects end location for "unless 1; 2; end"
    gets corrects end location for "unless 1; 2; end"
-    sets correct location of `else` of unless statement
    sets correct location of `else` of unless statement
-    says syntax error on "{1\n,2}"
    says syntax error on "{1\n,2}"
-    sets correct location and end location of parenthesized empty block
    sets correct location and end location of parenthesized empty block
-    gets corrects end location for "include Foo"
    gets corrects end location for "include Foo"
-    says syntax error on "case x; when true; 2; when true; end"
    says syntax error on "case x; when true; 2; when true; end"
-    sets correct location of var in macro for loop
    sets correct location of var in macro for loop
-    gets corrects end location for "foo"
    gets corrects end location for "foo"
-    says syntax error on "def foo(x : *Int32); end"
    says syntax error on "def foo(x : *Int32); end"
-    gets corrects end location for "1 if 2"
    gets corrects end location for "1 if 2"
-    gets corrects end location for "Int[8]?"
    gets corrects end location for "Int[8]?"
-    says syntax error on "def foo(x : {Int32, (Int32, Int32)}); end"
    says syntax error on "def foo(x : {Int32, (Int32, Int32)}); end"
-    says syntax error on "%q("
    says syntax error on "%q("
-    gets corrects of ~
    gets corrects of ~
-    gets correct location after macro with yield
    gets correct location after macro with yield
-    says syntax error on "%w("
    says syntax error on "%w("
-    parses "annotation Foo\nend\nrequire \"bar\""
    parses "annotation Foo\nend\nrequire \"bar\""
-    gets corrects end location for "foo ->@bar.baz="
    gets corrects end location for "foo ->@bar.baz="
-    gets corrects end location for "if 1; else; 2; end"
    gets corrects end location for "if 1; else; 2; end"
-    parses "%i{(one two)}"
    parses "%i{(one two)}"
-    gets corrects end location for "@@foo"
    gets corrects end location for "@@foo"
-    gets corrects end location for "@a = uninitialized Foo"
    gets corrects end location for "@a = uninitialized Foo"
-    says syntax error on "case x; when 1; 2; when 1; end"
    says syntax error on "case x; when 1; 2; when 1; end"
-    gets corrects end location for "false"
    gets corrects end location for "false"
-    gets corrects end location for "require \"foo\""
    gets corrects end location for "require \"foo\""
-    gets corrects end location for "def foo; end"
    gets corrects end location for "def foo; end"
-    says syntax error on "{\"a\" : 1}"
    says syntax error on "{\"a\" : 1}"
-    sets correct location of `elsif` of if statement
    sets correct location of `elsif` of if statement
-    gets corrects end location for "foo(\n  &.block\n)"
    gets corrects end location for "foo(\n  &.block\n)"
-    sets location of obj.x += as call
    sets location of obj.x += as call
-    sets location of enum method
    sets location of enum method
-    gets corrects end location for "foo : Foo.class"
    gets corrects end location for "foo : Foo.class"
-    gets correct location after macro with yield
    gets correct location after macro with yield
-    gets corrects end location for "while 1; end"
    gets corrects end location for "while 1; end"
-    gets corrects end location for block with do ... end
    gets corrects end location for block with do ... end
-    doesn't override yield with macro yield
    doesn't override yield with macro yield
-    says syntax error on "case x; when _; end"
    says syntax error on "case x; when _; end"
-    gets corrects end location for "foo.bar(x) do; end"
    gets corrects end location for "foo.bar(x) do; end"
-    gets corrects end location for "module Foo; end"
    gets corrects end location for "module Foo; end"
-    says syntax error on "def foo(x : (*Int32)); end"
    says syntax error on "def foo(x : (*Int32)); end"
-    gets corrects end location for "@foo"
    gets corrects end location for "@foo"
-    says syntax error on "case x; when nil; 2; when nil; end"
    says syntax error on "case x; when nil; 2; when nil; end"
-    says syntax error on "def foo(x : {sizeof(Int32), 2}); end"
    says syntax error on "def foo(x : {sizeof(Int32), 2}); end"
-    says syntax error on "class Foo(X\n,Y); 1; end"
    says syntax error on "class Foo(X\n,Y); 1; end"
-    gets corrects end location for "foo ->self.bar="
    gets corrects end location for "foo ->self.bar="
-    gets corrects end location for "abstract def foo(x)"
    gets corrects end location for "abstract def foo(x)"
-    says syntax error on "{1, 2\n,3}"
    says syntax error on "{1, 2\n,3}"
-    sets correct location of element in array literal
    sets correct location of element in array literal
-    says syntax error on "def foo(x\n,y); 1; end"
    says syntax error on "def foo(x\n,y); 1; end"
-    gets corrects end location for "foo ->@@bar.baz"
    gets corrects end location for "foo ->@@bar.baz"
-    gets corrects end location for "foo : Foo**"
    gets corrects end location for "foo : Foo**"
-    parses "%w{one\ntwo}"
    parses "%w{one\ntwo}"
-    gets corrects end location for "1 rescue 2"
    gets corrects end location for "1 rescue 2"
-    sets correct location of implicit tuple literal of multi-return
    sets correct location of implicit tuple literal of multi-return
-    says syntax error on "def foo(x : (Int32, Int32)); end"
    says syntax error on "def foo(x : (Int32, Int32)); end"
-    parses "%w{one\ttwo}"
    parses "%w{one\ttwo}"
-    sets correct locations of macro if / elsif
    sets correct locations of macro if / elsif
-    says syntax error on "%x("
    says syntax error on "%x("
-    says syntax error on "<<-HEREDOC\n"
    says syntax error on "<<-HEREDOC\n"
-    says syntax error on "Foo(X\n,Y)"
    says syntax error on "Foo(X\n,Y)"
-    gets corrects end location for "x : Foo -> Bar"
    gets corrects end location for "x : Foo -> Bar"
-    gets corrects end location for "extend Foo"
    gets corrects end location for "extend Foo"
-    sets correct location of var in proc pointer
    sets correct location of var in proc pointer
-    gets corrects end location for "abstract def foo"
    gets corrects end location for "abstract def foo"
-    sets location of +=
    sets location of +=
-    parses "%w{one\\}}"
    parses "%w{one\\}}"
-    gets corrects end location for "return"
    gets corrects end location for "return"
-    gets corrects end location for "{} of Int32 => String"
    gets corrects end location for "{} of Int32 => String"
-    gets correct location with 
- (#1558)
    gets correct location with 
- (#1558)
-    gets corrects end location for "123.45"
    gets corrects end location for "123.45"
-    sets correct location for fun def on multiple lines
    sets correct location for fun def on multiple lines
-    gets corrects end location for "foo ->bar="
    gets corrects end location for "foo ->bar="
-    says syntax error on "case x; when [1, 2]; 2; when [1, 2]; end"
    says syntax error on "case x; when [1, 2]; 2; when [1, 2]; end"
-    says syntax error on "case x; when \"a\"; 2; when \"a\"; end"
    says syntax error on "case x; when \"a\"; 2; when \"a\"; end"
-    gets corrects end location for "->{ }"
    gets corrects end location for "->{ }"
-    sets correct location of trailing ensure
    sets correct location of trailing ensure
-    gets corrects end location for "offsetof({X, Y}, 1)"
    gets corrects end location for "offsetof({X, Y}, 1)"
-    gets corrects end location for "struct Foo; end"
    gets corrects end location for "struct Foo; end"
-    gets corrects end location for "@@a = uninitialized Foo"
    gets corrects end location for "@@a = uninitialized Foo"
-    gets corrects end location for "!foo"
    gets corrects end location for "!foo"
-    gets corrects end location for "yield"
    gets corrects end location for "yield"
-    gets corrects end location for "begin; 1; 2; 3; end"
    gets corrects end location for "begin; 1; 2; 3; end"
-    gets corrects end location for "x : Foo ->"
    gets corrects end location for "x : Foo ->"
-    gets corrects end location for var + var
    gets corrects end location for var + var
-    gets corrects end location for "'a'"
    gets corrects end location for "'a'"
-    gets corrects end location for "foo **bar"
    gets corrects end location for "foo **bar"
-    says syntax error on "%w{{one}"
    says syntax error on "%w{{one}"
-    says syntax error on "case x; when 1, _; end"
    says syntax error on "case x; when 1, _; end"
-    parses "annotation Foo; end"
    parses "annotation Foo; end"
-    gets corrects end location for "a, b = 1, 2"
    gets corrects end location for "a, b = 1, 2"
-    gets corrects end location for "{1, 2}"
    gets corrects end location for "{1, 2}"
-    gets corrects end location for "if 1; elseif; 2; end"
    gets corrects end location for "if 1; elseif; 2; end"
-    gets corrects end location for "f.x=(*foo)"
    gets corrects end location for "f.x=(*foo)"
-    parses "%w{\n}"
    parses "%w{\n}"
-    gets corrects end location for "def foo; rescue ex; end"
    gets corrects end location for "def foo; rescue ex; end"
-    gets corrects end location for "typeof(1)"
    gets corrects end location for "typeof(1)"
-    says syntax error on "%r("
    says syntax error on "%r("
-    gets corrects end location for "[] of Int32"
    gets corrects end location for "[] of Int32"
-    gets corrects end location for "foo.[0] = 1"
    gets corrects end location for "foo.[0] = 1"
-    says syntax error on "case x; when 'a'; 2; when 'a'; end"
    says syntax error on "case x; when 'a'; 2; when 'a'; end"
-    gets corrects end location for "foo.responds_to? :foo"
    gets corrects end location for "foo.responds_to? :foo"
-    gets corrects end location for "Foo(A)"
    gets corrects end location for "Foo(A)"
-    gets corrects end location for "foo.nil?(  )"
    gets corrects end location for "foo.nil?(  )"
-    says syntax error on "macro foo(x\n,y); 1; end"
    says syntax error on "macro foo(x\n,y); 1; end"
-    gets corrects end location for "nil"
    gets corrects end location for "nil"
-    gets corrects end location for "begin; 1; end"
    gets corrects end location for "begin; 1; end"
-    parses "%w{one  two}"
    parses "%w{one  two}"
-    gets corrects end location for "foo.!"
    gets corrects end location for "foo.!"
-    gets corrects end location for "foo(1, 2)"
    gets corrects end location for "foo(1, 2)"
-    gets corrects end location for "a && b"
    gets corrects end location for "a && b"
-    gets corrects end location for "foo.bar= *baz"
    gets corrects end location for "foo.bar= *baz"
-    gets corrects end location for "x : Foo(A, *B, C)"
    gets corrects end location for "x : Foo(A, *B, C)"
-    gets corrects end location for "foo.responds_to?(:foo)"
    gets corrects end location for "foo.responds_to?(:foo)"
-    gets corrects end location for "[1, 2]"
    gets corrects end location for "[1, 2]"
-    gets corrects end location for "{a: 1}"
    gets corrects end location for "{a: 1}"
-    says syntax error on "%i{{one}"
    says syntax error on "%i{{one}"
-    says syntax error on "case x; when /x/; 2; when /x/; end"
    says syntax error on "case x; when /x/; 2; when /x/; end"
-    sets location of top-level fun name
    sets location of top-level fun name
-    gets corrects end location for "yield 1"
    gets corrects end location for "yield 1"
-    gets corrects end location for "Foo"
    gets corrects end location for "Foo"
-    says syntax error on "Foo(x: X\n,y: Y)"
    says syntax error on "Foo(x: X\n,y: Y)"
-    says syntax error on "def foo(x : Int32, Int32); end"
    says syntax error on "def foo(x : Int32, Int32); end"
-    gets corrects end location for "foo bar, out baz"
    gets corrects end location for "foo bar, out baz"
-    gets corrects end location for "foo.nil?"
    gets corrects end location for "foo.nil?"
-    gets corrects end location for "macro foo; 123; end"
    gets corrects end location for "macro foo; 123; end"
-    says syntax error on "foo(a: 1\n,b: 2)"
    says syntax error on "foo(a: 1\n,b: 2)"
-    sets correct location of call name in operator assignment
    sets correct location of call name in operator assignment
-    gets corrects end location for "alias Foo = Bar"
    gets corrects end location for "alias Foo = Bar"
-    says syntax error on "def foo(x : (Int32, Int32) | Int32); end"
    says syntax error on "def foo(x : (Int32, Int32) | Int32); end"
-    says syntax error on "<<-HEREDOC"
    says syntax error on "<<-HEREDOC"
-    says syntax error on "case x; when X; 2; when X; end"
    says syntax error on "case x; when X; 2; when X; end"
-    gets corrects end location for "1 ensure 2"
    gets corrects end location for "1 ensure 2"
-    sets correct location of receiver var in method def
    sets correct location of receiver var in method def
-    sets correct location for fun def with body
    sets correct location for fun def with body
-    parses "annotation Foo\n\nend"
    parses "annotation Foo\n\nend"
-    says syntax error on "{\"a\": 1, \"b\" : 2}"
    says syntax error on "{\"a\": 1, \"b\" : 2}"
-    says syntax error on "%w{one}}"
    says syntax error on "%w{one}}"
-    gets corrects end location for "class Foo; end"
    gets corrects end location for "class Foo; end"
-    gets corrects end location for "foo : Foo?"
    gets corrects end location for "foo : Foo?"
-    gets corrects end location for "foo ->Bar.baz"
    gets corrects end location for "foo ->Bar.baz"
-    correctly computes line number after `\{%
-` (#9857)
    correctly computes line number after `\{%
-` (#9857)
-    gets corrects end location for "1.as(Int32)"
    gets corrects end location for "1.as(Int32)"
-    parses "%i{foo\\nbar baz}"
    parses "%i{foo\\nbar baz}"
-    says syntax error on "[1\n,2]"
    says syntax error on "[1\n,2]"
-    says syntax error on "{1 => 2\n,3 => 4}"
    says syntax error on "{1 => 2\n,3 => 4}"
-    gets corrects end location for "offsetof(Foo, @a)"
    gets corrects end location for "offsetof(Foo, @a)"
-    sets correct location and end location of `begin` block
    sets correct location and end location of `begin` block
-    sets correct location and end location of parenthesized block
    sets correct location and end location of parenthesized block
-  parses "abstract def foo(x)"
  parses "abstract def foo(x)"
-  says syntax error on "break &** 1"
  says syntax error on "break &** 1"
-  parses "def |(); end"
  parses "def |(); end"
-  parses "->Foo.|(Int32)"
  parses "->Foo.|(Int32)"
-  parses "-1_i64"
  parses "-1_i64"
-  parses "def foo(\nvar\n); end"
  parses "def foo(\nvar\n); end"
-  parses "foo(&.as(T).bar)"
  parses "foo(&.as(T).bar)"
-  parses "property private : Int32"
  parses "property private : Int32"
-  parses "{{ foo }}"
  parses "{{ foo }}"
-  parses "def foo(@@false); end"
  parses "def foo(@@false); end"
-  parses "/ /"
  parses "/ /"
-  parses "def foo(x @@fun); end"
  parses "def foo(x @@fun); end"
-  parses "asm(\"nop\" :::: \"volatile\")"
  parses "asm(\"nop\" :::: \"volatile\")"
-  parses "enum Foo; @[Bar]; end"
  parses "enum Foo; @[Bar]; end"
-  parses "\u3042.\u3044, \u3046.\u3048.\u304A = 1, 2"
  parses "\u3042.\u3044, \u3046.\u3048.\u304A = 1, 2"
-  parses "foo.nil?"
  parses "foo.nil?"
-  parses "foo(a: n <= 2)"
  parses "foo(a: n <= 2)"
-  parses "if foo\n1\nend"
  parses "if foo\n1\nend"
-  parses "def foo=(value); end"
  parses "def foo=(value); end"
-  parses "a = 1; a >>= 1"
  parses "a = 1; a >>= 1"
-  says syntax error on "def foo(x : U) forall; end"
  says syntax error on "def foo(x : U) forall; end"
-  says syntax error on "<<-HERE\n   One\nwrong\n  Zero\n  HERE"
  says syntax error on "<<-HERE\n   One\nwrong\n  Zero\n  HERE"
-  parses "foo(x:\n        begin\n          result : Int32 = 1\n          result\n        end\n      )"
  parses "foo(x:\n        begin\n          result : Int32 = 1\n          result\n        end\n      )"
-  parses "sizeof(X)"
  parses "sizeof(X)"
-  parses "lib LibFoo\nend\nif true\nend"
  parses "lib LibFoo\nend\nif true\nend"
-  parses "def self./(); end;"
  parses "def self./(); end;"
-  parses "def !=(other, file = 1); end"
  parses "def !=(other, file = 1); end"
-  parses "foo.[]= 1, 2"
  parses "foo.[]= 1, 2"
-  parses "1/2"
  parses "1/2"
-  parses "def foo(@end); end"
  parses "def foo(@end); end"
-  parses "foo(&.responds_to?(:foo))"
  parses "foo(&.responds_to?(:foo))"
-  parses "def ==(other, file = 1); end"
  parses "def ==(other, file = 1); end"
-  parses "def !~(); end"
  parses "def !~(); end"
-  says syntax error on "def foo(*x, &x); end"
  says syntax error on "def foo(*x, &x); end"
-  parses "foo.>"
  parses "foo.>"
-  parses "Foo(\nT,\nU,\n)"
  parses "Foo(\nT,\nU,\n)"
-  parses "a = 1; a *=\n1"
  parses "a = 1; a *=\n1"
-  parses "macro foo;bar{% begin %}body{% end %}baz;end"
  parses "macro foo;bar{% begin %}body{% end %}baz;end"
-  parses "foo out x; x"
  parses "foo out x; x"
-  parses ":=~"
  parses ":=~"
-  says syntax error on "foo { |fun| }"
  says syntax error on "foo { |fun| }"
-  parses "*a = 1, 2"
  parses "*a = 1, 2"
-  says syntax error on "A = begin; 1; rescue; B = 1; end"
  says syntax error on "A = begin; 1; rescue; B = 1; end"
-  parses "1 +2"
  parses "1 +2"
-  says syntax error on "def foo\nextend\nend"
  says syntax error on "def foo\nextend\nend"
-  parses "(1 .. )"
  parses "(1 .. )"
-  parses "macro +;end"
  parses "macro +;end"
-  parses "def foo(x @@abstract); end"
  parses "def foo(x @@abstract); end"
-  parses "macro foo; 1 + 2; end"
  parses "macro foo; 1 + 2; end"
-  parses "foo + 1"
  parses "foo + 1"
-  parses "puts {{**1}}"
  parses "puts {{**1}}"
-  parses "n / 2"
  parses "n / 2"
-  parses "foo.bar = {} of Int32 => Int32"
  parses "foo.bar = {} of Int32 => Int32"
-  parses "def >=(); end;"
  parses "def >=(); end;"
-  parses "foo 1.bar do\nend"
  parses "foo 1.bar do\nend"
-  says syntax error on "foo { |(in)| }"
  says syntax error on "foo { |(in)| }"
-  says syntax error on "{\n\"foo\"\n\"bar\"\n}"
  says syntax error on "{\n\"foo\"\n\"bar\"\n}"
-  says syntax error on "a.[]() += 1"
  says syntax error on "a.[]() += 1"
-  parses "->::Foo.foo!"
  parses "->::Foo.foo!"
-  says syntax error on "a {} += 1"
  says syntax error on "a {} += 1"
-  parses "def **; end;"
  parses "def **; end;"
-  parses "def []=(*args, **opts); end"
  parses "def []=(*args, **opts); end"
-  parses "def self.^; end;"
  parses "def self.^; end;"
-  parses "foo = 1; ->foo.&(Int32)"
  parses "foo = 1; ->foo.&(Int32)"
-  parses "property pointerof : Int32"
  parses "property pointerof : Int32"
-  parses ":foo!"
  parses ":foo!"
-  says syntax error on "b? = 1"
  says syntax error on "b? = 1"
-  says syntax error on "Foo(\"\": T)"
  says syntax error on "Foo(\"\": T)"
-  says syntax error on "1 == 2, a = 4"
  says syntax error on "1 == 2, a = 4"
-  parses "4./(2)"
  parses "4./(2)"
-  parses "foo(n // 2)"
  parses "foo(n // 2)"
-  parses "case a\nwhen b\n/ /\n\nelse\n/ /\nend"
  parses "case a\nwhen b\n/ /\n\nelse\n/ /\nend"
-  parses "puts _"
  parses "puts _"
-  says syntax error on "def foo(foo begin); end"
  says syntax error on "def foo(foo begin); end"
-  says syntax error on "foo {1, 2}"
  says syntax error on "foo {1, 2}"
-  parses "foo.bar.baz"
  parses "foo.bar.baz"
-  parses "def self.!=(); end;"
  parses "def self.!=(); end;"
-  parses "Foo(\nx:\nT,\ny:\nU,\n)"
  parses "Foo(\nx:\nT,\ny:\nU,\n)"
-  says syntax error on "*a === 1"
  says syntax error on "*a === 1"
-  parses "foo(z: 0, a: n ^ 2)"
  parses "foo(z: 0, a: n ^ 2)"
-  says syntax error on "def foo(x, x); end"
  says syntax error on "def foo(x, x); end"
-  parses "macro foo;bar{% for x in y %}\\  \n   body{% end %}\\   baz;end"
  parses "macro foo;bar{% for x in y %}\\  \n   body{% end %}\\   baz;end"
-  parses "foo.[]=(1, 2)"
  parses "foo.[]=(1, 2)"
-  parses "puts __DIR__"
  parses "puts __DIR__"
-  says syntax error on "def =\nend"
  says syntax error on "def =\nend"
-  parses "def foo(@@include); end"
  parses "def foo(@@include); end"
-  parses "def foo(x @break); end"
  parses "def foo(x @break); end"
-  says syntax error on "macro as?; end"
  says syntax error on "macro as?; end"
-  parses "Int[8]?"
  parses "Int[8]?"
-  parses "->Foo.**(Int32)"
  parses "->Foo.**(Int32)"
-  says syntax error on "if break; end"
  says syntax error on "if break; end"
-  parses "foo = 1; ->foo.^(Int32)"
  parses "foo = 1; ->foo.^(Int32)"
-  parses "a b() {}"
  parses "a b() {}"
-  parses "{%\n1\n2\n3\n%}"
  parses "{%\n1\n2\n3\n%}"
-  parses "(1 ... )"
  parses "(1 ... )"
-  parses "/foo/"
  parses "/foo/"
-  parses "extend : Int32"
  parses "extend : Int32"
-  says syntax error on "def foo(foo def); end"
  says syntax error on "def foo(foo def); end"
-  parses "<<-HERE\n   One\n \n  Zero\n  HERE"
  parses "<<-HERE\n   One\n \n  Zero\n  HERE"
-  parses "foo(n | 2)"
  parses "foo(n | 2)"
-  says syntax error on "A = (B = 1)"
  says syntax error on "A = (B = 1)"
-  parses "macro >=;end"
  parses "macro >=;end"
-  parses "instance_sizeof : Int32"
  parses "instance_sizeof : Int32"
-  parses "a = 1; a /b"
  parses "a = 1; a /b"
-  parses "def foo(@unless); end"
  parses "def foo(@unless); end"
-  parses "Foo(1)"
  parses "Foo(1)"
-  parses "Foo({x: X, typeof: Y})"
  parses "Foo({x: X, typeof: Y})"
-  parses "macro foo(**args)\n1\nend"
  parses "macro foo(**args)\n1\nend"
-  parses "{foo:\"a\", bar:\"b\"}"
  parses "{foo:\"a\", bar:\"b\"}"
-  parses "macro `;end"
  parses "macro `;end"
-  parses "/ hi /"
  parses "/ hi /"
-  parses "foo(regex: //)"
  parses "foo(regex: //)"
-  parses "(bar do\nend)"
  parses "(bar do\nend)"
-  parses ":!~"
  parses ":!~"
-  parses "def foo(x @enum); end"
  parses "def foo(x @enum); end"
-  says syntax error on "macro foo x; 1 + 2; end"
  says syntax error on "macro foo x; 1 + 2; end"
-  says syntax error on "def foo(**args, x); end"
  says syntax error on "def foo(**args, x); end"
-  says syntax error on "break .. 1"
  says syntax error on "break .. 1"
-  parses "x.foo(a: 1, b: 2)"
  parses "x.foo(a: 1, b: 2)"
-  parses "foo 1, 2"
  parses "foo 1, 2"
-  parses "a, *b = 1, 2"
  parses "a, *b = 1, 2"
-  parses "def &**(); end"
  parses "def &**(); end"
-  parses "macro foo\n'\\\\'\nend"
  parses "macro foo\n'\\\\'\nend"
-  parses "a = 1; a <<=\n1"
  parses "a = 1; a <<=\n1"
-  parses ":\"\""
  parses ":\"\""
-  parses "foo out _"
  parses "foo out _"
-  parses "n >= 2"
  parses "n >= 2"
-  parses "{[] of Foo, Bar::Baz.new}"
  parses "{[] of Foo, Bar::Baz.new}"
-  says syntax error on "<<-HERE\n   One\n  \#{1}\n wrong\#{1}\n  HERE"
  says syntax error on "<<-HERE\n   One\n  \#{1}\n wrong\#{1}\n  HERE"
-  parses "foo(z: 0, a: n / 2)"
  parses "foo(z: 0, a: n / 2)"
-  says syntax error on "unless return; end"
  says syntax error on "unless return; end"
-  parses "def foo(@@nil); end"
  parses "def foo(@@nil); end"
-  parses "foo.!=(1, 2) { 3 }"
  parses "foo.!=(1, 2) { 3 }"
-  parses "foo.^(1, 2)"
  parses "foo.^(1, 2)"
-  parses "%r(\\/)"
  parses "%r(\\/)"
-  parses "a = 1; a ensure a"
  parses "a = 1; a ensure a"
-  parses "1+0"
  parses "1+0"
-  parses "foo.!~"
  parses "foo.!~"
-  parses "def foo(var : Char[N]); end"
  parses "def foo(var : Char[N]); end"
-  parses "a = 1; a /=\n1"
  parses "a = 1; a /=\n1"
-  parses "foo.**"
  parses "foo.**"
-  parses "abstract class Foo; end"
  parses "abstract class Foo; end"
-  parses "def foo(x @require); end"
  parses "def foo(x @require); end"
-  parses "'a'"
  parses "'a'"
-  parses "def foo(x @in); end"
  parses "def foo(x @in); end"
-  parses "x[0] ? 1 : 0"
  parses "x[0] ? 1 : 0"
-  parses "<<-HERE1; <<-HERE2\nhere1\nHERE1\nHERE2"
  parses "<<-HERE1; <<-HERE2\nhere1\nHERE1\nHERE2"
-  parses "foo = 1; ->foo.&+(Int32)"
  parses "foo = 1; ->foo.&+(Int32)"
-  parses "1 +2.0"
  parses "1 +2.0"
-  says syntax error on "def foo(foo macro); end"
  says syntax error on "def foo(foo macro); end"
-  says syntax error on "foo { |with| }"
  says syntax error on "foo { |with| }"
-  parses "foo.=~(1, 2) { 3 }"
  parses "foo.=~(1, 2) { 3 }"
-  says syntax error on "return.as(Int32)"
  says syntax error on "return.as(Int32)"
-  parses "lib : Int32"
  parses "lib : Int32"
-  says syntax error on "foo { |while| }"
  says syntax error on "foo { |while| }"
-  parses "property struct : Int32"
  parses "property struct : Int32"
-  parses "def foo(@@unless); end"
  parses "def foo(@@unless); end"
-  parses "x = 1 ensure 2"
  parses "x = 1 ensure 2"
-  parses "def >(); end;"
  parses "def >(); end;"
-  says syntax error on "foo { |select| }"
  says syntax error on "foo { |select| }"
-  parses "1 ... 2"
  parses "1 ... 2"
-  parses "foo %Q"
  parses "foo %Q"
-  parses "-> : Int32 { }"
  parses "-> : Int32 { }"
-  parses "f.x = - 1"
  parses "f.x = - 1"
-  parses "def self./(); end;"
  parses "def self./(); end;"
-  says syntax error on "1 unless break"
  says syntax error on "1 unless break"
-  parses "foo(a: n << 2)"
  parses "foo(a: n << 2)"
-  says syntax error on "foo { |offsetof| }"
  says syntax error on "foo { |offsetof| }"
-  says syntax error on "Foo(T U)"
  says syntax error on "Foo(T U)"
-  parses "def foo(&block); end"
  parses "def foo(&block); end"
-  parses "foo(a: n >= 2)"
  parses "foo(a: n >= 2)"
-  parses "def foo(x @offsetof); end"
  parses "def foo(x @offsetof); end"
-  parses "`foo\\``"
  parses "`foo\\``"
-  parses "foo.*"
  parses "foo.*"
-  parses "def foo(@@require); end"
  parses "def foo(@@require); end"
-  says syntax error on "def foo(in); end"
  says syntax error on "def foo(in); end"
-  parses "def foo(x @module); end"
  parses "def foo(x @module); end"
-  parses ":-"
  parses ":-"
-  says syntax error on "def foo(var = 1 : Int32); end"
  says syntax error on "def foo(var = 1 : Int32); end"
-  parses "def *; end;"
  parses "def *; end;"
-  says syntax error on "next | 1"
  says syntax error on "next | 1"
-  parses "case 1\nwhen .as?(T)\n2\nend"
  parses "case 1\nwhen .as?(T)\n2\nend"
-  parses "asm(\"nop\" :: : :)"
  parses "asm(\"nop\" :: : :)"
-  says syntax error on "break / 1"
  says syntax error on "break / 1"
-  parses "def foo(var : Int); end"
  parses "def foo(var : Int); end"
-  parses "<<-HERE\r\n   One\r\n  Zero\r\n  HERE"
  parses "<<-HERE\r\n   One\r\n  Zero\r\n  HERE"
-  parses "case 1\nwhen 1\n2\nend"
  parses "case 1\nwhen 1\n2\nend"
-  parses "{[] of Foo, Bar::Baz * 2}"
  parses "{[] of Foo, Bar::Baz * 2}"
-  parses "macro >>;end"
  parses "macro >>;end"
-  parses "foo *{1}"
  parses "foo *{1}"
-  parses "{% begin %}%Q{ %s }{% end %}"
  parses "{% begin %}%Q{ %s }{% end %}"
-  says syntax error on "def foo(begin); end"
  says syntax error on "def foo(begin); end"
-  says syntax error on "class Foo(T, T); end"
  says syntax error on "class Foo(T, T); end"
-  parses "1.as Bar"
  parses "1.as Bar"
-  parses "def foo(); 1; rescue; 2; end"
  parses "def foo(); 1; rescue; 2; end"
-  parses "responds_to?(:foo)"
  parses "responds_to?(:foo)"
-  says syntax error on "macro foo *y;end"
  says syntax error on "macro foo *y;end"
-  parses "foo(/ /, / /)"
  parses "foo(/ /, / /)"
-  parses "Foo(x: U)"
  parses "Foo(x: U)"
-  says syntax error on "break % 1"
  says syntax error on "break % 1"
-  says syntax error on "{foo: 1\nbar: 2}"
  says syntax error on "{foo: 1\nbar: 2}"
-  parses "def foo(x @class); end"
  parses "def foo(x @class); end"
-  parses "{% begin %}%r[\\A]{% end %}"
  parses "{% begin %}%r[\\A]{% end %}"
-  parses "select\nwhen foo\n2\nend"
  parses "select\nwhen foo\n2\nend"
-  says syntax error on "def foo(struct); end"
  says syntax error on "def foo(struct); end"
-  parses "def foo(a, & : Int -> Double); end"
  parses "def foo(a, & : Int -> Double); end"
-  parses "macro <<;end"
  parses "macro <<;end"
-  parses "macro foo;unless %var;true;end;end"
  parses "macro foo;unless %var;true;end;end"
-  parses "x = 1; ->{ x }"
  parses "x = 1; ->{ x }"
-  says syntax error on "\"\#{<<-HERE}\"\nHERE"
  says syntax error on "\"\#{<<-HERE}\"\nHERE"
-  parses "1 // 2"
  parses "1 // 2"
-  parses "1 * 2"
  parses "1 * 2"
-  says syntax error on "def foo(foo asm); end"
  says syntax error on "def foo(foo asm); end"
-  parses "1 >= 2"
  parses "1 >= 2"
-  says syntax error on "{1 => 2, 3 => 4 5 => 6}"
  says syntax error on "{1 => 2, 3 => 4 5 => 6}"
-  parses "foo { |(a, (b, (c, d)))| }"
  parses "foo { |(a, (b, (c, d)))| }"
-  parses "next;"
  parses "next;"
-  parses "def foo(x @next); end"
  parses "def foo(x @next); end"
-  parses "yield : Int32"
  parses "yield : Int32"
-  parses "<<-EOF.x\n  foo\nEOF"
  parses "<<-EOF.x\n  foo\nEOF"
-  says syntax error on "def foo=(*args); end"
  says syntax error on "def foo=(*args); end"
-  parses "def self.>; end;"
  parses "def self.>; end;"
-  parses "def foo(var = 1); end"
  parses "def foo(var = 1); end"
-  parses "def foo(var1, var2); end"
  parses "def foo(var1, var2); end"
-  parses "->@@foo.foo?"
  parses "->@@foo.foo?"
-  parses "foo.!="
  parses "foo.!="
-  says syntax error on "*a, 1 = 2"
  says syntax error on "*a, 1 = 2"
-  parses "def self.>(); end;"
  parses "def self.>(); end;"
-  parses "begin; 1; rescue ex : Foo | Bar; 2; end"
  parses "begin; 1; rescue ex : Foo | Bar; 2; end"
-  parses "foo = 1; ->foo.bar(Int32)"
  parses "foo = 1; ->foo.bar(Int32)"
-  parses "foo(\n        begin\n          result : Int32 = 1\n          result\n        end\n      )"
  parses "foo(\n        begin\n          result : Int32 = 1\n          result\n        end\n      )"
-  says syntax error on "next / 1"
  says syntax error on "next / 1"
-  parses "->::foo="
  parses "->::foo="
-  says syntax error on "{1, ->do\n|x| x\end }"
  says syntax error on "{1, ->do\n|x| x\end }"
-  parses "foo%Q"
  parses "foo%Q"
-  parses "def <<(); end"
  parses "def <<(); end"
-  says syntax error on "def foo(fun); end"
  says syntax error on "def foo(fun); end"
-  parses "class Foo; end"
  parses "class Foo; end"
-  says syntax error on "def foo(return); end"
  says syntax error on "def foo(return); end"
-  parses "a, b = 1, 2"
  parses "a, b = 1, 2"
-  says syntax error on "def foo(if); end"
  says syntax error on "def foo(if); end"
-  parses "foo.&(1, 2)"
  parses "foo.&(1, 2)"
-  parses "property ensure : Int32"
  parses "property ensure : Int32"
-  says syntax error on "def foo(true); end"
  says syntax error on "def foo(true); end"
-  parses "def foo(@abstract); end"
  parses "def foo(@abstract); end"
-  parses "def foo(x @private); end"
  parses "def foo(x @private); end"
-  says syntax error on "next &- 1"
  says syntax error on "next &- 1"
-  parses "def +(); end;"
  parses "def +(); end;"
-  parses "def >=(*args, **opts); end"
  parses "def >=(*args, **opts); end"
-  parses "def foo(def foo); end"
  parses "def foo(def foo); end"
-  parses "@[Foo::Bar]"
  parses "@[Foo::Bar]"
-  parses "case foo; end"
  parses "case foo; end"
-  parses "def foo(x = __LINE__); end"
  parses "def foo(x = __LINE__); end"
-  parses "def foo(@@end); end"
  parses "def foo(@@end); end"
-  parses "::T/1"
  parses "::T/1"
-  parses "private def foo; end"
  parses "private def foo; end"
-  parses "foo 1"
  parses "foo 1"
-  says syntax error on "<<-HERE\n   One\n wrong\n  Zero\n  HERE"
  says syntax error on "<<-HERE\n   One\n wrong\n  Zero\n  HERE"
-  says syntax error on "def foo(*a foo); end"
  says syntax error on "def foo(*a foo); end"
-  parses "extend self"
  parses "extend self"
-  parses "@foo = 1"
  parses "@foo = 1"
-  parses "def foo(x @fun); end"
  parses "def foo(x @fun); end"
-  parses "foo(0, n >> 2)"
  parses "foo(0, n >> 2)"
-  parses ":[]="
  parses ":[]="
-  parses "@[Foo()]"
  parses "@[Foo()]"
-  parses "asm : Int32"
  parses "asm : Int32"
-  parses "macro >;end"
  parses "macro >;end"
-  parses "property class : Int32"
  parses "property class : Int32"
-  parses "true"
  parses "true"
-  parses "foo.!= do end"
  parses "foo.!= do end"
-  parses ":[]?"
  parses ":[]?"
-  parses "case 1; when 1; 2; else; 3; end"
  parses "case 1; when 1; 2; else; 3; end"
-  parses "a = 1; a *= 1"
  parses "a = 1; a *= 1"
-  parses "def foo(x @sizeof); end"
  parses "def foo(x @sizeof); end"
-  parses "lib LibC\n$errno : B, C -> D\nend"
  parses "lib LibC\n$errno : B, C -> D\nend"
-  says syntax error on "next === 1"
  says syntax error on "next === 1"
-  parses "foo.+(1, 2)"
  parses "foo.+(1, 2)"
-  parses "foo(a: n * 2)"
  parses "foo(a: n * 2)"
-  parses "f.x Foo.new"
  parses "f.x Foo.new"
-  parses "macro foo(@[Foo] var);end"
  parses "macro foo(@[Foo] var);end"
-  says syntax error on "next[]"
  says syntax error on "next[]"
-  says syntax error on "case 1; when return; end; end"
  says syntax error on "case 1; when return; end; end"
-  parses "macro [];end"
  parses "macro [];end"
-  parses "enum Foo; A = 1\ndef foo; 1; end\ndef bar; 2; end\nend"
  parses "enum Foo; A = 1\ndef foo; 1; end\ndef bar; 2; end\nend"
-  parses "def foo(x @protected); end"
  parses "def foo(x @protected); end"
-  parses "f.x &= 2"
  parses "f.x &= 2"
-  parses "puts __FILE__"
  parses "puts __FILE__"
-  parses "class Foo < Bar; end"
  parses "class Foo < Bar; end"
-  says syntax error on "1 if return"
  says syntax error on "1 if return"
-  says syntax error on "def foo\nclass\nend"
  says syntax error on "def foo\nclass\nend"
-  says syntax error on "def foo\nmodule\nend"
  says syntax error on "def foo\nmodule\nend"
-  parses "macro foo(x, *y);end"
  parses "macro foo(x, *y);end"
-  parses "def ~; end;"
  parses "def ~; end;"
-  parses "until true; 1; end;"
  parses "until true; 1; end;"
-  says syntax error on "next <= 1"
  says syntax error on "next <= 1"
-  parses "foo(z: 0, a: n % 2)"
  parses "foo(z: 0, a: n % 2)"
-  says syntax error on "def foo @@var, &block; end"
  says syntax error on "def foo @@var, &block; end"
-  parses "macro !~;end"
  parses "macro !~;end"
-  says syntax error on "def foo(foo in); end"
  says syntax error on "def foo(foo in); end"
-  says syntax error on "A = foo { B = 1 }"
  says syntax error on "A = foo { B = 1 }"
-  says syntax error on "{a: 1, b: 2 c: 3}"
  says syntax error on "{a: 1, b: 2 c: 3}"
-  says syntax error on "1 as Bar"
  says syntax error on "1 as Bar"
-  parses "def foo(out foo); end"
  parses "def foo(out foo); end"
-  parses "&- 1"
  parses "&- 1"
-  parses "n &- 2"
  parses "n &- 2"
-  parses "a.b ^=\n1"
  parses "a.b ^=\n1"
-  says syntax error on "a = 1, 2, 3"
  says syntax error on "a = 1, 2, 3"
-  parses "def foo(end foo); end"
  parses "def foo(end foo); end"
-  says syntax error on "foo { |unless| }"
  says syntax error on "foo { |unless| }"
-  parses "1.is_a?(\n  Int32\n)"
  parses "1.is_a?(\n  Int32\n)"
-  parses "instance_sizeof(X)"
  parses "instance_sizeof(X)"
-  parses "->foo!"
  parses "->foo!"
-  parses "foo result : Int32; result"
  parses "foo result : Int32; result"
-  parses "1.as(\n  Int32\n)"
  parses "1.as(\n  Int32\n)"
-  parses "Foo(Bar())"
  parses "Foo(Bar())"
-  says syntax error on "def foo(foo next); end"
  says syntax error on "def foo(foo next); end"
-  says syntax error on "foo(return)"
  says syntax error on "foo(return)"
-  parses "n === 2"
  parses "n === 2"
-  calls with blocks within index operator (#12818)
-    parses "foo[bar { 1 }]"
    parses "foo[bar { 1 }]"
-    parses "foo[bar do; 1; end]"
    parses "foo[bar do; 1; end]"
-    parses "foo.[bar { 1 }]"
    parses "foo.[bar { 1 }]"
-    parses "foo.[](bar { 1 })"
    parses "foo.[](bar { 1 })"
-    parses "foo.[bar do; 1; end]"
    parses "foo.[bar do; 1; end]"
-    parses "foo.[](bar do; 1; end)"
    parses "foo.[](bar do; 1; end)"
-  parses "Foo(T, 1, U)"
  parses "Foo(T, 1, U)"
-  parses "x[a: 1, b: 2]"
  parses "x[a: 1, b: 2]"
-  parses "def foo(typeof foo); end"
  parses "def foo(typeof foo); end"
-  parses "def foo(x @def); end"
  parses "def foo(x @def); end"
-  says syntax error on "break ? 1 : 2"
  says syntax error on "break ? 1 : 2"
-  says syntax error on "def self.nil?; end"
  says syntax error on "def self.nil?; end"
-  parses "def foo(x @@until); end"
  parses "def foo(x @@until); end"
-  parses "def self.%(); end;"
  parses "def self.%(); end;"
-  parses "{} of Int => Double"
  parses "{} of Int => Double"
-  parses "@@foo = 1"
  parses "@@foo = 1"
-  parses "T/1"
  parses "T/1"
-  parses "macro foo;%var{1, x} = hello;end"
  parses "macro foo;%var{1, x} = hello;end"
-  parses "foo.-"
  parses "foo.-"
-  says syntax error on "def foo *y; 1; end"
  says syntax error on "def foo *y; 1; end"
-  parses "a = 1; yield a ensure a"
  parses "a = 1; yield a ensure a"
-  says syntax error on "*a, *b = 1"
  says syntax error on "*a, *b = 1"
-  says syntax error on "def foo(require); end"
  says syntax error on "def foo(require); end"
-  says syntax error on "foo { |(unless)| }"
  says syntax error on "foo { |(unless)| }"
-  parses "def foo(x @struct); end"
  parses "def foo(x @struct); end"
-  parses "puts %w(one two)"
  parses "puts %w(one two)"
-  parses "def ^(); end"
  parses "def ^(); end"
-  says syntax error on "foo.responds_to?"
  says syntax error on "foo.responds_to?"
-  says syntax error on "foo { |nil| }"
  says syntax error on "foo { |nil| }"
-  says syntax error on "def foo(foo instance_sizeof); end"
  says syntax error on "def foo(foo instance_sizeof); end"
-  parses "def /; end;"
  parses "def /; end;"
-  parses "foo %i"
  parses "foo %i"
-  parses "->Foo.<<(Int32)"
  parses "->Foo.<<(Int32)"
-  parses "unless : Int32"
  parses "unless : Int32"
-  says syntax error on "def foo\nfun\nend"
  says syntax error on "def foo\nfun\nend"
-  says syntax error on "def foo(sizeof); end"
  says syntax error on "def foo(sizeof); end"
-  parses "1 ensure 2 if 3"
  parses "1 ensure 2 if 3"
-  sets correct location of instance variable in proc pointer
  sets correct location of instance variable in proc pointer
-  parses "<<-'EOF'.x\n  foo\nEOF"
  parses "<<-'EOF'.x\n  foo\nEOF"
-  parses "{% begin %}%| %s |{% end %}"
  parses "{% begin %}%| %s |{% end %}"
-  says syntax error on "def foo(**args, *x); end"
  says syntax error on "def foo(**args, *x); end"
-  parses "false : Int32"
  parses "false : Int32"
-  parses "return"
  parses "return"
-  parses "foo %q"
  parses "foo %q"
-  parses "Int[8]"
  parses "Int[8]"
-  parses "nil?"
  parses "nil?"
-  parses "foo(a: n // 2)"
  parses "foo(a: n // 2)"
-  parses "foo(z: 0, a: n * 2)"
  parses "foo(z: 0, a: n * 2)"
-  parses "extend Foo\nif true; end"
  parses "extend Foo\nif true; end"
-  parses "def foo(@sizeof); end"
  parses "def foo(@sizeof); end"
-  parses "call \"foo\""
  parses "call \"foo\""
-  says syntax error on "[1 1]"
  says syntax error on "[1 1]"
-  says syntax error on "foo { |return| }"
  says syntax error on "foo { |return| }"
-  parses "lib LibC\nfun getch = GetChar\nend"
  parses "lib LibC\nfun getch = GetChar\nend"
-  parses "[] of ->\n1"
  parses "[] of ->\n1"
-  says syntax error on "->::foo.foo"
  says syntax error on "->::foo.foo"
-  says syntax error on "fun foo(x : Int32, x : Int64); end"
  says syntax error on "fun foo(x : Int32, x : Int64); end"
-  says syntax error on "return false foo"
  says syntax error on "return false foo"
-  parses "a.b >>=\n1"
  parses "a.b >>=\n1"
-  parses "foo { |a, (b, c), (d, e)| a; b; c; d; e }"
  parses "foo { |a, (b, c), (d, e)| a; b; c; d; e }"
-  says syntax error on "foo { |(break)| }"
  says syntax error on "foo { |(break)| }"
-  says syntax error on "(1, 2 3)"
  says syntax error on "(1, 2 3)"
-  parses "foo %w"
  parses "foo %w"
-  parses "foo(a: n == 2)"
  parses "foo(a: n == 2)"
-  parses "var.@foo.@bar"
  parses "var.@foo.@bar"
-  parses "foo.> 1, 2"
  parses "foo.> 1, 2"
-  parses "if (\ntrue\n)\n1\nend"
  parses "if (\ntrue\n)\n1\nend"
-  parses "::A::B"
  parses "::A::B"
-  says syntax error on "Hash{\"foo\": 1, \"bar\": 2}"
  says syntax error on "Hash{\"foo\": 1, \"bar\": 2}"
-  parses "foo.as(Bar)"
  parses "foo.as(Bar)"
-  says syntax error on "foo { |(sizeof)| }"
  says syntax error on "foo { |(sizeof)| }"
-  parses "property break : Int32"
  parses "property break : Int32"
-  says syntax error on "foo { |(extend)| }"
  says syntax error on "foo { |(extend)| }"
-  says syntax error on "while 1 == 1 a; end"
  says syntax error on "while 1 == 1 a; end"
-  parses "foo.=~ 1, 2"
  parses "foo.=~ 1, 2"
-  parses "def +(); end"
  parses "def +(); end"
-  parses "class Foo(Type); end"
  parses "class Foo(Type); end"
-  parses "fun foo : Int32; 1; end; 2"
  parses "fun foo : Int32; 1; end; 2"
-  parses "[\n1, 2]"
  parses "[\n1, 2]"
-  parses "def []=(value); end"
  parses "def []=(value); end"
-  parses "{%\nif 1; 2; end\n%}"
  parses "{%\nif 1; 2; end\n%}"
-  says syntax error on "alias Foo?"
  says syntax error on "alias Foo?"
-  says syntax error on "+return"
  says syntax error on "+return"
-  says syntax error on "def foo\nstruct\nend"
  says syntax error on "def foo\nstruct\nend"
-  parses "1 === 2"
  parses "1 === 2"
-  parses "Foo({String, ->, ->})"
  parses "Foo({String, ->, ->})"
-  parses "property asm : Int32"
  parses "property asm : Int32"
-  parses "def foo(@@true); end"
  parses "def foo(@@true); end"
-  says syntax error on "<<-HERE\n   One\n  \#{1}\n wrong\n  HERE"
  says syntax error on "<<-HERE\n   One\n  \#{1}\n wrong\n  HERE"
-  parses "def foo(x, *y : Int32); 1; end"
  parses "def foo(x, *y : Int32); 1; end"
-  parses "a = 1; a **= 1"
  parses "a = 1; a **= 1"
-  parses "/\\ /"
  parses "/\\ /"
-  parses "break 1, *2"
  parses "break 1, *2"
-  says syntax error on "macro foo(x : Int32); end"
  says syntax error on "macro foo(x : Int32); end"
-  parses "def foo; yield(1); end"
  parses "def foo; yield(1); end"
-  parses "def foo(x @@protected); end"
  parses "def foo(x @@protected); end"
-  parses "def foo(x @@break); end"
  parses "def foo(x @@break); end"
-  parses "property typeof : Int32"
  parses "property typeof : Int32"
-  parses "1 ensure 2"
  parses "1 ensure 2"
-  parses "case 1\nwhen .as(T)\n2\nend"
  parses "case 1\nwhen .as(T)\n2\nend"
-  says syntax error on "foo { |case| }"
  says syntax error on "foo { |case| }"
-  parses "def foo; end"
  parses "def foo; end"
-  says syntax error on "return[0]"
  says syntax error on "return[0]"
-  parses "def self.foo=\n1\nend"
  parses "def self.foo=\n1\nend"
-  parses "2**3**4"
  parses "2**3**4"
-  parses "foo %r()"
  parses "foo %r()"
-  says syntax error on "def self.responds_to?; end"
  says syntax error on "def self.responds_to?; end"
-  parses "foo(0, n & 2)"
  parses "foo(0, n & 2)"
-  says syntax error on "macro def foo : String; 1; end"
  says syntax error on "macro def foo : String; 1; end"
-  parses "macro &**;end"
  parses "macro &**;end"
-  parses "foo(n << 2)"
  parses "foo(n << 2)"
-  parses "Foo(T | U)"
  parses "Foo(T | U)"
-  parses "case / /; when / /; / /; else; / /; end"
  parses "case / /; when / /; / /; else; / /; end"
-  parses "begin 1 end / 2"
  parses "begin 1 end / 2"
-  parses "<<-HERE1; <<-HERE2\nHERE1\nHERE2"
  parses "<<-HERE1; <<-HERE2\nHERE1\nHERE2"
-  parses "foo.|(1, 2)"
  parses "foo.|(1, 2)"
-  says syntax error on "break ** 1"
  says syntax error on "break ** 1"
-  says syntax error on "foo &.||()"
  says syntax error on "foo &.||()"
-  says syntax error on "1 then"
  says syntax error on "1 then"
-  parses "foo.=~(1, 2)"
  parses "foo.=~(1, 2)"
-  says syntax error on "1 .. return"
  says syntax error on "1 .. return"
-  parses "Int[8, 4,]"
  parses "Int[8, 4,]"
-  parses "foo(n ** 2)"
  parses "foo(n ** 2)"
-  parses "a = 1; a ^= 1"
  parses "a = 1; a ^= 1"
-  parses "->Foo.//(Int32)"
  parses "->Foo.//(Int32)"
-  parses "foo\n  #comment\n  .bar"
  parses "foo\n  #comment\n  .bar"
-  says syntax error on "false foo"
  says syntax error on "false foo"
-  parses "abstract : Int32"
  parses "abstract : Int32"
-  parses "def : Int32"
  parses "def : Int32"
-  parses "1 -2_i64"
  parses "1 -2_i64"
-  parses "macro foo;bar{% if x %}body{% end %}baz;end"
  parses "macro foo;bar{% if x %}body{% end %}baz;end"
-  parses "1 ** -x"
  parses "1 ** -x"
-  parses "foo &.as?(T)"
  parses "foo &.as?(T)"
-  parses "1 <=> 2"
  parses "1 <=> 2"
-  says syntax error on "foo { |asm| }"
  says syntax error on "foo { |asm| }"
-  says syntax error on "Foo(T, x: U)"
  says syntax error on "Foo(T, x: U)"
-  parses "->::Foo.foo="
  parses "->::Foo.foo="
-  parses "foo.>(1, 2) { 3 }"
  parses "foo.>(1, 2) { 3 }"
-  parses "1.!"
  parses "1.!"
-  parses "->Foo.>=(Int32)"
  parses "->Foo.>=(Int32)"
-  says syntax error on "foo[return]"
  says syntax error on "foo[return]"
-  parses "{/ / => / /, / / => / /}"
  parses "{/ / => / /, / / => / /}"
-  parses ":>>"
  parses ":>>"
-  parses "foo..2"
  parses "foo..2"
-  says syntax error on "a += 1"
  says syntax error on "a += 1"
-  parses "foo\n.bar"
  parses "foo\n.bar"
-  parses "/fo\#{1}o/"
  parses "/fo\#{1}o/"
-  parses "foo = 1; ->foo.<=(Int32)"
  parses "foo = 1; ->foo.<=(Int32)"
-  parses "case 1\nwhen 1\n2\nelse\n3\nend"
  parses "case 1\nwhen 1\n2\nelse\n3\nend"
-  says syntax error on "def foo(next); end"
  says syntax error on "def foo(next); end"
-  parses "foo.!~ 1, 2"
  parses "foo.!~ 1, 2"
-  parses "n ^ 2"
  parses "n ^ 2"
-  parses "def foo(true foo); end"
  parses "def foo(true foo); end"
-  says syntax error on "enum Foo; A B; end"
  says syntax error on "enum Foo; A B; end"
-  parses "while : Int32"
  parses "while : Int32"
-  parses "r = 1; r.x += 2"
  parses "r = 1; r.x += 2"
-  says syntax error on "def self.as; end"
  says syntax error on "def self.as; end"
-  says syntax error on "def foo(foo private); end"
  says syntax error on "def foo(foo private); end"
-  says syntax error on "def foo(foo offsetof); end"
  says syntax error on "def foo(foo offsetof); end"
-  parses "n &* 2"
  parses "n &* 2"
-  parses "foo.* do end"
  parses "foo.* do end"
-  parses "def foo(x @@pointerof); end"
  parses "def foo(x @@pointerof); end"
-  parses "def foo(@with); end"
  parses "def foo(@with); end"
-  parses "foo.bar"
  parses "foo.bar"
-  parses "property include : Int32"
  parses "property include : Int32"
-  parses "{1}"
  parses "{1}"
-  parses "def foo(x : *T -> R); end"
  parses "def foo(x : *T -> R); end"
-  says syntax error on "def foo(x y, x z); end"
  says syntax error on "def foo(x y, x z); end"
-  parses "protected : Int32"
  parses "protected : Int32"
-  parses "->Foo.<(Int32)"
  parses "->Foo.<(Int32)"
-  says syntax error on "return >> 1"
  says syntax error on "return >> 1"
-  parses "def self.!=; end;"
  parses "def self.!=; end;"
-  parses "a ? 1 : b ? 2 : c ? 3 : 0"
  parses "a ? 1 : b ? 2 : c ? 3 : 0"
-  parses "foo.<= 1, 2"
  parses "foo.<= 1, 2"
-  parses "{foo:'a', bar:'b'}"
  parses "{foo:'a', bar:'b'}"
-  parses "foo.== do end"
  parses "foo.== do end"
-  parses "def foo; x { |_| 1 }; end"
  parses "def foo; x { |_| 1 }; end"
-  parses "1\\\n + 2"
  parses "1\\\n + 2"
-  parses "case {1}\nin {nil}; 2; end"
  parses "case {1}\nin {nil}; 2; end"
-  parses "->Foo.&-(Int32)"
  parses "->Foo.&-(Int32)"
-  parses "def foo(x @lib); end"
  parses "def foo(x @lib); end"
-  says syntax error on "return * 1"
  says syntax error on "return * 1"
-  parses ":&"
  parses ":&"
-  parses "1 < 2"
  parses "1 < 2"
-  parses "break {1, 2}"
  parses "break {1, 2}"
-  says syntax error on "def self.as?; end"
  says syntax error on "def self.as?; end"
-  parses "foo = 1; ->foo.&*(Int32)"
  parses "foo = 1; ->foo.&*(Int32)"
-  parses "end : Int32"
  parses "end : Int32"
-  says syntax error on "def foo=(&block); end"
  says syntax error on "def foo=(&block); end"
-  parses "def |(); end;"
  parses "def |(); end;"
-  parses "->::Foo.foo?"
  parses "->::Foo.foo?"
-  parses "macro foo(\na = 0\n)\nend"
  parses "macro foo(\na = 0\n)\nend"
-  says syntax error on ":bar foo"
  says syntax error on ":bar foo"
-  parses "def foo(&); end"
  parses "def foo(&); end"
-  parses "a.foo, *a.bar = 1"
  parses "a.foo, *a.bar = 1"
-  says syntax error on "def foo(typeof); end"
  says syntax error on "def foo(typeof); end"
-  parses ":*"
  parses ":*"
-  says syntax error on "Foo(x: T y: U)"
  says syntax error on "Foo(x: T y: U)"
-  says syntax error on "b, 1 == 2, a = 4"
  says syntax error on "b, 1 == 2, a = 4"
-  parses "case 1\nwhen .foo\n2\nend"
  parses "case 1\nwhen .foo\n2\nend"
-  says syntax error on "case 1\nin Int32; 2; else"
  says syntax error on "case 1\nin Int32; 2; else"
-  parses "[1] /2"
  parses "[1] /2"
-  parses "case\n1\nwhen 1\n2\nend\nif a\nend"
  parses "case\n1\nwhen 1\n2\nend\nif a\nend"
-  parses "def foo(@@if); end"
  parses "def foo(@@if); end"
-  says syntax error on "def foo @var, &block; end"
  says syntax error on "def foo @var, &block; end"
-  parses "def foo(x : U) : Int32 forall T, U; end"
  parses "def foo(x : U) : Int32 forall T, U; end"
-  parses "->foo?"
  parses "->foo?"
-  parses "class Foo < self; end"
  parses "class Foo < self; end"
-  parses "foo 1, a: 1, b: 2"
  parses "foo 1, a: 1, b: 2"
-  parses "2 * (3 + 4)"
  parses "2 * (3 + 4)"
-  parses "[1, 2] of Int"
  parses "[1, 2] of Int"
-  says syntax error on "next.foo"
  says syntax error on "next.foo"
-  parses "{\"foo\": 1}"
  parses "{\"foo\": 1}"
-  parses "foo(0, n // 2)"
  parses "foo(0, n // 2)"
-  says syntax error on "<<-FOO\n1\nFOO.bar"
  says syntax error on "<<-FOO\n1\nFOO.bar"
-  says syntax error on "foo(\"\": 1)"
  says syntax error on "foo(\"\": 1)"
-  says syntax error on "next[0]"
  says syntax error on "next[0]"
-  parses "lib LibC; fun foo(a : Int**); end"
  parses "lib LibC; fun foo(a : Int**); end"
-  says syntax error on "def responds_to?; end"
  says syntax error on "def responds_to?; end"
-  says syntax error on "def foo(foo module); end"
  says syntax error on "def foo(foo module); end"
-  parses "{% begin %}%i[ %s ]{% end %}"
  parses "{% begin %}%i[ %s ]{% end %}"
-  parses "foo.&"
  parses "foo.&"
-  parses "return if true"
  parses "return if true"
-  parses "def self.=~; end;"
  parses "def self.=~; end;"
-  parses "property offsetof : Int32"
  parses "property offsetof : Int32"
-  parses "pointerof(@a)"
  parses "pointerof(@a)"
-  parses "1;+2"
  parses "1;+2"
-  parses "foo ensure 2"
  parses "foo ensure 2"
-  says syntax error on "def foo(*args = 1); end"
  says syntax error on "def foo(*args = 1); end"
-  parses "lib LibC; type A = B; end"
  parses "lib LibC; type A = B; end"
-  says syntax error on "def foo; require \"bar\"; end"
  says syntax error on "def foo; require \"bar\"; end"
-  parses "1 &- 2"
  parses "1 &- 2"
-  parses "def foo(x @@macro); end"
  parses "def foo(x @@macro); end"
-  says syntax error on "def self.!; end"
  says syntax error on "def self.!; end"
-  parses "a = 1; a &&= 1"
  parses "a = 1; a &&= 1"
-  parses "{% for _, x, _ in y %}body{% end %}"
  parses "{% for _, x, _ in y %}body{% end %}"
-  says syntax error on "break > 1"
  says syntax error on "break > 1"
-  parses "n !~ 2"
  parses "n !~ 2"
-  parses "yield;"
  parses "yield;"
-  parses "property when : Int32"
  parses "property when : Int32"
-  says syntax error on "macro foo(*x, *y); end"
  says syntax error on "macro foo(*x, *y); end"
-  parses "f.x ^= 2"
  parses "f.x ^= 2"
-  parses "def /(); end"
  parses "def /(); end"
-  parses "foo 1, **bar, &block"
  parses "foo 1, **bar, &block"
-  says syntax error on "Hash{\"foo\": 1}"
  says syntax error on "Hash{\"foo\": 1}"
-  parses "def self.+(); end;"
  parses "def self.+(); end;"
-  says syntax error on "def foo(offsetof); end"
  says syntax error on "def foo(offsetof); end"
-  parses "a : Foo[12]"
  parses "a : Foo[12]"
-  says syntax error on "case 1 == 1 a; when 2; end"
  says syntax error on "case 1 == 1 a; when 2; end"
-  parses "/ /"
  parses "/ /"
-  parses "def ==(); end"
  parses "def ==(); end"
-  parses "foo **bar"
  parses "foo **bar"
-  parses "2 / 3 + 4 / 5"
  parses "2 / 3 + 4 / 5"
-  says syntax error on "1 .. next"
  says syntax error on "1 .. next"
-  parses "foo = 1; ->foo./(Int32)"
  parses "foo = 1; ->foo./(Int32)"
-  parses "->Foo.foo!"
  parses "->Foo.foo!"
-  parses "{1.. => 2};"
  parses "{1.. => 2};"
-  parses "if foo.responds_to? :foo\nx = 1\nend"
  parses "if foo.responds_to? :foo\nx = 1\nend"
-  parses "module : Int32"
  parses "module : Int32"
-  says syntax error on "def foo=(a = 1, b = 2); end"
  says syntax error on "def foo=(a = 1, b = 2); end"
-  says syntax error on "foo { |(macro)| }"
  says syntax error on "foo { |(macro)| }"
-  parses "foo.-(1, 2)"
  parses "foo.-(1, 2)"
-  parses "foo(&.as?(T))"
  parses "foo(&.as?(T))"
-  says syntax error on "foo { |(asm)| }"
  says syntax error on "foo { |(asm)| }"
-  parses "->Foo.[](Int32)"
  parses "->Foo.[](Int32)"
-  parses "n + 2"
  parses "n + 2"
-  parses "a, b, *c = 1, 2"
  parses "a, b, *c = 1, 2"
-  says syntax error on "foo.||()"
  says syntax error on "foo.||()"
-  says syntax error on "break when true"
  says syntax error on "break when true"
-  parses "case 1\nin .bar?; 2; end"
  parses "case 1\nin .bar?; 2; end"
-  says syntax error on "foo { |(def)| }"
  says syntax error on "foo { |(def)| }"
-  parses "lib LibC\nfun getchar(a : Int, b : Float) : Int\nend"
  parses "lib LibC\nfun getchar(a : Int, b : Float) : Int\nend"
-  parses "def foo(x @@true); end"
  parses "def foo(x @@true); end"
-  says syntax error on "def foo(with); end"
  says syntax error on "def foo(with); end"
-  says syntax error on "1 .. break"
  says syntax error on "1 .. break"
-  parses "begin; 1; rescue Foo; 2; end"
  parses "begin; 1; rescue Foo; 2; end"
-  parses "foo%x"
  parses "foo%x"
-  parses "begin; / /; end"
  parses "begin; / /; end"
-  parses "macro foo;bar{% if x %}body{% else %}body2{%end%}baz;end"
  parses "macro foo;bar{% if x %}body{% else %}body2{%end%}baz;end"
-  parses "puts __LINE__"
  parses "puts __LINE__"
-  parses "f.x >>= 2"
  parses "f.x >>= 2"
-  parses "A = 1"
  parses "A = 1"
-  parses "def foo(x @@private); end"
  parses "def foo(x @@private); end"
-  parses "Foo(T, {x: X})"
  parses "Foo(T, {x: X})"
-  parses "def foo(return foo); end"
  parses "def foo(return foo); end"
-  parses "foo(Bar { 1 })"
  parses "foo(Bar { 1 })"
-  says syntax error on "foo { |x, (x)| }"
  says syntax error on "foo { |x, (x)| }"
-  parses "foo\n\n  .bar"
  parses "foo\n\n  .bar"
-  says syntax error on "def foo(break); end"
  says syntax error on "def foo(break); end"
-  parses "a, b = 1, 2 if 3"
  parses "a, b = 1, 2 if 3"
-  parses "@[Foo(1, foo: 2)]"
  parses "@[Foo(1, foo: 2)]"
-  parses "def foo(x @@extend); end"
  parses "def foo(x @@extend); end"
-  says syntax error on "Hash {foo: 1} of Int32 => Int32"
  says syntax error on "Hash {foo: 1} of Int32 => Int32"
-  parses "Foo({\"foo bar\": X})"
  parses "Foo({\"foo bar\": X})"
-  says syntax error on "foo { |(alias)| }"
  says syntax error on "foo { |(alias)| }"
-  says syntax error on "break ^ 1"
  says syntax error on "break ^ 1"
-  parses "foo &.[0]"
  parses "foo &.[0]"
-  says syntax error on "macro foo(**x, **y)"
  says syntax error on "macro foo(**x, **y)"
-  parses "def foo(@@class); end"
  parses "def foo(@@class); end"
-  parses "foo.- 1, 2"
  parses "foo.- 1, 2"
-  parses "class Foo(*T); end"
  parses "class Foo(*T); end"
-  parses "a = 1; (a)/b"
  parses "a = 1; (a)/b"
-  says syntax error on "foo { |until| }"
  says syntax error on "foo { |until| }"
-  parses "foo = 1; ->foo.>>(Int32)"
  parses "foo = 1; ->foo.>>(Int32)"
-  says syntax error on "foo { |x, x| }"
  says syntax error on "foo { |x, x| }"
-  parses "  macro foo(\n    @[Foo]\n    id,\n    @[Bar] name\n  );end"
  parses "  macro foo(\n    @[Foo]\n    id,\n    @[Bar] name\n  );end"
-  parses "f.x <<= 2"
  parses "f.x <<= 2"
-  says syntax error on "case {1, 2}; when {3}; 4; end"
  says syntax error on "case {1, 2}; when {3}; 4; end"
-  sets correct location of argument in named tuple type
  sets correct location of argument in named tuple type
-  parses "def foo(instance_sizeof foo); end"
  parses "def foo(instance_sizeof foo); end"
-  says syntax error on "foo { |yield| }"
  says syntax error on "foo { |yield| }"
-  says syntax error on "break + 1"
  says syntax error on "break + 1"
-  parses "x[{1}]"
  parses "x[{1}]"
-  parses "foo = 1; foo &x"
  parses "foo = 1; foo &x"
-  parses "def foo(@asm); end"
  parses "def foo(@asm); end"
-  parses "(bar {})"
  parses "(bar {})"
-  parses "def foo(x @@def); end"
  parses "def foo(x @@def); end"
-  parses "->Foo.^(Int32)"
  parses "->Foo.^(Int32)"
-  parses "->Foo.foo="
  parses "->Foo.foo="
-  says syntax error on "enum Foo < UInt16; end"
  says syntax error on "enum Foo < UInt16; end"
-  parses "{{ 1 // 2 }}"
  parses "{{ 1 // 2 }}"
-  parses "macro foo\n\"\\'\"\nend"
  parses "macro foo\n\"\\'\"\nend"
-  parses "1 rescue 2"
  parses "1 rescue 2"
-  parses "\"hello \" \\\r\n \"world\""
  parses "\"hello \" \\\r\n \"world\""
-  says syntax error on "def foo(*x, **x); end"
  says syntax error on "def foo(*x, **x); end"
-  parses "foo.>(1, 2)"
  parses "foo.>(1, 2)"
-  parses "return 1 if true"
  parses "return 1 if true"
-  parses "foo(n >= 2)"
  parses "foo(n >= 2)"
-  parses "foo &.block[0] = 1"
  parses "foo &.block[0] = 1"
-  parses "def >=(); end"
  parses "def >=(); end"
-  says syntax error on "def foo(foo case); end"
  says syntax error on "def foo(foo case); end"
-  parses "class Foo\nend"
  parses "class Foo\nend"
-  parses "{[] of Foo, Bar::Baz + 2}"
  parses "{[] of Foo, Bar::Baz + 2}"
-  parses "@a : Foo"
  parses "@a : Foo"
-  parses "%r(\\ )"
  parses "%r(\\ )"
-  parses "1 == 2 == 3 == 4"
  parses "1 == 2 == 3 == 4"
-  parses "foo = 1; ->foo.*(Int32)"
  parses "foo = 1; ->foo.*(Int32)"
-  parses "def foo(x @@var); end"
  parses "def foo(x @@var); end"
-  parses "\"hello \#{1}\" \\\n \"\#{2} world\""
  parses "\"hello \#{1}\" \\\n \"\#{2} world\""
-  parses "foo%r"
  parses "foo%r"
-  parses "next 1, 2"
  parses "next 1, 2"
-  parses "foo(a: n === 2)"
  parses "foo(a: n === 2)"
-  parses "foo.**(1, 2) { 3 }"
  parses "foo.**(1, 2) { 3 }"
-  parses "->::Foo.foo"
  parses "->::Foo.foo"
-  parses "Set() {1, 2, 3}"
  parses "Set() {1, 2, 3}"
-  parses "def self.>=; end;"
  parses "def self.>=; end;"
-  parses "{% begin %}%[ %s ]{% end %}"
  parses "{% begin %}%[ %s ]{% end %}"
-  parses "->@foo.foo!"
  parses "->@foo.foo!"
-  parses "lib LibC\nfun getchar : Int\nend"
  parses "lib LibC\nfun getchar : Int\nend"
-  parses "{% begin %}%w< %s >{% end %}"
  parses "{% begin %}%w< %s >{% end %}"
-  parses "->@@foo.foo"
  parses "->@@foo.foo"
-  parses "macro foo;bar(end: 1);end"
  parses "macro foo;bar(end: 1);end"
-  parses "struct Foo; end"
  parses "struct Foo; end"
-  parses "do : Int32"
  parses "do : Int32"
-  says syntax error on "a.b() = 1"
  says syntax error on "a.b() = 1"
-  says syntax error on "def foo(foo struct); end"
  says syntax error on "def foo(foo struct); end"
-  parses "def foo(a, &block : Int -> ); end"
  parses "def foo(a, &block : Int -> ); end"
-  says syntax error on "return + 1"
  says syntax error on "return + 1"
-  parses "1 > 2"
  parses "1 > 2"
-  parses "def foo(@[Foo] var : Int32); end"
  parses "def foo(@[Foo] var : Int32); end"
-  parses "foo.!.!"
  parses "foo.!.!"
-  parses "def foo(x)\n x\nend; foo = 1; b = 2; foo +b"
  parses "def foo(x)\n x\nend; foo = 1; b = 2; foo +b"
-  parses "def foo(var : Int*); end"
  parses "def foo(var : Int*); end"
-  parses "nil : Int32"
  parses "nil : Int32"
-  parses "{[] of Foo, ::Bar::Baz.new}"
  parses "{[] of Foo, ::Bar::Baz.new}"
-  parses "def -; end;"
  parses "def -; end;"
-  parses "case 1\nwhen .is_a?(T)\n2\nend"
  parses "case 1\nwhen .is_a?(T)\n2\nend"
-  parses "->Foo./(Int32)"
  parses "->Foo./(Int32)"
-  parses "property abstract : Int32"
  parses "property abstract : Int32"
-  says syntax error on "def foo(protected); end"
  says syntax error on "def foo(protected); end"
-  parses "foo.>="
  parses "foo.>="
-  says syntax error on "foo.&&"
  says syntax error on "foo.&&"
-  parses "{{ foo &.nil? }}"
  parses "{{ foo &.nil? }}"
-  parses "typeof(1)"
  parses "typeof(1)"
-  parses "@a, b = 1, 2"
  parses "@a, b = 1, 2"
-  parses "enum Foo; protected def foo; 1; end; end"
  parses "enum Foo; protected def foo; 1; end; end"
-  parses "lib LibC; struct Foo; x, y, z : Int; end end"
  parses "lib LibC; struct Foo; x, y, z : Int; end end"
-  parses "a @b-1\nc"
  parses "a @b-1\nc"
-  says syntax error on "foo { |break| }"
  says syntax error on "foo { |break| }"
-  parses "property case : Int32"
  parses "property case : Int32"
-  says syntax error on "foo(1 2)"
  says syntax error on "foo(1 2)"
-  says syntax error on "def foo\nlib\nend"
  says syntax error on "def foo\nlib\nend"
-  parses "macro foo;bar{% for x, y in z %}body{% end %}baz;end"
  parses "macro foo;bar{% for x, y in z %}body{% end %}baz;end"
-  parses "def self.%; end;"
  parses "def self.%; end;"
-  parses "macro foo;bar{% for x in y %}\\  \n   body{% end %}baz;end"
  parses "macro foo;bar{% for x in y %}\\  \n   body{% end %}baz;end"
-  parses "enum Foo; A = 1\ndef foo; 1; end; end"
  parses "enum Foo; A = 1\ndef foo; 1; end; end"
-  parses "break *1, 2"
  parses "break *1, 2"
-  says syntax error on "def foo(x = 1, y); end"
  says syntax error on "def foo(x = 1, y); end"
-  parses "foo = 1; foo a: 1"
  parses "foo = 1; foo a: 1"
-  parses "foo = 1; ->foo.>=(Int32)"
  parses "foo = 1; ->foo.>=(Int32)"
-  parses "def foo(@nil); end"
  parses "def foo(@nil); end"
-  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) ::)"
  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) ::)"
-  parses "foo(z: 0, a: n &+ 2)"
  parses "foo(z: 0, a: n &+ 2)"
-  says syntax error on "next // 1"
  says syntax error on "next // 1"
-  parses "\"foo\""
  parses "\"foo\""
-  parses "property true : Int32"
  parses "property true : Int32"
-  parses "def foo(**args)\nargs\nend"
  parses "def foo(**args)\nargs\nend"
-  parses "1.[](2)"
  parses "1.[](2)"
-  says syntax error on "def foo\nmacro\nend"
  says syntax error on "def foo\nmacro\nend"
-  parses "foo(n + 2)"
  parses "foo(n + 2)"
-  says syntax error on "def foo(x, **x); end"
  says syntax error on "def foo(x, **x); end"
-  parses "1 \\\n + 2"
  parses "1 \\\n + 2"
-  parses "1 >> 2"
  parses "1 >> 2"
-  says syntax error on "def foo(\"bar\");end"
  says syntax error on "def foo(\"bar\");end"
-  parses "property fun : Int32"
  parses "property fun : Int32"
-  says syntax error on "foo { |alias| }"
  says syntax error on "foo { |alias| }"
-  parses "a = 1; pointerof(a)"
  parses "a = 1; pointerof(a)"
-  says syntax error on "@:Foo"
  says syntax error on "@:Foo"
-  parses "foo(0, n / 2)"
  parses "foo(0, n / 2)"
-  parses "foo.=== 1, 2"
  parses "foo.=== 1, 2"
-  says syntax error on "1 ... next"
  says syntax error on "1 ... next"
-  says syntax error on "def foo?=(x); end"
  says syntax error on "def foo?=(x); end"
-  parses "def foo(yield foo); end"
  parses "def foo(yield foo); end"
-  says syntax error on "$foo"
  says syntax error on "$foo"
-  parses "def foo(x, **args, &block)\n1\nend"
  parses "def foo(x, **args, &block)\n1\nend"
-  parses "n ** 2"
  parses "n ** 2"
-  parses "{\n1,\n2\n}"
  parses "{\n1,\n2\n}"
-  says syntax error on " [1, 2, 3 end"
  says syntax error on " [1, 2, 3 end"
-  parses "foo.nil?(  )"
  parses "foo.nil?(  )"
-  parses "{% begin %}%x( %s ){% end %}"
  parses "{% begin %}%x( %s ){% end %}"
-  parses "def foo(var : Int32 -> = 1); end"
  parses "def foo(var : Int32 -> = 1); end"
-  parses "puts {{*1}}"
  parses "puts {{*1}}"
-  parses "def foo(x @@offsetof); end"
  parses "def foo(x @@offsetof); end"
-  parses "foo(bar:a, baz:b)"
  parses "foo(bar:a, baz:b)"
-  parses "lib LibC; struct Foo; x : Int*; end end"
  parses "lib LibC; struct Foo; x : Int*; end end"
-  parses "sizeof(\n  Int32\n)"
  parses "sizeof(\n  Int32\n)"
-  says syntax error on "case when .foo? then 1; end"
  says syntax error on "case when .foo? then 1; end"
-  parses "def self.===(); end;"
  parses "def self.===(); end;"
-  says syntax error on "1 if break"
  says syntax error on "1 if break"
-  parses "n // 2"
  parses "n // 2"
-  parses "foo = 1; b = 2; foo +b"
  parses "foo = 1; b = 2; foo +b"
-  parses "foo = 1; ->foo.[]=(Int32)"
  parses "foo = 1; ->foo.[]=(Int32)"
-  parses "<<-HERE\n   One \\n Two\n  Zero\n  HERE"
  parses "<<-HERE\n   One \\n Two\n  Zero\n  HERE"
-  parses "def foo(x @@lib); end"
  parses "def foo(x @@lib); end"
-  parses "def foo(@if); end"
  parses "def foo(@if); end"
-  says syntax error on "foo { |require| }"
  says syntax error on "foo { |require| }"
-  parses "+ 1"
  parses "+ 1"
-  parses "until true; end;"
  parses "until true; end;"
-  says syntax error on "def foo(foo true); end"
  says syntax error on "def foo(foo true); end"
-  parses "def **(); end"
  parses "def **(); end"
-  parses "def foo(a, &block : self -> self); end"
  parses "def foo(a, &block : self -> self); end"
-  parses "def foo(x @@yield); end"
  parses "def foo(x @@yield); end"
-  says syntax error on "def foo; A = 1; end"
  says syntax error on "def foo; A = 1; end"
-  parses "def foo(@struct); end"
  parses "def foo(@struct); end"
-  says syntax error on "def foo(x @@x); 1; end"
  says syntax error on "def foo(x @@x); 1; end"
-  parses "1 + 2"
  parses "1 + 2"
-  parses "foo(0, n == 2)"
  parses "foo(0, n == 2)"
-  says syntax error on "def foo(lib); end"
  says syntax error on "def foo(lib); end"
-  parses "_, _ = 1, 2"
  parses "_, _ = 1, 2"
-  parses "foo(a: n &+ 2)"
  parses "foo(a: n &+ 2)"
-  says syntax error on "break < 1"
  says syntax error on "break < 1"
-  parses "1 * 2"
  parses "1 * 2"
-  parses "{% begin %}%Q| %s |{% end %}"
  parses "{% begin %}%Q| %s |{% end %}"
-  parses "class Foo(T1); end"
  parses "class Foo(T1); end"
-  parses "a : Foo()*"
  parses "a : Foo()*"
-  parses "a = 1; a %=\n1"
  parses "a = 1; a %=\n1"
-  parses "Foo(T, 1)"
  parses "Foo(T, 1)"
-  parses "foo(1.., 2)"
  parses "foo(1.., 2)"
-  parses "break if true"
  parses "break if true"
-  says syntax error on "1 ... return"
  says syntax error on "1 ... return"
-  parses "{% a = 1 %}"
  parses "{% a = 1 %}"
-  says syntax error on "def foo(macro); end"
  says syntax error on "def foo(macro); end"
-  parses "def &*(); end"
  parses "def &*(); end"
-  parses "a = 1; class Foo; @x = a; end"
  parses "a = 1; class Foo; @x = a; end"
-  parses "[..2]"
  parses "[..2]"
-  parses "<<-HERE\n  \#{1} \\n \#{2}\n  HERE"
  parses "<<-HERE\n  \#{1} \\n \#{2}\n  HERE"
-  parses "a = 1; a **=\n1"
  parses "a = 1; a **=\n1"
-  says syntax error on "foo { |abstract| }"
  says syntax error on "foo { |abstract| }"
-  parses "1 << 2"
  parses "1 << 2"
-  parses "def foo(x @@nil); end"
  parses "def foo(x @@nil); end"
-  parses "foo(z: 0, a: n === 2)"
  parses "foo(z: 0, a: n === 2)"
-  parses "->() : Int32 do end"
  parses "->() : Int32 do end"
-  parses "when : Int32"
  parses "when : Int32"
-  parses "lib LibC\nfun getchar(Int, Float)\nend"
  parses "lib LibC\nfun getchar(Int, Float)\nend"
-  says syntax error on "next ? 1 : 2"
  says syntax error on "next ? 1 : 2"
-  parses "foo(a: 1, b: 2)"
  parses "foo(a: 1, b: 2)"
-  says syntax error on "lib LibC\n$Errno : Int32\nend"
  says syntax error on "lib LibC\n$Errno : Int32\nend"
-  says syntax error on "def foo &block ; end"
  says syntax error on "def foo &block ; end"
-  parses "foo.!"
  parses "foo.!"
-  parses "foo.>=(1, 2) { 3 }"
  parses "foo.>=(1, 2) { 3 }"
-  parses "a = /=/"
  parses "a = /=/"
-  says syntax error on "next .. 1"
  says syntax error on "next .. 1"
-  parses "def foo(@@while); end"
  parses "def foo(@@while); end"
-  says syntax error on "return[]"
  says syntax error on "return[]"
-  parses "macro %;end"
  parses "macro %;end"
-  says syntax error on "def foo(class); end"
  says syntax error on "def foo(class); end"
-  says syntax error on "def foo(foo class); end"
  says syntax error on "def foo(foo class); end"
-  parses "foo(z: 0, a: n | 2)"
  parses "foo(z: 0, a: n | 2)"
-  parses "def self.==(); end;"
  parses "def self.==(); end;"
-  parses "foo(&block)"
  parses "foo(&block)"
-  parses "foo(..2)"
  parses "foo(..2)"
-  parses "case {1}\nin {Foo(Int32)}; 2; end"
  parses "case {1}\nin {Foo(Int32)}; 2; end"
-  parses "->foo"
  parses "->foo"
-  parses "foo(a: n =~ 2)"
  parses "foo(a: n =~ 2)"
-  parses "def foo(@extend); end"
  parses "def foo(@extend); end"
-  parses "1 / 2"
  parses "1 / 2"
-  parses "struct : Int32"
  parses "struct : Int32"
-  parses "def self.*(); end;"
  parses "def self.*(); end;"
-  parses "(1)\nif true; end"
  parses "(1)\nif true; end"
-  parses "a = / /"
  parses "a = / /"
-  parses "def &+(); end"
  parses "def &+(); end"
-  parses "def foo(@@return); end"
  parses "def foo(@@return); end"
-  parses "@@a, b = 1, 2"
  parses "@@a, b = 1, 2"
-  parses "1 if 3"
  parses "1 if 3"
-  says syntax error on "def foo:String\nend"
  says syntax error on "def foo:String\nend"
-  parses "property extend : Int32"
  parses "property extend : Int32"
-  says syntax error on "def foo(&a foo); end"
  says syntax error on "def foo(&a foo); end"
-  parses "a = 1\nfoo -a"
  parses "a = 1\nfoo -a"
-  says syntax error on "def foo(**a foo); end"
  says syntax error on "def foo(**a foo); end"
-  parses "enum Foo; private def foo; 1; end; end"
  parses "enum Foo; private def foo; 1; end; end"
-  parses "enum Foo::Bar; A = 1; end"
  parses "enum Foo::Bar; A = 1; end"
-  parses "macro foo;bar{% if x %}body{% elsif y %}body2{%end%}baz;end"
  parses "macro foo;bar{% if x %}body{% elsif y %}body2{%end%}baz;end"
-  says syntax error on "self = 1"
  says syntax error on "self = 1"
-  parses "def foo(@var); 1; end"
  parses "def foo(@var); 1; end"
-  parses "def foo; a = 1; a {}; end"
  parses "def foo; a = 1; a {}; end"
-  parses "a = 1; pointerof(a)"
  parses "a = 1; pointerof(a)"
-  says syntax error on "asm(\"nop\" :::: \"\#{volatile}\")"
  says syntax error on "asm(\"nop\" :::: \"\#{volatile}\")"
-  parses "def foo(x @while); end"
  parses "def foo(x @while); end"
-  parses "@@foo"
  parses "@@foo"
-  parses "foo &.as(T).bar"
  parses "foo &.as(T).bar"
-  parses "(baz; bar do\nend)"
  parses "(baz; bar do\nend)"
-  parses "foo(z: 0, a: n // 2)"
  parses "foo(z: 0, a: n // 2)"
-  parses "x = 1 rescue 2"
  parses "x = 1 rescue 2"
-  parses "def foo; with a yield 1; end"
  parses "def foo; with a yield 1; end"
-  parses "case {1}\nin {false}; 2; end"
  parses "case {1}\nin {false}; 2; end"
-  parses "f.x = Foo.new"
  parses "f.x = Foo.new"
-  parses "macro []?;end"
  parses "macro []?;end"
-  says syntax error on "{1, 2 3}"
  says syntax error on "{1, 2 3}"
-  says syntax error on "def foo\ninclude\nend"
  says syntax error on "def foo\ninclude\nend"
-  parses "foo do |a|; 1; end"
  parses "foo do |a|; 1; end"
-  parses "-@foo"
  parses "-@foo"
-  says syntax error on "def foo\nabstract\nend"
  says syntax error on "def foo\nabstract\nend"
-  parses "def foo(\n&block\n); end"
  parses "def foo(\n&block\n); end"
-  parses "foo.*(1, 2)"
  parses "foo.*(1, 2)"
-  parses "@@a : Foo = 1"
  parses "@@a : Foo = 1"
-  parses "foo.<(1, 2) { 3 }"
  parses "foo.<(1, 2) { 3 }"
-  says syntax error on "foo(**bar, *x)"
  says syntax error on "foo(**bar, *x)"
-  parses ":<"
  parses ":<"
-  parses "foo % q()"
  parses "foo % q()"
-  parses "foo.bar(1, 2)"
  parses "foo.bar(1, 2)"
-  parses "def foo(@@fun); end"
  parses "def foo(@@fun); end"
-  parses "foo(a: n >> 2)"
  parses "foo(a: n >> 2)"
-  parses "case\nwhen true\n1\nend"
  parses "case\nwhen true\n1\nend"
-  says syntax error on "b! = 1"
  says syntax error on "b! = 1"
-  parses "/foo/x"
  parses "/foo/x"
-  parses "foo(x) do\n//\nend"
  parses "foo(x) do\n//\nend"
-  parses "foo.=~ do end"
  parses "foo.=~ do end"
-  parses "foo = 1; foo(+1)"
  parses "foo = 1; foo(+1)"
-  parses "foo = 1; ->foo.>(Int32)"
  parses "foo = 1; ->foo.>(Int32)"
-  parses "1 -2"
  parses "1 -2"
-  parses "property next : Int32"
  parses "property next : Int32"
-  parses "macro foo;%var unless true;end"
  parses "macro foo;%var unless true;end"
-  parses "def <=(); end"
  parses "def <=(); end"
-  says syntax error on "@[Foo(\"\": 1)]"
  says syntax error on "@[Foo(\"\": 1)]"
-  parses ":<=>"
  parses ":<=>"
-  parses "def foo(x @typeof); end"
  parses "def foo(x @typeof); end"
-  parses "return;"
  parses "return;"
-  parses "foo(a: n > 2)"
  parses "foo(a: n > 2)"
-  parses "property instance_sizeof : Int32"
  parses "property instance_sizeof : Int32"
-  sets correct location of annotation in enum
  sets correct location of annotation in enum
-  parses "asm(\"bl trap\" :::: \"unwind\")"
  parses "asm(\"bl trap\" :::: \"unwind\")"
-  says syntax error on "foo(**bar, 1)"
  says syntax error on "foo(**bar, 1)"
-  parses "macro foo;if %var;true;end;end"
  parses "macro foo;if %var;true;end;end"
-  says syntax error on "Foo{one: :two, three: :four}"
  says syntax error on "Foo{one: :two, three: :four}"
-  parses "foo(n >> 2)"
  parses "foo(n >> 2)"
-  says syntax error on "def foo(foo extend); end"
  says syntax error on "def foo(foo extend); end"
-  parses "foo%q"
  parses "foo%q"
-  parses "a = 1; a &*=\n1"
  parses "a = 1; a &*=\n1"
-  parses "def foo(x, *y); 1; end"
  parses "def foo(x, *y); 1; end"
-  parses "{a: 1, b: 2}"
  parses "{a: 1, b: 2}"
-  parses "enum Foo : UInt16; end"
  parses "enum Foo : UInt16; end"
-  parses ":**"
  parses ":**"
-  parses "def &(); end;"
  parses "def &(); end;"
-  parses "-1.0"
  parses "-1.0"
-  says syntax error on "foo { |begin| }"
  says syntax error on "foo { |begin| }"
-  parses "macro /;end"
  parses "macro /;end"
-  parses "foo *bar"
  parses "foo *bar"
-  says syntax error on "->::@@foo.foo"
  says syntax error on "->::@@foo.foo"
-  parses "foo.responds_to? :foo"
  parses "foo.responds_to? :foo"
-  parses "!1"
  parses "!1"
-  says syntax error on "return &** 1"
  says syntax error on "return &** 1"
-  parses "->Foo.&*(Int32)"
  parses "->Foo.&*(Int32)"
-  parses "def foo(@next); end"
  parses "def foo(@next); end"
-  parses "def foo(var : Char[256]); end"
  parses "def foo(var : Char[256]); end"
-  says syntax error on "foo[1] = break"
  says syntax error on "foo[1] = break"
-  parses "macro foo\neenum\nend"
  parses "macro foo\neenum\nend"
-  parses "\n      class Foo\n        def bar\n          print as Foo\n        end\n      end\n    "
  parses "\n      class Foo\n        def bar\n          print as Foo\n        end\n      end\n    "
-  says syntax error on "foo.&&()"
  says syntax error on "foo.&&()"
-  parses "{%\na = 1\n%}"
  parses "{%\na = 1\n%}"
-  says syntax error on "foo { |instance_sizeof| }"
  says syntax error on "foo { |instance_sizeof| }"
-  parses "foo &.each {\n}"
  parses "foo &.each {\n}"
-  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2))"
  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2))"
-  parses "def foo(x, *args, y = 2); 1; end"
  parses "def foo(x, *args, y = 2); 1; end"
-  says syntax error on "enum Foo\n  A,   B,   C\nend\n"
  says syntax error on "enum Foo\n  A,   B,   C\nend\n"
-  parses "foo(0, n =~ 2)"
  parses "foo(0, n =~ 2)"
-  parses "def foo(@@alias); end"
  parses "def foo(@@alias); end"
-  says syntax error on "return.foo"
  says syntax error on "return.foo"
-  parses "{{ foo.nil?(foo) }}"
  parses "{{ foo.nil?(foo) }}"
-  parses "def foo(x @@in); end"
  parses "def foo(x @@in); end"
-  parses "puts {{1}}"
  parses "puts {{1}}"
-  parses "call ->foo"
  parses "call ->foo"
-  parses "foo &.nil?"
  parses "foo &.nil?"
-  parses "\"hello \#{1}\" \\\r\n \"\#{2} world\""
  parses "\"hello \#{1}\" \\\r\n \"\#{2} world\""
-  parses "macro foo\n  <<-FOO\n    \#{ %var }\n  FOO\nend"
  parses "macro foo\n  <<-FOO\n    \#{ %var }\n  FOO\nend"
-  parses "def self.**(); end;"
  parses "def self.**(); end;"
-  parses "foo.!(  )"
  parses "foo.!(  )"
-  says syntax error on "asm(\"\" : 1)"
  says syntax error on "asm(\"\" : 1)"
-  parses "def self.==; end;"
  parses "def self.==; end;"
-  says syntax error on "1 if next"
  says syntax error on "1 if next"
-  parses "include : Int32"
  parses "include : Int32"
-  parses "f.x -= 2"
  parses "f.x -= 2"
-  says syntax error on "next << 1"
  says syntax error on "next << 1"
-  parses "def foo(x = __DIR__); end"
  parses "def foo(x = __DIR__); end"
-  says syntax error on "1 unless next"
  says syntax error on "1 unless next"
-  says syntax error on "a, b, c, d, *e = 1, 2, 3"
  says syntax error on "a, b, c, d, *e = 1, 2, 3"
-  says syntax error on "foo { |(return)| }"
  says syntax error on "foo { |(return)| }"
-  parses "a.b/2"
  parses "a.b/2"
-  says syntax error on "next.as(Int32)"
  says syntax error on "next.as(Int32)"
-  parses ":[]"
  parses ":[]"
-  parses "foo { |a, b| 1 }"
  parses "foo { |a, b| 1 }"
-  says syntax error on "def foo(x :Int32); end"
  says syntax error on "def foo(x :Int32); end"
-  says syntax error on "def as?; end"
  says syntax error on "def as?; end"
-  parses "property yield : Int32"
  parses "property yield : Int32"
-  parses "return {1, 2}"
  parses "return {1, 2}"
-  parses "def foo(a, &block : *Int -> ); end"
  parses "def foo(a, &block : *Int -> ); end"
-  says syntax error on "return ** 1"
  says syntax error on "return ** 1"
-  parses "def foo(x @@enum); end"
  parses "def foo(x @@enum); end"
-  parses "call(foo.as Bar, Baz)"
  parses "call(foo.as Bar, Baz)"
-  parses "a\nwhile / /\n/ /\nend"
  parses "a\nwhile / /\n/ /\nend"
-  parses "macro ==;end"
  parses "macro ==;end"
-  parses "foo(\n1\n)"
  parses "foo(\n1\n)"
-  says syntax error on "break[]"
  says syntax error on "break[]"
-  parses "foo(n =~ 2)"
  parses "foo(n =~ 2)"
-  parses "foo(z: 0, a: n <= 2)"
  parses "foo(z: 0, a: n <= 2)"
-  parses "def foo(x @@begin); end"
  parses "def foo(x @@begin); end"
-  parses "foo(&.bar.baz)"
  parses "foo(&.bar.baz)"
-  says syntax error on "def self.is_a?; end"
  says syntax error on "def self.is_a?; end"
-  parses "property until : Int32"
  parses "property until : Int32"
-  parses "case 1; when 2 then /foo/; end"
  parses "case 1; when 2 then /foo/; end"
-  parses "abstract def foo : Int32"
  parses "abstract def foo : Int32"
-  parses "->Foo.===(Int32)"
  parses "->Foo.===(Int32)"
-  says syntax error on "*a"
  says syntax error on "*a"
-  says syntax error on "foo { |(fun)| }"
  says syntax error on "foo { |(fun)| }"
-  says syntax error on "def foo(**args, **args2); end"
  says syntax error on "def foo(**args, **args2); end"
-  parses "-> { }"
  parses "-> { }"
-  says syntax error on "def as; end"
  says syntax error on "def as; end"
-  parses "macro <=;end"
  parses "macro <=;end"
-  says syntax error on "foo { |(with)| }"
  says syntax error on "foo { |(with)| }"
-  parses "a : Foo()[12]"
  parses "a : Foo()[12]"
-  parses "{% unless 1\n  x\nend %}"
  parses "{% unless 1\n  x\nend %}"
-  parses "{% begin %}%x< %s >{% end %}"
  parses "{% begin %}%x< %s >{% end %}"
-  parses "def foo(&block :\n Int ->); end"
  parses "def foo(&block :\n Int ->); end"
-  parses "def !=(); end;"
  parses "def !=(); end;"
-  parses "def foo(module foo); end"
  parses "def foo(module foo); end"
-  parses "include Foo"
  parses "include Foo"
-  parses "def self.<=(); end;"
  parses "def self.<=(); end;"
-  says syntax error on "def foo(foo nil); end"
  says syntax error on "def foo(foo nil); end"
-  parses "break *1"
  parses "break *1"
-  sets correct location of private method in enum
  sets correct location of private method in enum
-  parses "foo(&.as(T))"
  parses "foo(&.as(T))"
-  parses "foo.bar 1, 2"
  parses "foo.bar 1, 2"
-  parses "foo(\n  &.block\n)"
  parses "foo(\n  &.block\n)"
-  parses "def foo(@private); end"
  parses "def foo(@private); end"
-  parses "foo %x"
  parses "foo %x"
-  parses "class Foo\ndef foo; end; end"
  parses "class Foo\ndef foo; end; end"
-  says syntax error on "def foo(x : U) forall U,; end"
  says syntax error on "def foo(x : U) forall U,; end"
-  parses "->@foo.foo"
  parses "->@foo.foo"
-  parses "def self.[]; end"
  parses "def self.[]; end"
-  says syntax error on "nil foo"
  says syntax error on "nil foo"
-  parses "foo.[0]"
  parses "foo.[0]"
-  parses "foo.responds_to?(:foo)"
  parses "foo.responds_to?(:foo)"
-  parses "->Foo.=~(Int32)"
  parses "->Foo.=~(Int32)"
-  says syntax error on "self += 1"
  says syntax error on "self += 1"
-  parses "foo.is_a? Const"
  parses "foo.is_a? Const"
-  parses "enum Foo; A\nB; C\nD = 1; end"
  parses "enum Foo; A\nB; C\nD = 1; end"
-  parses "begin : Int32"
  parses "begin : Int32"
-  parses "foo.- do end"
  parses "foo.- do end"
-  parses "def foo(var); end"
  parses "def foo(var); end"
-  parses "def foo(&\n); end"
  parses "def foo(&\n); end"
-  parses "{% begin %}%q< %s >{% end %}"
  parses "{% begin %}%q< %s >{% end %}"
-  parses "begin; 1; rescue ex; 2; end; ex"
  parses "begin; 1; rescue ex; 2; end; ex"
-  says syntax error on "next[0]= 1"
  says syntax error on "next[0]= 1"
-  parses "def []=(*args, **opts, &); end"
  parses "def []=(*args, **opts, &); end"
-  parses "abstract def foo(x) : Int32"
  parses "abstract def foo(x) : Int32"
-  says syntax error on "def foo=(a,b); end"
  says syntax error on "def foo=(a,b); end"
-  parses "1 =~ 2"
  parses "1 =~ 2"
-  parses "foo.bar do end"
  parses "foo.bar do end"
-  parses "@[Foo(1)]"
  parses "@[Foo(1)]"
-  parses "def self.&(); end;"
  parses "def self.&(); end;"
-  says syntax error on "def foo():String\nend"
  says syntax error on "def foo():String\nend"
-  says syntax error on "->(x y) { }"
  says syntax error on "->(x y) { }"
-  says syntax error on "return === 1"
  says syntax error on "return === 1"
-  says syntax error on "macro as; end"
  says syntax error on "macro as; end"
-  parses "+1.0"
  parses "+1.0"
-  parses "foo.* 1, 2"
  parses "foo.* 1, 2"
-  parses "{% if 1; 2; end %}"
  parses "{% if 1; 2; end %}"
-  parses "def foo(enum foo); end"
  parses "def foo(enum foo); end"
-  parses "def foo(var : Int -> Double); end"
  parses "def foo(var : Int -> Double); end"
-  parses "%r(foo(bar))"
  parses "%r(foo(bar))"
-  parses "a ? 1 :\n              b ? 2 :\n              c ? 3\n              : 0"
  parses "a ? 1 :\n              b ? 2 :\n              c ? 3\n              : 0"
-  parses "{% begin %}%i( %s ){% end %}"
  parses "{% begin %}%i( %s ){% end %}"
-  parses "foo { |(_, c, )| c }"
  parses "foo { |(_, c, )| c }"
-  parses "elsif : Int32"
  parses "elsif : Int32"
-  parses "foo.& do end"
  parses "foo.& do end"
-  parses "foo.==(1, 2)"
  parses "foo.==(1, 2)"
-  parses "macro foo(a, @[Foo] &block);end"
  parses "macro foo(a, @[Foo] &block);end"
-  parses "1 -2.0"
  parses "1 -2.0"
-  parses "foo(/ /)"
  parses "foo(/ /)"
-  parses "foo(n &* 2)"
  parses "foo(n &* 2)"
-  parses "foo(n &- 2)"
  parses "foo(n &- 2)"
-  parses "a\nunless / /\n/ /\nelse\n/ /\nend"
  parses "a\nunless / /\n/ /\nelse\n/ /\nend"
-  parses "-> do end"
  parses "-> do end"
-  parses "*a, b = 1, 2, 3, 4"
  parses "*a, b = 1, 2, 3, 4"
-  parses "foo(z: 0, a: n & 2)"
  parses "foo(z: 0, a: n & 2)"
-  parses "macro !=;end"
  parses "macro !=;end"
-  parses "Foo({X, Y,})"
  parses "Foo({X, Y,})"
-  parses "a ? 1\n              : b"
  parses "a ? 1\n              : b"
-  parses ":foo?"
  parses ":foo?"
-  says syntax error on "def foo(foo return); end"
  says syntax error on "def foo(foo return); end"
-  parses "def foo(x @@asm); end"
  parses "def foo(x @@asm); end"
-  parses "a[0], a[1] = 1, 2"
  parses "a[0], a[1] = 1, 2"
-  says syntax error on "foo { |(require)| }"
  says syntax error on "foo { |(require)| }"
-  parses "case / /\nwhen / /\n/ /\nelse\n/ /\nend"
  parses "case / /\nwhen / /\n/ /\nelse\n/ /\nend"
-  parses "def foo(x, *, y); 1; end"
  parses "def foo(x, *, y); 1; end"
-  parses "def ===(*args, **opts, &); end"
  parses "def ===(*args, **opts, &); end"
-  parses "foo % w()"
  parses "foo % w()"
-  says syntax error on "until next; end"
  says syntax error on "until next; end"
-  parses "a/b"
  parses "a/b"
-  says syntax error on "{\n}"
  says syntax error on "{\n}"
-  parses "case {1}\nin {Int32.class}; 2; end"
  parses "case {1}\nin {Int32.class}; 2; end"
-  parses ":==="
  parses ":==="
-  parses "foo &.bar.baz"
  parses "foo &.bar.baz"
-  says syntax error on "def foo\nalias\nend"
  says syntax error on "def foo\nalias\nend"
-  parses "a = 1; a += 1"
  parses "a = 1; a += 1"
-  parses "foo(n * 2)"
  parses "foo(n * 2)"
-  parses "alignof(X)"
  parses "alignof(X)"
-  parses "a, b, *c = 1"
  parses "a, b, *c = 1"
-  sets correct location of instance variable in proc pointer
  sets correct location of instance variable in proc pointer
-  parses "<<-'HERE'\n  hello \\n world\n  \#{1}\n  HERE"
  parses "<<-'HERE'\n  hello \\n world\n  \#{1}\n  HERE"
-  parses "def self.|; end;"
  parses "def self.|; end;"
-  parses "x[a: 1, b: 2,]"
  parses "x[a: 1, b: 2,]"
-  parses "def foo(@[Foo] var); end"
  parses "def foo(@[Foo] var); end"
-  parses "@foo/2"
  parses "@foo/2"
-  parses "def foo(x = / /); end"
  parses "def foo(x = / /); end"
-  parses "property unless : Int32"
  parses "property unless : Int32"
-  says syntax error on "case 1\nin 1; 2"
  says syntax error on "case 1\nin 1; 2"
-  parses "(foo bar do\nend)"
  parses "(foo bar do\nend)"
-  parses "a = 1; a &= 1"
  parses "a = 1; a &= 1"
-  parses "a; unless / /; / /; else; / /; end"
  parses "a; unless / /; / /; else; / /; end"
-  parses "\"\#{1\n}\""
  parses "\"\#{1\n}\""
-  parses "a[], a[] = 1, 2"
  parses "a[], a[] = 1, 2"
-  parses "foo(z: 0, a: n < 2)"
  parses "foo(z: 0, a: n < 2)"
-  says syntax error on "def foo(case); end"
  says syntax error on "def foo(case); end"
-  parses "a.b **=\n1"
  parses "a.b **=\n1"
-  parses "foo(bar { })"
  parses "foo(bar { })"
-  parses "def foo(var : Int**); end"
  parses "def foo(var : Int**); end"
-  parses "foo(\"foo bar\": 1, \"baz\": 2)"
  parses "foo(\"foo bar\": 1, \"baz\": 2)"
-  says syntax error on "-> :Int32 { }"
  says syntax error on "-> :Int32 { }"
-  says syntax error on "a = break"
  says syntax error on "a = break"
-  parses "puts ::foo"
  parses "puts ::foo"
-  parses "{1, 2, 3}"
  parses "{1, 2, 3}"
-  parses "return {1 => 2}"
  parses "return {1 => 2}"
-  parses "n | 2"
  parses "n | 2"
-  parses "foo(0, n * 2)"
  parses "foo(0, n * 2)"
-  parses "foo ..2"
  parses "foo ..2"
-  says syntax error on "a {}, b = 1"
  says syntax error on "a {}, b = 1"
-  parses "\"hello \\\n     world\""
  parses "\"hello \\\n     world\""
-  says syntax error on "->(x : Int32, x : Int32) {}"
  says syntax error on "->(x : Int32, x : Int32) {}"
-  parses "(/ /)"
  parses "(/ /)"
-  parses "def foo(x @yield); end"
  parses "def foo(x @yield); end"
-  parses "x = 0; a, b = x += 1"
  parses "x = 0; a, b = x += 1"
-  says syntax error on "'a' foo"
  says syntax error on "'a' foo"
-  says syntax error on "foo { |(while)| }"
  says syntax error on "foo { |(while)| }"
-  says syntax error on "a = 1; a += break"
  says syntax error on "a = 1; a += break"
-  parses "Set {1, 2, 3}"
  parses "Set {1, 2, 3}"
-  parses ":%"
  parses ":%"
-  parses "def &-(); end"
  parses "def &-(); end"
-  says syntax error on "macro nil?; end"
  says syntax error on "macro nil?; end"
-  parses ":>="
  parses ":>="
-  parses "def foo(*y : *T); 1; end"
  parses "def foo(*y : *T); 1; end"
-  says syntax error on "foo[next]"
  says syntax error on "foo[next]"
-  parses "\"hello \\\r\n     world\""
  parses "\"hello \\\r\n     world\""
-  parses "def foo(@while); end"
  parses "def foo(@while); end"
-  says syntax error on "foo { |(false)| }"
  says syntax error on "foo { |(false)| }"
-  parses "def <=(*args, **opts, &); end"
  parses "def <=(*args, **opts, &); end"
-  parses "n * 2"
  parses "n * 2"
-  says syntax error on "foo { |(protected)| }"
  says syntax error on "foo { |(protected)| }"
-  parses "a()/3"
  parses "a()/3"
-  parses "def foo(a, &block : Int, Float -> Double); end"
  parses "def foo(a, &block : Int, Float -> Double); end"
-  says syntax error on "macro is_a?; end"
  says syntax error on "macro is_a?; end"
-  parses "foo.<="
  parses "foo.<="
-  says syntax error on "if 1\n  foo 1,\nend"
  says syntax error on "if 1\n  foo 1,\nend"
-  parses "a == / /"
  parses "a == / /"
-  says syntax error on "def foo(foo sizeof); end"
  says syntax error on "def foo(foo sizeof); end"
-  parses "lib LibC; fun foo(a : ::B, ::C -> ::D); end"
  parses "lib LibC; fun foo(a : ::B, ::C -> ::D); end"
-  parses "enum Foo; A = 1\ndef self.foo; 1; end\nend"
  parses "enum Foo; A = 1\ndef self.foo; 1; end\nend"
-  parses "foo.[]= do end"
  parses "foo.[]= do end"
-  parses "foo.^(1, 2) { 3 }"
  parses "foo.^(1, 2) { 3 }"
-  says syntax error on "lib Foo%end"
  says syntax error on "lib Foo%end"
-  parses "alias : Int32"
  parses "alias : Int32"
-  parses "def foo(@var = 1); 1; end"
  parses "def foo(@var = 1); 1; end"
-  parses "offsetof : Int32"
  parses "offsetof : Int32"
-  says syntax error on "foo { |(next)| }"
  says syntax error on "foo { |(next)| }"
-  parses "n < 2"
  parses "n < 2"
-  parses "->@@foo.foo!"
  parses "->@@foo.foo!"
-  says syntax error on "foo { |sizeof| }"
  says syntax error on "foo { |sizeof| }"
-  parses "foo.+"
  parses "foo.+"
-  parses "case 1\nin Int32; 2; end"
  parses "case 1\nin Int32; 2; end"
-Normalize: proc pointer
-  normalizes proc pointer with parameters, without object
  normalizes proc pointer with parameters, without object
-  normalizes proc pointer with ivar receiver
  normalizes proc pointer with ivar receiver
-  normalizes proc pointer with global const receiver
  normalizes proc pointer with global const receiver
-  normalizes proc pointer without object
  normalizes proc pointer without object
-  normalizes proc pointer with const receiver
  normalizes proc pointer with const receiver
-  normalizes proc pointer with variable receiver
  normalizes proc pointer with variable receiver
-  normalizes proc pointer of global call
  normalizes proc pointer of global call
-  normalizes proc pointer with cvar receiver
  normalizes proc pointer with cvar receiver
-Call errors
-  says type mismatch for positional argument with two options
  says type mismatch for positional argument with two options
-  says type mismatch for symbol against enum, named argument case
  says type mismatch for symbol against enum, named argument case
-  says wrong number of arguments even if other overloads don't match by block
  says wrong number of arguments even if other overloads don't match by block
-  says type mismatch for symbol against enum (did you mean)
  says type mismatch for symbol against enum (did you mean)
-  says type mismatch for positional argument with three options
  says type mismatch for positional argument with three options
-  says not expected to be invoked with a block
  says not expected to be invoked with a block
-  says missing named arguments
  says missing named arguments
-  says missing named argument
  says missing named argument
-  says type mismatch for named argument 
  says type mismatch for named argument 
-  says type mismatch for positional argument even if there are overloads that don't match
  says type mismatch for positional argument even if there are overloads that don't match
-  says type mismatch for positional argument
  says type mismatch for positional argument
-  errors on argument if more types are given than expected, shows all expected types
  errors on argument if more types are given than expected, shows all expected types
-  replaces free variables in positional argument
  replaces free variables in positional argument
-  method signatures in error traces
-    expands double splat argument, more elements
    expands double splat argument, more elements
-    includes named arguments
    includes named arguments
-    expands positional and single splat argument, empty tuple
    expands positional and single splat argument, empty tuple
-    expands double splat argument, empty named tuple
    expands double splat argument, empty named tuple
-    expands single splat argument, more elements
    expands single splat argument, more elements
-    expands positional and double splat argument, more elements
    expands positional and double splat argument, more elements
-    expands positional and single splat argument
    expands positional and single splat argument
-    includes named argument
    includes named argument
-    includes positional and named argument
    includes positional and named argument
-    expands positional and double splat argument, empty named tuple
    expands positional and double splat argument, empty named tuple
-    expands positional and double splat argument
    expands positional and double splat argument
-    uses `T.method` instead of `T:module#method`
    uses `T.method` instead of `T:module#method`
-    expands single splat argument, empty tuple
    expands single splat argument, empty tuple
-    expands positional and single splat argument, more elements
    expands positional and single splat argument, more elements
-    expands double splat argument
    expands double splat argument
-    expands single splat argument
    expands single splat argument
-    uses `T.method` instead of `T.class#method`
    uses `T.method` instead of `T.class#method`
-  replaces generic type var in positional argument
  replaces generic type var in positional argument
-  says no parameter named
  says no parameter named
-  errors on argument if argument matches in all overloads but with different types in other arguments
  errors on argument if argument matches in all overloads but with different types in other arguments
-  says no parameters named
  says no parameters named
-  says argument already specified
  says argument already specified
-  says expected to be invoked with a block
  says expected to be invoked with a block
-  errors on argument if more types are given than expected
  errors on argument if more types are given than expected
-  replaces free variables in named argument
  replaces free variables in named argument
-  says wrong number of arguments (to few arguments)
  says wrong number of arguments (to few arguments)
-  says type mismatch for symbol against enum (list all possibilities when 10 or less)
  says type mismatch for symbol against enum (list all possibilities when 10 or less)
-  replaces generic type var in named argument
  replaces generic type var in named argument
-Code gen: automatic cast
-  casts literal integer (Int32 -> Float32)
  casts literal integer (Int32 -> Float32)
-  casts Symbol to Enum in ivar type declaration
  casts Symbol to Enum in ivar type declaration
-  casts literal float (Float32 -> Float64)
  casts literal float (Float32 -> Float64)
-  casts literal integer (Int32 -> Float64)
  casts literal integer (Int32 -> Float64)
-  casts literal integer (Int64 -> Int32, ok)
  casts literal integer (Int64 -> Int32, ok)
-  does multidispatch with automatic casting (1) (#8217)
  does multidispatch with automatic casting (1) (#8217)
-  doesn't autocast number on union (#8655)
  doesn't autocast number on union (#8655)
-  casts Int32 to Int64 in ivar assignment
  casts Int32 to Int64 in ivar assignment
-  casts symbol literal to enum
  casts symbol literal to enum
-  casts Int32 to Int64 in cvar type declaration
  casts Int32 to Int64 in cvar type declaration
-  casts literal float (Float64 -> Float32)
  casts literal float (Float64 -> Float32)
-  casts integer variable to larger type (#9565)
  casts integer variable to larger type (#9565)
-  casts Int32 to Int64 in ivar type declaration
  casts Int32 to Int64 in ivar type declaration
-  casts Int32 to Int64 in lvar assignment
  casts Int32 to Int64 in lvar assignment
-  casts Int32 to Int64 in ivar type declaration in generic
  casts Int32 to Int64 in ivar type declaration in generic
-  casts Int32 -> Int64 in arg restriction
  casts Int32 -> Int64 in arg restriction
-  casts Int32 to Int64 in cvar assignment
  casts Int32 to Int64 in cvar assignment
-  does multidispatch with automatic casting (3)
  does multidispatch with automatic casting (3)
-  does multidispatch with automatic casting (2) (#8217)
  does multidispatch with automatic casting (2) (#8217)
-  casts Symbol to Enum in ivar assignment
  casts Symbol to Enum in ivar assignment
-  casts literal integer (Int32 -> Int64)
  casts literal integer (Int32 -> Int64)
-Code gen: debug
-  codegens lib union (#7335)
  codegens lib union (#7335)
-  has debug info in closure inside if (#5593)
  has debug info in closure inside if (#5593)
-  inlines instance var access through getter in debug mode
  inlines instance var access through getter in debug mode
-  codegens correct debug info for untyped expression (#4007 and #4008)
  codegens correct debug info for untyped expression (#4007 and #4008)
-  doesn't emit debug info for unused variable declarations (#9882)
  doesn't emit debug info for unused variable declarations (#9882)
-  stores and restores debug location after jumping to main (#6920)
  stores and restores debug location after jumping to main (#6920)
-  doesn't fail on constant read calls (#11416)
  doesn't fail on constant read calls (#11416)
-  correctly restores debug location after fun change (#4254)
  correctly restores debug location after fun change (#4254)
-  codegens correct debug info for new with custom allocate (#3945)
  codegens correct debug info for new with custom allocate (#3945)
-  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals
  doesn't fail on splat expansions inside array-like literals
-  stores and restores debug location after jumping to main (3)
  stores and restores debug location after jumping to main (3)
-  codegens extern union (#7335)
  codegens extern union (#7335)
-  doesn't emit incorrect debug info for closured self
  doesn't emit incorrect debug info for closured self
-  codegens abstract struct (#3578)
  codegens abstract struct (#3578)
-  stores and restores debug location after jumping to main (2)
  stores and restores debug location after jumping to main (2)
-  has correct debug location after constant initialization in call with block (#4719)
  has correct debug location after constant initialization in call with block (#4719)
-Crystal::Repl::Interpreter
-  integration
-    does Float64#to_s (simple)
    does Float64#to_s (simple)
-    does YAML::Serializable
    does YAML::Serializable
-    does Int32#to_s
    does Int32#to_s
-    does some Hash methods
    does some Hash methods
-    does JSON::Serializable
    does JSON::Serializable
-    does IO.pipe (checks that StaticArray is passed correctly to C calls)
    does IO.pipe (checks that StaticArray is passed correctly to C calls)
-    does YAML
    does YAML
-    does String#includes?
    does String#includes?
-    does CSV
    does CSV
-    does JSON
    does JSON
-    does Float64#to_s (complex)
    does Float64#to_s (complex)
-    does XML
    does XML
-    does caller
    does caller
-    does Range#to_a, Array#to_s
    does Range#to_a, Array#to_s
-Normalize: case
-  normalizes select with else
  normalizes select with else
-  normalizes select with assign
  normalizes select with assign
-  normalizes select with assign and bang method
  normalizes select with assign and bang method
-  normalizes select with call
  normalizes select with call
-  normalizes select with assign and question method
  normalizes select with assign and question method
-Semantic: multi assign
-  can pass splat variable at top-level to macros (#11596)
  can pass splat variable at top-level to macros (#11596)
-  strict_multi_assign
-    doesn't error if some type in union matches target count
    doesn't error if some type in union matches target count
-    errors if assigning union of tuples to fewer targets
    errors if assigning union of tuples to fewer targets
-    errors if assigning non-Indexable to splat (#11414)
    errors if assigning non-Indexable to splat (#11414)
-    errors if assigning non-Indexable (#11414)
    errors if assigning non-Indexable (#11414)
-    doesn't error if some type in union has no constant size
    doesn't error if some type in union has no constant size
-    errors if assigning tuple to more targets
    errors if assigning tuple to more targets
-    errors if assigning tuple to fewer targets
    errors if assigning tuple to fewer targets
-  without strict_multi_assign
-    doesn't error if assigning tuple to fewer targets
    doesn't error if assigning tuple to fewer targets
-    doesn't error if assigning non-Indexable (#11414)
    doesn't error if assigning non-Indexable (#11414)
-    errors if assigning non-Indexable to splat (#11414)
    errors if assigning non-Indexable to splat (#11414)
-Normalize: hash literal
-  hoists complex element expressions, hash-like generic
  hoists complex element expressions, hash-like generic
-  normalizes non-empty with of
  normalizes non-empty with of
-  hoists complex element expressions, hash-like
  hoists complex element expressions, hash-like
-  normalizes non-empty without of
  normalizes non-empty without of
-  hoists complex element expressions
  hoists complex element expressions
-  normalizes empty with of
  normalizes empty with of
-Code gen: generic class type
-  doesn't run generic instance var initializers in formal superclass's context (#4753)
  doesn't run generic instance var initializers in formal superclass's context (#4753)
-  doesn't crash on generic type restriction with no subtypes (#7583)
  doesn't crash on generic type restriction with no subtypes (#7583)
-  doesn't use virtual + in type arguments (#2839)
  doesn't use virtual + in type arguments (#2839)
-  inherited instance var initialize from generic to concrete (#2128)
  inherited instance var initialize from generic to concrete (#2128)
-  doesn't override guessed instance var in generic type if already declared in superclass (#9431)
  doesn't override guessed instance var in generic type if already declared in superclass (#9431)
-  runs generic instance var initializers in superclass's metaclass context (2) (#6482)
  runs generic instance var initializers in superclass's metaclass context (2) (#6482)
-  doesn't use virtual + in type arguments for Tuple (#2839)
  doesn't use virtual + in type arguments for Tuple (#2839)
-  codegens virtual generic metaclass macro method call
  codegens virtual generic metaclass macro method call
-  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)
  uses big integer as generic type argument (#2353)
-  doesn't consider abstract types for including types (#7200)
  doesn't consider abstract types for including types (#7200)
-  codegens inherited generic class instance var
  codegens inherited generic class instance var
-  runs generic instance var initializers in superclass's metaclass context (#4753)
  runs generic instance var initializers in superclass's metaclass context (#4753)
-  invokes super in generic class (#2354)
  invokes super in generic class (#2354)
-  instantiates generic class with default argument in initialize (#394)
  instantiates generic class with default argument in initialize (#394)
-  doesn't use virtual + in type arguments for NamedTuple (#2839)
  doesn't use virtual + in type arguments for NamedTuple (#2839)
-  allows initializing instance variable (#665)
  allows initializing instance variable (#665)
-  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128
  codegens compile-time interpreted generic int128
-  doesn't consider abstract generic instantiation when restricting type (#5190)
  doesn't consider abstract generic instantiation when restricting type (#5190)
-  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)
  recomputes two calls that look the same due to generic type being instantiated (#7728)
-  declares instance var with virtual T (#1675)
  declares instance var with virtual T (#1675)
-  codegens static array size after instantiating
  codegens static array size after instantiating
-  inherited instance var initialize from generic to generic to concrete (#2128)
  inherited instance var initialize from generic to generic to concrete (#2128)
-  doesn't crash on generic type restriction with initially no subtypes (#8411)
  doesn't crash on generic type restriction with initially no subtypes (#8411)
-  allows initializing instance variable in inherited generic type
  allows initializing instance variable in inherited generic type
-Crystal::Doc::Method
-  args_to_s
-    shows underscore restriction
    shows underscore restriction
-    shows splat args
    shows splat args
-    shows block args
    shows block args
-    shows simple args
    shows simple args
-    shows default value of arg with highlighting
    shows default value of arg with highlighting
-    shows block args with underscore
    shows block args with underscore
-    shows double splat args
    shows double splat args
-    shows return type restriction
    shows return type restriction
-    shows block args if a def has `yield`
    shows block args if a def has `yield`
-    shows external name of arg
    shows external name of arg
-    shows external name of arg with quotes and escaping
    shows external name of arg with quotes and escaping
-    shows args and return type restriction
    shows args and return type restriction
-    shows typeof restriction of arg with highlighting
    shows typeof restriction of arg with highlighting
-  doc
-    inherits doc from ancestor (no extra comment)
    inherits doc from ancestor (no extra comment)
-    inherits doc from ancestor (use :inherit:)
    inherits doc from ancestor (use :inherit:)
-    trailing comment is not a doc comment
    trailing comment is not a doc comment
-    inherits doc from previous def (no extra comment)
    inherits doc from previous def (no extra comment)
-    trailing comment is not part of a doc comment
    trailing comment is not part of a doc comment
-    inherits doc from ancestor (use :inherit: plus more content)
    inherits doc from ancestor (use :inherit: plus more content)
-    gets doc from underlying method
    gets doc from underlying method
-Crystal::Repl::Interpreter
-  multidispatch
-    casts multidispatch argument to the def's arg type
    casts multidispatch argument to the def's arg type
-    does multidispatch with captured block (#12217)
    does multidispatch with captured block (#12217)
-    does dispatch on one argument with struct receiver, and modifies it
    does dispatch on one argument with struct receiver, and modifies it
-    does dispatch on receiver type and argument type, multiple times
    does dispatch on receiver type and argument type, multiple times
-    does dispatch on one argument
    does dispatch on one argument
-    does dispatch on receiver type and argument type
    does dispatch on receiver type and argument type
-    passes self as pointer when doing multidispatch (2)
    passes self as pointer when doing multidispatch (2)
-    doesn't compile block if it's not used (no yield)
    doesn't compile block if it's not used (no yield)
-    passes self as pointer when doing multidispatch
    passes self as pointer when doing multidispatch
-    does dispatch on one argument inside module with implicit self
    does dispatch on one argument inside module with implicit self
-    does multidispatch with mandatory named arguments
    does multidispatch with mandatory named arguments
-    does multidispatch on virtual metaclass type (1)
    does multidispatch on virtual metaclass type (1)
-    does dispatch on virtual type
    does dispatch on virtual type
-    does dispatch on receiver type
    does dispatch on receiver type
-    does dispatch on one argument with block
    does dispatch on one argument with block
-    downcasts self from union to struct (pass pointer to self)
    downcasts self from union to struct (pass pointer to self)
-    does dispatch on one argument inside module with explicit receiver
    does dispatch on one argument inside module with explicit receiver
-    does multidispatch on virtual metaclass type (2)
    does multidispatch on virtual metaclass type (2)
-    initialize multidispatch
    initialize multidispatch
-Code gen: module
-  can use generic module as instance variable type
  can use generic module as instance variable type
-  expands modules to its including types (3) (#1916)
  expands modules to its including types (3) (#1916)
-  declares and includes generic module, in macros T is a tuple literal
  declares and includes generic module, in macros T is a tuple literal
-  expands modules to its including types (2) (#1916)
  expands modules to its including types (2) (#1916)
-  codegens pointer of module and pass value to method
  codegens pointer of module and pass value to method
-  can instantiate generic module
  can instantiate generic module
-  can use generic module as instance variable type (2)
  can use generic module as instance variable type (2)
-  codegens pointer of module with method
  codegens pointer of module with method
-  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)
  casts to union of module that is included in other module (#3323)
-  codegens pointer of module with method with two including types with one struct (2)
  codegens pointer of module with method with two including types with one struct (2)
-  codegens dispatch of union with module (#3647)
  codegens dispatch of union with module (#3647)
-  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)
  casts to union of generic module that is included in other module (#3323)
-  declares proc with module type and invoke it with two different types that return themselves
  declares proc with module type and invoke it with two different types that return themselves
-  expands modules to its including types (#1916)
  expands modules to its including types (#1916)
-  codegens pointer of module with method with two including types with one struct
  codegens pointer of module with method with two including types with one struct
-  codegens module with virtual type
  codegens module with virtual type
-  codegens proc of a module that was never included
  codegens proc of a module that was never included
-  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block
  codegens pointer of module with block
-  codegens cast to module with class and struct to nilable module
  codegens cast to module with class and struct to nilable module
-  codegens proc of module when generic type includes it
  codegens proc of module when generic type includes it
-  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)
  invokes method on yielded module that has no instances (#1079)
-  codegens pointer of module with method with two including types
  codegens pointer of module with method with two including types
-  codegens cast to module that includes bool
  codegens cast to module that includes bool
-  declares proc with module type
  declares proc with module type
-Code gen: proc
-  call proc pointer with args
  call proc pointer with args
-  saves receiver value of proc pointer `->@ivar.foo`
  saves receiver value of proc pointer `->@ivar.foo`
-  codegens proc in instance var initialize (#3016)
  codegens proc in instance var initialize (#3016)
-  codegens nilable proc type dispatch (1)
  codegens nilable proc type dispatch (1)
-  can pass Proc(T) to Proc(Nil) in type restriction (#8964)
  can pass Proc(T) to Proc(Nil) in type restriction (#8964)
-  allows using proc arg name shadowing local variable
  allows using proc arg name shadowing local variable
-  closures var on ->var.call (#8584)
  closures var on ->var.call (#8584)
-  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference  makes sure that proc pointer is transformed after type inference
  makes sure that proc pointer is transformed after type inference
-  call simple proc literal with return
  call simple proc literal with return
-  codegens nilable proc type (1)
  codegens nilable proc type (1)
-  doesn't crash on #2196
  doesn't crash on #2196
-  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)  codegens proc to implicit self in constant (#647)
  codegens proc to implicit self in constant (#647)
-  codegens proc with another var
  codegens proc with another var
-  allows proc type of enum type
  allows proc type of enum type
-  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct  codegens issue with missing byval in proc literal inside struct
  codegens issue with missing byval in proc literal inside struct
-  allows invoking a function with a subtype when defined as block spec
  allows invoking a function with a subtype when defined as block spec
-  codegens captured block that returns tuple
  codegens captured block that returns tuple
-  passes block to another function (bug: mangling of both methods was the same)
  passes block to another function (bug: mangling of both methods was the same)
-  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type  codegens proc that accepts array of type
  codegens proc that accepts array of type
-  call proc literal with return type
  call proc literal with return type
-  binds function pointer to associated call
  binds function pointer to associated call
-  allows proc pointer where self is a class
  allows proc pointer where self is a class
-  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`  saves receiver value of proc pointer `->@@cvar.foo`
  saves receiver value of proc pointer `->@@cvar.foo`
-  takes pointerof function pointer
  takes pointerof function pointer
-  can assign proc that returns anything to proc that returns nil, using union type (#3655)
  can assign proc that returns anything to proc that returns nil, using union type (#3655)
-  codegens proc that references struct (bug)
  codegens proc that references struct (bug)
-  saves receiver value of proc pointer `->var.foo`
  saves receiver value of proc pointer `->var.foo`
-  can assign proc that returns anything to proc that returns nil (#3655)
  can assign proc that returns anything to proc that returns nil (#3655)
-  automatically casts proc that returns something to proc that returns void
  automatically casts proc that returns something to proc that returns void
-  codegens proc of generic type
  codegens proc of generic type
-  assigns nil and proc to nilable proc type
  assigns nil and proc to nilable proc type
-  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)  uses alias of proc with virtual type (#1347)
  uses alias of proc with virtual type (#1347)
-  doesn't crash when taking a proc pointer that multidispatches on the top-level (#3822)
  doesn't crash when taking a proc pointer that multidispatches on the top-level (#3822)
-  mangles strings in such a way they don't conflict with funs (#1006)
  mangles strings in such a way they don't conflict with funs (#1006)
-  codegens proc with union type that returns itself
  codegens proc with union type that returns itself
-  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)  codegens proc literal hard type inference (1)
  codegens proc literal hard type inference (1)
-  accesses T in macros as a TupleLiteral
  accesses T in macros as a TupleLiteral
-  call simple proc literal
  call simple proc literal
-  allows redefining fun
  allows redefining fun
-  doesn't crash when taking a proc pointer that multidispatches on a module (#3822)
  doesn't crash when taking a proc pointer that multidispatches on a module (#3822)
-  doesn't crash when taking a proc pointer to a virtual type (#9823)
  doesn't crash when taking a proc pointer to a virtual type (#9823)
-  returns proc as function pointer inside top-level fun (#14691)
  returns proc as function pointer inside top-level fun (#14691)
-  builds proc type from fun
  builds proc type from fun
-  gets proc to lib fun (#504)
  gets proc to lib fun (#504)
-  call proc pointer
  call proc pointer
-  allows invoking proc literal with smaller type
  allows invoking proc literal with smaller type
-  calls function pointer  calls function pointer  calls function pointer  calls function pointer  calls function pointer  calls function pointer  calls function pointer  calls function pointer  calls function pointer
  calls function pointer
-  calls proc pointer with union (passed by value) arg
  calls proc pointer with union (passed by value) arg
-  codegens proc that accepts a union and is called with a single type
  codegens proc that accepts a union and is called with a single type
-  returns ProcPointer inside top-level fun (#14691)
  returns ProcPointer inside top-level fun (#14691)
-  executes proc pointer on primitive
  executes proc pointer on primitive
-  passes proc as &->expr to method that yields
  passes proc as &->expr to method that yields
-  codegens proc that returns a virtual type
  codegens proc that returns a virtual type
-  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically  allows passing proc type to C automatically
  allows passing proc type to C automatically
-  does new on proc type
  does new on proc type
-  casts from function pointer to proc
  casts from function pointer to proc
-  builds nilable proc type from fun
  builds nilable proc type from fun
-  codegens nilable proc type dispatch (2)
  codegens nilable proc type dispatch (2)
-  allows proc type of enum type with base type
  allows proc type of enum type with base type
-  gets proc pointer using virtual type (#1337)
  gets proc pointer using virtual type (#1337)
-  call proc pointer of instance method
  call proc pointer of instance method
-  codegens nilable proc type (2)
  codegens nilable proc type (2)
-  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)  raises if returning closure from top-level fun (#14691)
  raises if returning closure from top-level fun (#14691)
-  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises  call proc pointer of instance method that raises
  call proc pointer of instance method that raises
-  allows invoking a function with a subtype
  allows invoking a function with a subtype
-  call proc literal with arguments
  call proc literal with arguments
-Semantic: concrete_types
-  VirtualType with concrete base
  VirtualType with concrete base
-  GenericModuleInstanceType
  GenericModuleInstanceType
-  ModuleType
  ModuleType
-  VirtualType with abstract base
  VirtualType with abstract base
-  UnionType of structs
  UnionType of structs
-  VirtualMetaclassType with abstract base
  VirtualMetaclassType with abstract base
-  VirtualMetaclassType with concrete base
  VirtualMetaclassType with concrete base
+    interprets read instance var
    interprets read instance var
+    does constructor
    does constructor
+    does object_id
    does object_id
+    calls implicit class self method
    calls implicit class self method
+    does allocate, set instance var and get instance var
    does allocate, set instance var and get instance var
+    calls explicit struct self method
    calls explicit struct self method
+Crystal::FFI::CallInterface
+  .variadic
+    basic
    basic
+    zero varargs
    zero varargs
+    validates args size
    validates args size
+  .new
+    with args
    with args
+    make struct
    make struct
+    all primitive arg types
    all primitive arg types
+    simple call
    simple call
+    sum struct
    sum struct
+    array
    array
+Semantic: struct
+  passes subtype check with generic module type on virtual type (2) (#10302)
  passes subtype check with generic module type on virtual type (2) (#10302)
+  doesn't make virtual for Struct
  doesn't make virtual for Struct
+  can't extend struct from non-abstract struct
  can't extend struct from non-abstract struct
+  can't extend class from struct
  can't extend class from struct
+  can cast to base abstract struct
  can cast to base abstract struct
+  passes subtype check with generic module type on virtual type
  passes subtype check with generic module type on virtual type
+  types struct declaration
  types struct declaration
+  unifies type to virtual type
  unifies type to virtual type
+  doesn't make virtual for Float
  doesn't make virtual for Float
+  allows struct to participate in virtual
  allows struct to participate in virtual
+  can't extend struct from class
  can't extend struct from class
+  doesn't error if method is not found in abstract type
  doesn't error if method is not found in abstract type
+  can't reopen as class
  can't reopen as class
+  doesn't make virtual for Int
  doesn't make virtual for Int
+  can't be nilable
  can't be nilable
+  passes subtype check with generic module type on virtual type (3)
  passes subtype check with generic module type on virtual type (3)
+  types generic struct declaration
  types generic struct declaration
+  errors if defining finalize for struct (#3840)
  errors if defining finalize for struct (#3840)
+  can't reopen as module
  can't reopen as module
+  doesn't make virtual for Value
  doesn't make virtual for Value
+Crystal::Macro
+  def methods
+    executes receiver
    executes receiver
+    executes double_splat
    executes double_splat
+    executes name
    executes name
+    executes block_arg
    executes block_arg
+    executes splat_index
    executes splat_index
+    executes return_type
    executes return_type
+    executes abstract?
    executes abstract?
+    executes body
    executes body
+    executes free_vars
    executes free_vars
+    executes args
    executes args
+    executes visibility
    executes visibility
+    executes accepts_block?
    executes accepts_block?
+  classvar methods
+    executes name
    executes name
+  exception handler methods
+    executes ensure
    executes ensure
+    executes rescue name
    executes rescue name
+    executes else
    executes else
+    executes else (nop)
    executes else (nop)
+    executes body
    executes body
+    executes rescues
    executes rescues
+    executes ensure (nop)
    executes ensure (nop)
+    executes rescue body
    executes rescue body
+    executes rescue types
    executes rescue types
+  proc notation methods
+    gets single input
    gets single input
+    gets empty output
    gets empty output
+    executes resolve
    executes resolve
+    executes resolve?
    executes resolve?
+    gets single output
    gets single output
+    gets multiple inputs
    gets multiple inputs
+  Crystal::ArrayLiteral
+    executes reject
    executes reject
+    executes index out of bounds
    executes index out of bounds
+    executes map with constants
    executes map with constants
+    executes splat
    executes splat
+    executes unshift
    executes unshift
+    executes sort with ids and strings
    executes sort with ids and strings
+    executes any? (true)
    executes any? (true)
+    executes find (finds)
    executes find (finds)
+    executes includes?
    executes includes?
+    executes first
    executes first
+    executes size
    executes size
+    executes splat with splat
    executes splat with splat
+    #map_with_index
+      without the index argument
+        returns the resulting array
        returns the resulting array
+      without the element argument
+        returns the resulting array
        returns the resulting array
+      without either argument
+        returns the resulting array
        returns the resulting array
+      with both arguments
+        returns the resulting array
        returns the resulting array
+    executes [] with range
    executes [] with range
+    executes map with arg
    executes map with arg
+    executes [] with computed range
    executes [] with computed range
+    executes of
    executes of
+    creates an array literal with a var
    creates an array literal with a var
+    executes sort with numbers
    executes sort with numbers
+    executes type
    executes type
+    executes last
    executes last
+    #each
    #each
+    calls block exactly once for each element in #sort_by
    calls block exactly once for each element in #sort_by
+    executes of (nop)
    executes of (nop)
+    #-
+      with TupleLiteral argument
+        removes the elements in RHS from LHS into an ArrayLiteral
        removes the elements in RHS from LHS into an ArrayLiteral
+      with ArrayLiteral argument
+        removes the elements in RHS from LHS into an ArrayLiteral
        removes the elements in RHS from LHS into an ArrayLiteral
+    executes sort with strings
    executes sort with strings
+    executes splat with symbols and strings
    executes splat with symbols and strings
+    executes any? (false)
    executes any? (false)
+    executes uniq
    executes uniq
+    executes all? (false)
    executes all? (false)
+    executes sort with ids
    executes sort with ids
+    executes [] with incomplete range
    executes [] with incomplete range
+    executes [] with two numbers
    executes [] with two numbers
+    executes identify
    executes identify
+    executes index 1
    executes index 1
+    executes find (doesn't find)
    executes find (doesn't find)
+    executes []=
    executes []=
+    executes sort_by
    executes sort_by
+    executes push
    executes push
+    executes empty?
    executes empty?
+    #each_with_index
+      without the element argument
+        builds the correct array
        builds the correct array
+      with both arguments
+        builds the correct array
        builds the correct array
+      without either argument
+        builds the correct array
        builds the correct array
+      without the index argument
+        builds the correct array
        builds the correct array
+    executes all? (true)
    executes all? (true)
+    executes is_a?
    executes is_a?
+    executes join
    executes join
+    executes type (nop)
    executes type (nop)
+    executes select
    executes select
+    executes map
    executes map
+    executes join with strings
    executes join with strings
+    executes reduce with no initial value
    executes reduce with no initial value
+    executes reduce with initial value
    executes reduce with initial value
+    #+
+      with TupleLiteral argument
+        concatenates the literals into an ArrayLiteral
        concatenates the literals into an ArrayLiteral
+      with ArrayLiteral argument
+        concatenates the literals into an ArrayLiteral
        concatenates the literals into an ArrayLiteral
+    executes index 0
    executes index 0
+  macro if methods
+    executes cond
    executes cond
+    executes else
    executes else
+    executes then
    executes then
+  if methods
+    executes cond
    executes cond
+    executes then
    executes then
+    executes else (nop)
    executes else (nop)
+    executes else
    executes else
+  symbol methods
+    executes symbol != symbol
    executes symbol != symbol
+    executes symbol == symbol
    executes symbol == symbol
+    forwards methods to string
    forwards methods to string
+  Crystal::TypeNode
+    executes instance_vars on symbol type
    executes instance_vars on symbol type
+    #abstract?
+      Crystal::NonGenericClassType
+        class
+          non-abstract
          non-abstract
+          abstract
          abstract
+        struct
+          non-abstract
          non-abstract
+          abstract
          abstract
+      Crystal::NonGenericModuleType
      Crystal::NonGenericModuleType
+      Crystal::GenericClassType
+        struct
+          non-abstract
          non-abstract
+          abstract
          abstract
+        class
+          non-abstract
          non-abstract
+          abstract
          abstract
+      Crystal::GenericModuleType
      Crystal::GenericModuleType
+    executes instance
    executes instance
+    public?
+      false
      false
+      true
      true
+    executes class_vars on symbol type
    executes class_vars on symbol type
+    executes class vars
    executes class vars
+    executes type_vars
    executes type_vars
+    executes resolve?
    executes resolve?
+    #module?
+      Crystal::GenericModuleType
      Crystal::GenericModuleType
+      Crystal::NonGenericModuleType
      Crystal::NonGenericModuleType
+      Crystal::GenericClassType
+        struct
        struct
+        class
        class
+      Crystal::NonGenericClassType
+        struct
        struct
+        class
        class
+    visibility
+      public
      public
+      private
      private
+    #id
+      does not include trailing + for virtual type
      does not include trailing + for virtual type
+    executes <=
    executes <=
+    executes ==
    executes ==
+    executes size of tuple metaclass
    executes size of tuple metaclass
+    executes instance_vars
    executes instance_vars
+    executes class_vars on metaclass
    executes class_vars on metaclass
+    executes !=
    executes !=
+    #includers
+      returns an array of types `self` is directly included in
      returns an array of types `self` is directly included in
+    #struct?
+      Crystal::NonGenericClassType
+        class
        class
+        struct
        struct
+      Crystal::GenericModuleType
      Crystal::GenericModuleType
+      Crystal::NonGenericModuleType
      Crystal::NonGenericModuleType
+      Crystal::GenericClassType
+        struct
        struct
+        class
        class
+    executes ancestors (with generic)
    executes ancestors (with generic)
+    executes resolve
    executes resolve
+    #class?
+      Crystal::GenericClassType
+        class
        class
+        struct
        struct
+      Crystal::NonGenericModuleType
      Crystal::NonGenericModuleType
+      Crystal::NonGenericClassType
+        struct
        struct
+        class
        class
+      Crystal::GenericModuleType
      Crystal::GenericModuleType
+    executes >=
    executes >=
+    #name
+      simple type
+        returns the name of the type
        returns the name of the type
+      generic instance
+        prints multiple arguments for splat type var
        prints multiple arguments for splat type var
+        prints empty splat type var
        prints empty splat type var
+        does not print extra commas for empty splat type var (1)
        does not print extra commas for empty splat type var (1)
+        does not print extra commas for empty splat type var (2)
        does not print extra commas for empty splat type var (2)
+        prints generic type arguments
        prints generic type arguments
+        does not print extra commas for empty splat type var (3)
        does not print extra commas for empty splat type var (3)
+      generic type
+        includes the generic_args of the instantiated type by default
        includes the generic_args of the instantiated type by default
+        includes the generic_args of the type by default
        includes the generic_args of the type by default
+      generic_args
+        true
+          includes the generic_args of the type
          includes the generic_args of the type
+          includes the generic_args of the instantiated type
          includes the generic_args of the instantiated type
+        false
+          does not include the generic_args of the instantiated type
          does not include the generic_args of the instantiated type
+          does not include the generic_args of the type
          does not include the generic_args of the type
+        with an invalid type argument
+          should raise the proper exception
          should raise the proper exception
+      namespaced type
+        should return the FQN of the type
        should return the FQN of the type
+    #warning
+      emits a warning at a specific node
      emits a warning at a specific node
+    #has_inner_pointers?
+      works on structs
      works on structs
+      works on references
      works on references
+      works on ReferenceStorage
      works on ReferenceStorage
+      works on primitive values
      works on primitive values
+    executes methods
    executes methods
+    executes <
    executes <
+    executes class vars (with inheritance)
    executes class vars (with inheritance)
+    executes class methods
    executes class methods
+    executes private?
+      false
      false
+      true
      true
+    == and != devirtualize generic type arguments (#10730)
    == and != devirtualize generic type arguments (#10730)
+    executes class
    executes class
+    #union?
+      true
      true
+      false
      false
+    executes superclass
    executes superclass
+    executes ancestors
    executes ancestors
+    executes union_types (non-union)
    executes union_types (non-union)
+    executes >
    executes >
+    executes size of tuple
    executes size of tuple
+    executes instance_vars on metaclass
    executes instance_vars on metaclass
+    #nilable?
+      true
      true
+      false
      false
+    executes union_types (union)
    executes union_types (union)
+  multi_assign methods
+    executes values
    executes values
+    executes targets
    executes targets
+  executes assign without output
  executes assign without output
+  require methods
+    executes path
    executes path
+  Crystal::EnumDef
+    executes body
    executes body
+    executes name
    executes name
+    executes base_type
    executes base_type
+    executes kind
    executes kind
+  Crystal::External
+    executes is_a?
    executes is_a?
+  regex methods
+    executes options
    executes options
+    executes source
    executes source
+  control expression methods
+    executes exp
    executes exp
+    executes exp (nop)
    executes exp (nop)
+  Crystal::NamedTupleLiteral
+    executes to_a
    executes to_a
+    executes [] with invalid key type
    executes [] with invalid key type
+    executes [] not found
    executes [] not found
+    executes has_key?
    executes has_key?
+    executes map
    executes map
+    executes double splat
    executes double splat
+    executes []=
    executes []=
+    executes empty?
    executes empty?
+    #each
+      without either argument
+        builds the correct array
        builds the correct array
+      without the value argument
+        builds the correct array
        builds the correct array
+      with both arguments
+        builds the correct array
        builds the correct array
+      without the key argument
+        builds the correct array
        builds the correct array
+    executes keys
    executes keys
+    executes double splat with arg
    executes double splat with arg
+    executes values
    executes values
+    creates a named tuple literal with a var
    creates a named tuple literal with a var
+    executes is_a?
    executes is_a?
+    executes size
    executes size
+    executes double splat
    executes double splat
+    executes []
    executes []
+  is_a methods
+    executes receiver
    executes receiver
+    executes arg
    executes arg
+  arg methods
+    executes internal_name
    executes internal_name
+    executes restriction
    executes restriction
+    executes name
    executes name
+    executes default_value
    executes default_value
+  Crystal::TupleLiteral
+    #-
+      with TupleLiteral argument
+        removes the elements in RHS from LHS into a TupleLiteral
        removes the elements in RHS from LHS into a TupleLiteral
+      with ArrayLiteral argument
+        removes the elements in RHS from LHS into a TupleLiteral
        removes the elements in RHS from LHS into a TupleLiteral
+    executes all? (true)
    executes all? (true)
+    executes unshift
    executes unshift
+    #map_with_index
+      without the element argument
+        returns the resulting tuple
        returns the resulting tuple
+      without the index argument
+        returns the resulting tuple
        returns the resulting tuple
+      without either argument
+        returns the resulting tuple
        returns the resulting tuple
+      with both arguments
+        returns the resulting tuple
        returns the resulting tuple
+    executes find (doesn't find)
    executes find (doesn't find)
+    executes uniq
    executes uniq
+    executes reject
    executes reject
+    executes [] out of bounds
    executes [] out of bounds
+    executes splat with symbols and strings
    executes splat with symbols and strings
+    executes [] with 0
    executes [] with 0
+    executes join
    executes join
+    executes map with constants
    executes map with constants
+    creates a tuple literal with a var
    creates a tuple literal with a var
+    executes map with arg
    executes map with arg
+    executes first
    executes first
+    executes push
    executes push
+    executes join with strings
    executes join with strings
+    executes sort with strings
    executes sort with strings
+    executes map
    executes map
+    executes [] with incomplete range
    executes [] with incomplete range
+    executes size
    executes size
+    executes sort with ids
    executes sort with ids
+    executes empty?
    executes empty?
+    executes splat with splat
    executes splat with splat
+    executes [] with computed range
    executes [] with computed range
+    executes any? (false)
    executes any? (false)
+    executes sort with ids and strings
    executes sort with ids and strings
+    executes is_a?
    executes is_a?
+    executes any? (true)
    executes any? (true)
+    executes sort with numbers
    executes sort with numbers
+    #each_with_index
+      without the element argument
+        builds the correct array
        builds the correct array
+      without the index argument
+        builds the correct array
        builds the correct array
+      with both arguments
+        builds the correct array
        builds the correct array
+      without either argument
+        builds the correct array
        builds the correct array
+    executes includes?
    executes includes?
+    executes select
    executes select
+    #+
+      with ArrayLiteral argument
+        concatenates the literals into a TupleLiteral
        concatenates the literals into a TupleLiteral
+      with TupleLiteral argument
+        concatenates the literals into a TupleLiteral
        concatenates the literals into a TupleLiteral
+    executes find (finds)
    executes find (finds)
+    executes all? (false)
    executes all? (false)
+    executes [] with 1
    executes [] with 1
+    executes splat
    executes splat
+    executes [] with range
    executes [] with range
+    executes last
    executes last
+    executes splat with arg
    executes splat with arg
+    #each
    #each
+  string methods
+    executes camelcase with lower
    executes camelcase with lower
+    executes string starts_with? string (true)
    executes string starts_with? string (true)
+    executes titleize
    executes titleize
+    executes string ends_with? char (false)
    executes string ends_with? char (false)
+    executes split with argument
    executes split with argument
+    executes underscore
    executes underscore
+    executes string starts_with? char (false)
    executes string starts_with? char (false)
+    executes tr
    executes tr
+    executes to_i(base)
    executes to_i(base)
+    executes string < string
    executes string < string
+    executes string includes? string (true)
    executes string includes? string (true)
+    executes string includes? string (false)
    executes string includes? string (false)
+    executes string includes? char (false)
    executes string includes? char (false)
+    executes string starts_with? string (false)
    executes string starts_with? string (false)
+    executes split with char argument
    executes split with char argument
+    executes lines
    executes lines
+    executes downcase
    executes downcase
+    executes string > macroid
    executes string > macroid
+    executes string > string
    executes string > string
+    executes string + char
    executes string + char
+    executes string =~ (false)
    executes string =~ (false)
+    executes chars
    executes chars
+    executes string < macroid
    executes string < macroid
+    executes [] with inclusive range
    executes [] with inclusive range
+    executes string starts_with? char (true)
    executes string starts_with? char (true)
+    executes string ends_with? char (true)
    executes string ends_with? char (true)
+    executes string chomp
    executes string chomp
+    executes string == string
    executes string == string
+    executes [] with computed range
    executes [] with computed range
+    executes string =~ (true)
    executes string =~ (true)
+    executes capitalize
    executes capitalize
+    executes upcase
    executes upcase
+    executes empty
    executes empty
+    executes camelcase with invalid lower arg type
    executes camelcase with invalid lower arg type
+    executes camelcase
    executes camelcase
+    executes count
    executes count
+    executes string ends_with? string (false)
    executes string ends_with? string (false)
+    executes string + string
    executes string + string
+    executes string ends_with? string (true)
    executes string ends_with? string (true)
+    executes to_i
    executes to_i
+    executes string includes? char (true)
    executes string includes? char (true)
+    executes to_utf16
    executes to_utf16
+    executes strip
    executes strip
+    executes split without arguments
    executes split without arguments
+    executes size
    executes size
+    executes string != string
    executes string != string
+    executes gsub
    executes gsub
+    executes [] with exclusive range
    executes [] with exclusive range
+    executes [] with incomplete range
    executes [] with incomplete range
+  Crystal::ExternalVar
+    executes type
    executes type
+    executes real_name
    executes real_name
+    executes name
    executes name
+  flag?
+    has flag
    has flag
+    doesn't have flag
    doesn't have flag
+  env
+    doesn't have key
    doesn't have key
+    has key
    has key
+  #parse_type
+    metaclass
    metaclass
+    path
    path
+    generic
    generic
+    union - |
    union - |
+    raises on extra unparsed tokens before the type
    raises on extra unparsed tokens before the type
+    exposes syntax warnings
    exposes syntax warnings
+    raises on non StringLiteral arguments
    raises on non StringLiteral arguments
+    proc
    proc
+    union - Union
    union - Union
+    raises on extra unparsed tokens after the type
    raises on extra unparsed tokens after the type
+    raises on empty string
    raises on empty string
+    union - in generic
    union - in generic
+  assign methods
+    executes target
    executes target
+    executes value
    executes value
+  metaclass methods
+    executes resolve?
    executes resolve?
+    executes resolve
    executes resolve
+    executes instance
    executes instance
+  block methods
+    executes args
    executes args
+    executes splat_index
    executes splat_index
+    executes body
    executes body
+  or methods
+    executes right
    executes right
+    executes left
    executes left
+  annotation methods
+    executes [] with NumberLiteral
    executes [] with NumberLiteral
+    executes [] with SymbolLiteral
    executes [] with SymbolLiteral
+    executes [] with MacroId
    executes [] with MacroId
+    executes name
    executes name
+    executes [] with other ASTNode, but raises an error
    executes [] with other ASTNode, but raises an error
+    executes [] with StringLiteral
    executes [] with StringLiteral
+  nilable cast methods
+    executes to
    executes to
+    executes obj
    executes obj
+  Crystal::RangeLiteral
+    executes to_a
    executes to_a
+    executes excludes_end?
    executes excludes_end?
+    executes map
    executes map
+    #each
    #each
+    executes begin
    executes begin
+    executes end
    executes end
+  cast methods
+    executes obj
    executes obj
+    executes to
    executes to
+  Crystal::Select
+    executes whens
    executes whens
+    executes else
    executes else
+  Crystal::CStructOrUnionDef
+    executes kind
    executes kind
+    executes name
    executes name
+    executes body
    executes body
+    executes union?
    executes union?
+  Crystal::MacroLiteral
+    executes value
    executes value
+  proc literal methods
+    executes body
    executes body
+    executes args
    executes args
+    executes return_type
    executes return_type
+  expressions methods
+    executes expressions
    executes expressions
+  readinstancevar methods
+    executes name
    executes name
+    executes obj
    executes obj
+  uninitialized var methods
+    executes type
    executes type
+    executes var
    executes var
+  path methods
+    executes global?
    executes global?
+    executes resolve?
    executes resolve?
+    executes resolve
    executes resolve
+    executes types
    executes types
+    executes names
    executes names
+    executes global
    executes global
+  Crystal::AnnotationDef
+    executes body
    executes body
+    executes kind
    executes kind
+    executes name
    executes name
+  number methods
+    executes //
    executes //
+    executes + and preserves type
    executes + and preserves type
+    executes <= (false)
    executes <= (false)
+    executes *
    executes *
+    executes <=> (returns nil)
    executes <=> (returns nil)
+    executes &
    executes &
+    executes <=>
    executes <=>
+    executes > (false)
    executes > (false)
+    executes <= (true)
    executes <= (true)
+    executes |
    executes |
+    #to_number
    #to_number
+    executes < (true)
    executes < (true)
+    executes >= (true)
    executes >= (true)
+    executes >>
    executes >>
+    executes -
    executes -
+    executes >= (false)
    executes >= (false)
+    executes unary -
    executes unary -
+    executes < (false)
    executes < (false)
+    preserves integer size (#10713)
    preserves integer size (#10713)
+    executes unary +
    executes unary +
+    executes +
    executes +
+    executes math operations using U/Int128
    executes math operations using U/Int128
+    executes **
    executes **
+    executes + with float
    executes + with float
+    executes <<
    executes <<
+    executes ^
    executes ^
+    executes %
    executes %
+    executes > (true)
    executes > (true)
+    executes unary ~
    executes unary ~
+    executes kind
    executes kind
+  Crystal::Asm
+    executes inputs
    executes inputs
+    executes alignstack?
    executes alignstack?
+    executes outputs
    executes outputs
+    executes clobbers
    executes clobbers
+    executes intel?
    executes intel?
+    executes text
    executes text
+    executes can_throw?
    executes can_throw?
+    executes volatile?
    executes volatile?
+  splat methods
+    executes exp
    executes exp
+  visibility modifier methods
+    executes visibility
    executes visibility
+    executes exp
    executes exp
+  proc pointer methods
+    executes obj when present
    executes obj when present
+    executes args when not empty
    executes args when not empty
+    executes name
    executes name
+    executes args when empty
    executes args when empty
+    executes global?
    executes global?
+    executes obj when absent
    executes obj when absent
+  Crystal::FunDef
+    executes variadic?
    executes variadic?
+    executes return_type
    executes return_type
+    executes has_body?
    executes has_body?
+    executes real_name
    executes real_name
+    executes name
    executes name
+    executes body
    executes body
+    executes args
    executes args
+  Crystal::LibDef
+    executes kind
    executes kind
+    executes name
    executes name
+    executes body
    executes body
+  union methods
+    executes types
    executes types
+    executes resolve
    executes resolve
+    executes resolve?
    executes resolve?
+  Crystal::MacroExpression
+    executes output?
    executes output?
+    executes exp
    executes exp
+  generic methods
+    executes name
    executes name
+    executes resolve
    executes resolve
+    executes type_vars
    executes type_vars
+    executes named_args
    executes named_args
+    executes types
    executes types
+    executes resolve?
    executes resolve?
+  instancevar methods
+    executes name
    executes name
+  executes assign
  executes assign
+  Crystal::Alias
+    executes name
    executes name
+    executes type
    executes type
+  Crystal::ModuleDef
+    executes body
    executes body
+    executes type_vars
    executes type_vars
+    executes kind
    executes kind
+    executes splat_index
    executes splat_index
+    executes name
    executes name
+  macro id methods
+    forwards methods to string
    forwards methods to string
+    compares with symbol
    compares with symbol
+    compares with string
    compares with string
+  while methods
+    executes body
    executes body
+    executes cond
    executes cond
+  macro for methods
+    executes vars
    executes vars
+    executes exp
    executes exp
+    executes body
    executes body
+  Crystal::Extend
+    executes name
    executes name
+  Crystal::HashLiteral
+    executes double splat
    executes double splat
+    executes double splat with arg
    executes double splat with arg
+    executes [] not found
    executes [] not found
+    executes of_value (nop)
    executes of_value (nop)
+    executes keys
    executes keys
+    executes to_a
    executes to_a
+    executes of_key
    executes of_key
+    executes empty?
    executes empty?
+    executes []=
    executes []=
+    executes is_a?
    executes is_a?
+    creates a hash literal with a var
    creates a hash literal with a var
+    executes size
    executes size
+    executes of_value
    executes of_value
+    executes of_key (nop)
    executes of_key (nop)
+    executes []
    executes []
+    executes type
    executes type
+    executes type (nop)
    executes type (nop)
+    executes has_key?
    executes has_key?
+    #each
+      without either argument
+        builds the correct array
        builds the correct array
+      without the key argument
+        builds the correct array
        builds the correct array
+      without the value argument
+        builds the correct array
        builds the correct array
+      with both arguments
+        builds the correct array
        builds the correct array
+    executes map
    executes map
+    executes double splat
    executes double splat
+    executes values
    executes values
+  case methods
+    in
+      executes exhaustive?
      executes exhaustive?
+      executes whens
      executes whens
+      executes when exhaustive?
      executes when exhaustive?
+    when
+      executes exhaustive?
      executes exhaustive?
+      executes cond
      executes cond
+      executes when body
      executes when body
+      executes whens
      executes whens
+      executes else
      executes else
+      executes when conds
      executes when conds
+      executes when exhaustive?
      executes when exhaustive?
+  unary expression methods
+    executes is_a?
    executes is_a?
+    executes exp
    executes exp
+  char methods
+    executes ord
    executes ord
+  Crystal::TypeDef
+    executes type
    executes type
+    executes name
    executes name
+  macro methods
+    executes name
    executes name
+    executes body
    executes body
+    executes double_splat
    executes double_splat
+    executes splat_index
    executes splat_index
+    executes args
    executes args
+    executes block_arg
    executes block_arg
+    executes visibility
    executes visibility
+  type declaration methods
+    executes type
    executes type
+    executes value
    executes value
+    executes var
    executes var
+    executes var when instance var
    executes var when instance var
+  #warning
+    emits a top level warning
    emits a top level warning
+  printing
+    p!
    p!
+    p
    p
+    puts
    puts
+    pp
    pp
+    print
    print
+    pp!
    pp!
+  responds_to methods
+    executes name
    executes name
+    executes receiver
    executes receiver
+  Crystal::AsmOperand
+    executes exp
    executes exp
+    executes constraint
    executes constraint
+  global methods
+    executes name
    executes name
+  Crystal::ClassDef
+    executes splat_index
    executes splat_index
+    executes type_vars
    executes type_vars
+    executes name
    executes name
+    executes superclass
    executes superclass
+    executes body
    executes body
+    executes struct?
    executes struct?
+    executes kind
    executes kind
+    executes abstract?
    executes abstract?
+  offsetof methods
+    executes offset
    executes offset
+    executes type
    executes type
+  Crystal::Primitive
+    executes name
    executes name
+  node methods
+    executes != on numbers (false)
    executes != on numbers (false)
+    class_name
+      executes class_name
      executes class_name
+      executes class_name
      executes class_name
+      executes class_name
      executes class_name
+      executes class_name
      executes class_name
+      executes class_name
      executes class_name
+      executes class_name
      executes class_name
+    #is_a?
+      union argument, unimplemented types
      union argument, unimplemented types
+      union argument, duplicate type
      union argument, duplicate type
+      union argument, mergeable
      union argument, mergeable
+      union argument, contains NoReturn
      union argument, contains NoReturn
+      union argument, undefined types
      union argument, undefined types
+      union argument
      union argument
+    symbolize
+      expands macro with symbolize call on string
      expands macro with symbolize call on string
+      expands macro with symbolize call on symbol
      expands macro with symbolize call on symbol
+      expands macro with symbolize call on id
      expands macro with symbolize call on id
+    #nil?
+      NumberLiteral
      NumberLiteral
+      Nop
      Nop
+      NilLiteral
      NilLiteral
+    executes != on numbers (true)
    executes != on numbers (true)
+    executes == on numbers (false)
    executes == on numbers (false)
+    executes == on symbols (false) (#240)
    executes == on symbols (false) (#240)
+    executes == on symbols (true) (#240)
    executes == on symbols (true) (#240)
+    executes == on numbers (true)
    executes == on numbers (true)
+    id
+      expands macro with id call on global path
      expands macro with id call on global path
+      expands macro with id call on char
      expands macro with id call on char
+      expands macro with id call on string
      expands macro with id call on string
+      expands macro with id call on path
      expands macro with id call on path
+      expands macro with id call on symbol
      expands macro with id call on symbol
+      expands macro with id call on number
      expands macro with id call on number
+      expands macro with id call on call
      expands macro with id call on call
+    #doc_comment
+      returns an empty MacroId if there are no docs on the node (wants_doc = false)
      returns an empty MacroId if there are no docs on the node (wants_doc = false)
+      ensures each newline has a `#` prefix
      ensures each newline has a `#` prefix
+      returns the call's docs if present as a MacroId (wants_doc = true)
      returns the call's docs if present as a MacroId (wants_doc = true)
+    location
+      column number
      column number
+      end line_number
      end line_number
+      filename
      filename
+      line_number
      line_number
+      end column number
      end column number
+    stringify
+      expands macro with stringify call on number
      expands macro with stringify call on number
+      expands macro with stringify call on call
      expands macro with stringify call on call
+      expands macro with stringify call on symbol
      expands macro with stringify call on symbol
+      expands macro with stringify call on string
      expands macro with stringify call on string
+    #doc
+      returns an empty string if there are no docs on the node (wants_doc = false)
      returns an empty string if there are no docs on the node (wants_doc = false)
+      returns a multiline comment
      returns a multiline comment
+      returns the call's docs if present (wants_doc = true)
      returns the call's docs if present (wants_doc = true)
+  and methods
+    executes left
    executes left
+    executes right
    executes right
+  Crystal::TypeOf
+    executes args
    executes args
+  call methods
+    executes block arg (nop)
    executes block arg (nop)
+    executes receiver
    executes receiver
+    executes named args name
    executes named args name
+    executes global?
    executes global?
+    executes block
    executes block
+    executes args
    executes args
+    executes named args
    executes named args
+    executes block arg
    executes block arg
+    executes name
    executes name
+    executes named args value
    executes named args value
+  yield methods
+    executes expressions
    executes expressions
+    executes scope (nop)
    executes scope (nop)
+    executes scope
    executes scope
+  Crystal::Include
+    executes name
    executes name
+  compares versions
  compares versions
+  metavar methods
+    executes nothing
    executes nothing
+    executes name
    executes name
+    executes id
    executes id
+    executes is_a?
    executes is_a?
+  Crystal::MacroVar
+    executes expressions
    executes expressions
+    executes name
    executes name
+  instancevar methods
+    executes name
    executes name
 Normalize: and
+  normalizes and with is_a? on var
  normalizes and with is_a? on var
+  normalizes and with assignment
  normalizes and with assignment
+  normalizes and without variable
  normalizes and without variable
   normalizes and with ! on var
  normalizes and with ! on var
   normalizes and with variable on the left
  normalizes and with variable on the left
-  normalizes and without variable
  normalizes and without variable
-  normalizes and with assignment
  normalizes and with assignment
-  normalizes and with is_a? on exp
  normalizes and with is_a? on exp
-  normalizes and with is_a? on var
  normalizes and with is_a? on var
   normalizes and with ! on var.is_a?(...)
  normalizes and with ! on var.is_a?(...)
-Visibility modifiers
-  errors if invoking protected method from non-subclass, generated with macro that generates a macro
  errors if invoking protected method from non-subclass, generated with macro that generates a macro
-  defines protected initialize (#7501)
  defines protected initialize (#7501)
-  allows invoking protected method from the same class
  allows invoking protected method from the same class
-  allows invoking private setter with self
  allows invoking private setter with self
-  allows calling protected method from nested generic class (2)
  allows calling protected method from nested generic class (2)
-  allows invoking protected method from virtual type
  allows invoking protected method from virtual type
-  allows invoking protected from instance to class
  allows invoking protected from instance to class
-  allows setting visibility modifier to macro that generates many methods (1)
  allows setting visibility modifier to macro that generates many methods (1)
-  allows invoking protected method between types in the same namespace when inheriting
  allows invoking protected method between types in the same namespace when inheriting
-  allows invoking private method from the same class
  allows invoking private method from the same class
-  allows invoking protected method between types in the same namespace
  allows invoking protected method between types in the same namespace
-  automatically makes initialize be protected
  automatically makes initialize be protected
-  allows setting visibility modifier to macro
  allows setting visibility modifier to macro
-  errors if invoking protected method from top-level
  errors if invoking protected method from top-level
-  gives correct error on unknown call (#2838)
  gives correct error on unknown call (#2838)
-  disallows invoking private method
  disallows invoking private method
-  allows invoking protected method from namespaced type to namespace
  allows invoking protected method from namespaced type to namespace
-  errors if applying visibility modifier to non-def or non-call
  errors if applying visibility modifier to non-def or non-call
-  errors if invoking protected method from non-subclass
  errors if invoking protected method from non-subclass
-  allows invoking protected method from namespace to namespaced type
  allows invoking protected method from namespace to namespaced type
-  allows calling protected method from nested generic class (1)
  allows calling protected method from nested generic class (1)
-  allows invoking protected method from subclass
  allows invoking protected method from subclass
-  allows invoking protected method from subclass (2)
  allows invoking protected method from subclass (2)
-  handles virtual types (#8561)
  handles virtual types (#8561)
-  allows setting visibility modifier to macro that generates many methods (2)
  allows setting visibility modifier to macro that generates many methods (2)
-Code gen: closure
-  ensures it can raise from the closure check
  ensures it can raise from the closure check
-  codegens closured nested in block
  codegens closured nested in block
-  allows passing an external function along
  allows passing an external function along
-  codegens super nested closure
  codegens super nested closure
-  codegens closured nested in block with a call with a closure with same names
  codegens closured nested in block with a call with a closure with same names
-  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)
  captures block and accesses local variable (#2050)
-  codegens closure with instance var
  codegens closure with instance var
-  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)
  doesn't free closure memory (bug)
-  codegens super nested closure with nested closured variable
  codegens super nested closure with nested closured variable
-  codegens closure with instance var and var
  codegens closure with instance var and var
-  codegens closure inside initialize inside block with self
  codegens closure inside initialize inside block with self
-  codegens multiple nested blocks
  codegens multiple nested blocks
-  allows passing proc literal to def that captures block with &
  allows passing proc literal to def that captures block with &
-  codegens nested closure that mentions var in both contexts
  codegens nested closure that mentions var in both contexts
-  codegens simple closure in function
  codegens simple closure in function
-  codegens nested closure with block (1)
  codegens nested closure with block (1)
-  codegens nested closure
  codegens nested closure
-  codegens closure with nested context without new closured vars
  codegens closure with nested context without new closured vars
-  codegens closure with block
  codegens closure with block
-  closures struct self
  closures struct self
-  codegens closure with self and var
  codegens closure with self and var
-  codegens nested closure with nested closured variable
  codegens nested closure with nested closured variable
-  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method
  doesn't form a closure if invoking class method
-  codegens simple closure in function with argument
  codegens simple closure in function with argument
-  unifies types of closured var
  unifies types of closured var
-  codegens closure with block that declares same var
  codegens closure with block that declares same var
-  codegens closure with nested context without new closured vars but with block arg
  codegens closure with nested context without new closured vars but with block arg
-  codegens simple closure in block
  codegens simple closure in block
-  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self
  doesn't form a closure if invoking class method with self
-  codegen closure in instance method without self closured
  codegen closure in instance method without self closured
-  doesn't incorrectly consider local as closured (#4948)
  doesn't incorrectly consider local as closured (#4948)
-  codegens nested closure with block (2)
  codegens nested closure with block (2)
-  transforms block to proc literal
  transforms block to proc literal
-  allows giving less block args when transforming block to proc literal
  allows giving less block args when transforming block to proc literal
-  codegens closure with struct
  codegens closure with struct
-  codegens closure with nested context without new closured vars
  codegens closure with nested context without new closured vars
-  codegens simple closure at global scope
  codegens simple closure at global scope
-  codegens closure with self and arguments
  codegens closure with self and arguments
-  allows passing an external function along (2)
  allows passing an external function along (2)
-  codegens proc literal with struct
  codegens proc literal with struct
-  codegens closure with def that has an if
  codegens closure with def that has an if
-  codegens closured self in block (#3388)
  codegens closured self in block (#3388)
-  allows passing block as proc literal to new and to initialize
  allows passing block as proc literal to new and to initialize
-  transforms block to proc literal with free var
  transforms block to proc literal with free var
-  codegens closure with implicit self and var
  codegens closure with implicit self and var
-  codegens closure with instance var and block
  codegens closure with instance var and block
-  allows mixing yield and block.call
  allows mixing yield and block.call
-Code gen: macro
-  can refer to union (1)
  can refer to union (1)
-  expands def macro with @type.name with virtual (2)
  expands def macro with @type.name with virtual (2)
-  determines if overrides (false)
  determines if overrides (false)
-  forwards line number
  forwards line number
-  expands def macro with instance var and method call (bug)
  expands def macro with instance var and method call (bug)
-  codegens macro with comment (bug) (#1396)
  codegens macro with comment (bug) (#1396)
-  gets enum members as constants
  gets enum members as constants
-  determines if variable has default value
  determines if variable has default value
-  expands @type.name in virtual metaclass (2)
  expands @type.name in virtual metaclass (2)
-  expands def macro with @type.instance_vars with virtual
  expands def macro with @type.instance_vars with virtual
-  determines if method exists (false)
  determines if method exists (false)
-  receives &block
  receives &block
-  executes all_subclasses
  executes all_subclasses
-  can refer to abstract (1)
  can refer to abstract (1)
-  determines if overrides, through another class (true)
  determines if overrides, through another class (true)
-  can refer to types
  can refer to types
-  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)
  replaces %s inside string inside interpolation, with braces (#2178)
-  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added
  recalculates method when virtual metaclass type is added
-  determines if overrides (true)
  determines if overrides (true)
-  expands inline macro if (false)
  expands inline macro if (false)
-  gets default value of instance variable of generic type  gets default value of instance variable of generic type  gets default value of instance variable of generic type  gets default value of instance variable of generic type  gets default value of instance variable of generic type  gets default value of instance variable of generic type  gets default value of instance variable of generic type  gets default value of instance variable of generic type  gets default value of instance variable of generic type
  gets default value of instance variable of generic type
-  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal
  can use macro inside hash literal
-  can refer to @type
  can refer to @type
-  expands def macro with @type.name with virtual
  expands def macro with @type.name with virtual
-  can use constants
  can use constants
-  expands @type.name in virtual metaclass (1)
  expands @type.name in virtual metaclass (1)
-  retains original yield expression (#2923)
  retains original yield expression (#2923)
-  expands macro defined in class
  expands macro defined in class
-  expands def macro with @type.instance_vars
  expands def macro with @type.instance_vars
-  can iterate union types
  can iterate union types
-  resolves alias in macro
  resolves alias in macro
-  expands def macro with var
  expands def macro with var
-  gets enum members with @type.constants
  gets enum members with @type.constants
-  expands inline macro if (true)
  expands inline macro if (true)
-  determines if overrides, with macro method (false)
  determines if overrides, with macro method (false)
-  can access type variables of a module
  can access type variables of a module
-  expands macro defined in base class
  expands macro defined in base class
-  can access type variables of a generic type
  can access type variables of a generic type
-  finds macro from virtual type
  finds macro from virtual type
-  uses indexed macro variable
  uses indexed macro variable
-  expands macro def with return (#1040)
  expands macro def with return (#1040)
-  forwards dir location
  forwards dir location
-  types macro expansion bug (#1734)
  types macro expansion bug (#1734)
-  allows overriding macro definition when redefining base class
  allows overriding macro definition when redefining base class
-  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)
  replaces %s inside string inside interpolation (#2178)
-  expands macro with default arg and splat (#784)
  expands macro with default arg and splat (#784)
-  determines if overrides, through module (true)
  determines if overrides, through module (true)
-  can access type variables of a tuple
  can access type variables of a tuple
-  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro
  keeps heredoc contents with interpolation inside macro
-  gets methods
  gets methods
-  expands macro as class method and accesses @type
  expands macro as class method and accesses @type
-  executes with named arguments
  executes with named arguments
-  can refer to union (2)
  can refer to union (2)
-  stringifies type without virtual marker
  stringifies type without virtual marker
-  keeps line number with a block
  keeps line number with a block
-  executes subclasses
  executes subclasses
-  gets constant
  gets constant
-  codegens macro def with splat (#496)
  codegens macro def with splat (#496)
-  can access free variables
  can access free variables
-  can refer to abstract (2)
  can refer to abstract (2)
-  doesn't skip abstract classes when defining macro methods
  doesn't skip abstract classes when defining macro methods
-  uses indexed macro variable with many keys
  uses indexed macro variable with many keys
-  fixes empty types of macro expansions (#1379)
  fixes empty types of macro expansions (#1379)
-  expands macro that invokes another macro
  expands macro that invokes another macro
-  expands macro with escaped quotes (#895)
  expands macro with escaped quotes (#895)
-  doesn't reuse macro nodes (bug)
  doesn't reuse macro nodes (bug)
-  correctly recomputes call (bug)
  correctly recomputes call (bug)
-  uses tuple T in method with free vars
  uses tuple T in method with free vars
-  expands macro with arguments
  expands macro with arguments
-  declares constant in macro (#838)
  declares constant in macro (#838)
-  executes with named arguments for positional arg (2)
  executes with named arguments for positional arg (2)
-  responds correctly to has_constant? with @top_level
  responds correctly to has_constant? with @top_level
-  expands macro with default arg and splat (2) (#784)
  expands macro with default arg and splat (2) (#784)
-  expands inline macro for
  expands inline macro for
-  does block unpacking inside macro expression (#13707)
  does block unpacking inside macro expression (#13707)
-  copies base macro def to sub-subtype even after it was copied to a subtype (#448)
  copies base macro def to sub-subtype even after it was copied to a subtype (#448)
-  access to the program with @top_level
  access to the program with @top_level
-  expands def macro with @type.instance_vars with subclass
  expands def macro with @type.instance_vars with subclass
-  expands macro with default arg and splat (3) (#784)
  expands macro with default arg and splat (3) (#784)
-  determines if method exists (true)
  determines if method exists (true)
-  initializes class var in macro
  initializes class var in macro
-  doesn't override local variable when using macro variable (2)
  doesn't override local variable when using macro variable (2)
-  expands def macro with @type.name
  expands def macro with @type.name
-  finds macro in class
  finds macro in class
-  expands inline macro
  expands inline macro
-  expands @def in macro
  expands @def in macro
-  executes with named arguments for positional arg (1)
  executes with named arguments for positional arg (1)
-  gets default value of instance variable
  gets default value of instance variable
-  passes #826
  passes #826
-  devirtualizes @type
  devirtualizes @type
-  can access type variables
  can access type variables
-  can access type variables that are not types
  can access type variables that are not types
-  forwards file location
  forwards file location
-  runs macro with splat
  runs macro with splat
-  uses invocation context
  uses invocation context
-  keeps heredoc contents inside macro
  keeps heredoc contents inside macro
-  expands @def in inline macro
  expands @def in inline macro
-  allows macro with default arguments
  allows macro with default arguments
-  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)
  expands macro with op assign inside assign (#5568)
-  gets default value of instance variable of inherited type that also includes module
  gets default value of instance variable of inherited type that also includes module
-  expands def macro
  expands def macro
-  implicitly marks method as macro def when using @type
  implicitly marks method as macro def when using @type
-  runs macro with arg and splat
  runs macro with arg and splat
-  transforms hooks (bug)
  transforms hooks (bug)
-  expands Path with resolve method
  expands Path with resolve method
-  doesn't override local variable when using macro variable
  doesn't override local variable when using macro variable
-  initializes instance var in macro
  initializes instance var in macro
-  executes with named arguments for positional arg (3)
  executes with named arguments for positional arg (3)
-  checks if macro expansion returns (#821)
  checks if macro expansion returns (#821)
-  expands macro that yields
  expands macro that yields
-  gets correct class name when there are classes in the middle
  gets correct class name when there are classes in the middle
-  keeps line number with no block
  keeps line number with no block
-  expands macro and resolves type correctly
  expands macro and resolves type correctly
-  expands macro as class method
  expands macro as class method
-  says that enum has Flags annotation
  says that enum has Flags annotation
-  says that enum doesn't have Flags annotation
  says that enum doesn't have Flags annotation
-  codegens macro def with default arg (similar to #496)
  codegens macro def with default arg (similar to #496)
-  can use macro inside array literal  can use macro inside array literal  can use macro inside array literal  can use macro inside array literal  can use macro inside array literal  can use macro inside array literal  can use macro inside array literal  can use macro inside array literal  can use macro inside array literal
  can use macro inside array literal
-  correctly resolves constant inside block in macro def
  correctly resolves constant inside block in macro def
-  surrounds {{yield}} with begin/end
  surrounds {{yield}} with begin/end
-  errors if dynamic constant assignment after macro expansion
  errors if dynamic constant assignment after macro expansion
-  doesn't replace %q() (#2178)
  doesn't replace %q() (#2178)
-  expands macro
  expands macro
-  accepts compile-time flags
  accepts compile-time flags
-  doesn't replace %s in string (#2178)
  doesn't replace %s in string (#2178)
-Semantic: def overload
-  types a call with overload selecting the most restrictive
  types a call with overload selecting the most restrictive
-  doesn't match tuples of different sizes
  doesn't match tuples of different sizes
-  matches a generic module argument
  matches a generic module argument
-  treats single splats with same restriction as equivalent (#12579)
  treats single splats with same restriction as equivalent (#12579)
-  prefers more specific overload than one with free variables
  prefers more specific overload than one with free variables
-  says `no overload matches` instead of `can't instantiate abstract class` on wrong argument in new method
  says `no overload matches` instead of `can't instantiate abstract class` on wrong argument in new method
-  matches a generic module argument with free var
  matches a generic module argument with free var
-  gets free variable from union restriction without a union
  gets free variable from union restriction without a union
-  matches generic class instance type with another one
  matches generic class instance type with another one
-  gets free variable from union restriction (2)
  gets free variable from union restriction (2)
-  types a call with overload with yield after typing another call without yield
  types a call with overload with yield after typing another call without yield
-  includes splat symbol in error message
  includes splat symbol in error message
-  types a call with overload self other match
  types a call with overload self other match
-  types a call with overload self with inherited type
  types a call with overload self with inherited type
-  matches virtual type to union
  matches virtual type to union
-  matches a union argument with free var, more types (2)
  matches a union argument with free var, more types (2)
-  restrict virtual type with virtual type
  restrict virtual type with virtual type
-  matches tuples and uses free var
  matches tuples and uses free var
-  single type restriction wins over union
  single type restriction wins over union
-  overloads union against non-union (#2904)
  overloads union against non-union (#2904)
-  types a call with overload with yield the other way
  types a call with overload with yield the other way
-  accepts overload with nilable type restriction
  accepts overload with nilable type restriction
-  matches a union argument with free var, more types (1)
  matches a union argument with free var, more types (1)
-  types a call with overload self
  types a call with overload self
-  gives correct error message, looking up parent defs, when no overload matches
  gives correct error message, looking up parent defs, when no overload matches
-  overloads on metaclass (3) (#2916)
  overloads on metaclass (3) (#2916)
-  lookup matches in virtual type inside union
  lookup matches in virtual type inside union
-  matches a generic module argument with free var (2)
  matches a generic module argument with free var (2)
-  considers NamedTuple in a module's including types (#10380)
  considers NamedTuple in a module's including types (#10380)
-  dispatches with named arg
  dispatches with named arg
-  errors when binding free variable to different types (2)
  errors when binding free variable to different types (2)
-  treats single splats with same restriction as equivalent (2) (#12579)
  treats single splats with same restriction as equivalent (2) (#12579)
-  compare_strictness
-    positional parameters
-      positional parameter with restriction vs single splat
      positional parameter with restriction vs single splat
-      single splat vs single splat with restriction (#3134)
      single splat vs single splat with restriction (#3134)
-      positional parameter with restriction vs single splat with stricter restriction
      positional parameter with restriction vs single splat with stricter restriction
-      positional parameter with stricter restriction vs single splat with restriction
      positional parameter with stricter restriction vs single splat with restriction
-      positional parameter vs single splat with restriction
      positional parameter vs single splat with restriction
-      specificity
      specificity
-      single splat restriction vs single splat with stricter restriction
      single splat restriction vs single splat with stricter restriction
-    named parameters
-      specificity
      specificity
-      double splat vs double splat with restriction
      double splat vs double splat with restriction
-      named parameter with stricter restriction vs double splat with restriction
      named parameter with stricter restriction vs double splat with restriction
-      named parameter vs double splat with restriction
      named parameter vs double splat with restriction
-      named parameter with restriction vs double splat (#5328)
      named parameter with restriction vs double splat (#5328)
-      named parameter with restriction vs double splat with stricter restriction
      named parameter with restriction vs double splat with stricter restriction
-      double splat restriction vs double splat with stricter restriction
      double splat restriction vs double splat with stricter restriction
-    specificity conflicts, named vs named
-      (required > splat) vs (required > splat)
      (required > splat) vs (required > splat)
-      (required > optional) vs (required > optional)
      (required > optional) vs (required > optional)
-      (required > splat) vs (optional > splat)
      (required > splat) vs (optional > splat)
-      (required > optional) vs (optional > splat)
      (required > optional) vs (optional > splat)
-      (optional > splat) vs (optional > splat)
      (optional > splat) vs (optional > splat)
-      (required > optional) vs (required > splat)
      (required > optional) vs (required > splat)
-    subsumption has higher precedence over specificity
-      double splat vs (required positional > optional positional)
      double splat vs (required positional > optional positional)
-      named vs (optional positional > single splat)
      named vs (optional positional > single splat)
-      same named parameter, required > optional
      same named parameter, required > optional
-      named vs (required named > double splat)
      named vs (required named > double splat)
-      single splat vs (optional named > double splat)
      single splat vs (optional named > double splat)
-      same positional parameter, required > single splat
      same positional parameter, required > single splat
-      double splat vs (required positional > single splat)
      double splat vs (required positional > single splat)
-      same named parameter, required > double splat
      same named parameter, required > double splat
-      single splat vs (required named > double splat)
      single splat vs (required named > double splat)
-      double splat vs (optional positional > single splat)
      double splat vs (optional positional > single splat)
-      named vs (required positional > single splat)
      named vs (required positional > single splat)
-      positional vs (optional positional > single splat)
      positional vs (optional positional > single splat)
-      named vs (optional named > double splat)
      named vs (optional named > double splat)
-      single splat vs (required named > optional named)
      single splat vs (required named > optional named)
-      same positional parameter, optional > single splat
      same positional parameter, optional > single splat
-      positional vs (required named > double splat)
      positional vs (required named > double splat)
-      positional vs (required positional > single splat)
      positional vs (required positional > single splat)
-      positional vs (optional named > double splat)
      positional vs (optional named > double splat)
-      positional vs (required positional > optional positional)
      positional vs (required positional > optional positional)
-      same positional parameter, required > optional
      same positional parameter, required > optional
-      named vs (required positional > optional positional)
      named vs (required positional > optional positional)
-      named vs (required named > optional named)
      named vs (required named > optional named)
-      same named parameter, optional > double splat
      same named parameter, optional > double splat
-      positional vs (required named > optional named)
      positional vs (required named > optional named)
-    specificity conflicts, positional vs named
-      (optional > splat) vs (required > optional)
      (optional > splat) vs (required > optional)
-      (required > splat) vs (optional > splat)
      (required > splat) vs (optional > splat)
-      (required > splat) vs (required > splat)
      (required > splat) vs (required > splat)
-      (required > optional) vs (optional > splat)
      (required > optional) vs (optional > splat)
-      (required > splat) vs (required > optional)
      (required > splat) vs (required > optional)
-      (required > optional) vs (required > splat)
      (required > optional) vs (required > splat)
-      (optional > splat) vs (optional > splat)
      (optional > splat) vs (optional > splat)
-      (optional > splat) vs (required > splat)
      (optional > splat) vs (required > splat)
-      (required > optional) vs (required > optional)
      (required > optional) vs (required > optional)
-    subsumption conflicts
-      named vs named
      named vs named
-      positional vs single splat
      positional vs single splat
-      positional vs double splat
      positional vs double splat
-      positional vs positional
      positional vs positional
-      positional vs named
      positional vs named
-      named vs double splat
      named vs double splat
-      single splat vs double splat
      single splat vs double splat
-      single splat vs named
      single splat vs named
-  matches types with free variables
  matches types with free variables
-  gives better error message with consecutive arguments sizes
  gives better error message with consecutive arguments sizes
-  matches a union metaclass argument with free var (#8071)
  matches a union metaclass argument with free var (#8071)
-  reports no overload matches with correct method owner (#2083)
  reports no overload matches with correct method owner (#2083)
-  types a call with overload selecting the most restrictive 2
  types a call with overload selecting the most restrictive 2
-  uses long name when no overload matches and name is the same (#1030)
  uses long name when no overload matches and name is the same (#1030)
-  compare self type with others
  compare self type with others
-  types a call with overload self in included module other type
  types a call with overload self in included module other type
-  does not consider global paths as free variables (1)
  does not consider global paths as free variables (1)
-  uses method defined in base class if the restriction doesn't match
  uses method defined in base class if the restriction doesn't match
-  overloads with named argument (#4465)
  overloads with named argument (#4465)
-  overloads on metaclass (#2916)
  overloads on metaclass (#2916)
-  types a call with overload Object type first overload
  types a call with overload Object type first overload
-  doesn't match with wrong number of type arguments (#313)
  doesn't match with wrong number of type arguments (#313)
-  finds method after including module in generic module (#1201)
  finds method after including module in generic module (#1201)
-  matches a union argument with free var
  matches a union argument with free var
-  resets free vars after a partial match is rejected (#10270)
  resets free vars after a partial match is rejected (#10270)
-  types a call with overload with yield
  types a call with overload with yield
-  can call overload with aliased generic restriction
  can call overload with aliased generic restriction
-  errors if union restriction has multiple free vars
  errors if union restriction has multiple free vars
-  errors if no overload matches on union against named arg with external param name (#10516)
  errors if no overload matches on union against named arg with external param name (#10516)
-  types a call with overload type second overload
  types a call with overload type second overload
-  gets free variable from union restriction
  gets free variable from union restriction
-  restricts on generic type without type arg
  restricts on generic type without type arg
-  types a call with overload matches virtual 2
  types a call with overload matches virtual 2
-  matches tuples of different sizes
  matches tuples of different sizes
-  resets free vars after a partial match is rejected (2) (#10185)
  resets free vars after a partial match is rejected (2) (#10185)
-  matches on partial union
  matches on partial union
-  restrict matches to minimum necessary 1
  restrict matches to minimum necessary 1
-  overloads on metaclass (2) (#2916)
  overloads on metaclass (2) (#2916)
-  types a call with overload type first overload
  types a call with overload type first overload
-  does not consider global paths as free variables (2)
  does not consider global paths as free variables (2)
-  restricts on generic type with free type arg
  restricts on generic type with free type arg
-  doesn't crash on unknown metaclass
  doesn't crash on unknown metaclass
-  types a call with overload self in included module
  types a call with overload self in included module
-  errors if generic type doesn't match
  errors if generic type doesn't match
-  errors if no overload matches on union against named arg (#2640)
  errors if no overload matches on union against named arg (#2640)
-  dispatch call to def with restrictions
  dispatch call to def with restrictions
-  filter union type with virtual
  filter union type with virtual
-  matches tuple with underscore
  matches tuple with underscore
-  dispatch call to def with restrictions
  dispatch call to def with restrictions
-  types a call with overload matches virtual
  types a call with overload matches virtual
-  types a call with overload
  types a call with overload
-  restricts union to generic class
  restricts union to generic class
-  errors when binding free variable to different types
  errors when binding free variable to different types
-  types a call with overload matches virtual 3
  types a call with overload matches virtual 3
-  errors if union restriction has multiple free vars (2)
  errors if union restriction has multiple free vars (2)
-  can call overload with generic restriction
  can call overload with generic restriction
+  normalizes and with is_a? on exp
  normalizes and with is_a? on exp
+Semantic: c union
+  types union getter via pointer
  types union getter via pointer
+  types Union#new
  types Union#new
+  types union setter via pointer
  types union setter via pointer
+  errors if using void in union field type
  errors if using void in union field type
+  types union getter
  types union getter
+  errors if using void via typedef in union field type
  errors if using void via typedef in union field type
+  types union setter
  types union setter
+  errors if setting closure
  errors if setting closure
+  errors on empty c union (#633)
  errors on empty c union (#633)
+  types c union
  types c union
+Code gen: def with default value
+  resolves expanded call to current type, not to virtual type
  resolves expanded call to current type, not to virtual type
+  codegens def with one default value
  codegens def with one default value
+  considers first the one with more arguments
  considers first the one with more arguments
+  considers first the one with a restriction
  considers first the one with a restriction
+  doesn't mix types of instance vars with initialize and new
  doesn't mix types of instance vars with initialize and new
+  codegens def new with one default value
  codegens def new with one default value
+Normalize: op assign
+  normalizes exp.value &&=
  normalizes exp.value &&=
+  normalizes exp[value] +=
  normalizes exp[value] +=
+  normalizes var -=
  normalizes var -=
+  normalizes exp[value] &&=
  normalizes exp[value] &&=
+  normalizes exp[value] ||=
  normalizes exp[value] ||=
+  normalizes var &*=
  normalizes var &*=
+  normalizes exp[0] +=
  normalizes exp[0] +=
+  normalizes var ||=
  normalizes var ||=
+  normalizes var &&=
  normalizes var &&=
+  normalizes @var.value +=
  normalizes @var.value +=
+  normalizes var &+=
  normalizes var &+=
+  normalizes var[0] +=
  normalizes var[0] +=
+  normalizes exp.value ||=
  normalizes exp.value ||=
+  normalizes var.value +=
  normalizes var.value +=
+  normalizes var *=
  normalizes var *=
+  normalizes exp.value +=
  normalizes exp.value +=
+  normalizes @var[0] +=
  normalizes @var[0] +=
+  normalizes @@var.value +=
  normalizes @@var.value +=
+  normalizes var +=
  normalizes var +=
+  normalizes @@var[0] +=
  normalizes @@var[0] +=
+  normalizes var &-=
  normalizes var &-=
+Normalize: string interpolation
+  normalizes heredoc
  normalizes heredoc
+  normalizes string interpolation with multiple lines
  normalizes string interpolation with multiple lines
+  normalizes string interpolation
  normalizes string interpolation
+  replaces string constant
  replaces string constant
+  replaces string constant that results from macro expansion
  replaces string constant that results from macro expansion
+  replaces through multiple levels
  replaces through multiple levels
+Crystal::Command::FormatCommand
+  checks files format
  checks files format
+  formats stdin (bug + show-backtrace)
  formats stdin (bug + show-backtrace)
+  formats stdin (syntax error)
  formats stdin (syntax error)
+  formats files (bug + show-stacktrace)
  formats files (bug + show-stacktrace)
+  checks files format (excludes + includes)
  checks files format (excludes + includes)
+  formats files (error)
  formats files (error)
+  formats stdin (formatted)
  formats stdin (formatted)
+  formats files
  formats files
+  checks files format (excludes)
  checks files format (excludes)
+  formats files (dir)
  formats files (dir)
+  checks files format (ok)
  checks files format (ok)
+  formats stdin (bug)
  formats stdin (bug)
+  formats stdin
  formats stdin
+  formats files (bug)
  formats files (bug)
+  formats stdin (invalid byte sequence error)
  formats stdin (invalid byte sequence error)
 Code gen: type declaration
-  codegens initialize instance var with var declaration
  codegens initialize instance var with var declaration
+  codegens initialize instance var of superclass
  codegens initialize instance var of superclass
+  declares and initializes var
  declares and initializes var
   declares and initializes
  declares and initializes
   codegens initialize instance var
  codegens initialize instance var
-  declares and initializes var
  declares and initializes var
-  codegens initialize instance var of superclass
  codegens initialize instance var of superclass
-Code gen: no return
-  codegens if with no return and variable used afterwards
  codegens if with no return and variable used afterwards
-  codegens untyped typeof (#5105)
  codegens untyped typeof (#5105)
-  codegens Pointer(NoReturn).malloc
  codegens Pointer(NoReturn).malloc
-  codegen types exception handler as NoReturn if ensure is NoReturn
  codegen types exception handler as NoReturn if ensure is NoReturn
-  codegens call with no return because of falsey if (#3661)
  codegens call with no return because of falsey if (#3661)
-  codegens no return variable declaration (#1508)
  codegens no return variable declaration (#1508)
-  codegens no return instance variable declaration (#1508)
  codegens no return instance variable declaration (#1508)
-  codegens if with NoReturn on then and union on else
  codegens if with NoReturn on then and union on else
-Code gen: regex literal spec
-  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)
  works in a class variable (#10951)
-Semantic: uninitialized
-  errors if declares var and then assigns other type
  errors if declares var and then assigns other type
-  declares as uninitialized
  declares as uninitialized
-  errors if declaring generic type without type vars (with instance var)
  errors if declaring generic type without type vars (with instance var)
-  works with uninitialized NoReturn (#3314)
  works with uninitialized NoReturn (#3314)
-  can uninitialize variable outside initialize (#2828)
  can uninitialize variable outside initialize (#2828)
-  disallows declaring var of type Struct
  disallows declaring var of type Struct
-  disallows declaring var of type Value
  disallows declaring var of type Value
-  uses virtual type for uninitialized (#8216)
  uses virtual type for uninitialized (#8216)
-  disallows declaring var of type Float
  disallows declaring var of type Float
-  declares as uninitialized and reads it
  declares as uninitialized and reads it
-  declares an instance variable in initialize as uninitialized
  declares an instance variable in initialize as uninitialized
-  disallows declaring var of type Enum
  disallows declaring var of type Enum
-  disallows declaring var of type Object
  disallows declaring var of type Object
-  disallows declaring var of type Class
  disallows declaring var of type Class
-  can uninitialize variable outside initialize, generic (#2828)
  can uninitialize variable outside initialize, generic (#2828)
-  disallows declaring var of type Number
  disallows declaring var of type Number
-  can use uninitialized with class type (#2940)
  can use uninitialized with class type (#2940)
-  disallows declaring var of type Int
  disallows declaring var of type Int
-  errors if declaring variable multiple times with different types (#917)
  errors if declaring variable multiple times with different types (#917)
-  errors if declaring generic type without type vars (with class var)
  errors if declaring generic type without type vars (with class var)
-  disallows declaring var of type Reference
  disallows declaring var of type Reference
-  has type (#3641)
  has type (#3641)
-Semantic: previous_def
-  errors if there's no previous def
  errors if there's no previous def
-  types previous def with explicit arguments
  types previous def with explicit arguments
-  types previous def with forwarded arguments, different internal names (#8895)
  types previous def with forwarded arguments, different internal names (#8895)
-  types previous def with named arguments, def has bare splat parameter (2) (#8895)
  types previous def with named arguments, def has bare splat parameter (2) (#8895)
-  types previous def with named arguments, def has double splat parameter (#8895)
  types previous def with named arguments, def has double splat parameter (#8895)
-  types previous def with named arguments, def has bare splat parameter (#8895)
  types previous def with named arguments, def has bare splat parameter (#8895)
-  types previous def with forwarded arguments, def has parameters
  types previous def with forwarded arguments, def has parameters
-  types previous def when inside fun
  types previous def when inside fun
-  says wrong number of arguments for previous_def (#1223)
  says wrong number of arguments for previous_def (#1223)
-  types previous def with restrictions
  types previous def with restrictions
-  types previous def
  types previous def
-  types previous def when inside fun and forwards args
  types previous def when inside fun and forwards args
-  types previous def in generic class
  types previous def in generic class
-  types previous def with forwarded arguments, def has bare splat parameter (#8895)
  types previous def with forwarded arguments, def has bare splat parameter (#8895)
-Code gen: if
-  codegens if without an else with false
  codegens if without an else with false
-  doesn't generate truthy if branch if doesn't need value (bug)
  doesn't generate truthy if branch if doesn't need value (bug)
-  codegen if with union type and else without type
  codegen if with union type and else without type
-  codegens if with return in both branches
  codegens if with return in both branches
-  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter  codegens if with return in else preserves type filter
  codegens if with return in else preserves type filter
-  restricts with || always falsey
  restricts with || always falsey
-  codegen if inside if
  codegen if inside if
-  codegens if of nilable type in then
  codegens if of nilable type in then
-  doesn't crash with if !is_a? using var in then
  doesn't crash with if !is_a? using var in then
-  codegen if with union type and then without type
  codegen if with union type and then without type
-  codegens #3104
  codegens #3104
-  codegens if with virtual
  codegens if with virtual
-  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises  codegens if with nested if that raises
  codegens if with nested if that raises
-  codegens bug #1729
  codegens bug #1729
-  codegens if with an else with true
  codegens if with an else with true
-  codegens if with an else with false
  codegens if with an else with false
-  codes if with two whiles
  codes if with two whiles
-  doesn't crash no NoReturn var (true left cond) (#1823)
  doesn't crash no NoReturn var (true left cond) (#1823)
-  codegens if value from then
  codegens if value from then
-  codegens if of nilable type in then 2
  codegens if of nilable type in then 2
-  codegens if without an else with true
  codegens if without an else with true
-  codegen if with nested if that returns
  codegen if with nested if that returns
-  codegens nested if with var (ssa bug)
  codegens nested if with var (ssa bug)
-  considers or truthy/falsey right
  considers or truthy/falsey right
-  codegens if inside def without an else with true
  codegens if inside def without an else with true
-  codegens if with int
  codegens if with int
-  codegens if with nil
  codegens if with nil
-  doesn't crash no NoReturn var (non-true left cond) (#1823)
  doesn't crash no NoReturn var (non-true left cond) (#1823)
-  codegens if with pointer 0x100000000 pointer
  codegens if with pointer 0x100000000 pointer
-  codegens if with return and no else
  codegens if with return and no else
-  codegens if of nilable type in else 3
  codegens if of nilable type in else 3
-  codegens if with union
  codegens if with union
-  codegens if of nilable type in else
  codegens if of nilable type in else
-  doesn't crash with if !var using var in else
  doesn't crash with if !var using var in else
-Code gen: union type
-  sorts restrictions when there are unions
  sorts restrictions when there are unions
-  codegens union to_s  codegens union to_s  codegens union to_s  codegens union to_s  codegens union to_s  codegens union to_s  codegens union to_s  codegens union to_s  codegens union to_s
  codegens union to_s
-  assigns union to union  assigns union to union  assigns union to union  assigns union to union  assigns union to union  assigns union to union  assigns union to union  assigns union to union  assigns union to union
  assigns union to union
-  codegens union type when no obj and restrictions
  codegens union type when no obj and restrictions
-  codegens if with same nested union
  codegens if with same nested union
-  codegens union type when no obj
  codegens union type when no obj
-  codegens union type for instance var
  codegens union type for instance var
-  codegens union type when obj is union and no args
  codegens union type when obj is union and no args
-  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1
  assigns union to larger union when source is nilable 1
-  codegens union type as return value
  codegens union type as return value
-  assigns union to larger union  assigns union to larger union  assigns union to larger union  assigns union to larger union  assigns union to larger union  assigns union to larger union  assigns union to larger union  assigns union to larger union  assigns union to larger union
  assigns union to larger union
-  codegens union type when obj is not union but arg is
  codegens union type when obj is not union but arg is
-  codegens union type when obj union but arg is not
  codegens union type when obj union but arg is not
-  codegens union type when obj is union and arg is union
  codegens union type when obj is union and arg is union
-  respects union payload alignment when upcasting Bool (#14898)
  respects union payload alignment when upcasting Bool (#14898)
-  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable
  dispatch call to object method on nilable
-  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2
  assigns union to larger union when source is nilable 2
-  provides T as a tuple literal
  provides T as a tuple literal
+  codegens initialize instance var with var declaration
  codegens initialize instance var with var declaration
+Codegen: double splat
+  double splats named argument into arguments (1)
  double splats named argument into arguments (1)
+  double splats named argument with positional arguments
  double splats named argument with positional arguments
+  matches double splat on method with named args and regular args
  matches double splat on method with named args and regular args
+  double splats twice 
  double splats twice 
+  double splats named argument with named args (1)
  double splats named argument with named args (1)
+  double splats named argument with named args (2)
  double splats named argument with named args (2)
+  matches double splat with regular splat
  matches double splat with regular splat
+  removes literal types in all matches (#6239)
  removes literal types in all matches (#6239)
+  double splats named argument into arguments (2)
  double splats named argument into arguments (2)
+  evaluates double splat argument just once (#2677)
  evaluates double splat argument just once (#2677)
+  matches double splat on method with named args
  matches double splat on method with named args
+View#module_name
+  hyphen followed by non-ascii letter is replaced by its character
  hyphen followed by non-ascii letter is replaced by its character
+  underscore is ignored
  underscore is ignored
+  namespace is divided by hyphen
  namespace is divided by hyphen
+Crystal::Repl::Interpreter
+  unions
+    returns union type
    returns union type
+    put and remove from union, together with is_a? (truthy case)
    put and remove from union, together with is_a? (truthy case)
+    put and remove from union in instance var
    put and remove from union in instance var
+    returns large union type (#15041)
    returns large union type (#15041)
+    converts from NilableType to NonGenericClassType
    converts from NilableType to NonGenericClassType
+    put and remove from union, together with is_a? (falsey case)
    put and remove from union, together with is_a? (falsey case)
+    discards is_a?
    discards is_a?
+    puts union inside union
    puts union inside union
+    put and remove from union in local var
    put and remove from union in local var
+Semantic: static array
+  can match N type argument of static array (#1203)
  can match N type argument of static array (#1203)
+  doesn't match other number type argument of static array (#1203)
  doesn't match other number type argument of static array (#1203)
+  types static array new with size being a constant
  types static array new with size being a constant
+  doesn't crash on restriction (#584)
  doesn't crash on restriction (#584)
+  can match number type argument of static array (#1203)
  can match number type argument of static array (#1203)
+  types static array new with size being a computed constant
  types static array new with size being a computed constant
+  doesn't crash on offsetof (#8858)
  doesn't crash on offsetof (#8858)
+  allows instantiating static array instance var in initialize of generic type
  allows instantiating static array instance var in initialize of generic type
+  types static array new
  types static array new
+  types static array with type as size
  types static array with type as size
+  errors on negative static array size
  errors on negative static array size
+  doesn't crash on sizeof (#8858)
  doesn't crash on sizeof (#8858)
+  types static array with var declaration
  types static array with var declaration
+  errors if trying to instantiate static array with N not an integer
  errors if trying to instantiate static array with N not an integer
+  doesn't crash on instance_sizeof (#8858)
  doesn't crash on instance_sizeof (#8858)
+  types static array new with size being a nested constant inside type declaration (#5426)
  types static array new with size being a nested constant inside type declaration (#5426)
+  types static array new with size being a computed constant, and use N (bug)
  types static array new with size being a computed constant, and use N (bug)
+Semantic: tuples
+  accept tuple in type restriction
  accept tuple in type restriction
+  errors if non-tuple is splatted inside tuple (2)
  errors if non-tuple is splatted inside tuple (2)
+  doesn't unify tuple metaclasses (#5384)
  doesn't unify tuple metaclasses (#5384)
+  matches tuple with splat (#2932)
  matches tuple with splat (#2932)
+  errors on recursive splat expansion (#218)
  errors on recursive splat expansion (#218)
+  matches tuple with splat (2) (#2932)
  matches tuple with splat (2) (#2932)
+  errors on tuple too big (#3816)
  errors on tuple too big (#3816)
+  errors if using two splat indices on restriction
  errors if using two splat indices on restriction
+  merges two tuple types of same size
  merges two tuple types of same size
+  #[](RangeLiteral)
+    types, begin-less
    types, begin-less
+    types, inbound begin, end-less
    types, inbound begin, end-less
+    types, out of bound begin, nilable
    types, out of bound begin, nilable
+    types, inbound begin
    types, inbound begin
+    gives error when begin index is out of range
    gives error when begin index is out of range
+    types, begin-less, end-less
    types, begin-less, end-less
+    types, metaclass index
    types, metaclass index
+    types, exclusive range
    types, exclusive range
+    types, inbound begin, nilable
    types, inbound begin, nilable
+  types tuple of three elements
  types tuple of three elements
+  #[](NumberLiteral)
+    types, metaclass index
    types, metaclass index
+    gives error when indexing out of range on empty tuple
    gives error when indexing out of range on empty tuple
+    gives error when indexing out of range
    gives error when indexing out of range
+    types, inbound index
    types, inbound index
+    types, inbound index, nilable
    types, inbound index, nilable
+    types, out of bound, nilable
    types, out of bound, nilable
+  gives error when using named args on Tuple
  gives error when using named args on Tuple
+  types tuple of one element and then two elements
  types tuple of one element and then two elements
+  #[](Path)
+    works for tuple indexer
    works for tuple indexer
+    works for named tuple indexer
    works for named tuple indexer
+  errors on recursive splat expansion (2) (#361)
  errors on recursive splat expansion (2) (#361)
+  doesn't trigger recursive splat expansion error (#7164)
  doesn't trigger recursive splat expansion error (#7164)
+  allows tuple covariance
  allows tuple covariance
+  errors if non-tuple is splatted inside tuple
  errors if non-tuple is splatted inside tuple
+  types T as a tuple of metaclasses
  types T as a tuple of metaclasses
+  can iterate T
  can iterate T
+  errors on named tuple too big
  errors on named tuple too big
+  doesn't crash on tuple in not executed block (#6718)
  doesn't crash on tuple in not executed block (#6718)
+  can call [] on T
  can call [] on T
+  accepts tuple covariance in array
  accepts tuple covariance in array
+  types tuple with splats inside
  types tuple with splats inside
+  errors on recursive splat expansion (1) (#361)
  errors on recursive splat expansion (1) (#361)
+  can name a tuple type
  can name a tuple type
+  types tuple of one element
  types tuple of one element
+  doesn't error if Tuple has no args
  doesn't error if Tuple has no args
 Code gen: nilable cast
-  does nilable cast (true)
  does nilable cast (true)
-  does upcast
  does upcast
   does nilable cast (always true)
  does nilable cast (always true)
-  types as? with wrong type (#2775)
  types as? with wrong type (#2775)
-  upcasts type to virtual (#3304)
  upcasts type to virtual (#3304)
-  does cast to nil (1)
  does cast to nil (1)
+  upcasts type to virtual (2) (#3304)
  upcasts type to virtual (2) (#3304)
   casts union type to nilable type (#9342)
  casts union type to nilable type (#9342)
+  does cast to nil (1)
  does cast to nil (1)
   does cast to nil (2)
  does cast to nil (2)
+  types as? with wrong type (#2775)
  types as? with wrong type (#2775)
   codegens with NoReturn
  codegens with NoReturn
+  casts with block var that changes type (#3341)
  casts with block var that changes type (#3341)
   does nilable cast (false)
  does nilable cast (false)
+  upcasts type to virtual (#3304)
  upcasts type to virtual (#3304)
+  does upcast
  does upcast
+  does nilable cast (true)
  does nilable cast (true)
+Codegen: const
+  inlines simple const
  inlines simple const
+  define a constant in lib
  define a constant in lib
+  initializes simple const
  initializes simple const
+  uses correct types lookup  uses correct types lookup  uses correct types lookup  uses correct types lookup  uses correct types lookup  uses correct types lookup  uses correct types lookup  uses correct types lookup  uses correct types lookup
  uses correct types lookup
+  codegens constant that is declared later because of virtual dispatch
  codegens constant that is declared later because of virtual dispatch
+  finds nearest constant first
  finds nearest constant first
+  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct
  codegens constant that refers to another constant that is a struct
+  initializes ARGC_UNSAFE
  initializes ARGC_UNSAFE
+  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception
  initialize const that might raise an exception
+  supports closured vars inside initializers (#10474)
  supports closured vars inside initializers (#10474)
+  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)
  allows implicit self in constant, called from another class (bug)
+  inlines const with math
  inlines const with math
+  constants with expression
  constants with expression
+  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name
  codegens two consts with same variable name
+  finds global constant
  finds global constant
+  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants
  synchronizes initialization of constants
+  doesn't crash if constant is used, but class is never instantiated (#1106)
  doesn't crash if constant is used, but class is never instantiated (#1106)
+  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const
  codegens variable assignment in const
+  inlines char const
  inlines char const
+  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)
  runs const side effects (#8862)
+  supports storing function returning nil
  supports storing function returning nil
+  inlines bool const
  inlines bool const
+  initializes simple const via another const
  initializes simple const via another const
+  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if
  works with variable declared inside if
+  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module
  uses const before declaring it in another module
+  inlines const referencing another const
  inlines const referencing another const
+  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class
  gets pointerof constant inside class
+  invokes block in const  invokes block in const  invokes block in const  invokes block in const  invokes block in const  invokes block in const  invokes block in const  invokes block in const  invokes block in const
  invokes block in const
+  define a constant
  define a constant
+  support constant inside a def
  support constant inside a def
+  inlines enum value
  inlines enum value
+  support nested constant
  support nested constant
+  declaring var  declaring var  declaring var  declaring var  declaring var  declaring var  declaring var  declaring var  declaring var
  declaring var
+  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant
  gets pointerof complex constant
+  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)
  uses const before declaring it (hoisting)
+  declare constants in right order  declare constants in right order  declare constants in right order  declare constants in right order  declare constants in right order  declare constants in right order  declare constants in right order  declare constants in right order  declare constants in right order
  declare constants in right order
+  gets pointerof constant  gets pointerof constant  gets pointerof constant  gets pointerof constant  gets pointerof constant  gets pointerof constant  gets pointerof constant  gets pointerof constant  gets pointerof constant
  gets pointerof constant
+  allows constants with same name
  allows constants with same name
+Crystal::Repl::Interpreter
+  is_a?
+    does is_a? from NilableType to NonGenericClassType (true)
    does is_a? from NilableType to NonGenericClassType (true)
+    does is_a? from NilableType to GenericClassInstanceType (false)
    does is_a? from NilableType to GenericClassInstanceType (false)
+    does is_a? from NilableType to GenericClassInstanceType (true)
    does is_a? from NilableType to GenericClassInstanceType (true)
+    does is_a? from VirtualType to NonGenericClassType (false)
    does is_a? from VirtualType to NonGenericClassType (false)
+    does is_a? from VirtualType to NonGenericClassType (true)
    does is_a? from VirtualType to NonGenericClassType (true)
+    does is_a? from NilableReferenceUnionType to NonGenericClassType (true)
    does is_a? from NilableReferenceUnionType to NonGenericClassType (true)
+    does is_a? from NilableReferenceUnionType to NonGenericClassType (false)
    does is_a? from NilableReferenceUnionType to NonGenericClassType (false)
+    does is_a? from NilableType to NonGenericClassType (false)
    does is_a? from NilableType to NonGenericClassType (false)
+    does is_a? from NilableProcType to non-Nil
    does is_a? from NilableProcType to non-Nil
+    does is_a? from NilableProcType to Nil
    does is_a? from NilableProcType to Nil
+Code gen: cast
+  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError
  casts from union to single type raises TypeCastError
+  downcasts from union to union with different alignment  downcasts from union to union with different alignment  downcasts from union to union with different alignment  downcasts from union to union with different alignment  downcasts from union to union with different alignment  downcasts from union to union with different alignment  downcasts from union to union with different alignment  downcasts from union to union with different alignment  downcasts from union to union with different alignment
  downcasts from union to union with different alignment
+  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError
  casts from virtual to single type raises TypeCastError
+  can cast from Void* to virtual type (#3014)
  can cast from Void* to virtual type (#3014)
+  casts to module  casts to module  casts to module  casts to module  casts to module  casts to module  casts to module  casts to module  casts to module
  casts to module
+  casts between union types, where union has a tuple type (#3377)
  casts between union types, where union has a tuple type (#3377)
+  codegens class method when type id is available but not a virtual type (#3490)
  codegens class method when type id is available but not a virtual type (#3490)
+  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment
  sidecasts from union to union with different alignment
+  allows casting nilable type to Void* (1)
  allows casting nilable type to Void* (1)
+  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError
  casts from union to another union raises TypeCastError
+  doesn't corrupt stack when downcasting union to union with different alignment (#14285)
  doesn't corrupt stack when downcasting union to union with different alignment (#14285)
+  casts from nilable to nil raises TypeCastError  casts from nilable to nil raises TypeCastError  casts from nilable to nil raises TypeCastError  casts from nilable to nil raises TypeCastError  casts from nilable to nil raises TypeCastError  casts from nilable to nil raises TypeCastError  casts from nilable to nil raises TypeCastError  casts from nilable to nil raises TypeCastError  casts from nilable to nil raises TypeCastError
  casts from nilable to nil raises TypeCastError
+  can cast to metaclass (#11121)
  can cast to metaclass (#11121)
+  allows casting nilable type to Void* (2)
  allows casting nilable type to Void* (2)
+  casts from union to another union  casts from union to another union  casts from union to another union  casts from union to another union  casts from union to another union  casts from union to another union  casts from union to another union  casts from union to another union  casts from union to another union
  casts from union to another union
   casts with block var that changes type (#3341)
  casts with block var that changes type (#3341)
+  casts from int to int  casts from int to int  casts from int to int  casts from int to int  casts from int to int  casts from int to int  casts from int to int  casts from int to int  casts from int to int
  casts from int to int
+  allows casting object to pointer and back
  allows casting object to pointer and back
+  allows casting nilable type to Void* (3)
  allows casting nilable type to Void* (3)
+  upcasts from non-generic to generic
  upcasts from non-generic to generic
+  casts (bug)  casts (bug)  casts (bug)  casts (bug)  casts (bug)  casts (bug)  casts (bug)  casts (bug)  casts (bug)
  casts (bug)
+  casts to bigger union
  casts to bigger union
+  upcasts from union to union with different alignment  upcasts from union to union with different alignment  upcasts from union to union with different alignment  upcasts from union to union with different alignment  upcasts from union to union with different alignment  upcasts from union to union with different alignment  upcasts from union to union with different alignment  upcasts from union to union with different alignment  upcasts from union to union with different alignment
  upcasts from union to union with different alignment
+  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)
  casts from nilable type to virtual type (#3512)
+  cast virtual metaclass type to nilable virtual instance type (#12628)
  cast virtual metaclass type to nilable virtual instance type (#12628)
+  casts from nilable to nil  casts from nilable to nil  casts from nilable to nil  casts from nilable to nil  casts from nilable to nil  casts from nilable to nil  casts from nilable to nil  casts from nilable to nil  casts from nilable to nil
  casts from nilable to nil
+  allows casting nil to Void*
  allows casting nil to Void*
+  casts from virtual to single type  casts from virtual to single type  casts from virtual to single type  casts from virtual to single type  casts from virtual to single type  casts from virtual to single type  casts from virtual to single type  casts from virtual to single type  casts from virtual to single type
  casts from virtual to single type
   upcasts type to virtual (2) (#3304)
  upcasts type to virtual (2) (#3304)
-expand
-  expands macro expression inside def
  expands macro expression inside def
-  expands macro control {% if %} with indent
  expands macro control {% if %} with indent
-  expands macro expression {{ ... }} with cursor inside it
  expands macro expression {{ ... }} with cursor inside it
-  expands macro expression inside def of private enum
  expands macro expression inside def of private enum
-  expands macro expression inside private struct
  expands macro expression inside private struct
-  expands macro control {% for %} with indent
  expands macro control {% for %} with indent
-  expands macro expression inside def of private struct
  expands macro expression inside def of private struct
-  doesn't expand normal call
  doesn't expand normal call
-  doesn't expand macro expression with cursor out of end
  doesn't expand macro expression with cursor out of end
-  expands simple macro
  expands simple macro
-  expands macro expression inside private enum
  expands macro expression inside private enum
-  expands macro expression inside class
  expands macro expression inside class
-  doesn't expand macro expression
  doesn't expand macro expression
-  expands simple macro with cursor inside it
  expands simple macro with cursor inside it
-  expands macro expression inside def of module
  expands macro expression inside def of module
-  expands macros with 3 level
  expands macros with 3 level
-  expands macro expression inside C union
  expands macro expression inside C union
-  expands macro expression {% ... %} with cursor at end of it
  expands macro expression {% ... %} with cursor at end of it
-  expands macro expression inside enum
  expands macro expression inside enum
-  expands simple macro with cursor at end of it
  expands simple macro with cursor at end of it
-  expands macro expression inside def of private module
  expands macro expression inside def of private module
-  expands macro control {% if %} with cursor inside it
  expands macro control {% if %} with cursor inside it
-  expands macro control {% for %}
  expands macro control {% for %}
-  expands macro expression inside def of private module
  expands macro expression inside def of private module
-  expands macro control {% if %} with cursor at end of it
  expands macro control {% if %} with cursor at end of it
-  expands macro expression inside module
  expands macro expression inside module
-  expands macro expression inside C union of private lib
  expands macro expression inside C union of private lib
-  expands macro of module
  expands macro of module
-  expands macro control {% for %} with cursor inside it
  expands macro control {% for %} with cursor inside it
-  expands complex macro
  expands complex macro
-  expands macro expression inside private lib
  expands macro expression inside private lib
-  expands macro of module with cursor at module name
  expands macro of module with cursor at module name
-  expands macro expression inside def of nested module
  expands macro expression inside def of nested module
-  expands macro expression {{ ... }} with cursor end of it
  expands macro expression {{ ... }} with cursor end of it
-  expands macro expression inside private class
  expands macro expression inside private class
-  doesn't expand macro expression
  doesn't expand macro expression
-  expands macro control {% for %} with cursor at end of it
  expands macro control {% for %} with cursor at end of it
-  expands macro expression inside C struct of private lib
  expands macro expression inside C struct of private lib
-  expands macro expression inside lib
  expands macro expression inside lib
-  expands macro expression inside private def
  expands macro expression inside private def
-  expands macro expression inside fun
  expands macro expression inside fun
-  expands macro expression {% ... %}
  expands macro expression {% ... %}
-  expands macro expression inside private module
  expands macro expression inside private module
-  expands macro of module with cursor at dot
  expands macro of module with cursor at dot
-  expands macro expression inside struct
  expands macro expression inside struct
-  expands macro expression {{ ... }}
  expands macro expression {{ ... }}
-  expands macro with doc
  expands macro with doc
-  expands macros with 2 level
  expands macros with 2 level
-  expands macro control {% if %}
  expands macro control {% if %}
-  expands macro expression inside C struct
  expands macro expression inside C struct
-  expands macro of module inside module
  expands macro of module inside module
-  expands macro expression inside def of nested private module
  expands macro expression inside def of nested private module
-  expands macro expression inside def of private class
  expands macro expression inside def of private class
-Crystal::Repl::Interpreter
-  exception handling
-    executes ensure when returning from a block
    executes ensure when returning from a block
-    captures exception in variable
    captures exception in variable
-    executes ensure when exception is raised in body
    executes ensure when exception is raised in body
-    does else
    does else
-    raises and rescues specific exception type
    raises and rescues specific exception type
-    does ensure for else
    does ensure for else
-    does ensure for else when else raises
    does ensure for else when else raises
-    executes ensure when breaking from a block
    executes ensure when breaking from a block
-    executes ensure when returning a big value from a block
    executes ensure when returning a big value from a block
-    does ensure with explicit return
    does ensure with explicit return
-    does ensure without rescue/raise
    does ensure without rescue/raise
-    executes ensure when exception is raised in rescue
    executes ensure when exception is raised in rescue
-    executes ensure when returning from a block (2)
    executes ensure when returning from a block (2)
-    does rescue when nothing is raised
    does rescue when nothing is raised
-    raises and rescues anything
    raises and rescues anything
-    raises and rescues anything, does ensure when an exception is rescued
    raises and rescues anything, does ensure when an exception is rescued
-Semantic: private
-  doesn't find private thing defined through recursive macro (#8715)
  doesn't find private thing defined through recursive macro (#8715)
-  finds private type from inside namespace
  finds private type from inside namespace
-  doesn't find private class in another file
  doesn't find private class in another file
-  doesn't find private module from outside namespace
  doesn't find private module from outside namespace
-  doesn't find private class from outside namespace
  doesn't find private class from outside namespace
-  doesn't find private constant from outside namespace, long name (#8831)
  doesn't find private constant from outside namespace, long name (#8831)
-  doesn't define private alias with global type name
  doesn't define private alias with global type name
-  doesn't find private def defined in macro in another file (#7681)
  doesn't find private def defined in macro in another file (#7681)
-  doesn't find private macro in another file
  doesn't find private macro in another file
-  doesn't find private alias from outside namespace
  doesn't find private alias from outside namespace
-  doesn't define incorrect type in top-level namespace (#13511)
  doesn't define incorrect type in top-level namespace (#13511)
-  find module private macro inside the module
  find module private macro inside the module
-  find module private macro inside a module, which is inherited by the module
  find module private macro inside a module, which is inherited by the module
-  doesn't find module private macro outside the module
  doesn't find module private macro outside the module
-  doesn't find private lib from outside namespace
  doesn't find private lib from outside namespace
-  can use types in private type
  can use types in private type
-  doesn't define incorrect type in top-level namespace (#13511)
  doesn't define incorrect type in top-level namespace (#13511)
-  doesn't define private constant with global type name
  doesn't define private constant with global type name
-  doesn't define private class with global type name
  doesn't define private class with global type name
-  doesn't find private module defined through macro (#8715)
  doesn't find private module defined through macro (#8715)
-  doesn't find private enum from outside namespace, long name (#8831)
  doesn't find private enum from outside namespace, long name (#8831)
-  doesn't find private enum from outside namespace
  doesn't find private enum from outside namespace
-  doesn't find private macro defined through macro (#8715)
  doesn't find private macro defined through macro (#8715)
-  doesn't define incorrect type in top-level namespace (#13511)
  doesn't define incorrect type in top-level namespace (#13511)
-  doesn't find private module from outside namespace, long name (#8831)
  doesn't find private module from outside namespace, long name (#8831)
-  doesn't define private enum with global type name
  doesn't define private enum with global type name
-  finds private def when invoking from inside macro (#2082)
  finds private def when invoking from inside macro (#2082)
-  doesn't find private constant from outside namespace
  doesn't find private constant from outside namespace
-  doesn't find private def in another file
  doesn't find private def in another file
-  doesn't define incorrect type in top-level namespace (#13511)
  doesn't define incorrect type in top-level namespace (#13511)
-  types private def correctly
  types private def correctly
-  doesn't find private constant in another file (#7850)
  doesn't find private constant in another file (#7850)
-  finds private type in same file
  finds private type in same file
-  finds private macro in same file
  finds private macro in same file
-  can use class var initializer in private type
  can use class var initializer in private type
-  doesn't define private module with global type name
  doesn't define private module with global type name
-  doesn't find private alias from outside namespace, long name (#8831)
  doesn't find private alias from outside namespace, long name (#8831)
-  finds private class in macro expansion
  finds private class in macro expansion
-  finds private def in same file that invokes another def
  finds private def in same file that invokes another def
-  can use instance var initializer in private type
  can use instance var initializer in private type
-  doesn't find private lib from outside namespace, long name (#8831)
  doesn't find private lib from outside namespace, long name (#8831)
-  doesn't inherit visibility from class node in macro hook (#8794)
  doesn't inherit visibility from class node in macro hook (#8794)
-  doesn't find private alias in another file
  doesn't find private alias in another file
-  doesn't find private class defined through macro (#8715)
  doesn't find private class defined through macro (#8715)
-  doesn't find private class from outside namespace, long name (#8831)
  doesn't find private class from outside namespace, long name (#8831)
-  finds private type from inside namespace in subclass
  finds private type from inside namespace in subclass
-  finds private macro in same file, invoking from another macro (#1265)
  finds private macro in same file, invoking from another macro (#1265)
-  doesn't define incorrect type in top-level namespace (#13511)
  doesn't define incorrect type in top-level namespace (#13511)
-  doesn't define incorrect type in top-level namespace (#13511)
  doesn't define incorrect type in top-level namespace (#13511)
-  doesn't define private lib with global type name
  doesn't define private lib with global type name
-  finds private def in same file
  finds private def in same file
-  gives private constant error in macro
  gives private constant error in macro
-types to_s of
-  does for type contained in generic module
  does for type contained in generic module
-  array of simple types
  array of simple types
-  nilable value type
  nilable value type
-  non-instantiated array
  non-instantiated array
-  union types
-    should have parens
-      as arg type
      as arg type
-      as return type
      as return type
-    should not have extra parens
-      in pointers
      in pointers
-      in arrays
      in arrays
-      in tuples
      in tuples
-  union of simple types
  union of simple types
-  nilable type with more than two elements, Nil at the end
  nilable type with more than two elements, Nil at the end
-  named tuple
  named tuple
-  does for type contained in generic class
  does for type contained in generic class
-  nilable reference type
  nilable reference type
-Code gen: case
-  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call  codegens case when cond is a call
  codegens case when cond is a call
-  does case when with metaclass
  does case when with metaclass
-  codegens case with class
  codegens case with class
-  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else  codegens case without whens but else
  codegens case without whens but else
-  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions  codegens case with two conditions
  codegens case with two conditions
-  codegens case when constant bug (#1028)
  codegens case when constant bug (#1028)
-  codegens case with one condition  codegens case with one condition  codegens case with one condition  codegens case with one condition  codegens case with one condition  codegens case with one condition  codegens case with one condition  codegens case with one condition  codegens case with one condition
  codegens case with one condition
-  codegens case that always returns  codegens case that always returns  codegens case that always returns  codegens case that always returns  codegens case that always returns  codegens case that always returns  codegens case that always returns  codegens case that always returns  codegens case that always returns
  codegens case that always returns
-  codegens case with else  codegens case with else  codegens case with else  codegens case with else  codegens case with else  codegens case with else  codegens case with else  codegens case with else  codegens case with else
  codegens case with else
-  codegens value-less case
  codegens value-less case
-Lexer string
-  lexes string with slash quote
  lexes string with slash quote
-  lexes string with unicode codepoint
  lexes string with unicode codepoint
-  raises when identifier doesn't start with a letter or number
  raises when identifier doesn't start with a letter or number
-  lexes string with newline
  lexes string with newline
-  lexes string with slash t
  lexes string with slash t
-  lexes heredoc with empty line
  lexes heredoc with empty line
-  assigns correct location after heredoc (#346)
  assigns correct location after heredoc (#346)
-  lexes simple string with %(
  lexes simple string with %(
-  lexes regex string with escaped space with /.../
  lexes regex string with escaped space with /.../
-  lexes regex string with escaped slash with /.../
  lexes regex string with escaped slash with /.../
-  lexes backtick string
  lexes backtick string
-  lexes string with unicode codepoint in curly multiple times
  lexes string with unicode codepoint in curly multiple times
-  says syntax error on "\"\\uD800\""
  says syntax error on "\"\\uD800\""
-  lexes simple string with nested %{
  lexes simple string with nested %{
-  lexes heredoc with \r\n
  lexes heredoc with \r\n
-  lexes simple string with nested %<
  lexes simple string with nested %<
-  says syntax error on "\"\\u{}\""
  says syntax error on "\"\\u{}\""
-  lexes regex string
  lexes regex string
-  says syntax error on "\"\\uFEDZ\""
  says syntax error on "\"\\uFEDZ\""
-  lexes slash with no-escape char
  lexes slash with no-escape char
-  lexes simple string
  lexes simple string
-  lexes regex string with special chars with %r(...)
  lexes regex string with special chars with %r(...)
-  lexes string with only newline
  lexes string with only newline
-  lexes string with numeral
  lexes string with numeral
-  lexes regex string with special chars with /.../
  lexes regex string with special chars with /.../
-  lexes regex string with escaped space with %r(...)
  lexes regex string with escaped space with %r(...)
-  lexes double numeral
  lexes double numeral
-  raises on unterminated heredoc
  raises on unterminated heredoc
-  says syntax error on "\"\\u{110000}\""
  says syntax error on "\"\\u{110000}\""
-  lexes string with literal newline
  lexes string with literal newline
-  lexes string with slash
  lexes string with slash
-  lexes interpolations in heredocs
  lexes interpolations in heredocs
-  raises on unexpected EOF while lexing heredoc
  raises on unexpected EOF while lexing heredoc
-  lexes simple string with %|
  lexes simple string with %|
-  lexes simple string with nested %[
  lexes simple string with nested %[
-  lexes string with backslash
  lexes string with backslash
-  says syntax error on "\"\\u{DFFF}\""
  says syntax error on "\"\\u{DFFF}\""
-  lexes heredoc with spaces before close tag
  lexes heredoc with spaces before close tag
-  says syntax error on "\"\\u{D800}\""
  says syntax error on "\"\\u{D800}\""
-  lexes heredoc
  lexes heredoc
-  lexes string with interpolation with double numeral
  lexes string with interpolation with double numeral
-  lexes string with interpolation
  lexes string with interpolation
-  lexes regex string with escaped slash with %r(...)
  lexes regex string with escaped slash with %r(...)
-  lexes string with unicode codepoint in curly
  lexes string with unicode codepoint in curly
-  lexes simple string with nested %(
  lexes simple string with nested %(
-  says syntax error on "\"\\uDFFF\""
  says syntax error on "\"\\uDFFF\""
-Code gen: struct
-  does phi of struct
  does phi of struct
-  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)
  codegens virtual struct metaclass (#2551) (4)
-  can cast virtual struct to specific struct  can cast virtual struct to specific struct  can cast virtual struct to specific struct  can cast virtual struct to specific struct  can cast virtual struct to specific struct  can cast virtual struct to specific struct  can cast virtual struct to specific struct  can cast virtual struct to specific struct  can cast virtual struct to specific struct
  can cast virtual struct to specific struct
-  passes a generic struct as a parameter makes a copy
  passes a generic struct as a parameter makes a copy
-  codegens virtual struct metaclass (#2551) (2)
  codegens virtual struct metaclass (#2551) (2)
-  uses nilable struct
  uses nilable struct
-  codegens virtual structs union (2)
  codegens virtual structs union (2)
-  mutates a  virtual struct
  mutates a  virtual struct
-  creates structs with instance var
  creates structs with instance var
-  casts virtual struct to base type, only one subclass (#2885)
  casts virtual struct to base type, only one subclass (#2885)
-  allows assigning to struct argument (bug)
  allows assigning to struct argument (bug)
-  declares const struct  declares const struct  declares const struct  declares const struct  declares const struct  declares const struct  declares const struct  declares const struct  declares const struct
  declares const struct
-  codegens virtual struct
  codegens virtual struct
-  returns self with block
  returns self with block
-  codegens virtual struct with pointer
  codegens virtual struct with pointer
-  creates structs
  creates structs
-  passes a struct as a parameter makes a copy
  passes a struct as a parameter makes a copy
-  can call new on abstract struct with single child (#7309)
  can call new on abstract struct with single child (#7309)
-  codegens virtual structs union (1)
  codegens virtual structs union (1)
-  assigning a struct makes a copy (1)
  assigning a struct makes a copy (1)
-  uses struct in if  uses struct in if  uses struct in if  uses struct in if  uses struct in if  uses struct in if  uses struct in if  uses struct in if  uses struct in if
  uses struct in if
-  codegens virtual struct metaclass (#2551) (3)
  codegens virtual struct metaclass (#2551) (3)
-  codegens struct assigned to underscore (#1842)
  codegens struct assigned to underscore (#1842)
-  creates struct in def
  creates struct in def
-  assigning a struct makes a copy (2)
  assigning a struct makes a copy (2)
-  returns struct as a copy
  returns struct as a copy
-  codegens virtual struct metaclass (#2551) (1)
  codegens virtual struct metaclass (#2551) (1)
-  returns self
  returns self
-Semantic: recursive struct check
-  errors on recursive struct through recursive alias (#4454) (#4455)
  errors on recursive struct through recursive alias (#4454) (#4455)
-  detects recursive struct through module
  detects recursive struct through module
-  errors on private recursive type
  errors on private recursive type
-  detects recursive generic struct through module (#4720)
  detects recursive generic struct through module (#4720)
-  errors on recursive struct through named tuple
  errors on recursive struct through named tuple
-  errors on recursive generic struct inside module
  errors on recursive generic struct inside module
-  errors on recursive struct
  errors on recursive struct
-  errors on recursive abstract struct through module (#11384)
  errors on recursive abstract struct through module (#11384)
-  errors on recursive struct inside module
  errors on recursive struct inside module
-  errors on mutually recursive struct
  errors on mutually recursive struct
-  errors on recursive struct through tuple
  errors on recursive struct through tuple
-  detects recursive generic struct through generic module (#4720)
  detects recursive generic struct through generic module (#4720)
-  detects recursive struct through inheritance (#3071)
  detects recursive struct through inheritance (#3071)
-Code gen: tuple
-  merges two tuple types of same size (2)
  merges two tuple types of same size (2)
-  codegens tuple [1..1]?
  codegens tuple [1..1]?
-  codegens tuple [-3..2]?
  codegens tuple [-3..2]?
-  codegens tuple [1]
  codegens tuple [1]
-  allows tuple covariance
  allows tuple covariance
-  provides T as a tuple literal
  provides T as a tuple literal
-  merges two tuple types of same size (1)
  merges two tuple types of same size (1)
-  codegens tuple [2]?
  codegens tuple [2]?
-  upcasts tuple inside compatible tuple
  upcasts tuple inside compatible tuple
-  codegens tuple [0..1]?
  codegens tuple [0..1]?
-  codegens tuple metaclass [0..1]
  codegens tuple metaclass [0..1]
-  passed tuple to def
  passed tuple to def
-  codegens splats inside tuples
  codegens splats inside tuples
-  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)  codegens tuple union (bug because union size was computed incorrectly)
  codegens tuple union (bug because union size was computed incorrectly)
-  codegens tuple metaclass [0]
  codegens tuple metaclass [0]
-  upcasts tuple inside union to union with compatible tuple
  upcasts tuple inside union to union with compatible tuple
-  codegens tuple metaclass [0..0]
  codegens tuple metaclass [0..0]
-  codegens tuple metaclass [2]?
  codegens tuple metaclass [2]?
-  codegens tuple [0]
  codegens tuple [0]
-  codegens tuple [2..2]?
  codegens tuple [2..2]?
-  codegens tuple [0..0]?
  codegens tuple [0..0]?
-  codegens tuple [1]?
  codegens tuple [1]?
-  codegens tuple [0]?
  codegens tuple [0]?
-  allows malloc pointer of tuple
  allows malloc pointer of tuple
-  assigns tuple to compatible tuple
  assigns tuple to compatible tuple
-  codegens tuple [1..0]?
  codegens tuple [1..0]?
-  codegens tuple [1..0]
  codegens tuple [1..0]
-  accesses T and creates instance from it
  accesses T and creates instance from it
-  codegens tuple [1] (2)
  codegens tuple [1] (2)
-  codegens union of tuple of float with tuple of tuple of float
  codegens union of tuple of float with tuple of tuple of float
-  downcasts union inside tuple to value (#3907)
  downcasts union inside tuple to value (#3907)
-  gets size at compile time
  gets size at compile time
-  downcasts union to mixed tuple type
  downcasts union to mixed tuple type
-  codegens tuple metaclass [1..0]
  codegens tuple metaclass [1..0]
-  codegens tuple [2..2]
  codegens tuple [2..2]
-  codegens tuple metaclass [3..2]?
  codegens tuple metaclass [3..2]?
-  codegens tuple class
  codegens tuple class
-  codegens tuple [1..1]
  codegens tuple [1..1]
-  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types  downcasts union to mixed union with mixed tuple types
  downcasts union to mixed union with mixed tuple types
-  codegens tuple [0..2]?
  codegens tuple [0..2]?
-  assigns tuple inside union to union with compatible tuple
  assigns tuple inside union to union with compatible tuple
-  passes empty tuple and empty named tuple to a method (#2852)
  passes empty tuple and empty named tuple to a method (#2852)
-  codegens tuple [0..1]
  codegens tuple [0..1]
-  codegens tuple [0..2]
  codegens tuple [0..2]
-  codegens tuple [3..2]?
  codegens tuple [3..2]?
-  codegens tuple metaclass [1]
  codegens tuple metaclass [1]
-  upcasts tuple union to compatible tuple
  upcasts tuple union to compatible tuple
-  codegens tuple [0..0]
  codegens tuple [0..0]
-  assigns tuple union to compatible tuple
  assigns tuple union to compatible tuple
-  assigns two same-size tuple types to a same var (#3132)
  assigns two same-size tuple types to a same var (#3132)
-Normalize: expressions
-  normalizes expressions with begin/end
  normalizes expressions with begin/end
-  normalizes an expression
  normalizes an expression
-  normalizes an empty expression with begin/end
  normalizes an empty expression with begin/end
-Semantic: type
-  can call methods of original type
  can call methods of original type
-  can call methods of parent type
  can call methods of parent type
-  errors if original type doesn't support instance variables
  errors if original type doesn't support instance variables
-  can access instance variables of original type
  can access instance variables of original type
-Code gen: sizeof
-  returns correct sizeof for abstract struct (#4319)
  returns correct sizeof for abstract struct (#4319)
-  gets sizeof NoReturn
  gets sizeof NoReturn
-  gets sizeof union
  gets sizeof union
-  gets sizeof Nil (#7644)
  gets sizeof Nil (#7644)
-  can use sizeof in type argument (1)
  can use sizeof in type argument (1)
-  alignof
-    gets alignof struct
    gets alignof struct
-    gets alignof primitive types
    gets alignof primitive types
-    gets alignof union
    gets alignof union
-    gets alignof class
    gets alignof class
-    alignof mixed union is not less than alignof its variant types
    alignof mixed union is not less than alignof its variant types
-  can use sizeof in type argument (2)
  can use sizeof in type argument (2)
-  gets instance_sizeof class
  gets instance_sizeof class
-  can use sizeof of virtual type
  can use sizeof of virtual type
-  can use instance_sizeof in type argument
  can use instance_sizeof in type argument
-  gets instance_sizeof a generic type with type vars
  gets instance_sizeof a generic type with type vars
-  gets sizeof Void
  gets sizeof Void
-  gets sizeof struct
  gets sizeof struct
-  gets sizeof Bool (#8272)
  gets sizeof Bool (#8272)
-  doesn't precompute sizeof of abstract struct (#7741)
  doesn't precompute sizeof of abstract struct (#7741)
-  gets sizeof int
  gets sizeof int
-  can use instance_sizeof of virtual type
  can use instance_sizeof of virtual type
-  gets sizeof class
  gets sizeof class
-  instance_alignof
-    gets instance_alignof class
    gets instance_alignof class
-    gets instance_alignof a generic type with type vars
    gets instance_alignof a generic type with type vars
-  doesn't precompute sizeof of module (#7741)
  doesn't precompute sizeof of module (#7741)
-Lexer comments
-  lexes without comments enabled
  lexes without comments enabled
-  lexes correct number of spaces
  lexes correct number of spaces
-  lexes with comments enabled (2)
  lexes with comments enabled (2)
-  lexes with comments enabled
  lexes with comments enabled
-Crystal::Repl::Interpreter
-  magic constants
-    does line number
    does line number
-  constants
-    hoists constants
    hoists constants
-    interprets self inside constant inside class
    interprets self inside constant inside class
-    interprets constant literal
    interprets constant literal
-    returns nil in the assignment
    returns nil in the assignment
-    interprets complex constant
    interprets complex constant
-Semantic: restrictions augmenter
-  augments generic uninstantiated type
  augments generic uninstantiated type
-  augments relative public type
  augments relative public type
-  augments Char | Int32 | String
  augments Char | Int32 | String
-  augments Nil
  augments Nil
-  augments Char | Int32 | String
  augments Char | Int32 | String
-  augments Int32
  augments Int32
-  augments Float32
  augments Float32
-  augments Bool
  augments Bool
-  augments Proc(Int32, Char)
  augments Proc(Int32, Char)
-  augments recursive alias type (#12134)
  augments recursive alias type (#12134)
-  augments Pointer(Void)
  augments Pointer(Void)
-  augments NamedTuple(a: Int32, b: Char)
  augments NamedTuple(a: Int32, b: Char)
-  augments relative private type
  augments relative private type
-  augments virtual type
  augments virtual type
-  doesn't augment if assigned inside while
  doesn't augment if assigned inside while
-  doesn't augment if the no_restrictions_augmenter flag is present
  doesn't augment if the no_restrictions_augmenter flag is present
-  augments NoReturn
  augments NoReturn
-  augments for Union(*T) (#12435)
  augments for Union(*T) (#12435)
-  augments Array(Int32).class
  augments Array(Int32).class
-  augments Symbol
  augments Symbol
-  augments Int32.class
  augments Int32.class
-  augments Tuple(Int32, Char)
  augments Tuple(Int32, Char)
-  augments virtual metaclass type
  augments virtual metaclass type
-  doesn't augment if assigned inside if
  doesn't augment if assigned inside if
-  augments String
  augments String
-  augments Char
  augments Char
-  augments Array(String)
  augments Array(String)
-  augments Enumerable(Int32).class
  augments Enumerable(Int32).class
-  doesn't augment if assigned inside block
  doesn't augment if assigned inside block
-  augments type splat
  augments type splat
-  doesn't crash on macro that yields and defines class (#12142)
  doesn't crash on macro that yields and defines class (#12142)
-  augments Proc(Int32, Nil)
  augments Proc(Int32, Nil)
-  augments typedef
  augments typedef
-  augments relative private type in same namespace
  augments relative private type in same namespace
-  augments for class var
  augments for class var
-  augments StaticArray(Int32, 8)
  augments StaticArray(Int32, 8)
-Code gen: lib
-  passes int as another float type in literal
  passes int as another float type in literal
-  can use enum as fun argument
  can use enum as fun argument
-  uses static array in lib extern (#5688)
  uses static array in lib extern (#5688)
-  allows setting/getting external variable as function pointer
  allows setting/getting external variable as function pointer
-  passes nil to varargs (#1570)
  passes nil to varargs (#1570)
-  casts C fun to Crystal proc when accessing instance var (#2515)
  casts C fun to Crystal proc when accessing instance var (#2515)
-  allows passing type to LibC if it has a converter with to_unsafe
  allows passing type to LibC if it has a converter with to_unsafe
-  refers to lib type (#960)
  refers to lib type (#960)
-  codegens lib var set and get
  codegens lib var set and get
-  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)
  get fun field from struct (#672)
-  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)
  get fun field from union (#672)
-  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return
  can use tuple as fun return
-  allows invoking out with underscore 
  allows invoking out with underscore 
-  call to void function
  call to void function
-  doesn't crash with nil and varargs (#4414)
  doesn't crash with nil and varargs (#4414)
-  allows passing type to LibC if it has a converter with to_unsafe (bug)
  allows passing type to LibC if it has a converter with to_unsafe (bug)
-  can use enum as fun return
  can use enum as fun return
-  doesn't crash when casting -1 to UInt32 (#3594)
  doesn't crash when casting -1 to UInt32 (#3594)
-Codegen: until
-  codegens until
  codegens until
-Semantic: splat
-  matches instantiated generic with splat in generic type
  matches instantiated generic with splat in generic type
-  matches with type var splat inside explicit Union, when non-splat vars fail
  matches with type var splat inside explicit Union, when non-splat vars fail
-  matches with type var and splat of itself inside explicit Union (2)
  matches with type var and splat of itself inside explicit Union (2)
-  gives correct error when forwarding splat (2)
  gives correct error when forwarding splat (2)
-  splats arg and splat against splat (1) (#1042)
  splats arg and splat against splat (1) (#1042)
-  matches with type var splat inside explicit Union (2)
  matches with type var splat inside explicit Union (2)
-  errors with too few non-splat type arguments (2)
  errors with too few non-splat type arguments (2)
-  matches with type var and splat of itself inside explicit Union (3)
  matches with type var and splat of itself inside explicit Union (3)
-  uses bare *, doesn't let more args
  uses bare *, doesn't let more args
-  method with default arguments and splat matches call with one arg (#2766)
  method with default arguments and splat matches call with one arg (#2766)
-  matches with type var splat inside explicit Union, when all splat elements match
  matches with type var splat inside explicit Union, when all splat elements match
-  doesn't match splat in generic type with unsplatted tuple (#10164)
  doesn't match splat in generic type with unsplatted tuple (#10164)
-  doesn't crash on non-match (#2521)
  doesn't crash on non-match (#2521)
-  calls super with implicit splat arg (#1001)
  calls super with implicit splat arg (#1001)
-  matches with type var and splat of itself inside explicit Union
  matches with type var and splat of itself inside explicit Union
-  works if matches splat with type restriction
  works if matches splat with type restriction
-  matches type splat with splat in generic type (2)
  matches type splat with splat in generic type (2)
-  uses splat restriction after non-splat arguments (#5037)
  uses splat restriction after non-splat arguments (#5037)
-  doesn't match free var type splats inside explicit Union
  doesn't match free var type splats inside explicit Union
-  errors if splatting non-tuple type in return values
  errors if splatting non-tuple type in return values
-  errors if doesn't match splat with type restriction because of zero arguments
  errors if doesn't match splat with type restriction because of zero arguments
-  uses splat restriction with concrete type
  uses splat restriction with concrete type
-  uses splat restriction
  uses splat restriction
-  method with splat and optional named argument matches zero args call (#2746)
  method with splat and optional named argument matches zero args call (#2746)
-  errors if splatting non-tuple type in call arguments
  errors if splatting non-tuple type in call arguments
-  overloads with type restriction and splat (6)
  overloads with type restriction and splat (6)
-  overloads with type restriction and splat (2)
  overloads with type restriction and splat (2)
-  errors with too few non-splat type arguments (1)
  errors with too few non-splat type arguments (1)
-  Crystal::Splat
-    without splat
    without splat
-    with splat
    with splat
-  uses splat restriction, matches empty
  uses splat restriction, matches empty
-  redefines method with splat (bug #248)
  redefines method with splat (bug #248)
-  overloads with type restriction and splat (1)
  overloads with type restriction and splat (1)
-  errors on zero args with named arg and splat
  errors on zero args with named arg and splat
-  overloads with splat against method with two arguments (#986) (2)
  overloads with splat against method with two arguments (#986) (2)
-  matches with tuple splat inside explicit Union
  matches with tuple splat inside explicit Union
-  matches with type var splat inside explicit Union, when one splat fails entirely
  matches with type var splat inside explicit Union, when one splat fails entirely
-  overloads with type restriction and splat (4)
  overloads with type restriction and splat (4)
-  matches partially instantiated generic with splat in generic type
  matches partially instantiated generic with splat in generic type
-  splats
  splats
-  accesses T when empty, via module
  accesses T when empty, via module
-  says missing argument because positional args don't match past splat
  says missing argument because positional args don't match past splat
-  matches with splat
  matches with splat
-  overloads with type restriction and splat (5)
  overloads with type restriction and splat (5)
-  forwards tuple with an extra argument
  forwards tuple with an extra argument
-  errors if doesn't match splat with type restriction
  errors if doesn't match splat with type restriction
-  errors with too many non-splat type arguments
  errors with too many non-splat type arguments
-  matches type splat with splat in generic type (1)
  matches type splat with splat in generic type (1)
-  overloads with type restriction and splat (3)
  overloads with type restriction and splat (3)
-  forwards tuple in return statement
  forwards tuple in return statement
-  matches with type var splat inside explicit Union
  matches with type var splat inside explicit Union
-  allows default value after splat index
  allows default value after splat index
-  errors if using two splat indices on restriction
  errors if using two splat indices on restriction
-  uses bare *
  uses bare *
-  overloads with splat against method with two arguments (#986) (1)
  overloads with splat against method with two arguments (#986) (1)
-  doesn't shift a call's location
  doesn't shift a call's location
-  splats arg and splat against splat (2) (#1042)
  splats arg and splat against splat (2) (#1042)
-  overloads with type restriction and splat (7)
  overloads with type restriction and splat (7)
-  says no overload matches on type restrictions past the splat arg
  says no overload matches on type restrictions past the splat arg
-  can splat after type filter left it as a tuple (#442)
  can splat after type filter left it as a tuple (#442)
-  errors if splatting union
  errors if splatting union
-  gives correct error when forwarding splat
  gives correct error when forwarding splat
+  upcasts type to virtual (#3304)
  upcasts type to virtual (#3304)
+  casts from union to single type  casts from union to single type  casts from union to single type  casts from union to single type  casts from union to single type  casts from union to single type  casts from union to single type  casts from union to single type  casts from union to single type
  casts from union to single type
+  casts to base class making it virtual
  casts to base class making it virtual
+  casts from pointer to pointer  casts from pointer to pointer  casts from pointer to pointer  casts from pointer to pointer  casts from pointer to pointer  casts from pointer to pointer  casts from pointer to pointer  casts from pointer to pointer  casts from pointer to pointer
  casts from pointer to pointer
 Semantic: proc
-  can match *T in block argument
  can match *T in block argument
-  allows passing union including module to proc
  allows passing union including module to proc
-  *doesn't* merge Proc that returns NoReturn with another one that returns something else (#9971)
  *doesn't* merge Proc that returns NoReturn with another one that returns something else (#9971)
-  disallows Struct in proc return types
  disallows Struct in proc return types
-  disallows Enum in procs
  disallows Enum in procs
-  allows passing proc type if it is typedef'd
  allows passing proc type if it is typedef'd
-  disallows Struct in proc notation parameter type
  disallows Struct in proc notation parameter type
-  allows metaclass in proc notation return type
  allows metaclass in proc notation return type
-  disallows Number in proc notation parameter type
  disallows Number in proc notation parameter type
-  disallows Int in procs
  disallows Int in procs
-  says wrong return type in new on proc type
  says wrong return type in new on proc type
-  allows passing NoReturn type for any return type (1)
  allows passing NoReturn type for any return type (1)
-  types proc call
  types proc call
-  disallows Pointer in proc notation return type
  disallows Pointer in proc notation return type
-  disallows Value in captured block
  disallows Value in captured block
-  disallows StaticArray in procs
  disallows StaticArray in procs
-  unpacks tuple but doesn't override local variables, when using new (#9813)
  unpacks tuple but doesn't override local variables, when using new (#9813)
-  types proc pointer
  types proc pointer
-  disallows Object in proc notation return type
  disallows Object in proc notation return type
-  allows using Proc as restriction (1)
  allows using Proc as restriction (1)
-  types proc pointer to instance method
  types proc pointer to instance method
-  disallows Float in proc notation return type
  disallows Float in proc notation return type
-  disallows Class in proc notation return type
  disallows Class in proc notation return type
-  doesn't let passing an non-covariant generic argument
  doesn't let passing an non-covariant generic argument
-  binds proc literal to arguments and body
  binds proc literal to arguments and body
-  accesses T and R
  accesses T and R
-  allows passing function to LibC without specifying types, using a class method
  allows passing function to LibC without specifying types, using a class method
-  errors if inferred return type doesn't match return type restriction (2)
  errors if inferred return type doesn't match return type restriction (2)
-  types Proc(*T, Void) as Proc(*T, Nil)
  types Proc(*T, Void) as Proc(*T, Nil)
-  disallows Object in proc notation parameter type
  disallows Object in proc notation parameter type
-  can assign proc that returns anything to proc that returns nil, with instance var (#3655)
  can assign proc that returns anything to proc that returns nil, with instance var (#3655)
-  disallows Reference in proc return types
  disallows Reference in proc return types
-  types nil or proc type
  types nil or proc type
-  allows using proc arg name shadowing local variable
  allows using proc arg name shadowing local variable
-  disallows Class in proc return types
  disallows Class in proc return types
-  disallows Class in captured block
  disallows Class in captured block
-  allows passing virtual type including module to proc
  allows passing virtual type including module to proc
-  finds method of object
  finds method of object
-  doesn't capture closured var if using typeof
  doesn't capture closured var if using typeof
-  allows casting a proc type to one with void argument
  allows casting a proc type to one with void argument
-  uses array argument of proc arg (3)
  uses array argument of proc arg (3)
-  allows passing nil as proc callback if it is a lib alias
  allows passing nil as proc callback if it is a lib alias
-  disallows Value in procs
  disallows Value in procs
-  disallows Tuple in procs
  disallows Tuple in procs
-  disallows Value in proc pointer
  disallows Value in proc pointer
-  errors when using macro as proc value (inside method) (#7465)
  errors when using macro as proc value (inside method) (#7465)
-  disallows StaticArray in proc notation parameter type
  disallows StaticArray in proc notation parameter type
-  can use @@cvar as pointer syntax receiver (#9239)
  can use @@cvar as pointer syntax receiver (#9239)
-  disallows Object in procs
  disallows Object in procs
-  disallows Object in proc pointer
  disallows Object in proc pointer
-  errors if inferred return type doesn't match return type restriction (1)
  errors if inferred return type doesn't match return type restriction (1)
-  disallows Pointer in proc pointer
  disallows Pointer in proc pointer
-  disallows Object in captured block
  disallows Object in captured block
-  types int -> int proc literal
  types int -> int proc literal
-  errors when using macro as proc value (top-level with obj) (#7465)
  errors when using macro as proc value (top-level with obj) (#7465)
-  disallows Class in procs
  disallows Class in procs
-  disallows casting a proc type to one accepting same size argument but different input
  disallows casting a proc type to one accepting same size argument but different input
-  types int -> int proc call
  types int -> int proc call
-  passes proc pointer as block with arguments
  passes proc pointer as block with arguments
-  disallows Struct in procs
  disallows Struct in procs
-  virtualizes proc type with -> (#8730)
  virtualizes proc type with -> (#8730)
+  types proc call with return type
  types proc call with return type
+  types proc literal with a type that was never instantiated
  types proc literal with a type that was never instantiated
+  disallows Pointer in proc return types
  disallows Pointer in proc return types
+  can pass Proc(X, T) to Proc(X, Nil) in type restriction (#8964)
  can pass Proc(X, T) to Proc(X, Nil) in type restriction (#8964)
+  disallows Reference in proc notation return type
  disallows Reference in proc notation return type
   passes proc pointer as block
  passes proc pointer as block
-  disallows Proc in proc pointer
  disallows Proc in proc pointer
-  allows new on proc type
  allows new on proc type
-  sets proc type as void if explicitly told so, when using new
  sets proc type as void if explicitly told so, when using new
-  doesn't crash on constant to proc pointer
  doesn't crash on constant to proc pointer
-  allows using Proc as restriction (3)
  allows using Proc as restriction (3)
-  can assign proc that returns anything to proc that returns nil, with class var (#3655)
  can assign proc that returns anything to proc that returns nil, with class var (#3655)
+  can assign proc that returns anything to proc that returns nil, with local var (#3655)
  can assign proc that returns anything to proc that returns nil, with local var (#3655)
   disallows StaticArray in captured block
  disallows StaticArray in captured block
-  has proc literal as restriction and works
  has proc literal as restriction and works
-  doesn't cause upcast bug (#8428)
  doesn't cause upcast bug (#8428)
-  allows metaclass in proc notation parameter type
  allows metaclass in proc notation parameter type
-  disallows Number in captured block
  disallows Number in captured block
-  disallows Pointer in captured block
  disallows Pointer in captured block
-  types proc pointer with types
  types proc pointer with types
-  disallows Number in procs
  disallows Number in procs
-  gives correct error message when proc return type is incorrect (#219)
  gives correct error message when proc return type is incorrect (#219)
-  can pass proc that returns T as Void with named args (#7523)
  can pass proc that returns T as Void with named args (#7523)
-  types proc type spec
  types proc type spec
+  disallows Tuple in proc pointer
  disallows Tuple in proc pointer
+  disallows Tuple in proc notation parameter type
  disallows Tuple in proc notation parameter type
   has proc literal as restriction and errors if input is different
  has proc literal as restriction and errors if input is different
-  disallows Enum in proc return types
  disallows Enum in proc return types
   allows implicit cast of proc to return void in generic restriction
  allows implicit cast of proc to return void in generic restriction
-  *doesn't* merge Proc that returns Nil with another one that returns something else (#3655) (this was reverted)
  *doesn't* merge Proc that returns Nil with another one that returns something else (#3655) (this was reverted)
-  disallows Proc in procs
  disallows Proc in procs
-  disallows Reference in proc notation parameter type
  disallows Reference in proc notation parameter type
-  can use @ivar as pointer syntax receiver (#9239)
  can use @ivar as pointer syntax receiver (#9239)
-  merges return type
  merges return type
-  forwards block and computes correct type (bug)
  forwards block and computes correct type (bug)
-  disallows Int in proc notation parameter type
  disallows Int in proc notation parameter type
-  allows passing function to LibC without specifying types, using a global method
  allows passing function to LibC without specifying types, using a global method
-  accesses T inside variadic generic
  accesses T inside variadic generic
-  disallows Class in proc pointer
  disallows Class in proc pointer
-  allows metaclass in captured block
  allows metaclass in captured block
-  disallows Struct in captured block
  disallows Struct in captured block
-  disallows Value in proc notation parameter type
  disallows Value in proc notation parameter type
-  allows implicit cast of proc to return void in LibC function
  allows implicit cast of proc to return void in LibC function
-  disallows Pointer in procs
  disallows Pointer in procs
-  uses array argument of proc arg (4)
  uses array argument of proc arg (4)
-  disallows Tuple in proc notation return type
  disallows Tuple in proc notation return type
-  disallows Reference in proc notation return type
  disallows Reference in proc notation return type
-  disallows Proc in proc notation return type
  disallows Proc in proc notation return type
-  allows metaclass in proc pointer
  allows metaclass in proc pointer
-  types int proc literal
  types int proc literal
-  allows using Proc as restriction (2)
  allows using Proc as restriction (2)
-  disallows Struct in proc notation return type
  disallows Struct in proc notation return type
-  errors when using macro as proc value (top-level) (#7465)
  errors when using macro as proc value (top-level) (#7465)
-  errors if missing argument type in proc literal
  errors if missing argument type in proc literal
-  disallows Float in proc return types
  disallows Float in proc return types
-  has proc literal as restriction and works when output not specified
  has proc literal as restriction and works when output not specified
-  disallows Tuple in proc notation parameter type
  disallows Tuple in proc notation parameter type
-  accesses T inside variadic generic, in proc notation
  accesses T inside variadic generic, in proc notation
-  disallows Enum in proc notation parameter type
  disallows Enum in proc notation parameter type
+  disallows Object in procs
  disallows Object in procs
+  disallows Object in proc return types
  disallows Object in proc return types
+  doesn't cause upcast bug (#8428)
  doesn't cause upcast bug (#8428)
+  disallows StaticArray in procs
  disallows StaticArray in procs
+  disallows casting a proc type to one accepting same size argument but different input
  disallows casting a proc type to one accepting same size argument but different input
+  disallows Object in proc pointer
  disallows Object in proc pointer
+  disallows Struct in proc return types
  disallows Struct in proc return types
+  disallows Object in proc notation return type
  disallows Object in proc notation return type
+  types proc pointer with a type that was never instantiated
  types proc pointer with a type that was never instantiated
+  types proc literal with return type (2)
  types proc literal with return type (2)
+  disallows Class in procs
  disallows Class in procs
   types proc literal with return type (1)
  types proc literal with return type (1)
-  can assign proc that returns anything to proc that returns nil, with local var (#3655)
  can assign proc that returns anything to proc that returns nil, with local var (#3655)
-  disallows Float in procs
  disallows Float in procs
-  disallows casting a proc type to one accepting more arguments
  disallows casting a proc type to one accepting more arguments
-  allows metaclass in procs
  allows metaclass in procs
   disallows Value in proc notation return type
  disallows Value in proc notation return type
-  disallows Float in captured block
  disallows Float in captured block
+  doesn't let passing an non-covariant generic argument
  doesn't let passing an non-covariant generic argument
+  disallows Tuple in proc notation return type
  disallows Tuple in proc notation return type
+  forwards block and computes correct type (bug)
  forwards block and computes correct type (bug)
+  disallows Proc in proc notation return type
  disallows Proc in proc notation return type
+  unpacks tuple but doesn't override local variables, when using new (#9813)
  unpacks tuple but doesn't override local variables, when using new (#9813)
+  allows new on proc type with less block params
  allows new on proc type with less block params
   types empty proc literal
  types empty proc literal
+  has proc literal as restriction and works when output not specified
  has proc literal as restriction and works when output not specified
+  errors if missing argument type in proc literal
  errors if missing argument type in proc literal
+  allows implicit cast of proc to return void in LibC function
  allows implicit cast of proc to return void in LibC function
+  can pass proc that returns T as Void with named args (#7523)
  can pass proc that returns T as Void with named args (#7523)
+  disallows Int in captured block
  disallows Int in captured block
+  disallows Number in proc pointer
  disallows Number in proc pointer
+  allows casting a proc type to one with void argument
  allows casting a proc type to one with void argument
+  declares an instance variable with splat in proc notation
  declares an instance variable with splat in proc notation
+  disallows Reference in proc pointer
  disallows Reference in proc pointer
+  disallows Tuple in proc return types
  disallows Tuple in proc return types
+  types proc literal hard type inference (1)
  types proc literal hard type inference (1)
+  merges return type
  merges return type
+  disallows Int in proc notation parameter type
  disallows Int in proc notation parameter type
+  disallows Float in proc notation parameter type
  disallows Float in proc notation parameter type
+  allows passing proc type if it is a lib alias
  allows passing proc type if it is a lib alias
+  disallows Reference in captured block
  disallows Reference in captured block
+  types int -> int proc literal
  types int -> int proc literal
+  disallows Tuple in procs
  disallows Tuple in procs
+  allows using Proc as restriction (3)
  allows using Proc as restriction (3)
+  allows passing function to LibC without specifying types, using a global method
  allows passing function to LibC without specifying types, using a global method
+  types proc pointer
  types proc pointer
   casts to Proc(Nil) when specified in return type
  casts to Proc(Nil) when specified in return type
-  disallows Number in proc notation return type
  disallows Number in proc notation return type
+  finds method of object
  finds method of object
+  disallows Reference in proc notation parameter type
  disallows Reference in proc notation parameter type
+  disallows Value in proc notation parameter type
  disallows Value in proc notation parameter type
+  disallows Float in proc pointer
  disallows Float in proc pointer
+  disallows Struct in proc notation parameter type
  disallows Struct in proc notation parameter type
   disallows Int in proc pointer
  disallows Int in proc pointer
-  disallows StaticArray in proc notation return type
  disallows StaticArray in proc notation return type
-  allows implicit cast of proc to return void in non-generic restriction
  allows implicit cast of proc to return void in non-generic restriction
-  disallows Enum in proc pointer
  disallows Enum in proc pointer
-  allows invoking a function with a generic subtype (1)
  allows invoking a function with a generic subtype (1)
-  errors when using local variable with proc argument name
  errors when using local variable with proc argument name
+  sets proc type as void if explicitly told so, when using new
  sets proc type as void if explicitly told so, when using new
+  doesn't crash on constant to proc pointer
  doesn't crash on constant to proc pointer
   allows writing a function type with Proc
  allows writing a function type with Proc
-  can pass Proc(T) to Proc(Nil) in type restriction (#8964)
  can pass Proc(T) to Proc(Nil) in type restriction (#8964)
-  disallows Enum in captured block
  disallows Enum in captured block
-  allows new on proc type with less block params
  allows new on proc type with less block params
-  disallows Tuple in captured block
  disallows Tuple in captured block
-  disallows casting a proc type to one accepting same size argument but different output
  disallows casting a proc type to one accepting same size argument but different output
-  disallows Float in proc pointer
  disallows Float in proc pointer
-  allows invoking a function with a generic subtype (2)
  allows invoking a function with a generic subtype (2)
-  types proc literal hard type inference (1)
  types proc literal hard type inference (1)
-  gets pointer to lib fun without specifying types
  gets pointer to lib fun without specifying types
+  disallows casting a proc type to one accepting less arguments
  disallows casting a proc type to one accepting less arguments
+  types proc call
  types proc call
+  disallows Class in captured block
  disallows Class in captured block
   has proc literal as restriction and errors if output is different
  has proc literal as restriction and errors if output is different
+  disallows Value in procs
  disallows Value in procs
+  disallows StaticArray in proc notation return type
  disallows StaticArray in proc notation return type
+  allows passing proc type if it is typedef'd
  allows passing proc type if it is typedef'd
+  virtualizes proc type with -> (#8730)
  virtualizes proc type with -> (#8730)
+  allows passing nil as proc callback if it is a lib alias
  allows passing nil as proc callback if it is a lib alias
+  disallows Float in proc notation return type
  disallows Float in proc notation return type
+  doesn't capture closured var if using typeof
  doesn't capture closured var if using typeof
+  disallows Number in proc notation parameter type
  disallows Number in proc notation parameter type
+  allows passing union including module to proc
  allows passing union including module to proc
+  allows implicit cast of proc to return void in non-generic restriction
  allows implicit cast of proc to return void in non-generic restriction
+  virtualizes proc type (#6789)
  virtualizes proc type (#6789)
+  errors if inferred return type doesn't match return type restriction (2)
  errors if inferred return type doesn't match return type restriction (2)
+  can match *T in block argument
  can match *T in block argument
+  doesn't need to deduce type of block if return is void
  doesn't need to deduce type of block if return is void
+  types nil or proc type
  types nil or proc type
+  disallows Pointer in captured block
  disallows Pointer in captured block
+  types proc pointer with types
  types proc pointer with types
+  disallows Proc in captured block
  disallows Proc in captured block
+  errors when using macro as proc value (top-level) (#7465)
  errors when using macro as proc value (top-level) (#7465)
+  says wrong number of arguments
  says wrong number of arguments
+  *doesn't* merge Proc that returns Nil with another one that returns something else (#3655) (this was reverted)
  *doesn't* merge Proc that returns Nil with another one that returns something else (#3655) (this was reverted)
   disallows StaticArray in proc return types
  disallows StaticArray in proc return types
-  accesses T inside variadic generic (2)
  accesses T inside variadic generic (2)
-  disallows Object in proc return types
  disallows Object in proc return types
-  disallows Reference in proc pointer
  disallows Reference in proc pointer
-  disallows StaticArray in proc pointer
  disallows StaticArray in proc pointer
-  says wrong number of block params in new on proc type
  says wrong number of block params in new on proc type
+  allows passing NoReturn type for any return type (3)
  allows passing NoReturn type for any return type (3)
   disallows Proc in proc notation parameter type
  disallows Proc in proc notation parameter type
-  allows new on proc type that is a lib alias
  allows new on proc type that is a lib alias
-  says wrong number of arguments
  says wrong number of arguments
-  types proc call with return type
  types proc call with return type
+  can assign proc that returns anything to proc that returns nil, with class var (#3655)
  can assign proc that returns anything to proc that returns nil, with class var (#3655)
+  disallows Pointer in proc notation parameter type
  disallows Pointer in proc notation parameter type
+  allows using proc arg name shadowing local variable
  allows using proc arg name shadowing local variable
+  allows using Proc as restriction (1)
  allows using Proc as restriction (1)
+  says wrong number of block params in new on proc type
  says wrong number of block params in new on proc type
   can assign NoReturn proc to other proc (#3032)
  can assign NoReturn proc to other proc (#3032)
-  allows passing NoReturn type for any return type (3)
  allows passing NoReturn type for any return type (3)
-  disallows casting a proc type to one accepting less arguments
  disallows casting a proc type to one accepting less arguments
-  disallows Reference in procs
  disallows Reference in procs
+  disallows Object in proc notation parameter type
  disallows Object in proc notation parameter type
+  disallows Number in procs
  disallows Number in procs
+  allows passing NoReturn type for any return type, with Proc notation (#12126)
  allows passing NoReturn type for any return type, with Proc notation (#12126)
+  types proc pointer to instance method
  types proc pointer to instance method
+  disallows Struct in proc notation return type
  disallows Struct in proc notation return type
   uses array argument of proc arg (1)
  uses array argument of proc arg (1)
-  disallows Tuple in proc return types
  disallows Tuple in proc return types
-  disallows Int in captured block
  disallows Int in captured block
-  uses array argument of proc arg (2)
  uses array argument of proc arg (2)
-  disallows Proc in proc return types
  disallows Proc in proc return types
-  types proc pointer with a type that was never instantiated
  types proc pointer with a type that was never instantiated
-  disallows Int in proc return types
  disallows Int in proc return types
-  virtualizes proc type (#6789)
  virtualizes proc type (#6789)
-  declares an instance variable with splat in proc notation
  declares an instance variable with splat in proc notation
-  disallows Tuple in proc pointer
  disallows Tuple in proc pointer
-  allows metaclass in proc return types
  allows metaclass in proc return types
-  allows passing proc type if it is a lib alias
  allows passing proc type if it is a lib alias
-  disallows Value in proc return types
  disallows Value in proc return types
-  disallows Float in proc notation parameter type
  disallows Float in proc notation parameter type
-  allows passing function to LibC without specifying types
  allows passing function to LibC without specifying types
-  disallows Number in proc pointer
  disallows Number in proc pointer
-  types proc literal with return type (2)
  types proc literal with return type (2)
-  types proc literal with a type that was never instantiated
  types proc literal with a type that was never instantiated
+  disallows StaticArray in proc notation parameter type
  disallows StaticArray in proc notation parameter type
+  *doesn't* merge Proc that returns NoReturn with another one that returns something else (#9971)
  *doesn't* merge Proc that returns NoReturn with another one that returns something else (#9971)
+  allows metaclass in proc pointer
  allows metaclass in proc pointer
+  disallows Value in captured block
  disallows Value in captured block
+  disallows Reference in proc return types
  disallows Reference in proc return types
+  allows metaclass in proc notation parameter type
  allows metaclass in proc notation parameter type
+  has proc literal as restriction and errors if sizes are different
  has proc literal as restriction and errors if sizes are different
+  uses array argument of proc arg (4)
  uses array argument of proc arg (4)
+  errors when using local variable with proc argument name
  errors when using local variable with proc argument name
+  gets pointer to lib fun without specifying types
  gets pointer to lib fun without specifying types
+  disallows StaticArray in proc pointer
  disallows StaticArray in proc pointer
+  allows metaclass in procs
  allows metaclass in procs
+  allows metaclass in proc notation return type
  allows metaclass in proc notation return type
+  disallows Struct in captured block
  disallows Struct in captured block
+  disallows Struct in proc pointer
  disallows Struct in proc pointer
+  disallows Float in procs
  disallows Float in procs
   types a proc pointer with generic types
  types a proc pointer with generic types
+  disallows Reference in procs
  disallows Reference in procs
+  disallows Enum in captured block
  disallows Enum in captured block
+  disallows Enum in proc return types
  disallows Enum in proc return types
+  can assign proc that returns anything to proc that returns nil, with instance var (#3655)
  can assign proc that returns anything to proc that returns nil, with instance var (#3655)
+  allows new on proc type that is a lib alias
  allows new on proc type that is a lib alias
+  disallows Int in proc return types
  disallows Int in proc return types
+  says wrong return type in new on proc type
  says wrong return type in new on proc type
+  gives correct error message when proc return type is incorrect (#219)
  gives correct error message when proc return type is incorrect (#219)
+  errors when using macro as proc value (inside method) (#7465)
  errors when using macro as proc value (inside method) (#7465)
+  disallows casting a proc type to one accepting same size argument but different output
  disallows casting a proc type to one accepting same size argument but different output
+  disallows Object in captured block
  disallows Object in captured block
+  errors if inferred return type doesn't match return type restriction (1)
  errors if inferred return type doesn't match return type restriction (1)
+  can use @@cvar as pointer syntax receiver (#9239)
  can use @@cvar as pointer syntax receiver (#9239)
+  disallows Struct in procs
  disallows Struct in procs
+  disallows Proc in procs
  disallows Proc in procs
+  accesses T inside variadic generic, in proc notation
  accesses T inside variadic generic, in proc notation
+  allows invoking a function with a generic subtype (2)
  allows invoking a function with a generic subtype (2)
   disallows Class in proc notation parameter type
  disallows Class in proc notation parameter type
-  doesn't need to deduce type of block if return is void
  doesn't need to deduce type of block if return is void
+  allows passing function to LibC without specifying types, using a class method
  allows passing function to LibC without specifying types, using a class method
+  disallows Proc in proc return types
  disallows Proc in proc return types
+  uses array argument of proc arg (3)
  uses array argument of proc arg (3)
+  disallows Value in proc pointer
  disallows Value in proc pointer
+  disallows Enum in proc pointer
  disallows Enum in proc pointer
+  errors when using macro as proc value (top-level with obj) (#7465)
  errors when using macro as proc value (top-level with obj) (#7465)
+  disallows Number in proc notation return type
  disallows Number in proc notation return type
+  disallows Class in proc notation return type
  disallows Class in proc notation return type
+  disallows Pointer in proc notation return type
  disallows Pointer in proc notation return type
   disallows Enum in proc notation return type
  disallows Enum in proc notation return type
-  disallows Reference in captured block
  disallows Reference in captured block
-  disallows Struct in proc pointer
  disallows Struct in proc pointer
-  allows passing NoReturn type for any return type (2)
  allows passing NoReturn type for any return type (2)
+  accesses T and R
  accesses T and R
+  can pass Proc(T) to Proc(Nil) in type restriction (#8964)
  can pass Proc(T) to Proc(Nil) in type restriction (#8964)
+  disallows Float in proc return types
  disallows Float in proc return types
+  disallows Number in captured block
  disallows Number in captured block
+  types int proc literal
  types int proc literal
+  passes proc pointer as block with arguments
  passes proc pointer as block with arguments
+  disallows Enum in procs
  disallows Enum in procs
+  types int -> int proc call
  types int -> int proc call
+  disallows Class in proc return types
  disallows Class in proc return types
+  disallows Pointer in procs
  disallows Pointer in procs
+  disallows Tuple in captured block
  disallows Tuple in captured block
+  uses array argument of proc arg (2)
  uses array argument of proc arg (2)
+  allows passing virtual type including module to proc
  allows passing virtual type including module to proc
   ...
  ...
-  disallows Int in proc notation return type
  disallows Int in proc notation return type
-  disallows Proc in captured block
  disallows Proc in captured block
-  disallows Pointer in proc return types
  disallows Pointer in proc return types
-  has proc literal as restriction and errors if sizes are different
  has proc literal as restriction and errors if sizes are different
-  disallows Pointer in proc notation parameter type
  disallows Pointer in proc notation parameter type
-  allows passing NoReturn type for any return type, with Proc notation (#12126)
  allows passing NoReturn type for any return type, with Proc notation (#12126)
+  types proc type spec
  types proc type spec
+  disallows Int in procs
  disallows Int in procs
+  disallows Proc in proc pointer
  disallows Proc in proc pointer
+  allows passing function to LibC without specifying types
  allows passing function to LibC without specifying types
+  disallows Enum in proc notation parameter type
  disallows Enum in proc notation parameter type
+  allows metaclass in proc return types
  allows metaclass in proc return types
+  accesses T inside variadic generic
  accesses T inside variadic generic
+  allows passing NoReturn type for any return type (2)
  allows passing NoReturn type for any return type (2)
+  binds proc literal to arguments and body
  binds proc literal to arguments and body
+  disallows Float in captured block
  disallows Float in captured block
   disallows Number in proc return types
  disallows Number in proc return types
-  can pass Proc(X, T) to Proc(X, Nil) in type restriction (#8964)
  can pass Proc(X, T) to Proc(X, Nil) in type restriction (#8964)
-Code gen: named args
-  calls twice with different types
  calls twice with different types
-  calls new with named arg
  calls new with named arg
-  calls with named arg and other args
  calls with named arg and other args
-  uses named args in dispatch
  uses named args in dispatch
-  sends two regular arguments as named arguments in inverted position (1)
  sends two regular arguments as named arguments in inverted position (1)
-  calls with named arg
  calls with named arg
-  overloads based on required named args, with restrictions
  overloads based on required named args, with restrictions
-  sends two regular arguments as named arguments in inverted position (2)
  sends two regular arguments as named arguments in inverted position (2)
-  calls with named arg as object method
  calls with named arg as object method
-  overloads based on required named args
  overloads based on required named args
-  sends two regular arguments as named arguments
  sends two regular arguments as named arguments
-  uses bare splat in new (2)
  uses bare splat in new (2)
-  sends one regular argument as named argument
  sends one regular argument as named argument
-Semantic: cast
-  disallows casting int to pointer
  disallows casting int to pointer
-  disallows casting pointer to fun
  disallows casting pointer to fun
-  doesn't cast to unbound generic type (as) (#5927)
  doesn't cast to unbound generic type (as) (#5927)
-  doesn't crash with typeof no-type (#7441)
  doesn't crash with typeof no-type (#7441)
-  casts to same type is ok
  casts to same type is ok
-  doesn't eagerly try to check cast type (#12268)
  doesn't eagerly try to check cast type (#12268)
-  casts to incompatible type gives error
  casts to incompatible type gives error
-  disallows casting to Class
  disallows casting to Class
-  allows casting NoReturn to any type (#2132)
  allows casting NoReturn to any type (#2132)
-  casts to target type even if can't infer casted value type (obsolete)
  casts to target type even if can't infer casted value type (obsolete)
-  disallows casting fun to pointer
  disallows casting fun to pointer
-  casts from pointer to generic class gives error
  casts from pointer to generic class gives error
-  should error if can't cast even if not instantiated
  should error if can't cast even if not instantiated
-  casts to module
  casts to module
-  errors if casting nil to Object inside typeof (#2403)
  errors if casting nil to Object inside typeof (#2403)
-  can cast to metaclass (bug)
  can cast to metaclass (bug)
-  casts to base class making it virtual (2)
  casts to base class making it virtual (2)
-  doesn't error if casting to a generic type
  doesn't error if casting to a generic type
-  casts from union to compatible union
  casts from union to compatible union
-  casts to compatible type and use it
  casts to compatible type and use it
-  errors on cast inside a call that can't be instantiated
  errors on cast inside a call that can't be instantiated
-  doesn't cast to unbound generic type (as?) (#5927)
  doesn't cast to unbound generic type (as?) (#5927)
-  disallows casting to Object (#815)
  disallows casting to Object (#815)
-  casts uninstantiated generic class to itself (#10882)
  casts uninstantiated generic class to itself (#10882)
-  doesn't allow upcast of generic type var (#996)
  doesn't allow upcast of generic type var (#996)
-  casts pointer of one type to another type
  casts pointer of one type to another type
-  allows casting reference union to void pointer
  allows casting reference union to void pointer
-  allows casting object to void pointer
  allows casting object to void pointer
-  considers else to be unreachable (#9658)
  considers else to be unreachable (#9658)
-  can cast from Void* to virtual type (#3014)
  can cast from Void* to virtual type (#3014)
-  disallows casting to Reference
  disallows casting to Reference
-  casts to generic virtual type
  casts to generic virtual type
-  casts pointer to another type
  casts pointer to another type
-  can cast to metaclass (2) (#11121)
  can cast to metaclass (2) (#11121)
-  casts from union to incompatible union gives error
  casts from union to incompatible union gives error
-  casts to bigger union
  casts to bigger union
-  casts to base class making it virtual (1)
  casts to base class making it virtual (1)
-  doesn't cast to virtual primitive (bug)
  doesn't cast to virtual primitive (bug)
+  disallows casting a proc type to one accepting more arguments
  disallows casting a proc type to one accepting more arguments
+  disallows Value in proc return types
  disallows Value in proc return types
+  allows new on proc type
  allows new on proc type
+  types Proc(*T, Void) as Proc(*T, Nil)
  types Proc(*T, Void) as Proc(*T, Nil)
+  allows passing NoReturn type for any return type (1)
  allows passing NoReturn type for any return type (1)
+  accesses T inside variadic generic (2)
  accesses T inside variadic generic (2)
+  disallows Int in proc notation return type
  disallows Int in proc notation return type
+  disallows Class in proc pointer
  disallows Class in proc pointer
+  has proc literal as restriction and works
  has proc literal as restriction and works
+  can use @ivar as pointer syntax receiver (#9239)
  can use @ivar as pointer syntax receiver (#9239)
+  allows metaclass in captured block
  allows metaclass in captured block
+  allows using Proc as restriction (2)
  allows using Proc as restriction (2)
+  allows invoking a function with a generic subtype (1)
  allows invoking a function with a generic subtype (1)
+  disallows Pointer in proc pointer
  disallows Pointer in proc pointer
+Normalize: hash literal
+  hoists complex element expressions, hash-like generic
  hoists complex element expressions, hash-like generic
+  normalizes empty with of
  normalizes empty with of
+  hoists complex element expressions, hash-like
  hoists complex element expressions, hash-like
+  normalizes non-empty without of
  normalizes non-empty without of
+  normalizes non-empty with of
  normalizes non-empty with of
+  hoists complex element expressions
  hoists complex element expressions
 Crystal::Repl::Interpreter
-  typeof
-    interprets typeof virtual type
    interprets typeof virtual type
-    interprets typeof metaclass type
    interprets typeof metaclass type
-    interprets typeof instance type
    interprets typeof instance type
-Normalize: regex literal
-  StringLiteral
-    expands to const
    expands to const
-    simple
    simple
-  StringInterpolation
-    simple
    simple
-  options
-    imx
    imx
-    x
    x
-    im
    im
-    empty
    empty
-    i
    i
+  closures
+    closures struct and calls method on it
    closures struct and calls method on it
+    does closure without args that captures and modifies one local variable
    does closure without args that captures and modifies one local variable
+    does closure inside proc, capture proc argument
    does closure inside proc, capture proc argument
+    sets ivar of self closured struct (#12341)
    sets ivar of self closured struct (#12341)
+    closures self in proc literal (implicit self)
    closures self in proc literal (implicit self)
+    does closure inside proc
    does closure inside proc
+    does nested closure inside captured blocks
    does nested closure inside captured blocks
+    does nested closure inside methods and blocks
    does nested closure inside methods and blocks
+    does closure with pointerof local var
    does closure with pointerof local var
+    closures self in proc literal
    closures self in proc literal
+    does nested closure inside proc
    does nested closure inside proc
+    does closure inside block
    does closure inside block
+    closures self and modifies instance var
    closures self and modifies instance var
+    does closure inside const
    does closure inside const
+    gets ivar of self closured struct (#12341)
    gets ivar of self closured struct (#12341)
+    does closure without args that captures and modifies two local variables
    does closure without args that captures and modifies two local variables
+    closures def arguments
    closures def arguments
+    does next inside captured block (#12226)
    does next inside captured block (#12226)
+    closures block args after 8 bytes (the closure var)
    closures block args after 8 bytes (the closure var)
+    does closure inside block, capture block arg
    does closure inside block, capture block arg
+    reads self closured struct (#12341)
    reads self closured struct (#12341)
+    does closure with two args that captures and modifies two local variables
    does closure with two args that captures and modifies two local variables
+    does closure inside def
    does closure inside def
+    does closure inside class variable initializer
    does closure inside class variable initializer
+    passes closured struct instance var as self
    passes closured struct instance var as self
+    closures closured block arg
    closures closured block arg
+    does closure and accesses it inside block
    does closure and accesses it inside block
+    doesn't mix local vars with closured vars
    doesn't mix local vars with closured vars
+Code gen: automatic cast
+  doesn't autocast number on union (#8655)
  doesn't autocast number on union (#8655)
+  casts Symbol to Enum in ivar assignment
  casts Symbol to Enum in ivar assignment
+  does multidispatch with automatic casting (1) (#8217)
  does multidispatch with automatic casting (1) (#8217)
+  casts literal float (Float32 -> Float64)
  casts literal float (Float32 -> Float64)
+  casts Int32 -> Int64 in arg restriction
  casts Int32 -> Int64 in arg restriction
+  casts literal float (Float64 -> Float32)
  casts literal float (Float64 -> Float32)
+  casts literal integer (Int32 -> Int64)
  casts literal integer (Int32 -> Int64)
+  casts literal integer (Int64 -> Int32, ok)
  casts literal integer (Int64 -> Int32, ok)
+  casts Symbol to Enum in ivar type declaration
  casts Symbol to Enum in ivar type declaration
+  casts Int32 to Int64 in ivar type declaration
  casts Int32 to Int64 in ivar type declaration
+  casts Int32 to Int64 in cvar type declaration
  casts Int32 to Int64 in cvar type declaration
+  casts literal integer (Int32 -> Float32)
  casts literal integer (Int32 -> Float32)
+  does multidispatch with automatic casting (3)
  does multidispatch with automatic casting (3)
+  casts Int32 to Int64 in lvar assignment
  casts Int32 to Int64 in lvar assignment
+  casts literal integer (Int32 -> Float64)
  casts literal integer (Int32 -> Float64)
+  casts Int32 to Int64 in ivar assignment
  casts Int32 to Int64 in ivar assignment
+  casts Int32 to Int64 in ivar type declaration in generic
  casts Int32 to Int64 in ivar type declaration in generic
+  casts integer variable to larger type (#9565)
  casts integer variable to larger type (#9565)
+  casts symbol literal to enum
  casts symbol literal to enum
+  does multidispatch with automatic casting (2) (#8217)
  does multidispatch with automatic casting (2) (#8217)
+  casts Int32 to Int64 in cvar assignment
  casts Int32 to Int64 in cvar assignment
+Codegen: special vars
+  allows with primitive
  allows with primitive
+  codegens in block with nested block  codegens in block with nested block  codegens in block with nested block  codegens in block with nested block  codegens in block with nested block  codegens in block with nested block  codegens in block with nested block  codegens in block with nested block  codegens in block with nested block
  codegens in block with nested block
+  codegens after block 2
  codegens after block 2
+  codegens with default argument
  codegens with default argument
+  allows with struct
  allows with struct
+  codegens $?
  codegens $?
+  preserves special vars in macro expansion with call with default arguments (#824)
  preserves special vars in macro expansion with call with default arguments (#824)
+  codegens $? with nilable (2)  codegens $? with nilable (2)  codegens $? with nilable (2)  codegens $? with nilable (2)  codegens $? with nilable (2)  codegens $? with nilable (2)  codegens $? with nilable (2)  codegens $? with nilable (2)  codegens $? with nilable (2)
  codegens $? with nilable (2)
+  codegens in block  codegens in block  codegens in block  codegens in block  codegens in block  codegens in block  codegens in block  codegens in block  codegens in block
  codegens in block
+  works lazily  works lazily  works lazily  works lazily  works lazily  works lazily  works lazily  works lazily  works lazily
  works lazily
+  codegens $~ with nilable (1)  codegens $~ with nilable (1)  codegens $~ with nilable (1)  codegens $~ with nilable (1)  codegens $~ with nilable (1)  codegens $~ with nilable (1)  codegens $~ with nilable (1)  codegens $~ with nilable (1)  codegens $~ with nilable (1)
  codegens $~ with nilable (1)
+  codegens $~
  codegens $~
+  codegens after block  codegens after block  codegens after block  codegens after block  codegens after block  codegens after block  codegens after block  codegens after block  codegens after block
  codegens after block
+  preserves special vars if initialized inside block (#2194)
  preserves special vars if initialized inside block (#2194)
+  codegens $? with nilable (1)  codegens $? with nilable (1)  codegens $? with nilable (1)  codegens $? with nilable (1)  codegens $? with nilable (1)  codegens $? with nilable (1)  codegens $? with nilable (1)  codegens $? with nilable (1)  codegens $? with nilable (1)
  codegens $? with nilable (1)
+  codegens $~ two levels
  codegens $~ two levels
+  codegens $~ with nilable (2)  codegens $~ with nilable (2)  codegens $~ with nilable (2)  codegens $~ with nilable (2)  codegens $~ with nilable (2)  codegens $~ with nilable (2)  codegens $~ with nilable (2)  codegens $~ with nilable (2)  codegens $~ with nilable (2)
  codegens $~ with nilable (2)
+Code gen: op assign
+  evaluates exps once (#3398)
  evaluates exps once (#3398)
+  evaluates exps once, [] (#3398)
  evaluates exps once, [] (#3398)
+Semantic: union
+  types union when both obj and arg are union
  types union when both obj and arg are union
+  errors if instantiates union
  errors if instantiates union
+  types union
  types union
+  can reopen Union
  can reopen Union
+  commutativity
+    generic module instance v.s. extending generic module instance metaclass
    generic module instance v.s. extending generic module instance metaclass
+    uninstantiated generic super-metaclass v.s. uninstantiated generic sub-metaclass
    uninstantiated generic super-metaclass v.s. uninstantiated generic sub-metaclass
+    module v.s. including module
    module v.s. including module
+    generic module instance v.s. including generic module instance
    generic module instance v.s. including generic module instance
+    generic module instance v.s. including module
    generic module instance v.s. including module
+    module v.s. including generic module instance
    module v.s. including generic module instance
+    virtual metaclass v.s. generic subclass instance metaclass
    virtual metaclass v.s. generic subclass instance metaclass
+    superclass v.s. uninstantiated generic subclass
    superclass v.s. uninstantiated generic subclass
+    module v.s. extending generic module instance metaclass
    module v.s. extending generic module instance metaclass
+  merges types in the same hierarchy with Union
  merges types in the same hierarchy with Union
+  doesn't crash with union of no-types (#5805)
  doesn't crash with union of no-types (#5805)
+  doesn't run virtual lookup on unbound unions (#9173)
  doesn't run virtual lookup on unbound unions (#9173)
+  looks up type in union type with free var
  looks up type in union type with free var
+  can iterate T
  can iterate T
+  can use Union in type restriction (#2988)
  can use Union in type restriction (#2988)
+  finds method in Object
  finds method in Object
+  types union when arg is union
  types union when arg is union
+  doesn't virtualize union elements (#7814)
  doesn't virtualize union elements (#7814)
+  treats void as nil in union
  treats void as nil in union
+  supports macro if inside union
  supports macro if inside union
+  types union when obj is union
  types union when obj is union
+  types union of classes
  types union of classes
+  assigns to union and keeps new union type in call
  assigns to union and keeps new union type in call
+  can reopen Union and access T
  can reopen Union and access T
+  finds method in Value
  finds method in Value
+  types union of same type
  types union of same type
+Codegen: until
+  codegens until
  codegens until
+context
+  does includes self on classes
  does includes self on classes
+  can get context of empty def
  can get context of empty def
+  consider different instances of def
  consider different instances of def
+  can get context in generic class
  can get context in generic class
+  includes last call
  includes last call
+  can get context inside initialize
  can get context inside initialize
+  can get context in file private method
  can get context in file private method
+  does includes regex special variables
  does includes regex special variables
+  use type filters from if var
  use type filters from if var
+  can get context of nested yielded block
  can get context of nested yielded block
+  includes top level vars
  includes top level vars
+  can get context in file private module
  can get context in file private module
+  can handle union types
  can handle union types
+  can get context inside class methods
  can get context inside class methods
+  does not includes temp variables
  does not includes temp variables
+  includes args
  includes args
+  includes assignments
  includes assignments
+  can get context of empty yielded block
  can get context of empty yielded block
+  can get context inside a module
  can get context inside a module
+  includes block args
  includes block args
+  can get context in contained class' class method
  can get context in contained class' class method
+  use type filters from is_a?
  use type filters from is_a?
+  can get context of yielded block
  can get context of yielded block
+  can display text output
  can display text output
+  does includes args, instance vars, local variables and expressions on instance methods
  does includes args, instance vars, local variables and expressions on instance methods
+  can't get context from uncalled method
  can't get context from uncalled method
+  can display json output
  can display json output
+Crystal::Codegen::Target
+  normalizes triples
  normalizes triples
+  parses incomplete triples
  parses incomplete triples
+  parses freebsd version
  parses freebsd version
+Semantic: nilable cast
+  doesn't introduce type filter for nilable cast object (#12661)
  doesn't introduce type filter for nilable cast object (#12661)
+  types as? with NoReturn
  types as? with NoReturn
+  casts to module
  casts to module
+  doesn't crash with typeof no-type (#7441)
  doesn't crash with typeof no-type (#7441)
+  types as?
  types as?
+  types as? with union
  types as? with union
+  types as? with nil
  types as? with nil
+  does upcast
  does upcast
+Semantic: special vars
+  infers $~
  infers $~
+  infers when assigning inside block
  infers when assigning inside block
+  infers $?
  infers $?
+  infers in block
  infers in block
+  types $~ when not defined as no return
  types $~ when not defined as no return
+  infers after block
  infers after block
+  types $~ when not defined as no return (2)
  types $~ when not defined as no return (2)
+  infers in block with nested block
  infers in block with nested block
+  errors if assigning $? at top level
  errors if assigning $? at top level
+  errors if assigning $~ at top level
  errors if assigning $~ at top level
+  types $? when not defined as no return
  types $? when not defined as no return
+  types $? when not defined as no return (2)
  types $? when not defined as no return (2)
+Crystal::CrystalPath
+  finds "./test_folder/*"
  finds "./test_folder/*"
+  finds "test_files"
  finds "test_files"
+  doesn't finds "./crystal_path_spec.cr"
  doesn't finds "./crystal_path_spec.cr"
+  finds "foo.cr"
  finds "foo.cr"
+  finds "../test_folder"
  finds "../test_folder"
+  finds "./test_folder/file_three.cr"
  finds "./test_folder/file_three.cr"
+  doesn't finds "./crystal_path_spec"
  doesn't finds "./crystal_path_spec"
+  finds "test_files/file_one"
  finds "test_files/file_one"
+  doesn't finds "../crystal_path/test_files/file_one"
  doesn't finds "../crystal_path/test_files/file_one"
+  includes 'lib' by default
  includes 'lib' by default
+  doesn't finds "test_files/missing_file.cr"
  doesn't finds "test_files/missing_file.cr"
+  doesn't finds "file_two.cr"
  doesn't finds "file_two.cr"
+  .expand_paths
  .expand_paths
+  finds "test_files/**"
  finds "test_files/**"
+  finds "other_test_files"
  finds "other_test_files"
+  finds "crystal_path_spec"
  finds "crystal_path_spec"
+  finds "test_files/file_one"
  finds "test_files/file_one"
+  finds "test_files/file_one.cr"
  finds "test_files/file_one.cr"
+  #each_file_expansion
+    foo/bar
    foo/bar
+    ./foo
    ./foo
+    foo.cr
    foo.cr
+    foo/bar/baz
    foo/bar/baz
+    ./foo/bar
    ./foo/bar
+    ./foo/bar/baz
    ./foo/bar/baz
+    foo.cr/bar.cr
    foo.cr/bar.cr
+    foo.cr/bar
    foo.cr/bar
+    foo
    foo
+    ./foo.cr
    ./foo.cr
+  finds "./file_two.cr"
  finds "./file_two.cr"
+  finds "test_files/file_three"
  finds "test_files/file_three"
+  doesn't finds "build/reproducible-path/crystal-1.14.0+dfsg/spec/compiler/crystal_path/crystal_path_spec.cr"
  doesn't finds "build/reproducible-path/crystal-1.14.0+dfsg/spec/compiler/crystal_path/crystal_path_spec.cr"
+  finds "test_files/file_four"
  finds "test_files/file_four"
+  finds "test_files/yet_another"
  finds "test_files/yet_another"
+  overrides path with environment variable
  overrides path with environment variable
+  doesn't finds "test_folder/*"
  doesn't finds "test_folder/*"
+  doesn't finds "test_folder/file_three.cr"
  doesn't finds "test_folder/file_three.cr"
+  finds "test_files/*"
  finds "test_files/*"
+  doesn't finds "../../src/file_three"
  doesn't finds "../../src/file_three"
+  finds "../**"
  finds "../**"
+  finds "test_files/another"
  finds "test_files/another"
+Semantic: did you mean
+  doesn't suggest for operator
  doesn't suggest for operator
+  suggests a better alternative to logical operators (#2715)
  suggests a better alternative to logical operators (#2715)
+  suggests for class variable
  suggests for class variable
+  suggest that there might be a typo for an initialize method with overload
  suggest that there might be a typo for an initialize method with overload
+  says did you mean for instance var in subclass
  says did you mean for instance var in subclass
+  says did you mean for one mistake in short word in instance method
  says did you mean for one mistake in short word in instance method
+  says did you mean for nested class
  says did you mean for nested class
+  says did you mean for variable
  says did you mean for variable
+  says did you mean for class
  says did you mean for class
+  suggest that there might be a typo for an initialize method
  suggest that there might be a typo for an initialize method
+  says did you mean for global method without parenthesis
  says did you mean for global method without parenthesis
+  says did you mean for two mistakes in long word in instance method
  says did you mean for two mistakes in long word in instance method
+  says did you mean for named argument
  says did you mean for named argument
+  says did you mean finds most similar in type
  says did you mean finds most similar in type
+  says did you mean for instance var
  says did you mean for instance var
+  doesn't suggest when declaring var inside macro (#466)
  doesn't suggest when declaring var inside macro (#466)
+  doesn't suggest when declaring var with suffix if and using it (#946)
  doesn't suggest when declaring var with suffix if and using it (#946)
+  says did you mean for global method with parenthesis
  says did you mean for global method with parenthesis
+  says did you mean finds most similar in def
  says did you mean finds most similar in def
+  suggest that there might be a typo for an initialize method in inherited class
  suggest that there might be a typo for an initialize method in inherited class
+  says did you mean in instance var declaration
  says did you mean in instance var declaration
 Semantic: instance var
-  doesn't error when using generic in generic type because guessed elsewhere
  doesn't error when using generic in generic type because guessed elsewhere
-  errors if declaring var in Union(*T)
  errors if declaring var in Union(*T)
-  doesn't error if not calling super but initializing all variables
  doesn't error if not calling super but initializing all variables
-  declares instance var in module, inherits to type recursively
  declares instance var in module, inherits to type recursively
-  doesn't error if not initializing variables but calling super in parent parent
  doesn't error if not initializing variables but calling super in parent parent
-  types generic instance as virtual type if generic type has subclasses (#3805)
  types generic instance as virtual type if generic type has subclasses (#3805)
-  errors if not initializing super variable in generic
  errors if not initializing super variable in generic
-  guesses from splat (2) (#3149)
  guesses from splat (2) (#3149)
-  guesses from array literal with of, with subclass
  guesses from array literal with of, with subclass
-  declares instance var of generic type, with generic type
  declares instance var of generic type, with generic type
-  doesn't error when redeclaring subclass variable with the same type
  doesn't error when redeclaring subclass variable with the same type
-  doesn't duplicate instance var in subclass
  doesn't duplicate instance var in subclass
-  infers type from &&
  infers type from &&
-  infers type from array literal with of
  infers type from array literal with of
-  infers from Pointer.malloc
  infers from Pointer.malloc
-  infers from assign to local var in generic type (#2467)
  infers from assign to local var in generic type (#2467)
-  errors if declaring var in Enum
  errors if declaring var in Enum
-  infers type from array literal with of metaclass
  infers type from array literal with of metaclass
-  solves instance var initializer in metaclass context (#5876)
  solves instance var initializer in metaclass context (#5876)
-  infers type from lib out (1)
  infers type from lib out (1)
-  doesn't infer unbound generic type on non-generic call (#6390)
  doesn't infer unbound generic type on non-generic call (#6390)
-  infers type from argument with restriction, in generic
  infers type from argument with restriction, in generic
-  infers from Pointer.null
  infers from Pointer.null
+  doesn't consider var as nilable if conditionally assigned inside initialize, but has initializer (#3669)
  doesn't consider var as nilable if conditionally assigned inside initialize, but has initializer (#3669)
+  infers type from custom generic hash literal
  infers type from custom generic hash literal
+  transfers initializer from generic module to class
  transfers initializer from generic module to class
+  infers type from char literal
  infers type from char literal
+  is more permissive with macro def initialize, other initialize
  is more permissive with macro def initialize, other initialize
+  infers from class method that has type annotation, with multiple overloads matching, all with the same type
  infers from class method that has type annotation, with multiple overloads matching, all with the same type
+  declares instance var of generic type
  declares instance var of generic type
+  doesn't infer type to be nilable if using self.class in call in assign
  doesn't infer type to be nilable if using self.class in call in assign
+  declares instance var of generic module (2)
  declares instance var of generic module (2)
+  doesn't complain in second part of #2575
  doesn't complain in second part of #2575
+  obeys super module initialize (#456)
  obeys super module initialize (#456)
   errors if not initializing super variables
  errors if not initializing super variables
-  infers type from regex literal with interpolation
  infers type from regex literal with interpolation
-  infers type from all call matches
  infers type from all call matches
-  infers type for generic class, with lib call
  infers type for generic class, with lib call
-  infers type from custom hash literal
  infers type from custom hash literal
-  can't infer type from initializer in generic module type
  can't infer type from initializer in generic module type
-  infers type from named tuple literal
  infers type from named tuple literal
-  infers nilable instance var of generic type
  infers nilable instance var of generic type
-  guesses virtual hash type (2) (#5342)
  guesses virtual hash type (2) (#5342)
-  errors if not initialized in all initialize
  errors if not initialized in all initialize
-  errors if adds instance variable to Object via guess via included module
  errors if adds instance variable to Object via guess via included module
-  considers var as assigned in multi-assign
  considers var as assigned in multi-assign
-  infers type from custom array literal in generic
  infers type from custom array literal in generic
-  can guess the type from double-splat argument with double-splatted type variable
  can guess the type from double-splat argument with double-splatted type variable
-  infers from method on integer literal, with type annotation
  infers from method on integer literal, with type annotation
+  infers type from tuple literal
  infers type from tuple literal
+  infers type to be nilable if self is used before assigning to a variable
  infers type to be nilable if self is used before assigning to a variable
   infers type from two literals
  infers type from two literals
-  infers type from as
  infers type from as
-  infers from another instance var
  infers from another instance var
-  doesn't infer unbound generic type on generic method called from generic's subclass
  doesn't infer unbound generic type on generic method called from generic's subclass
-  infers nilable instance var of generic module
  infers nilable instance var of generic module
-  infers type for generic class, with begin
  infers type for generic class, with begin
-  infers type from !
  infers type from !
-  doesn't check call of non-self instance (#4830)
  doesn't check call of non-self instance (#4830)
-  infers type from begin
  infers type from begin
+  declares instance var with initial value
  declares instance var with initial value
+  infers from class method that refers to constant
  infers from class method that refers to constant
+  infers type from block argument without restriction
  infers type from block argument without restriction
+  infers type from responds_to?
  infers type from responds_to?
+  errors if declaring instance var and turns out to be nilable, in generic module type in generic type
  errors if declaring instance var and turns out to be nilable, in generic module type in generic type
+  doesn't infer unbound generic type on non-generic call (#6390)
  doesn't infer unbound generic type on non-generic call (#6390)
+  doesn't consider instance var as nilable if assigned before self access (#4981)
  doesn't consider instance var as nilable if assigned before self access (#4981)
+  errors if declaring instance variable in module included in Object
  errors if declaring instance variable in module included in Object
+  inferrs Proc(Void) to Proc(Nil)
  inferrs Proc(Void) to Proc(Nil)
+  declares as named tuple
  declares as named tuple
+  cannot guess the type from double-splat argument with not double-splatted type
  cannot guess the type from double-splat argument with not double-splatted type
+  doesn't complain if declared type is recursive alias that's nilable
  doesn't complain if declared type is recursive alias that's nilable
+  errors if declaring var in Int32
  errors if declaring var in Int32
   infers from new with return type
  infers from new with return type
-  declares instance var of generic type, with virtual metaclass
  declares instance var of generic type, with virtual metaclass
-  doesn't solve instance var initializer in instance context (1) (#5876)
  doesn't solve instance var initializer in instance context (1) (#5876)
-  infers type for generic class, with if
  infers type for generic class, with if
-  guesses inside macro expression
  guesses inside macro expression
-  infers type for generic class, with literal
  infers type for generic class, with literal
-  infers type from path that is a constant
  infers type from path that is a constant
-  declares instance var of generic module
  declares instance var of generic module
-  infers type from case
  infers type from case
-  errors if declaring var in Proc(*T, R)
  errors if declaring var in Proc(*T, R)
-  errors if declaring generic type without type vars
  errors if declaring generic type without type vars
-  can guess the type from double-splat argument with double-splatted type
  can guess the type from double-splat argument with double-splatted type
-  can guess the type from splat argument with splatted type variable
  can guess the type from splat argument with splatted type variable
-  infers type to be nilable if self is used in same assign
  infers type to be nilable if self is used in same assign
-  doesn't infer from class method with multiple statements and return, on non-easy return
  doesn't infer from class method with multiple statements and return, on non-easy return
-  guesses from as.(typeof(...))
  guesses from as.(typeof(...))
-  shouldn't error when accessing instance var in initialized that's always initialized (#2953)
  shouldn't error when accessing instance var in initialized that's always initialized (#2953)
-  infers type from hash literal in generic type
  infers type from hash literal in generic type
-  declares instance var of generic type, with metaclass
  declares instance var of generic type, with metaclass
-  errors if declaring var in Int
  errors if declaring var in Int
-  doesn't error if declaring instance var and doesn't out to be nilable, in generic module type
  doesn't error if declaring instance var and doesn't out to be nilable, in generic module type
-  cannot guess the type from splat argument with not splatted type
  cannot guess the type from splat argument with not splatted type
-  infers type from instance_sizeof
  infers type from instance_sizeof
-  doesn't solve instance var initializer in instance context (2) (#5876)
  doesn't solve instance var initializer in instance context (2) (#5876)
-  errors if declaring var in Float
  errors if declaring var in Float
-  infers type by removing nil from || left side
  infers type by removing nil from || left side
-  declares instance var of generic type, with tuple
  declares instance var of generic type, with tuple
-  doesn't error if not initializing variables but calling previous_def (#3210)
  doesn't error if not initializing variables but calling previous_def (#3210)
-  looks up return type restriction in defining type, not instantiated type (#11961)
  looks up return type restriction in defining type, not instantiated type (#11961)
-  ignores redefined initialize (#456)
  ignores redefined initialize (#456)
-  infers type for generic class, with T.new and literal
  infers type for generic class, with T.new and literal
-  doesn't crash when inferring from new without matches (#2538)
  doesn't crash when inferring from new without matches (#2538)
-  doesn't error if not initializing variables but calling super
  doesn't error if not initializing variables but calling super
-  infers from new with return type in generic type
  infers from new with return type in generic type
   doesn't infer type to be nilable if using self.class
  doesn't infer type to be nilable if using self.class
-  allows nil instance var because it's a generic type
  allows nil instance var because it's a generic type
-  guesses virtual array type (3) (#5342)
  guesses virtual array type (3) (#5342)
-  infers type from assign (1)
  infers type from assign (1)
-  doesn't error if calling initialize from another initialize (2)
  doesn't error if calling initialize from another initialize (2)
-  errors when typing an instance variable inside a method
  errors when typing an instance variable inside a method
-  infers type for generic class, with T.new
  infers type for generic class, with T.new
-  declares instance var
  declares instance var
-  declares instance var with self, on generic
  declares instance var with self, on generic
-  doesn't infer for subclass if assigns another type (1)
  doesn't infer for subclass if assigns another type (1)
-  infers type for generic class, with case
  infers type for generic class, with case
-  infers type from array literal in generic type
  infers type from array literal in generic type
-  can't infer type from initializer
  can't infer type from initializer
+  infers type for non-generic class, with assign
  infers type for non-generic class, with assign
+  errors if declaring instance var and turns out to be nilable, in generic module type
  errors if declaring instance var and turns out to be nilable, in generic module type
+  doesn't crash on recursive method call
  doesn't crash on recursive method call
   infers from another instance var with type declaration
  infers from another instance var with type declaration
-  infers type from assign (2)
  infers type from assign (2)
-  errors if declaring var in Int32
  errors if declaring var in Int32
-  doesn't error when using generic because guessed elsewhere
  doesn't error when using generic because guessed elsewhere
-  guesses virtual array type (3) (#5342)
  guesses virtual array type (3) (#5342)
-  infers type from lib variable
  infers type from lib variable
-  doesn't infer generic type without type argument inside generic
  doesn't infer generic type without type argument inside generic
-  uses virtual types in fun
  uses virtual types in fun
-  doesn't error if uses typeof(@var)
  doesn't error if uses typeof(@var)
-  errors if declaring var in Value
  errors if declaring var in Value
-  errors if declaring var in Number
  errors if declaring var in Number
+  doesn't check call of non-self instance (#4830)
  doesn't check call of non-self instance (#4830)
+  infers type for generic class, with assign (1)
  infers type for generic class, with assign (1)
   infers type from hash literal from elements
  infers type from hash literal from elements
-  doesn't error if not initializing variables but calling super for module
  doesn't error if not initializing variables but calling super for module
-  doesn't error if calling initialize from another initialize (1)
  doesn't error if calling initialize from another initialize (1)
-  infers type from hash literal with literals in generic type
  infers type from hash literal with literals in generic type
+  infers type for generic module
  infers type for generic module
+  doesn't error when using generic because guessed elsewhere
  doesn't error when using generic because guessed elsewhere
+  infers type from regex literal with interpolation
  infers type from regex literal with interpolation
+  guesses inside macro expression
  guesses inside macro expression
+  infer from class method where new is redefined
  infer from class method where new is redefined
+  declares instance var with initial value, with subclass
  declares instance var with initial value, with subclass
+  infers type for generic class, with if
  infers type for generic class, with if
+  infers type from !
  infers type from !
+  infers from class method that has number literal
  infers from class method that has number literal
+  can't infer type from initializer in generic module type
  can't infer type from initializer in generic module type
+  says can't infer (#2536)
  says can't infer (#2536)
+  errors if declaring var in Float
  errors if declaring var in Float
+  infers type from array literal with literals in generic type
  infers type from array literal with literals in generic type
+  declares instance var of generic module from non-generic module
  declares instance var of generic module from non-generic module
   declares instance var of generic class after reopen
  declares instance var of generic class after reopen
-  errors when assigning instance variable at top level block
  errors when assigning instance variable at top level block
-  guesses virtual hash type (1) (#5342)
  guesses virtual hash type (1) (#5342)
-  infers from class method that has type annotation, in generic class
  infers from class method that has type annotation, in generic class
-  doesn't error if initializes via super in macro def
  doesn't error if initializes via super in macro def
+  infers type from lib variable
  infers type from lib variable
   errors when using Class in generic type
  errors when using Class in generic type
-  errors if declaring instance variable in module included in Object
  errors if declaring instance variable in module included in Object
-  doesn't error if not initialized in macro def but outside it
  doesn't error if not initialized in macro def but outside it
-  can't infer type of generic method that returns self (#5383)
  can't infer type of generic method that returns self (#5383)
-  infers type from included module, outside def
  infers type from included module, outside def
-  infers type to be nilable if self is used before assigning to a variable
  infers type to be nilable if self is used before assigning to a variable
-  infers type to be nilable if not initialized
  infers type to be nilable if not initialized
-  is more permissive with macro def initialize
  is more permissive with macro def initialize
-  infers type for non-generic class, with assign
  infers type for non-generic class, with assign
-  declares instance var of generic type, with splat
  declares instance var of generic type, with splat
-  infers type from new expression
  infers type from new expression
-  infers type in multi assign
  infers type in multi assign
-  says can't infer type if only nil was assigned
  says can't infer type if only nil was assigned
-  infers type from custom hash literal in generic
  infers type from custom hash literal in generic
-  cannot guess type from argument assigned in body
  cannot guess type from argument assigned in body
-  inferrs Proc(Void) to Proc(Nil)
  inferrs Proc(Void) to Proc(Nil)
+  errors if declaring var in Reference
  errors if declaring var in Reference
+  is more permissive with macro def initialize, bug with named args
  is more permissive with macro def initialize, bug with named args
+  guesses from array literal with of, with subclass
  guesses from array literal with of, with subclass
+  uses virtual types in fun
  uses virtual types in fun
+  infers type from ||=
  infers type from ||=
+  infers type from custom generic array literal
  infers type from custom generic array literal
+  infers type from regex literal
  infers type from regex literal
   doesn't error if not initializing variables but calling previous_def (2) (#3210)
  doesn't error if not initializing variables but calling previous_def (2) (#3210)
-  doesn't infer type from redefined method
  doesn't infer type from redefined method
-  infers type to be non-nilable if initialized in all initialize
  infers type to be non-nilable if initialized in all initialize
-  infers from Pointer.null in generic type
  infers from Pointer.null in generic type
+  infers from Pointer.malloc
  infers from Pointer.malloc
+  doesn't crash when inferring from new without matches (#2538)
  doesn't crash when inferring from new without matches (#2538)
+  infers type from assign (2)
  infers type from assign (2)
+  infers type from symbol literal
  infers type from symbol literal
+  infers type from hash literal with of
  infers type from hash literal with of
+  infers type from custom array literal
  infers type from custom array literal
+  infers type from bool literal
  infers type from bool literal
+  infers type from lib out (1)
  infers type from lib out (1)
+  infers type in multi assign
  infers type in multi assign
+  errors if declaring generic type without type vars
  errors if declaring generic type without type vars
+  doesn't error when redeclaring subclass variable with the same type
  doesn't error when redeclaring subclass variable with the same type
+  infers from another instance var
  infers from another instance var
+  doesn't solve instance var initializer in instance context (2) (#5876)
  doesn't solve instance var initializer in instance context (2) (#5876)
+  can type ivar from class inherited by generic class (#5281)
  can type ivar from class inherited by generic class (#5281)
+  errors if declaring var in Value
  errors if declaring var in Value
+  guesses from splat (2) (#3149)
  guesses from splat (2) (#3149)
   can't infer type from initializer in non-generic module
  can't infer type from initializer in non-generic module
-  infers from new with return type returning generic
  infers from new with return type returning generic
-  accepts overriding inherited instance variable with compatible type
  accepts overriding inherited instance variable with compatible type
-  infers from another instance var in generic type with type declaration
  infers from another instance var in generic type with type declaration
-  instance variables initializers are used in class variables initialized objects (#3988)
  instance variables initializers are used in class variables initialized objects (#3988)
-  infers from assign to local var (#2467)
  infers from assign to local var (#2467)
-  doesn't if declaring nilable instance var and turns out to be nilable
  doesn't if declaring nilable instance var and turns out to be nilable
+  errors if not initializing super variables (2)
  errors if not initializing super variables (2)
+  infers from class method that has type annotation, with overload
  infers from class method that has type annotation, with overload
+  infers type from as?
  infers type from as?
+  infers type from block argument
  infers type from block argument
+  infers type for generic class, with case
  infers type for generic class, with case
+  errors when overriding inherited instance variable with incompatible type
  errors when overriding inherited instance variable with incompatible type
+  infers type from redefined method if calls previous_def
  infers type from redefined method if calls previous_def
+  declares instance var of generic type, with splat inside Tuple
  declares instance var of generic type, with splat inside Tuple
+  infers type from &&
  infers type from &&
+  guesses virtual array type (3) (#5342)
  guesses virtual array type (3) (#5342)
+  infers type from array literal from its literals
  infers type from array literal from its literals
+  doesn't infer from class method with multiple statements and return, on non-easy return (2)
  doesn't infer from class method with multiple statements and return, on non-easy return (2)
+  infers from restriction using virtual type
  infers from restriction using virtual type
+  infers type for generic class, with T.new
  infers type for generic class, with T.new
+  infers type from begin
  infers type from begin
+  errors if declaring var in Int
  errors if declaring var in Int
   can type ivar from module included by generic class (#5281)
  can type ivar from module included by generic class (#5281)
-  says can't infer type if only nil was assigned, in generic type
  says can't infer type if only nil was assigned, in generic type
-  doesn't crash on #3580
  doesn't crash on #3580
-  infers from method in generic type, with type annotation
  infers from method in generic type, with type annotation
-  infers in multiple assign for tuple type (1)
  infers in multiple assign for tuple type (1)
-  declares instance var of generic type, with no type parameter
  declares instance var of generic type, with no type parameter
-  declares instance var of generic type subclass
  declares instance var of generic type subclass
-  doesn't error if not initializes in all initialize because declared as nilable
  doesn't error if not initializes in all initialize because declared as nilable
-  says can't infer (#2536)
  says can't infer (#2536)
-  errors with macro def but another def doesn't initialize all
  errors with macro def but another def doesn't initialize all
-  doesn't error if initializing var in superclass, and then empty initialize
  doesn't error if initializing var in superclass, and then empty initialize
-  infers type from array literal with literals in generic type
  infers type from array literal with literals in generic type
-  guesses inside macro if
  guesses inside macro if
-  errors if declaring var in StaticArray(T, N)
  errors if declaring var in StaticArray(T, N)
-  infers type from if
  infers type from if
+  infers type from self (#2575)
  infers type from self (#2575)
+  doesn't error if uses typeof(@var)
  doesn't error if uses typeof(@var)
+  declares instance var in module, inherits to type recursively
  declares instance var in module, inherits to type recursively
+  guesses virtual array type (3) (#5342)
  guesses virtual array type (3) (#5342)
+  infers from new with return type returning generic
  infers from new with return type returning generic
+  errors if not initializing super variables (3)
  errors if not initializing super variables (3)
+  errors if finally not initialized in macro def
  errors if finally not initialized in macro def
   is more permissive with macro def initialize, multiple
  is more permissive with macro def initialize, multiple
-  infers type from custom generic array literal
  infers type from custom generic array literal
-  doesn't error if not initializing variables but calling super for generic module
  doesn't error if not initializing variables but calling super for generic module
-  doesn't infer from class method with multiple statements and return, on non-easy return (2)
  doesn't infer from class method with multiple statements and return, on non-easy return (2)
-  can't infer type from initializer in generic class type
  can't infer type from initializer in generic class type
-  infers type from literal outside def with initialize and type restriction
  infers type from literal outside def with initialize and type restriction
-  errors when using Class (#2605)
  errors when using Class (#2605)
-  errors if adds instance variable to Object via guess
  errors if adds instance variable to Object via guess
-  errors if declaring var in Reference
  errors if declaring var in Reference
-  can declare type even if included module has a guessed var
  can declare type even if included module has a guessed var
-  infers type from custom array literal
  infers type from custom array literal
-  instance variable inherited from multiple parents
-    with compatible type
-      accepts module and module, with definitions
      accepts module and module, with definitions
-      module and class, with declarations
      module and class, with declarations
-      module and class, with declarations (2)
      module and class, with declarations (2)
-      module and class, with declarations (3)
      module and class, with declarations (3)
-      accepts module and module, with declarations
      accepts module and module, with declarations
-      module and class, with definitions
      module and class, with definitions
-    with incompatible type
-      errors module and module, with declarations
      errors module and module, with declarations
-      module and class, with declarations
      module and class, with declarations
-      module and class, with definitions
      module and class, with definitions
-      errors module and module, with definitions
      errors module and module, with definitions
-  infers from class method that has type annotation, with overload
  infers from class method that has type annotation, with overload
-  doesn't complain in second part of #2575
  doesn't complain in second part of #2575
-  infers type from as?
  infers type from as?
-  errors if finally not initialized in macro def
  errors if finally not initialized in macro def
-  infers type from number literal
  infers type from number literal
-  errors when redeclaring subclass variable with a different type
  errors when redeclaring subclass variable with a different type
-  errors on undefined constant
  errors on undefined constant
-  infers type from ||=
  infers type from ||=
-  infers type from path that is a type
  infers type from path that is a type
-  infers from generic class method that has type annotation
  infers from generic class method that has type annotation
-  errors when overriding inherited instance variable with incompatible type
  errors when overriding inherited instance variable with incompatible type
-  guesses from new on abstract class
  guesses from new on abstract class
-  infers type from ||= inside another assignment
  infers type from ||= inside another assignment
-  doesn't infer for subclass if assigns another type (2)
  doesn't infer for subclass if assigns another type (2)
-  declares instance var with initial value
  declares instance var with initial value
-  declares instance var of generic class
  declares instance var of generic class
-  infers type from argument default value
  infers type from argument default value
-  cannot guess the type from double-splat argument with not double-splatted type
  cannot guess the type from double-splat argument with not double-splatted type
-  declares instance var of generic type, with static array
  declares instance var of generic type, with static array
-  uses virtual types in union
  uses virtual types in union
-  can type ivar from class inherited by generic class (#5281)
  can type ivar from class inherited by generic class (#5281)
-  guesses virtual array type (2) (#5342)
  guesses virtual array type (2) (#5342)
-  infers from class method that has type annotation
  infers from class method that has type annotation
-  infers type from is_a?
  infers type from is_a?
-  doesn't consider instance var as nilable if assigned before self access (#4981)
  doesn't consider instance var as nilable if assigned before self access (#4981)
-  infer from class method with multiple statements and return
  infer from class method with multiple statements and return
-  infers from generic class method that has type annotation, without instantiating
  infers from generic class method that has type annotation, without instantiating
-  guesses from as.(typeof(...)) in generic type
  guesses from as.(typeof(...)) in generic type
-  doesn't error if not initializing variables but calling super and previous_def
  doesn't error if not initializing variables but calling super and previous_def
-  infers type from lib fun call
  infers type from lib fun call
-  infers type from symbol literal
  infers type from symbol literal
-  allow usage of instance variable initializer from instance variable initializer
  allow usage of instance variable initializer from instance variable initializer
-  infers type from array literal from its literals
  infers type from array literal from its literals
-  errors if declaring instance var and turns out to be nilable
  errors if declaring instance var and turns out to be nilable
-  gives correct error when trying to use Int as an instance variable type
  gives correct error when trying to use Int as an instance variable type
-  infers type for generic class, with assign (2)
  infers type for generic class, with assign (2)
-  errors if not initializing super variables (2)
  errors if not initializing super variables (2)
+  errors if declaring var in Class
  errors if declaring var in Class
+  doesn't error when using generic in generic type because guessed elsewhere
  doesn't error when using generic in generic type because guessed elsewhere
+  errors if declaring var in Number
  errors if declaring var in Number
+  doesn't infer unbound generic type on generic method called from generic's subclass, metaclass context
  doesn't infer unbound generic type on generic method called from generic's subclass, metaclass context
+  declares instance var of generic module
  declares instance var of generic module
   doesn't combine union of Number and Number subclass (#5073)
  doesn't combine union of Number and Number subclass (#5073)
-  ignores super module initialize (#456)
  ignores super module initialize (#456)
-  infers from class method that has type annotation, with multiple overloads matching, all with the same type
  infers from class method that has type annotation, with multiple overloads matching, all with the same type
+  declares instance var of generic type, with union
  declares instance var of generic type, with union
   doesn't complain if not initialized in one initialize, but has initializer (#2465)
  doesn't complain if not initialized in one initialize, but has initializer (#2465)
-  infers type from lib out (2)
  infers type from lib out (2)
+  cannot guess the type from splat argument with not splatted type
  cannot guess the type from splat argument with not splatted type
+  errors if unknown ivar through macro (#4050)
  errors if unknown ivar through macro (#4050)
+  infers type from argument default value
  infers type from argument default value
+  guesses virtual hash type (1) (#5342)
  guesses virtual hash type (1) (#5342)
+  errors on undefined instance var and subclass calling super
  errors on undefined instance var and subclass calling super
+  errors if declaring instance var and turns out to be nilable, in generic type
  errors if declaring instance var and turns out to be nilable, in generic type
+  errors if declaring var in NamedTuple(T)
  errors if declaring var in NamedTuple(T)
+  looks up return type restriction in defining type, not instantiated type (#11961)
  looks up return type restriction in defining type, not instantiated type (#11961)
+  guesses from new on abstract class
  guesses from new on abstract class
+  declares with `self`
  declares with `self`
   infers type for generic class, with &&
  infers type for generic class, with &&
-  infers type for generic class, with assign (1)
  infers type for generic class, with assign (1)
-  declares instance var which appears in initialize
  declares instance var which appears in initialize
-  infers type from enum member
  infers type from enum member
-  errors if not initializing super variables (3)
  errors if not initializing super variables (3)
-  declares instance var of generic type
  declares instance var of generic type
-  infers type from string literal
  infers type from string literal
+  declares instance var with self, on generic
  declares instance var with self, on generic
+  instance variables initializers are used in class variables initialized objects (#3988)
  instance variables initializers are used in class variables initialized objects (#3988)
+  infers type from hash literal with literals in generic type
  infers type from hash literal with literals in generic type
+  infers type from literal outside def
  infers type from literal outside def
+  doesn't infer for subclass if assigns another type (1)
  doesn't infer for subclass if assigns another type (1)
+  doesn't error if not initializing variables but calling super in parent parent
  doesn't error if not initializing variables but calling super in parent parent
+  doesn't error when using Class but specifying type
  doesn't error when using Class but specifying type
+  doesn't error if not initializing variables but calling super
  doesn't error if not initializing variables but calling super
+  doesn't error if not calling super but initializing all variables
  doesn't error if not calling super but initializing all variables
+  infers from Pointer.malloc with two arguments
  infers from Pointer.malloc with two arguments
+  infers type by removing nil from || left side
  infers type by removing nil from || left side
+  declares instance var of generic class
  declares instance var of generic class
+  errors with macro def but another def doesn't initialize all
  errors with macro def but another def doesn't initialize all
+  infers from generic class method that has type annotation
  infers from generic class method that has type annotation
   doesn't consider self.initialize as initializer (#3239)
  doesn't consider self.initialize as initializer (#3239)
-  declares instance var with initial value, with subclass
  declares instance var with initial value, with subclass
-  infers type from string interpolation
  infers type from string interpolation
+  gives correct error when trying to use Int as an instance variable type
  gives correct error when trying to use Int as an instance variable type
+  can't infer type from initializer
  can't infer type from initializer
+  errors if declaring var in Proc(*T, R)
  errors if declaring var in Proc(*T, R)
+  infers type from unless
  infers type from unless
+  infers type for generic class, with assign (2)
  infers type for generic class, with assign (2)
+  errors if declaring var in StaticArray(T, N)
  errors if declaring var in StaticArray(T, N)
   infers type from lib out (3)
  infers type from lib out (3)
+  declares instance var in module, inherits to type
  declares instance var in module, inherits to type
+  infers type to be nilable if self is used in same assign
  infers type to be nilable if self is used in same assign
+  declares instance var which appears in initialize
  declares instance var which appears in initialize
+  guesses from hash literal with of, with subclass
  guesses from hash literal with of, with subclass
+  declares instance var
  declares instance var
+  infers from class method that has type annotation
  infers from class method that has type annotation
+  infers type for generic class, with T.new and literal
  infers type for generic class, with T.new and literal
+  solves instance var initializer in metaclass context (#5876)
  solves instance var initializer in metaclass context (#5876)
+  doesn't error if calling initialize from another initialize (2)
  doesn't error if calling initialize from another initialize (2)
+  infers type from ||
  infers type from ||
+  doesn't solve instance var initializer in instance context (3) (#5876)
  doesn't solve instance var initializer in instance context (3) (#5876)
+  can guess the type from splat argument with splatted type variable
  can guess the type from splat argument with splatted type variable
+  doesn't duplicate instance var in subclass
  doesn't duplicate instance var in subclass
+  infers type from array literal in generic type
  infers type from array literal in generic type
+  infers type from included module, outside def
  infers type from included module, outside def
+  infers type from sizeof
  infers type from sizeof
+  infer from class method with multiple statements and return
  infer from class method with multiple statements and return
+  infers type from path that is a type
  infers type from path that is a type
+  guesses virtual array type (1) (#5342)
  guesses virtual array type (1) (#5342)
+  doesn't error if not initializing nilable var in subclass
  doesn't error if not initializing nilable var in subclass
+  infers type from offsetof
  infers type from offsetof
+  allows nil instance var because it's a generic type
  allows nil instance var because it's a generic type
+  can guess the type from double-splat argument with double-splatted type
  can guess the type from double-splat argument with double-splatted type
+  errors if adds instance variable to Object via guess via included module
  errors if adds instance variable to Object via guess via included module
+  infers nilable instance var of generic module
  infers nilable instance var of generic module
+  errors if declaring var in Enum
  errors if declaring var in Enum
+  guesses inside macro if
  guesses inside macro if
+  infers type from custom hash literal
  infers type from custom hash literal
+  infers type for generic class, with literal
  infers type for generic class, with literal
+  errors if declaring var in Pointer(T)
  errors if declaring var in Pointer(T)
+  doesn't infer for subclass if assigns another type (2)
  doesn't infer for subclass if assigns another type (2)
+  infers type for generic class, with lib call
  infers type for generic class, with lib call
+  errors if declaring instance var and turns out to be nilable
  errors if declaring instance var and turns out to be nilable
+  infers type from custom hash literal in generic
  infers type from custom hash literal in generic
+  doesn't solve instance var initializer in instance context (1) (#5876)
  doesn't solve instance var initializer in instance context (1) (#5876)
+  doesn't error if not initializing variables but calling super for module
  doesn't error if not initializing variables but calling super for module
+  infers type from hash literal in generic type
  infers type from hash literal in generic type
+  infers type from argument restriction
  infers type from argument restriction
+  doesn't infer unbound generic type on generic method called from generic's subclass
  doesn't infer unbound generic type on generic method called from generic's subclass
+  infers from method in generic type, with type annotation
  infers from method in generic type, with type annotation
+  declares instance var of generic type, with tuple
  declares instance var of generic type, with tuple
   infers from Pointer.malloc in generic type
  infers from Pointer.malloc in generic type
+  infers type from path that is a constant
  infers type from path that is a constant
+  infers from generic class method that has type annotation, without instantiating
  infers from generic class method that has type annotation, without instantiating
   declares instance var multiple times, last one wins
  declares instance var multiple times, last one wins
-  doesn't infer unbound generic type on generic method called from generic's subclass, metaclass context
  doesn't infer unbound generic type on generic method called from generic's subclass, metaclass context
-  infers type from self as virtual type (#2575)
  infers type from self as virtual type (#2575)
-  declares instance var of generic type through module
  declares instance var of generic type through module
-  errors if unknown ivar through macro (#4050)
  errors if unknown ivar through macro (#4050)
-  doesn't error when using Class but specifying type
  doesn't error when using Class but specifying type
-  errors on undefined instance var and subclass calling super
  errors on undefined instance var and subclass calling super
-  obeys super module initialize (#456)
  obeys super module initialize (#456)
-  is more permissive with macro def initialize, other initialize
  is more permissive with macro def initialize, other initialize
-  doesn't error if not initializing nilable var in subclass
  doesn't error if not initializing nilable var in subclass
-  infers type from uninitialized
  infers type from uninitialized
-  declares instance var of generic module (2)
  declares instance var of generic module (2)
-  can guess the type from splat argument with splatted type
  can guess the type from splat argument with splatted type
-  doesn't crash on missing var on subclass, with superclass not specifying a type
  doesn't crash on missing var on subclass, with superclass not specifying a type
-  infers type from hash literal with of
  infers type from hash literal with of
-  doesn't error if inheriting generic instance (#3635)
  doesn't error if inheriting generic instance (#3635)
-  errors when assigning instance variable at top level control block
  errors when assigning instance variable at top level control block
-  errors if declaring instance var and turns out to be nilable, in generic module type in generic type
  errors if declaring instance var and turns out to be nilable, in generic module type in generic type
-  infers from Pointer.malloc with two arguments in generic type
  infers from Pointer.malloc with two arguments in generic type
-  errors if declaring var in Object
  errors if declaring var in Object
-  infers from class method that has number literal
  infers from class method that has number literal
+  declares instance var of generic type, with virtual metaclass
  declares instance var of generic type, with virtual metaclass
+  infers type from is_a?
  infers type from is_a?
   infers from class method that invokes new
  infers from class method that invokes new
-  declares instance var in module, inherits to type
  declares instance var in module, inherits to type
-  infers type from custom generic hash literal
  infers type from custom generic hash literal
-  doesn't crash on recursive method call
  doesn't crash on recursive method call
-  errors if declaring var in Class
  errors if declaring var in Class
+  infers type from string literal
  infers type from string literal
+  doesn't crash on missing var on subclass, with superclass not specifying a type
  doesn't crash on missing var on subclass, with superclass not specifying a type
+  errors if not initialized in all initialize
  errors if not initialized in all initialize
+  declares instance var of generic type, with no type parameter
  declares instance var of generic type, with no type parameter
+  says can't infer type if only nil was assigned
  says can't infer type if only nil was assigned
   errors if declaring variable with number
  errors if declaring variable with number
-  infers type for generic module
  infers type for generic module
-  says undefined instance variable on assign
  says undefined instance variable on assign
-  infers from Pointer.malloc with two arguments
  infers from Pointer.malloc with two arguments
-  errors if can't find lib call, before erroring on instance var (#2579)
  errors if can't find lib call, before erroring on instance var (#2579)
-  infers type from included module recursively
  infers type from included module recursively
+  infers type from string interpolation
  infers type from string interpolation
+  doesn't infer from class method with multiple statements and return, on non-easy return
  doesn't infer from class method with multiple statements and return, on non-easy return
+  ignores super module initialize (#456)
  ignores super module initialize (#456)
+  infers type from assign (1)
  infers type from assign (1)
+  doesn't error if calling initialize from another initialize (1)
  doesn't error if calling initialize from another initialize (1)
+  declares instance var of generic type, with static array
  declares instance var of generic type, with static array
+  infers type from self as virtual type (#2575)
  infers type from self as virtual type (#2575)
+  errors when assigning instance variable at top level block
  errors when assigning instance variable at top level block
+  infers nilable instance var of generic type
  infers nilable instance var of generic type
+  declares instance var of generic type, with splat
  declares instance var of generic type, with splat
+  declares instance var of generic type, with splat inside Proc
  declares instance var of generic type, with splat inside Proc
+  can guess the type from double-splat argument with double-splatted type variable
  can guess the type from double-splat argument with double-splatted type variable
+  declares instance var of generic type subclass
  declares instance var of generic type subclass
+  doesn't error if not initializing variables but calling previous_def (#3210)
  doesn't error if not initializing variables but calling previous_def (#3210)
+  infers type from lib fun call
  infers type from lib fun call
+  infers type from enum member
  infers type from enum member
+  says undefined instance variable on read
  says undefined instance variable on read
+  infers type from ||= inside another assignment
  infers type from ||= inside another assignment
+  declares instance var of generic type, with generic type
  declares instance var of generic type, with generic type
+  infers type from new expression
  infers type from new expression
+  infers type to be non-nilable if initialized in all initialize
  infers type to be non-nilable if initialized in all initialize
+  errors when redeclaring subclass variable with a different type
  errors when redeclaring subclass variable with a different type
+  is more permissive with macro def initialize
  is more permissive with macro def initialize
+  uses virtual types in union
  uses virtual types in union
+  uses virtual types in self
  uses virtual types in self
+  doesn't error if not initializes in all initialize because declared as nilable
  doesn't error if not initializes in all initialize because declared as nilable
+  can't infer type of generic method that returns self (#5383)
  can't infer type of generic method that returns self (#5383)
   infers type from range literal
  infers type from range literal
-  uses T.new (#4291)
  uses T.new (#4291)
+  errors if declaring var in Union(*T)
  errors if declaring var in Union(*T)
+  infers type from all call matches
  infers type from all call matches
+  doesn't error if not initializing variables but calling super for generic module
  doesn't error if not initializing variables but calling super for generic module
+  accepts overriding inherited instance variable with compatible type
  accepts overriding inherited instance variable with compatible type
+  errors if declaring var in Object
  errors if declaring var in Object
+  doesn't error if initializing var in superclass, and then empty initialize
  doesn't error if initializing var in superclass, and then empty initialize
+  errors if declaring var in Tuple(*T)
  errors if declaring var in Tuple(*T)
+  infers from Pointer.null
  infers from Pointer.null
+  errors if can't find lib call, before erroring on instance var (#2579)
  errors if can't find lib call, before erroring on instance var (#2579)
+  allow usage of instance variable initializer from instance variable initializer
  allow usage of instance variable initializer from instance variable initializer
+  can't infer type when using operation on const (#4054)
  can't infer type when using operation on const (#4054)
+  infers type from if
  infers type from if
+  infers type from argument with restriction, in generic
  infers type from argument with restriction, in generic
   infers type from proc literal with return type
  infers type from proc literal with return type
-  declares as named tuple
  declares as named tuple
-  uses virtual types in self
  uses virtual types in self
-  infer from class method where new is redefined
  infer from class method where new is redefined
-  doesn't find T in generic type that's not the current type (#4460)
  doesn't find T in generic type that's not the current type (#4460)
-  infers type from included module
  infers type from included module
-  infers type from offsetof
  infers type from offsetof
-  infers type from redefined method if calls previous_def
  infers type from redefined method if calls previous_def
-  declares instance var of generic module from non-generic module
  declares instance var of generic module from non-generic module
-  doesn't solve instance var initializer in instance context (3) (#5876)
  doesn't solve instance var initializer in instance context (3) (#5876)
-  errors if declaring instance var and turns out to be nilable, in generic type
  errors if declaring instance var and turns out to be nilable, in generic type
-  infers from restriction using virtual type
  infers from restriction using virtual type
-  errors if declaring instance var and turns out to be nilable, in generic module type
  errors if declaring instance var and turns out to be nilable, in generic module type
-  infers type from argument restriction
  infers type from argument restriction
-  infers type from regex literal
  infers type from regex literal
   infers from another instance var in generic type
  infers from another instance var in generic type
-  errors when assigning instance variable inside nested expression
  errors when assigning instance variable inside nested expression
-  can't infer type when using operation on const (#4054)
  can't infer type when using operation on const (#4054)
-  errors if declaring var in NamedTuple(T)
  errors if declaring var in NamedTuple(T)
-  declares instance var with union type with a virtual member
  declares instance var with union type with a virtual member
-  transfers initializer from generic module to class
  transfers initializer from generic module to class
-  infers from class method that refers to constant
  infers from class method that refers to constant
-  infers type from self (#2575)
  infers type from self (#2575)
-  guesses from hash literal with of, with subclass
  guesses from hash literal with of, with subclass
-  errors if declaring var in Pointer(T)
  errors if declaring var in Pointer(T)
-  infers type from sizeof
  infers type from sizeof
+  cannot guess type from argument assigned in body
  cannot guess type from argument assigned in body
+  errors on undefined constant
  errors on undefined constant
+  doesn't error if not initialized in macro def but outside it
  doesn't error if not initialized in macro def but outside it
+  can guess the type from splat argument with splatted type
  can guess the type from splat argument with splatted type
+  infers type from literal outside def with initialize and type restriction
  infers type from literal outside def with initialize and type restriction
+  infers from new with return type in generic type
  infers from new with return type in generic type
+  infers from Pointer.malloc with two arguments in generic type
  infers from Pointer.malloc with two arguments in generic type
+  doesn't error if declaring instance var and doesn't out to be nilable, in generic module type
  doesn't error if declaring instance var and doesn't out to be nilable, in generic module type
+  can declare type even if included module has a guessed var
  can declare type even if included module has a guessed var
+  infers from class method that has type annotation, in generic class
  infers from class method that has type annotation, in generic class
+  infers type to be nilable if not initialized
  infers type to be nilable if not initialized
+  guesses from as.(typeof(...)) in generic type
  guesses from as.(typeof(...)) in generic type
   looks up self restriction in instantiated type, not defined type
  looks up self restriction in instantiated type, not defined type
-  says undefined instance variable on read
  says undefined instance variable on read
-  infers type from bool literal
  infers type from bool literal
-  guesses virtual array type (1) (#5342)
  guesses virtual array type (1) (#5342)
-  infers type from char literal
  infers type from char literal
-  declares instance var of generic type, with splat inside Proc
  declares instance var of generic type, with splat inside Proc
-  declares instance var of generic type, with splat inside Tuple
  declares instance var of generic type, with splat inside Tuple
-  infers type from responds_to?
  infers type from responds_to?
-  infers type from tuple literal
  infers type from tuple literal
-  guesses inside macro for
  guesses inside macro for
-  infers type from literal outside def
  infers type from literal outside def
-  infers type from unless
  infers type from unless
-  declares with `self`
  declares with `self`
-  is more permissive with macro def initialize, bug with named args
  is more permissive with macro def initialize, bug with named args
-  declares instance var of generic type, with union
  declares instance var of generic type, with union
-  doesn't infer type to be nilable if using self.class in call in assign
  doesn't infer type to be nilable if using self.class in call in assign
-  infers type from block argument without restriction
  infers type from block argument without restriction
+  infers type from case
  infers type from case
+  guesses from splat (#3149)
  guesses from splat (#3149)
+  infers from method on integer literal, with type annotation
  infers from method on integer literal, with type annotation
+  doesn't error if inheriting generic instance (#3635)
  doesn't error if inheriting generic instance (#3635)
+  infers type from uninitialized
  infers type from uninitialized
+  says undefined instance variable on assign
  says undefined instance variable on assign
+  errors when assigning instance variable at top level control block
  errors when assigning instance variable at top level control block
+  doesn't find T in generic type that's not the current type (#4460)
  doesn't find T in generic type that's not the current type (#4460)
+  doesn't infer type from redefined method
  doesn't infer type from redefined method
+  instance variable inherited from multiple parents
+    with incompatible type
+      module and class, with definitions
      module and class, with definitions
+      errors module and module, with definitions
      errors module and module, with definitions
+      errors module and module, with declarations
      errors module and module, with declarations
+      module and class, with declarations
      module and class, with declarations
+    with compatible type
+      module and class, with definitions
      module and class, with definitions
+      accepts module and module, with declarations
      accepts module and module, with declarations
+      module and class, with declarations (3)
      module and class, with declarations (3)
+      module and class, with declarations (2)
      module and class, with declarations (2)
+      accepts module and module, with definitions
      accepts module and module, with definitions
+      module and class, with declarations
      module and class, with declarations
+  doesn't error if not initializing variables but calling super and previous_def
  doesn't error if not initializing variables but calling super and previous_def
+  can't infer type from initializer in generic class type
  can't infer type from initializer in generic class type
+  infers type from custom array literal in generic
  infers type from custom array literal in generic
+  ignores redefined initialize (#456)
  ignores redefined initialize (#456)
+  infers type from instance_sizeof
  infers type from instance_sizeof
+  infers from another instance var in generic type with type declaration
  infers from another instance var in generic type with type declaration
+  infers type from array literal with of metaclass
  infers type from array literal with of metaclass
+  infers type from array literal with of
  infers type from array literal with of
+  infers from assign to local var (#2467)
  infers from assign to local var (#2467)
+  infers in multiple assign for tuple type (1)
  infers in multiple assign for tuple type (1)
   declares instance var of generic type, with proc
  declares instance var of generic type, with proc
-  doesn't consider var as nilable if conditionally assigned inside initialize, but has initializer (#3669)
  doesn't consider var as nilable if conditionally assigned inside initialize, but has initializer (#3669)
+  considers var as assigned in multi-assign
  considers var as assigned in multi-assign
+  shouldn't error when accessing instance var in initialized that's always initialized (#2953)
  shouldn't error when accessing instance var in initialized that's always initialized (#2953)
+  infers from Pointer.null in generic type
  infers from Pointer.null in generic type
+  infers type from included module
  infers type from included module
   transfers initializer from module to generic class
  transfers initializer from module to generic class
-  infers type from ||
  infers type from ||
-  doesn't complain if declared type is recursive alias that's nilable
  doesn't complain if declared type is recursive alias that's nilable
-  guesses from splat (#3149)
  guesses from splat (#3149)
-  infers type from block argument
  infers type from block argument
-  errors if declaring var in Tuple(*T)
  errors if declaring var in Tuple(*T)
-Codegen: const
-  declaring var  declaring var  declaring var  declaring var  declaring var  declaring var  declaring var  declaring var  declaring var
  declaring var
-  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name  codegens two consts with same variable name
  codegens two consts with same variable name
-  initializes simple const via another const
  initializes simple const via another const
-  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants  synchronizes initialization of constants
  synchronizes initialization of constants
-  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct  codegens constant that refers to another constant that is a struct
  codegens constant that refers to another constant that is a struct
-  inlines const with math
  inlines const with math
-  define a constant
  define a constant
-  uses correct types lookup  uses correct types lookup  uses correct types lookup  uses correct types lookup  uses correct types lookup  uses correct types lookup  uses correct types lookup  uses correct types lookup  uses correct types lookup
  uses correct types lookup
-  initializes simple const
  initializes simple const
-  support nested constant
  support nested constant
-  allows constants with same name
  allows constants with same name
-  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)  allows implicit self in constant, called from another class (bug)
  allows implicit self in constant, called from another class (bug)
-  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if  works with variable declared inside if
  works with variable declared inside if
-  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class  gets pointerof constant inside class
  gets pointerof constant inside class
-  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module  uses const before declaring it in another module
  uses const before declaring it in another module
-  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant  gets pointerof complex constant
  gets pointerof complex constant
-  gets pointerof constant  gets pointerof constant  gets pointerof constant  gets pointerof constant  gets pointerof constant  gets pointerof constant  gets pointerof constant  gets pointerof constant  gets pointerof constant
  gets pointerof constant
-  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)  uses const before declaring it (hoisting)
  uses const before declaring it (hoisting)
-  finds global constant
  finds global constant
-  constants with expression
  constants with expression
-  codegens constant that is declared later because of virtual dispatch
  codegens constant that is declared later because of virtual dispatch
-  supports closured vars inside initializers (#10474)
  supports closured vars inside initializers (#10474)
-  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const  codegens variable assignment in const
  codegens variable assignment in const
-  invokes block in const  invokes block in const  invokes block in const  invokes block in const  invokes block in const  invokes block in const  invokes block in const  invokes block in const  invokes block in const
  invokes block in const
-  inlines char const
  inlines char const
-  inlines enum value
  inlines enum value
-  finds nearest constant first
  finds nearest constant first
-  support constant inside a def
  support constant inside a def
-  doesn't crash if constant is used, but class is never instantiated (#1106)
  doesn't crash if constant is used, but class is never instantiated (#1106)
-  supports storing function returning nil
  supports storing function returning nil
-  inlines const referencing another const
  inlines const referencing another const
-  inlines bool const
  inlines bool const
-  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception  initialize const that might raise an exception
  initialize const that might raise an exception
-  declare constants in right order  declare constants in right order  declare constants in right order  declare constants in right order  declare constants in right order  declare constants in right order  declare constants in right order  declare constants in right order  declare constants in right order
  declare constants in right order
-  inlines simple const
  inlines simple const
-  define a constant in lib
  define a constant in lib
-  initializes ARGC_UNSAFE
  initializes ARGC_UNSAFE
-  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)  runs const side effects (#8862)
  runs const side effects (#8862)
-Code gen: magic constants
-  does __FILE__
  does __FILE__
-  does __LINE__
  does __LINE__
-  does __END_LINE__ in macro with block
  does __END_LINE__ in macro with block
-  does __END_LINE__ without block
  does __END_LINE__ without block
-  does __LINE__ in macro
  does __LINE__ in macro
-  does __FILE__ in macro
  does __FILE__ in macro
-  does __DIR__ in macro
  does __DIR__ in macro
-  does __DIR__
  does __DIR__
-  does __LINE__ when specifying one middle argument
  does __LINE__ when specifying one middle argument
-  does __LINE__ when specifying one normal default arg
  does __LINE__ when specifying one normal default arg
-  does __LINE__ when specifying one default arg with __FILE__
  does __LINE__ when specifying one default arg with __FILE__
-  does __LINE__ with dispatch
  does __LINE__ with dispatch
-  does __END_LINE__ with block
  does __END_LINE__ with block
-  does __END_LINE__ in macro without block
  does __END_LINE__ in macro without block
-View#module_name
-  namespace is divided by hyphen
  namespace is divided by hyphen
-  hyphen followed by non-ascii letter is replaced by its character
  hyphen followed by non-ascii letter is replaced by its character
-  underscore is ignored
  underscore is ignored
-Code gen: return
-  return from function with nilable type 2
  return from function with nilable type 2
-  returns empty from function
  returns empty from function
-  return from function with union type
  return from function with union type
-  doesn't crash when method returns nil and can be inlined
  doesn't crash when method returns nil and can be inlined
-  codegens assign with if with two returns
  codegens assign with if with two returns
-  codegens return
  codegens return
-  codegens bug with return if true
  codegens bug with return if true
-  codegens return inside if
  codegens return inside if
-  return union
  return union
-  codegens return followed by another expression
  codegens return followed by another expression
-  return from function with nilable type
  return from function with nilable type
-  forms a tuple from multiple return values
  forms a tuple from multiple return values
-  returns in var assignment (#3364)
  returns in var assignment (#3364)
-  flattens splats inside multiple return values
  flattens splats inside multiple return values
-Semantic: ssa
-  types a var that is declared in a while
  types a var that is declared in a while
-  types block with next
  types block with next
-  types a var inside an if without previous definition
  types a var inside an if without previous definition
-  types a var after begin ensure as having last type
  types a var after begin ensure as having last type
-  preserves type filters after block (bug)
  preserves type filters after block (bug)
-  types while with next
  types while with next
-  types a var that is re-assigned in a block
  types a var that is re-assigned in a block
-  types if with restricted type in else
  types if with restricted type in else
-  doesn't change type to nilable inside if
  doesn't change type to nilable inside if
-  types a var inside an if without change in then
  types a var inside an if without change in then
-  types a var that is re-assigned in a while condition
  types a var that is re-assigned in a while condition
-  types if with return in then with assign
  types if with return in then with assign
-  types a var that is re-assigned in a while in next and used in condition
  types a var that is re-assigned in a while in next and used in condition
-  types a var inside an if without definition in else
  types a var inside an if without definition in else
-  types block with break
  types block with break
-  types a var with an if but without change
  types a var with an if but without change
-  types block with break doesn't infect initial vars
  types block with break doesn't infect initial vars
-  types if with restricted type in then
  types if with restricted type in then
-  types a var that is declared in a while condition
  types a var that is declared in a while condition
-  types a var that is declared in a while condition with break after re-assignment
  types a var that is declared in a while condition with break after re-assignment
-  types a var that is declared in a while condition with break before re-assignment
  types a var that is declared in a while condition with break before re-assignment
-  doesn't error if same variable is used in multiple arguments of same typeof
  doesn't error if same variable is used in multiple arguments of same typeof
-  types if/else with var (bug)
  types if/else with var (bug)
-  types if with return in then
  types if with return in then
-  types if with return in else
  types if with return in else
-  types re-assign inside while (bug)
  types re-assign inside while (bug)
-  types a var inside an if with previous definition
  types a var inside an if with previous definition
-  types re-assign inside if (bug)
  types re-assign inside if (bug)
-  types a var after begin ensure as having last type (2)
  types a var after begin ensure as having last type (2)
-  errors if accessing variable declared inside typeof
  errors if accessing variable declared inside typeof
-  types a var that is re-assigned in a while and used in condition
  types a var that is re-assigned in a while and used in condition
-  doesn't error if same variable is declared in multiple typeofs
  doesn't error if same variable is declared in multiple typeofs
-  types a var inside an if without definition in then
  types a var inside an if without definition in then
-  types a var inside an if without change in else
  types a var inside an if without change in else
-  types if with break in then
  types if with break in then
-  types if with unreachable in then
  types if with unreachable in then
-  types if with return in both branches
  types if with return in both branches
-  types a var that is declared in a while with out
  types a var that is declared in a while with out
-  types while with break with new var
  types while with break with new var
-  types if with next in then
  types if with next in then
-  types if with return in else with assign
  types if with return in else with assign
-  types while with break
  types while with break
-  types a var that is re-assigned in a while
  types a var that is re-assigned in a while
-  types a var with an if with nested if
  types a var with an if with nested if
-  types a redefined variable
  types a redefined variable
-  types while with break doesn't infect initial vars
  types while with break doesn't infect initial vars
-Semantic: NoReturn
-  types with no return even if code follows
  types with no return even if code follows
-  computes NoReturn in a lazy way inside if then (#314) (5)
  computes NoReturn in a lazy way inside if then (#314) (5)
-  types union of NoReturn and something else
  types union of NoReturn and something else
-  computes NoReturn in a lazy way inside if else (#314) (1)
  computes NoReturn in a lazy way inside if else (#314) (1)
-  computes NoReturn in a lazy way inside if else (#314) (2)
  computes NoReturn in a lazy way inside if else (#314) (2)
-  computes NoReturn in a lazy way inside if then (#314) (1)
  computes NoReturn in a lazy way inside if then (#314) (1)
-  computes NoReturn in a lazy way inside if then (#314) (3)
  computes NoReturn in a lazy way inside if then (#314) (3)
-  computes NoReturn in a lazy way inside if then (#314) (2)
  computes NoReturn in a lazy way inside if then (#314) (2)
-  types union of NoReturns
  types union of NoReturns
-  types call to LibC.exit as NoReturn
  types call to LibC.exit as NoReturn
-  computes NoReturn in a lazy way inside if else (#314) (5)
  computes NoReturn in a lazy way inside if else (#314) (5)
-  types as NoReturn if typeof(exp)'s exp is NoReturn
  types as NoReturn if typeof(exp)'s exp is NoReturn
-  assumes if condition's type filters when else is no return
  assumes if condition's type filters when else is no return
-  types exception handler as NoReturn if ensure is NoReturn
  types exception handler as NoReturn if ensure is NoReturn
-  types raise as NoReturn
  types raise as NoReturn
-  computes NoReturn in a lazy way inside if then (#314) (4)
  computes NoReturn in a lazy way inside if then (#314) (4)
-  computes NoReturn in a lazy way inside if else (#314) (3)
  computes NoReturn in a lazy way inside if else (#314) (3)
-  types as NoReturn even if Nil return type is forced (#3096)
  types as NoReturn even if Nil return type is forced (#3096)
-  computes NoReturn in a lazy way inside if else (#314) (4)
  computes NoReturn in a lazy way inside if else (#314) (4)
-.validate_name
-  dashes
  dashes
-  length
  length
-  invalid character
  invalid character
-  empty
  empty
-  underscores
  underscores
-  uppercase
  uppercase
-  digits
  digits
-Code gen: primitives
-  allows @[Primitive] on method that has body
  allows @[Primitive] on method that has body
-  can invoke binary on primitive typedef (#614)
  can invoke binary on primitive typedef (#614)
-  codegens crystal_type_id for class
  codegens crystal_type_id for class
-  codegens bool
  codegens bool
-  codegens int128  codegens int128  codegens int128  codegens int128  codegens int128  codegens int128  codegens int128  codegens int128  codegens int128
  codegens int128
-  allows redefining a primitive method
  allows redefining a primitive method
-  atomicrmw
-    codegens atomicrmw with enums
    codegens atomicrmw with enums
-    codegens atomicrmw with enums
    codegens atomicrmw with enums
-    codegens atomicrmw with symbols
    codegens atomicrmw with symbols
-  codegens f32
  codegens f32
-  doesn't treat `(1 == 1) == true` as `1 == 1 == true` (#328)
  doesn't treat `(1 == 1) == true` as `1 == 1 == true` (#328)
-  codegens crystal_type_id with union type
  codegens crystal_type_id with union type
-  sums two numbers out of an [] of Number
  sums two numbers out of an [] of Number
-  codegens char ord
  codegens char ord
-  va_arg
-    works with C code    works with C code    works with C code    works with C code    works with C code    works with C code    works with C code    works with C code    works with C code
    works with C code
-    uses llvm's va_arg instruction
    uses llvm's va_arg instruction
-  codegens string
  codegens string
-  allows @[Primitive] on fun declarations
  allows @[Primitive] on fun declarations
-  can invoke cast on primitive typedef (#614)
  can invoke cast on primitive typedef (#614)
-  gets crystal class instance type id
  gets crystal class instance type id
-  codegens f64
  codegens f64
-  defined method that calls primitive (bug)
  defined method that calls primitive (bug)
-  codegens __LINE__
  codegens __LINE__
-  doesn't optimize away call whose obj is not passed as self (#2226)
  doesn't optimize away call whose obj is not passed as self (#2226)
-  codegens pointer of int
  codegens pointer of int
-  codegens long
  codegens long
-  codegens int
  codegens int
-  uses built-in llvm function that returns a tuple
  uses built-in llvm function that returns a tuple
-  codegens uint128  codegens uint128  codegens uint128  codegens uint128  codegens uint128  codegens uint128  codegens uint128  codegens uint128  codegens uint128
  codegens uint128
-  codegens char
  codegens char
-  passes issue #328
  passes issue #328
-  arithmetic primitives
-    skips bounds checking when to_i produces same type
    skips bounds checking when to_i produces same type
-    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2    codegens 1 - 2
    codegens 1 - 2
-    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16    codegens 1.to_i16
    codegens 1.to_i16
-    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3    codegens 2 * 3
    codegens 2 * 3
-    codegens 1 &+ 2
    codegens 1 &+ 2
-    codegens 1.to_i16!
    codegens 1.to_i16!
-    codegens 1 &- 2
    codegens 1 &- 2
-    codegens 16.unsafe_shl 2
    codegens 16.unsafe_shl 2
-    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f    codegens 1.to_f
    codegens 1.to_f
-    codegens 8.unsafe_mod 3
    codegens 8.unsafe_mod 3
-    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2    codegens 1 + 2
    codegens 1 + 2
-    codegens 1.to_f!
    codegens 1.to_f!
-    codegens 2 &* 3
    codegens 2 &* 3
-    codegens 16.unsafe_shr 2
    codegens 16.unsafe_shr 2
-    codegens 8.unsafe_div 3
    codegens 8.unsafe_div 3
-Normalize: array literal
-  normalizes non-empty without of
  normalizes non-empty without of
-  normalizes non-empty with of, with splat
  normalizes non-empty with of, with splat
-  hoists complex element expressions, array-like
  hoists complex element expressions, array-like
-  normalizes non-empty with of
  normalizes non-empty with of
-  hoists complex element expressions, array-like generic
  hoists complex element expressions, array-like generic
-  normalizes non-empty without of, with splat only
  normalizes non-empty without of, with splat only
-  normalizes empty with of
  normalizes empty with of
-  normalizes non-empty without of, with splat
  normalizes non-empty without of, with splat
-  hoists complex element expressions
  hoists complex element expressions
-  hoists complex element expressions, with splat
  hoists complex element expressions, with splat
-Code gen: def
-  uses dispatch call type for phi (#3529)
  uses dispatch call type for phi (#3529)
-  uses previous argument in default value (#1062)
  uses previous argument in default value (#1062)
-  codegens bug #119  codegens bug #119  codegens bug #119  codegens bug #119  codegens bug #119  codegens bug #119  codegens bug #119  codegens bug #119  codegens bug #119
  codegens bug #119
-  codegens recursive type with union
  codegens recursive type with union
-  codegens call without args
  codegens call without args
-  use target def type as return type  use target def type as return type  use target def type as return type  use target def type as return type  use target def type as return type  use target def type as return type  use target def type as return type  use target def type as return type  use target def type as return type
  use target def type as return type
-  allows to change argument values
  allows to change argument values
-  codegens with interesting default argument
  codegens with interesting default argument
-  codegens return nil when nilable type (2)
  codegens return nil when nilable type (2)
-  codegens def which changes type of arg
  codegens def which changes type of arg
-  codegens dispatch with single def when discarding unallocated ones (2)
  codegens dispatch with single def when discarding unallocated ones (2)
-  looks up matches in super classes and merges them with subclasses
  looks up matches in super classes and merges them with subclasses
-  dispatches on virtual type implementing generic module (related to bug #165)
  dispatches on virtual type implementing generic module (related to bug #165)
-  codegens union to union assignment of mutable arg (#3691)
  codegens union to union assignment of mutable arg (#3691)
-  uses var after external
  uses var after external
-  codegens return nil when nilable type (1)
  codegens return nil when nilable type (1)
-  fixes #230: include original owner in mangled def
  fixes #230: include original owner in mangled def
-  call external function 'putchar'
  call external function 'putchar'
-  codegens recursive nasty code
  codegens recursive nasty code
-  codegens yield with destructing tuple having unreachable element
  codegens yield with destructing tuple having unreachable element
-  codegens empty def
  codegens empty def
-  builds infinite recursive function
  builds infinite recursive function
-  codegens with and without many default arguments
  codegens with and without many default arguments
-  codegens dispatch with nilable reference union type
  codegens dispatch with nilable reference union type
-  codegens and doesn't break if obj is int and there's a mutation  codegens and doesn't break if obj is int and there's a mutation  codegens and doesn't break if obj is int and there's a mutation  codegens and doesn't break if obj is int and there's a mutation��  codegens and doesn't break if obj is int and there's a mutation��  codegens and doesn't break if obj is int and there's a mutation��������  codegens and doesn't break if obj is int and there's a mutation��  codegens and doesn't break if obj is int and there's a mutation��  codegens and doesn't break if obj is int and there's a mutation
  codegens and doesn't break if obj is int and there's a mutation
-  doesn't crash on private def as last expression
  doesn't crash on private def as last expression
-  unifies all calls to same def  unifies all calls to same def  unifies all calls to same def  unifies all calls to same def  unifies all calls to same def  unifies all calls to same def��������  unifies all calls to same def������  unifies all calls to same def��  unifies all calls to same def
  unifies all calls to same def
-  uses self
  uses self
-  codegens dispatch on static method
  codegens dispatch on static method
-  call functions defined in any order
  call functions defined in any order
-  runs empty def
  runs empty def
-  codegens dispatch with single def when discarding unallocated ones (1)
  codegens dispatch with single def when discarding unallocated ones (1)
-  codegens dispatch without obj, bug 1
  codegens dispatch without obj, bug 1
-  puts union before single type in matches preferences
  puts union before single type in matches preferences
-  codegens call with args
  codegens call with args
-  codegens with and without default arguments
  codegens with and without default arguments
-  can match N type argument of static array (#1203)
  can match N type argument of static array (#1203)
-  codegens with related types
  codegens with related types
-  codegens dispatch without obj, bug 1
  codegens dispatch without obj, bug 1
-Crystal::Repl::Interpreter
-  closures
-    does closure inside block
    does closure inside block
-    does closure without args that captures and modifies two local variables
    does closure without args that captures and modifies two local variables
-    does closure inside def
    does closure inside def
-    sets ivar of self closured struct (#12341)
    sets ivar of self closured struct (#12341)
-    does closure without args that captures and modifies one local variable
    does closure without args that captures and modifies one local variable
-    closures self in proc literal
    closures self in proc literal
-    closures self in proc literal (implicit self)
    closures self in proc literal (implicit self)
-    does nested closure inside proc
    does nested closure inside proc
-    closures block args after 8 bytes (the closure var)
    closures block args after 8 bytes (the closure var)
-    doesn't mix local vars with closured vars
    doesn't mix local vars with closured vars
-    does nested closure inside methods and blocks
    does nested closure inside methods and blocks
-    closures self and modifies instance var
    closures self and modifies instance var
-    passes closured struct instance var as self
    passes closured struct instance var as self
-    does closure inside proc
    does closure inside proc
-    does closure inside const
    does closure inside const
-    does next inside captured block (#12226)
    does next inside captured block (#12226)
-    does closure with pointerof local var
    does closure with pointerof local var
-    closures def arguments
    closures def arguments
-    does closure inside block, capture block arg
    does closure inside block, capture block arg
-    closures closured block arg
    closures closured block arg
-    does nested closure inside captured blocks
    does nested closure inside captured blocks
-    does closure inside proc, capture proc argument
    does closure inside proc, capture proc argument
-    does closure with two args that captures and modifies two local variables
    does closure with two args that captures and modifies two local variables
-    reads self closured struct (#12341)
    reads self closured struct (#12341)
-    closures struct and calls method on it
    closures struct and calls method on it
-    does closure inside class variable initializer
    does closure inside class variable initializer
-    does closure and accesses it inside block
    does closure and accesses it inside block
-    gets ivar of self closured struct (#12341)
    gets ivar of self closured struct (#12341)
-Crystal::Repl::Interpreter
-  local variables
-    interprets variable set and get
    interprets variable set and get
-    doesn't declare variable with no type
    doesn't declare variable with no type
-    interprets uninitialized
    interprets uninitialized
-    assigns to underscore
    assigns to underscore
-    interprets variable set and get, second local var
    interprets variable set and get, second local var
-    interprets at the class level
    interprets at the class level
-    interprets variable set and get with operations
    interprets variable set and get with operations
-    doesn't discard underscore right hand side
    doesn't discard underscore right hand side
-    interprets variable set with type restriction (#13023)
    interprets variable set with type restriction (#13023)
-    interprets variable set
    interprets variable set
-    interprets local variable declaration (#12229)
    interprets local variable declaration (#12229)
-    doesn't declare variable with no type inside method
    doesn't declare variable with no type inside method
-  conversion
-    interprets Float64#to_f32! (negative)
    interprets Float64#to_f32! (negative)
-    interprets Int64::MAX#to_i64!
    interprets Int64::MAX#to_i64!
-    interprets Float32#to_i8! (positive)
    interprets Float32#to_i8! (positive)
-    interprets UInt64::MAX#to_u64!
    interprets UInt64::MAX#to_u64!
-    interprets Int16::MIN#to_i16!
    interprets Int16::MIN#to_i16!
-    interprets Int16::MIN#to_u16!
    interprets Int16::MIN#to_u16!
-    interprets Int32::MAX#to_i32!
    interprets Int32::MAX#to_i32!
-    interprets Int16::MIN#to_u64!
    interprets Int16::MIN#to_u64!
-    interprets Float32#to_f32! (positive)
    interprets Float32#to_f32! (positive)
-    interprets UInt64::MAX#to_f64!
    interprets UInt64::MAX#to_f64!
-    discards conversion
    discards conversion
-    interprets Float64#to_i! (negative)
    interprets Float64#to_i! (negative)
-    interprets UInt8::MAX#to_f64!
    interprets UInt8::MAX#to_f64!
-    interprets UInt32::MAX#to_f64!
    interprets UInt32::MAX#to_f64!
-    interprets Int64::MIN#to_f32!
    interprets Int64::MIN#to_f32!
-    interprets Float32#to_i16! (positive)
    interprets Float32#to_i16! (positive)
-    interprets Int64::MAX#to_i16!
    interprets Int64::MAX#to_i16!
-    interprets Int8::MIN#to_f64!
    interprets Int8::MIN#to_f64!
-    interprets Int8::MAX#to_u16!
    interprets Int8::MAX#to_u16!
-    interprets UInt16::MAX#to_u!
    interprets UInt16::MAX#to_u!
-    interprets Int8::MAX#to_u32!
    interprets Int8::MAX#to_u32!
-    interprets Int8::MAX#to_i64!
    interprets Int8::MAX#to_i64!
-    interprets UInt8::MAX#to_i8!
    interprets UInt8::MAX#to_i8!
-    interprets Int16::MAX#to_u!
    interprets Int16::MAX#to_u!
-    interprets Int16::MAX#to_u16!
    interprets Int16::MAX#to_u16!
-    interprets UInt8::MAX#to_u16!
    interprets UInt8::MAX#to_u16!
-    interprets Int32::MIN#to_i8!
    interprets Int32::MIN#to_i8!
-    interprets Float64#to_i32! (positive)
    interprets Float64#to_i32! (positive)
-    interprets UInt16::MAX#to_i!
    interprets UInt16::MAX#to_i!
-    interprets UInt16::MAX#to_u32!
    interprets UInt16::MAX#to_u32!
-    interprets UInt16::MAX#to_u64!
    interprets UInt16::MAX#to_u64!
-    interprets Int32::MIN#to_u8!
    interprets Int32::MIN#to_u8!
-    interprets Int32::MIN#to_f64!
    interprets Int32::MIN#to_f64!
-    interprets Float64#to_f64! (negative)
    interprets Float64#to_f64! (negative)
-    interprets Int8::MAX#to_u8!
    interprets Int8::MAX#to_u8!
-    interprets UInt8::MAX#to_u32!
    interprets UInt8::MAX#to_u32!
-    interprets UInt8::MAX#to_i!
    interprets UInt8::MAX#to_i!
-    interprets UInt32::MAX#to_u!
    interprets UInt32::MAX#to_u!
-    interprets Float32#to_i64! (negative)
    interprets Float32#to_i64! (negative)
-    interprets Int32::MAX#to_f32!
    interprets Int32::MAX#to_f32!
-    interprets UInt64::MAX#to_i16!
    interprets UInt64::MAX#to_i16!
-    interprets Int32::MAX#to_i16!
    interprets Int32::MAX#to_i16!
-    interprets Int64::MAX#to_i32!
    interprets Int64::MAX#to_i32!
-    interprets Float64#to_u32! (positive)
    interprets Float64#to_u32! (positive)
-    interprets UInt16::MAX#to_u16!
    interprets UInt16::MAX#to_u16!
-    interprets Int16::MAX#to_i16!
    interprets Int16::MAX#to_i16!
-    interprets Int64::MIN#to_i16!
    interprets Int64::MIN#to_i16!
-    interprets Int64::MIN#to_i!
    interprets Int64::MIN#to_i!
-    interprets Int32::MAX#to_f64!
    interprets Int32::MAX#to_f64!
-    interprets Int32::MAX#to_u16!
    interprets Int32::MAX#to_u16!
-    interprets UInt16::MAX#to_i8!
    interprets UInt16::MAX#to_i8!
-    interprets UInt8::MAX#to_i64!
    interprets UInt8::MAX#to_i64!
-    interprets UInt64::MAX#to_i8!
    interprets UInt64::MAX#to_i8!
-    interprets Int16::MIN#to_i8!
    interprets Int16::MIN#to_i8!
-    interprets Int16::MAX#to_u32!
    interprets Int16::MAX#to_u32!
-    interprets Int32::MAX#to_u32!
    interprets Int32::MAX#to_u32!
-    interprets UInt32::MAX#to_i16!
    interprets UInt32::MAX#to_i16!
-    interprets Float32#to_f64! (negative)
    interprets Float32#to_f64! (negative)
-    interprets Int64::MIN#to_u64!
    interprets Int64::MIN#to_u64!
-    interprets Int16::MIN#to_u32!
    interprets Int16::MIN#to_u32!
-    interprets Int64::MIN#to_i64!
    interprets Int64::MIN#to_i64!
-    interprets Int8::MIN#to_i32!
    interprets Int8::MIN#to_i32!
-    interprets Int16::MAX#to_f64!
    interprets Int16::MAX#to_f64!
-    interprets Int32::MIN#to_f32!
    interprets Int32::MIN#to_f32!
-    interprets Int8::MIN#to_f32!
    interprets Int8::MIN#to_f32!
-    interprets UInt16::MAX#to_i32!
    interprets UInt16::MAX#to_i32!
-    interprets Int64::MAX#to_f32!
    interprets Int64::MAX#to_f32!
-    interprets Float32#to_u! (positive)
    interprets Float32#to_u! (positive)
-    interprets UInt16::MAX#to_u8!
    interprets UInt16::MAX#to_u8!
-    interprets Int8::MIN#to_i!
    interprets Int8::MIN#to_i!
-    interprets UInt8::MAX#to_f32!
    interprets UInt8::MAX#to_f32!
-    interprets Float64#to_f32! (positive)
    interprets Float64#to_f32! (positive)
-    interprets Int8::MIN#to_u16!
    interprets Int8::MIN#to_u16!
-    interprets Int8::MAX#to_i8!
    interprets Int8::MAX#to_i8!
-    interprets Int32::MIN#to_i!
    interprets Int32::MIN#to_i!
-    interprets Int64::MIN#to_u32!
    interprets Int64::MIN#to_u32!
-    interprets UInt32::MAX#to_u8!
    interprets UInt32::MAX#to_u8!
-    interprets UInt32::MAX#to_u16!
    interprets UInt32::MAX#to_u16!
-    interprets Int16::MIN#to_u8!
    interprets Int16::MIN#to_u8!
-    interprets Int64::MAX#to_f64!
    interprets Int64::MAX#to_f64!
-    interprets Int8::MAX#to_i32!
    interprets Int8::MAX#to_i32!
-    discards conversion with local var
    discards conversion with local var
-    interprets Int8::MAX#to_i16!
    interprets Int8::MAX#to_i16!
-    interprets Int8::MAX#to_f32!
    interprets Int8::MAX#to_f32!
-    interprets UInt32::MAX#to_u64!
    interprets UInt32::MAX#to_u64!
-    interprets Int32::MIN#to_i16!
    interprets Int32::MIN#to_i16!
-    interprets Float32#to_u16! (positive)
    interprets Float32#to_u16! (positive)
-    interprets Int64::MIN#to_i32!
    interprets Int64::MIN#to_i32!
-    interprets Int32::MIN#to_u16!
    interprets Int32::MIN#to_u16!
-    interprets Int16::MAX#to_u64!
    interprets Int16::MAX#to_u64!
-    interprets Float32#to_i32! (positive)
    interprets Float32#to_i32! (positive)
-    interprets Int32::MAX#to_u64!
    interprets Int32::MAX#to_u64!
-    interprets UInt8::MAX#to_i32!
    interprets UInt8::MAX#to_i32!
-    interprets Float64#to_u64! (positive)
    interprets Float64#to_u64! (positive)
-    UInt8#unsafe_chr
    UInt8#unsafe_chr
-    interprets Int16::MAX#to_i32!
    interprets Int16::MAX#to_i32!
-    interprets Float32#to_i32! (negative)
    interprets Float32#to_i32! (negative)
-    interprets Int64::MAX#to_i8!
    interprets Int64::MAX#to_i8!
-    interprets Int64::MIN#to_u!
    interprets Int64::MIN#to_u!
-    interprets Int16::MIN#to_i64!
    interprets Int16::MIN#to_i64!
-    interprets Int64::MAX#to_u!
    interprets Int64::MAX#to_u!
-    interprets Float32#to_u64! (positive)
    interprets Float32#to_u64! (positive)
-    interprets Float32#to_i8! (negative)
    interprets Float32#to_i8! (negative)
-    interprets UInt64::MAX#to_u16!
    interprets UInt64::MAX#to_u16!
-    interprets UInt32::MAX#to_i64!
    interprets UInt32::MAX#to_i64!
-    interprets Int16::MAX#to_i8!
    interprets Int16::MAX#to_i8!
-    interprets UInt64::MAX#to_i64!
    interprets UInt64::MAX#to_i64!
-    interprets Int16::MAX#to_f32!
    interprets Int16::MAX#to_f32!
-    interprets Char#ord
    interprets Char#ord
-    interprets Int16::MAX#to_i!
    interprets Int16::MAX#to_i!
-    interprets Float32#to_f64! (positive)
    interprets Float32#to_f64! (positive)
-    interprets Int64::MAX#to_u8!
    interprets Int64::MAX#to_u8!
-    interprets Float64#to_i! (positive)
    interprets Float64#to_i! (positive)
-    interprets Int16::MIN#to_i32!
    interprets Int16::MIN#to_i32!
-    interprets UInt8::MAX#to_i16!
    interprets UInt8::MAX#to_i16!
-    interprets Int8::MIN#to_i64!
    interprets Int8::MIN#to_i64!
-    interprets Int16::MAX#to_i64!
    interprets Int16::MAX#to_i64!
-    interprets Int16::MIN#to_f32!
    interprets Int16::MIN#to_f32!
-    interprets Int64::MIN#to_u16!
    interprets Int64::MIN#to_u16!
-    interprets UInt64::MAX#to_i!
    interprets UInt64::MAX#to_i!
-    interprets UInt32::MAX#to_f32!
    interprets UInt32::MAX#to_f32!
-    interprets Int32::MAX#to_u!
    interprets Int32::MAX#to_u!
-    interprets Float32#to_i! (negative)
    interprets Float32#to_i! (negative)
-    interprets Int16::MIN#to_f64!
    interprets Int16::MIN#to_f64!
-    interprets UInt64::MAX#to_u32!
    interprets UInt64::MAX#to_u32!
-    interprets Float64#to_i8! (negative)
    interprets Float64#to_i8! (negative)
-    interprets UInt16::MAX#to_f32!
    interprets UInt16::MAX#to_f32!
-    interprets UInt16::MAX#to_f64!
    interprets UInt16::MAX#to_f64!
-    interprets UInt32::MAX#to_i32!
    interprets UInt32::MAX#to_i32!
-    interprets Int16::MAX#to_u8!
    interprets Int16::MAX#to_u8!
-    interprets Float64#to_i32! (negative)
    interprets Float64#to_i32! (negative)
-    interprets Float64#to_u8! (positive)
    interprets Float64#to_u8! (positive)
-    interprets Int8::MIN#to_u!
    interprets Int8::MIN#to_u!
-    interprets Float64#to_i8! (positive)
    interprets Float64#to_i8! (positive)
-    interprets UInt16::MAX#to_i64!
    interprets UInt16::MAX#to_i64!
-    interprets Int64::MAX#to_u64!
    interprets Int64::MAX#to_u64!
-    interprets UInt32::MAX#to_u32!
    interprets UInt32::MAX#to_u32!
-    interprets Int64::MAX#to_u16!
    interprets Int64::MAX#to_u16!
-    interprets Float32#to_u8! (positive)
    interprets Float32#to_u8! (positive)
-    interprets UInt32::MAX#to_i!
    interprets UInt32::MAX#to_i!
-    interprets Int8::MIN#to_u8!
    interprets Int8::MIN#to_u8!
-    interprets Int64::MAX#to_u32!
    interprets Int64::MAX#to_u32!
-    interprets Float32#to_i! (positive)
    interprets Float32#to_i! (positive)
-    interprets UInt32::MAX#to_i8!
    interprets UInt32::MAX#to_i8!
-    interprets UInt64::MAX#to_u!
    interprets UInt64::MAX#to_u!
-    interprets Float32#to_u32! (positive)
    interprets Float32#to_u32! (positive)
-    interprets Int32::MIN#to_u32!
    interprets Int32::MIN#to_u32!
-    interprets Int16::MIN#to_i!
    interprets Int16::MIN#to_i!
-    interprets Int32::MIN#to_u!
    interprets Int32::MIN#to_u!
-    interprets UInt8::MAX#to_u!
    interprets UInt8::MAX#to_u!
-    interprets UInt16::MAX#to_i16!
    interprets UInt16::MAX#to_i16!
-    interprets Int64::MIN#to_f64!
    interprets Int64::MIN#to_f64!
-    interprets Int8::MIN#to_u64!
    interprets Int8::MIN#to_u64!
-    interprets UInt8::MAX#to_u8!
    interprets UInt8::MAX#to_u8!
-    interprets Float32#to_i16! (negative)
    interprets Float32#to_i16! (negative)
-    interprets Int32::MIN#to_i64!
    interprets Int32::MIN#to_i64!
-    interprets Int32::MAX#to_i64!
    interprets Int32::MAX#to_i64!
-    interprets Float64#to_i64! (positive)
    interprets Float64#to_i64! (positive)
-    interprets Float64#to_u! (positive)
    interprets Float64#to_u! (positive)
-    interprets Int32::MAX#to_u8!
    interprets Int32::MAX#to_u8!
-    interprets Int8::MIN#to_u32!
    interprets Int8::MIN#to_u32!
-    interprets UInt8::MAX#to_u64!
    interprets UInt8::MAX#to_u64!
-    interprets Int64::MAX#to_i!
    interprets Int64::MAX#to_i!
-    interprets Int8::MAX#to_u!
    interprets Int8::MAX#to_u!
-    interprets UInt64::MAX#to_i32!
    interprets UInt64::MAX#to_i32!
-    interprets Float64#to_i16! (positive)
    interprets Float64#to_i16! (positive)
-    interprets Float32#to_i64! (positive)
    interprets Float32#to_i64! (positive)
-    Int32#unsafe_chr
    Int32#unsafe_chr
-    interprets Int8::MIN#to_i16!
    interprets Int8::MIN#to_i16!
-    interprets UInt64::MAX#to_f32!
    interprets UInt64::MAX#to_f32!
-    interprets Int64::MIN#to_i8!
    interprets Int64::MIN#to_i8!
-    interprets Int8::MIN#to_i8!
    interprets Int8::MIN#to_i8!
-    interprets Int32::MIN#to_i32!
    interprets Int32::MIN#to_i32!
-    interprets Int64::MIN#to_u8!
    interprets Int64::MIN#to_u8!
-    interprets Int32::MAX#to_i!
    interprets Int32::MAX#to_i!
-    interprets Int32::MAX#to_i8!
    interprets Int32::MAX#to_i8!
-    interprets Float64#to_u16! (positive)
    interprets Float64#to_u16! (positive)
-    interprets Int16::MIN#to_u!
    interprets Int16::MIN#to_u!
-    interprets Int8::MAX#to_u64!
    interprets Int8::MAX#to_u64!
-    interprets Int8::MAX#to_i!
    interprets Int8::MAX#to_i!
-    interprets Float64#to_i64! (negative)
    interprets Float64#to_i64! (negative)
-    interprets Float64#to_i16! (negative)
    interprets Float64#to_i16! (negative)
-    interprets Int8::MAX#to_f64!
    interprets Int8::MAX#to_f64!
-    interprets Float32#to_f32! (negative)
    interprets Float32#to_f32! (negative)
-    interprets Int32::MIN#to_u64!
    interprets Int32::MIN#to_u64!
-    interprets Float64#to_f64! (positive)
    interprets Float64#to_f64! (positive)
-    interprets UInt64::MAX#to_u8!
    interprets UInt64::MAX#to_u8!
-  math
-    interprets Int32 * Int32
    interprets Int32 * Int32
-    discards math
    discards math
-    interprets UInt64 * Int32
    interprets UInt64 * Int32
-    interprets UInt32 - Int32
    interprets UInt32 - Int32
-    interprets Float64 + Int32
    interprets Float64 + Int32
-    interprets UInt64 & Int32
    interprets UInt64 & Int32
-    interprets Float32 + Float64
    interprets Float32 + Float64
-    interprets Int32 &- Int32
    interprets Int32 &- Int32
-    interprets Int32 &+ Int32
    interprets Int32 &+ Int32
-    interprets Int32 + Float64
    interprets Int32 + Float64
-    interprets UInt64 | UInt32
    interprets UInt64 | UInt32
-    interprets Int8 + Int8
    interprets Int8 + Int8
-    interprets Int32 &* Int32
    interprets Int32 &* Int32
-    interprets Float64 - Float64
    interprets Float64 - Float64
-    interprets Int32 - Int32
    interprets Int32 - Int32
-    interprets UInt8 | Int32
    interprets UInt8 | Int32
-    interprets Float64 * Float64
    interprets Float64 * Float64
-    interprets Int128 + Int32
    interprets Int128 + Int32
-    interprets Int32.unsafe_shl(Int32) with self
    interprets Int32.unsafe_shl(Int32) with self
-    interprets Int64 + Int64
    interprets Int64 + Int64
-    interprets Float64 + Float64
    interprets Float64 + Float64
-    interprets Int32 + Int32
    interprets Int32 + Int32
-  logical operations
-    discards bool not
    discards bool not
-    interprets not for nilable proc type (false)
    interprets not for nilable proc type (false)
-    interprets not for bool false
    interprets not for bool false
-    interprets not for generic module metaclass
    interprets not for generic module metaclass
-    discards nil not
    discards nil not
-    interprets not for bool true
    interprets not for bool true
-    interprets not for nilable type (false)
    interprets not for nilable type (false)
-    does math primitive on union
    does math primitive on union
-    interprets not for generic class instance type
    interprets not for generic class instance type
-    interprets not for generic class instance metaclass
    interprets not for generic class instance metaclass
-    interprets not for nilable type (true)
    interprets not for nilable type (true)
-    interprets not for mixed union (true)
    interprets not for mixed union (true)
-    interprets not for nilable type (false)
    interprets not for nilable type (false)
-    interprets not for mixed union (nil)
    interprets not for mixed union (nil)
-    interprets not for nil
    interprets not for nil
-    interprets not for nilable proc type (true)
    interprets not for nilable proc type (true)
-    interprets not for generic module
    interprets not for generic module
-    does math convert on union
    does math convert on union
-    interprets not for module (#12918)
    interprets not for module (#12918)
-    interprets not for mixed union (other)
    interprets not for mixed union (other)
-    interprets not for nil type
    interprets not for nil type
-    interprets not for nilable type (true)
    interprets not for nilable type (true)
-    interprets not for bool false
    interprets not for bool false
-    interprets not for mixed union (false)
    interprets not for mixed union (false)
-  overflow
-    conversion
-      overlows on -1_i64.to_u8
      overlows on -1_i64.to_u8
-      overlows on -1_i16.to_u32
      overlows on -1_i16.to_u32
-      overlows on 65536_f32.to_u16
      overlows on 65536_f32.to_u16
-      overlows on -1.to_u8
      overlows on -1.to_u8
-      overlows on 128_f64.to_i8
      overlows on 128_f64.to_i8
-      overlows on 256_f64.to_u8
      overlows on 256_f64.to_u8
-      overlows on 32768_u32.to_i16
      overlows on 32768_u32.to_i16
-      overlows on 32768_u16.to_i16
      overlows on 32768_u16.to_i16
-      overlows on 4294967296_f64.to_u32
      overlows on 4294967296_f64.to_u32
-      overlows on -1.to_u32
      overlows on -1.to_u32
-      overlows on 128_u64.to_i8
      overlows on 128_u64.to_i8
-      overlows on 128_u16.to_i8
      overlows on 128_u16.to_i8
-      overlows on -1_i8.to_u64
      overlows on -1_i8.to_u64
-      overlows on 1.7976931348623157e+308.to_f32
      overlows on 1.7976931348623157e+308.to_f32
-      overlows on 2147483648_f64.to_i32
      overlows on 2147483648_f64.to_i32
-      overlows on 128_f32.to_i8
      overlows on 128_f32.to_i8
-      overlows on -1_i64.to_u64
      overlows on -1_i64.to_u64
-      overlows on -1.to_u16
      overlows on -1.to_u16
-      overlows on 2147483648_u32.to_i32
      overlows on 2147483648_u32.to_i32
-      overlows on -1_i16.to_u64
      overlows on -1_i16.to_u64
-      overlows on -1_i16.to_u8
      overlows on -1_i16.to_u8
-      overlows on 256_f32.to_u8
      overlows on 256_f32.to_u8
-      overlows on -1_i64.to_u16
      overlows on -1_i64.to_u16
-      overlows on -1_i16.to_u16
      overlows on -1_i16.to_u16
-      overlows on -1_i8.to_u16
      overlows on -1_i8.to_u16
-      overlows on -1_i8.to_u8
      overlows on -1_i8.to_u8
-      overlows on 32768_f64.to_i16
      overlows on 32768_f64.to_i16
-      overlows on -1_i64.to_u32
      overlows on -1_i64.to_u32
-      overlows on -1.to_u64
      overlows on -1.to_u64
-      overlows on 9223372036854775808_u64.to_i64
      overlows on 9223372036854775808_u64.to_i64
-      overlows on 128_u8.to_i8
      overlows on 128_u8.to_i8
-      overlows on 128_u32.to_i8
      overlows on 128_u32.to_i8
-      overlows on -1_i8.to_u32
      overlows on -1_i8.to_u32
-      overlows on 2147483648_u64.to_i32
      overlows on 2147483648_u64.to_i32
-      overlows on 65536_f64.to_u16
      overlows on 65536_f64.to_u16
-      overlows on 32768_f32.to_i16
      overlows on 32768_f32.to_i16
-      overlows on 32768_u64.to_i16
      overlows on 32768_u64.to_i16
-    *
-      overlows on 20_u64 * 1844674407370955161_i64
      overlows on 20_u64 * 1844674407370955161_i64
-      overlows on 10_i8 * 14
      overlows on 10_i8 * 14
-      overlows on 20_u32 * 429496729
      overlows on 20_u32 * 429496729
-      overlows on 10_u8 * 26
      overlows on 10_u8 * 26
-      overlows on 10_i16 * 3300
      overlows on 10_i16 * 3300
-      overlows on 10_u16 * 6600
      overlows on 10_u16 * 6600
-      overlows on 20 * 214748364
      overlows on 20 * 214748364
-      overlows on 20_i64 * 922337203685477580_i64
      overlows on 20_i64 * 922337203685477580_i64
-    +
-      overlows on 1_i16 + 32767
      overlows on 1_i16 + 32767
-      overlows on 1 + 2147483647
      overlows on 1 + 2147483647
-      overlows on 1_u64 + 18446744073709551615_u64
      overlows on 1_u64 + 18446744073709551615_u64
-      overlows on 1_i64 + 9223372036854775807_i64
      overlows on 1_i64 + 9223372036854775807_i64
-      overlows on 1_i8 + 128
      overlows on 1_i8 + 128
-      overlows on 1_u32 + 4294967295_i64
      overlows on 1_u32 + 4294967295_i64
-      overlows on 1_u16 + 65535
      overlows on 1_u16 + 65535
-      overlows on 1_u8 + 255
      overlows on 1_u8 + 255
-    -
-      overlows on 1_i8 - 256
      overlows on 1_i8 - 256
-      overlows on 1_i64 - 9223372036854775810_u64
      overlows on 1_i64 - 9223372036854775810_u64
-      overlows on 1_u64 - 2
      overlows on 1_u64 - 2
-      overlows on 1_i16 - 32770
      overlows on 1_i16 - 32770
-      overlows on 1_u16 - 2
      overlows on 1_u16 - 2
-      overlows on 1_u32 - 2
      overlows on 1_u32 - 2
-      overlows on 1_u8 - 2
      overlows on 1_u8 - 2
-      overlows on 1 - 2147483650_i64
      overlows on 1 - 2147483650_i64
-  comparisons
-    interprets Int128 == Int128 (true)
    interprets Int128 == Int128 (true)
-    interprets UInt64 == Int32 (false when Int32 < 0)
    interprets UInt64 == Int32 (false when Int32 < 0)
-    interprets Int32 < Float64
    interprets Int32 < Float64
-    interprets Float32 fdiv Float64
    interprets Float32 fdiv Float64
-    interprets Float32 / Float32
    interprets Float32 / Float32
-    interprets Char == Char (false)
    interprets Char == Char (false)
-    interprets Bool != Bool (true)
    interprets Bool != Bool (true)
-    discards comparison
    discards comparison
-    interprets Float64 / Float64
    interprets Float64 / Float64
-    interprets UInt32 < Int32 (false)
    interprets UInt32 < Int32 (false)
-    interprets UInt64 == Int32 (true when Int32 >= 0)
    interprets UInt64 == Int32 (true when Int32 >= 0)
-    interprets UInt64 != Int32 (true)
    interprets UInt64 != Int32 (true)
-    interprets Int32 < Int32
    interprets Int32 < Int32
-    interprets Int32 != UInt64 (true)
    interprets Int32 != UInt64 (true)
-    interprets Float64 < Int32
    interprets Float64 < Int32
-    interprets UInt64 == Int32 (false when Int32 >= 0)
    interprets UInt64 == Int32 (false when Int32 >= 0)
-    interprets Int32 == UInt64 (false)
    interprets Int32 == UInt64 (false)
-    interprets Float64 < Float64
    interprets Float64 < Float64
-    interprets Char == Char (true)
    interprets Char == Char (true)
-    interprets Float64 fdiv Float32
    interprets Float64 fdiv Float32
-    interprets Int128 == Int128 (false)
    interprets Int128 == Int128 (false)
-    interprets Int32 == Float64 (false)
    interprets Int32 == Float64 (false)
-    interprets UInt64 < Int32 (false, right is less than zero)
    interprets UInt64 < Int32 (false, right is less than zero)
-    interprets UInt64 < Int32 (false, right is greater than zero)
    interprets UInt64 < Int32 (false, right is greater than zero)
-    interprets Int32 != UInt64 (false)
    interprets Int32 != UInt64 (false)
-    interprets Float32 / Int32
    interprets Float32 / Int32
-    interprets Int32 == Int32 (true)
    interprets Int32 == Int32 (true)
-    interprets UInt8 < Int32 (false, right is less than zero)
    interprets UInt8 < Int32 (false, right is less than zero)
-    interprets Int32 != Int32 (true)
    interprets Int32 != Int32 (true)
-    interprets UInt8 < Int32 (true, right is greater than zero)
    interprets UInt8 < Int32 (true, right is greater than zero)
-    interprets Int32 > Float64 (true)
    interprets Int32 > Float64 (true)
-    interprets UInt32 < Int32 (true)
    interprets UInt32 < Int32 (true)
-    interprets UInt64 != Int32 (false)
    interprets UInt64 != Int32 (false)
-    interprets UInt64 > UInt32 (false)
    interprets UInt64 > UInt32 (false)
-    interprets UInt64 < Int32 (true, right is greater than zero)
    interprets UInt64 < Int32 (true, right is greater than zero)
-    interprets Int32 == Int32 (false)
    interprets Int32 == Int32 (false)
-    interprets Bool == Bool (true)
    interprets Bool == Bool (true)
-    interprets Int32 == UInt64 (true)
    interprets Int32 == UInt64 (true)
-    interprets UInt64.unsafe_mod(UInt64)
    interprets UInt64.unsafe_mod(UInt64)
-    interprets Bool == Bool (false)
    interprets Bool == Bool (false)
-    interprets UInt8 < Int32 (false, right is greater than zero)
    interprets UInt8 < Int32 (false, right is greater than zero)
-    interprets Int32 > Float64 (false)
    interprets Int32 > Float64 (false)
-    interprets Bool != Bool (false)
    interprets Bool != Bool (false)
-    interprets Int32 != Int32 (false)
    interprets Int32 != Int32 (false)
-    interprets Int32 == Float64 (true)
    interprets Int32 == Float64 (true)
-    interprets UInt64 > UInt32 (true)
    interprets UInt64 > UInt32 (true)
-  literals
-    interprets a bool (false)
    interprets a bool (false)
-    interprets an UInt128
    interprets an UInt128
-    interprets nil
    interprets nil
-    interprets an Int8
    interprets an Int8
-    interprets a char
    interprets a char
-    interprets an Int64
    interprets an Int64
-    interprets an UInt8
    interprets an UInt8
-    precomputes string literal length
    precomputes string literal length
-    interprets an UInt16
    interprets an UInt16
-    interprets an Int16
    interprets an Int16
-    interprets an UInt64
    interprets an UInt64
-    interprets a Float64
    interprets a Float64
-    interprets a Float32
    interprets a Float32
-    interprets a bool (true)
    interprets a bool (true)
-    interprets an Int128
    interprets an Int128
-    interprets an Int32
    interprets an Int32
-    interprets an UInt32
    interprets an UInt32
-    interprets a String literal
    interprets a String literal
-    uses a string pool
    uses a string pool
-Semantic: pointer
-  doesn't crash if pointerof expansion type has generic splat parameter (#11808)
  doesn't crash if pointerof expansion type has generic splat parameter (#11808)
-  types pointer diff
  types pointer diff
-  errors with non-matching generic value with value=, union of generic types (#10544)
  errors with non-matching generic value with value=, union of generic types (#10544)
-  errors with non-matching generic value with value=, generic type (#10211)
  errors with non-matching generic value with value=, generic type (#10211)
-  detects recursive pointerof expansion (3)
  detects recursive pointerof expansion (3)
-  errors if doing Pointer.allocate
  errors if doing Pointer.allocate
-  pointer of value error
  pointer of value error
-  allows using pointer with subclass
  allows using pointer with subclass
-  types pointer of constant
  types pointer of constant
-  can assign pointerof virtual type (#8216)
  can assign pointerof virtual type (#8216)
-  types pointer value
  types pointer value
-  can pass any pointer to something expecting void* in lib call, with to_unsafe
  can pass any pointer to something expecting void* in lib call, with to_unsafe
-  types realloc
  types realloc
-  errors with non-matching generic value with value= (#10211)
  errors with non-matching generic value with value= (#10211)
-  type pointer casting
  type pointer casting
-  detects recursive pointerof expansion (4)
  detects recursive pointerof expansion (4)
-  types pointer add
  types pointer add
-  says undefined variable (#7556)
  says undefined variable (#7556)
-  type pointer casting of object type
  type pointer casting of object type
-  can't do Pointer.malloc without type var
  can't do Pointer.malloc without type var
-  types pointer value on typedef
  types pointer value on typedef
-  detects recursive pointerof expansion (#551) (#553)
  detects recursive pointerof expansion (#551) (#553)
-  pointer malloc creates new type
  pointer malloc creates new type
-  types int pointer
  types int pointer
-  can pass any pointer to something expecting void* in lib call
  can pass any pointer to something expecting void* in lib call
-  takes pointerof lib external var
  takes pointerof lib external var
-  pointer of class raises error
  pointer of class raises error
-  types Pointer.malloc
  types Pointer.malloc
-  detects recursive pointerof expansion (2) (#1654)
  detects recursive pointerof expansion (2) (#1654)
-  can assign nil to void pointer
  can assign nil to void pointer
-  create pointer by address
  create pointer by address
-Semantic: doc
-  stores doc for enum with @[Flags]
  stores doc for enum with @[Flags]
-  doc before annotation
-    attached to alias
    attached to alias
-    attached to enum
    attached to enum
-    attached to macro
    attached to macro
-    attached to macro call
    attached to macro call
-    attached to macro call that produces multiple types
    attached to macro call that produces multiple types
-    attached to constant
    attached to constant
-    attached to module
    attached to module
-    attached to struct/class
    attached to struct/class
-    attached to def
    attached to def
-  overwrites doc for struct when reopening
  overwrites doc for struct when reopening
-  stores doc for enum when reopening
  stores doc for enum when reopening
-  overwrites doc for enum when reopening
  overwrites doc for enum when reopening
-  overwrites doc for macro when redefining
  overwrites doc for macro when redefining
-  stores doc for def
  stores doc for def
-  stores doc for def with annotation
  stores doc for def with annotation
-  stores doc for module
  stores doc for module
-  stores doc for enum member
  stores doc for enum member
-  stores doc for def with visibility
  stores doc for def with visibility
-  stores doc for def with annotation
  stores doc for def with annotation
-  overwrites doc for module when reopening
  overwrites doc for module when reopening
-  stores doc for fun def
  stores doc for fun def
-  stores doc for macro defined in macro call
  stores doc for macro defined in macro call
-  stores doc for nodes defined in macro call
  stores doc for nodes defined in macro call
-  stores doc for flags enum with base type
  stores doc for flags enum with base type
-  stores locations for auto-generated module
  stores locations for auto-generated module
-  stores doc for macro
  stores doc for macro
-  stores doc for struct
  stores doc for struct
-  stores doc for abstract def
  stores doc for abstract def
-  stores doc for class when reopening
  stores doc for class when reopening
-  stores doc for class
  stores doc for class
-  stores doc for enum
  stores doc for enum
-  overwrites doc for class when reopening
  overwrites doc for class when reopening
-  stores doc for alias
  stores doc for alias
-  :ditto:
-    amend previous doc (without empty line)
    amend previous doc (without empty line)
-    amend previous doc
    amend previous doc
-    stores doc for macro
    stores doc for macro
-    stores doc for const
    stores doc for const
-    :ditto: references last non-ditto doc
    :ditto: references last non-ditto doc
-    stores doc for def
    stores doc for def
-  stores location for implicit flag enum members
  stores location for implicit flag enum members
-  attaches doc to annotation in macro expansion (#9628)
  attaches doc to annotation in macro expansion (#9628)
-  stores doc for abstract class
  stores doc for abstract class
-  stores doc for constant
  stores doc for constant
-  stores doc for nodes defined in macro call (2)
  stores doc for nodes defined in macro call (2)
-  stores doc for enum and doesn't mix with value
  stores doc for enum and doesn't mix with value
-  stores doc for struct when reopening
  stores doc for struct when reopening
-  overwrites doc for def when redefining
  overwrites doc for def when redefining
-  attaches doc in double macro expansion (#8463)
  attaches doc in double macro expansion (#8463)
-  stores doc for module when reopening
  stores doc for module when reopening
-Crystal::Repl::Interpreter
-  instance_sizeof
-    interprets instance_sizeof typeof
    interprets instance_sizeof typeof
-  instance_alignof
-    interprets instance_alignof typeof
    interprets instance_alignof typeof
-  sizeof
-    interprets sizeof typeof
    interprets sizeof typeof
-  alignof
-    interprets alignof typeof
    interprets alignof typeof
-Semantic: class var
+  declares instance var of generic type, with metaclass
  declares instance var of generic type, with metaclass
+  declares instance var with union type with a virtual member
  declares instance var with union type with a virtual member
+  guesses virtual hash type (2) (#5342)
  guesses virtual hash type (2) (#5342)
+  infers from assign to local var in generic type (#2467)
  infers from assign to local var in generic type (#2467)
+  doesn't if declaring nilable instance var and turns out to be nilable
  doesn't if declaring nilable instance var and turns out to be nilable
+  infers type from lib out (2)
  infers type from lib out (2)
+  declares instance var of generic type through module
  declares instance var of generic type through module
+  guesses virtual array type (2) (#5342)
  guesses virtual array type (2) (#5342)
+  guesses from as.(typeof(...))
  guesses from as.(typeof(...))
+  infers type from included module recursively
  infers type from included module recursively
+  uses T.new (#4291)
  uses T.new (#4291)
+  doesn't infer generic type without type argument inside generic
  doesn't infer generic type without type argument inside generic
+  errors when typing an instance variable inside a method
  errors when typing an instance variable inside a method
+  errors if adds instance variable to Object via guess
  errors if adds instance variable to Object via guess
+  infers type from as
  infers type from as
   infers type from number literal
  infers type from number literal
-  declares class variable
  declares class variable
-  can find class var through included module
  can find class var through included module
-  gives correct error when trying to use Int as a class variable type
  gives correct error when trying to use Int as a class variable type
-  redefines class variable type
  redefines class variable type
-  errors if class variable not nilable without initializer
  errors if class variable not nilable without initializer
-  infers in multiple assign for tuple type (1)
  infers in multiple assign for tuple type (1)
-  errors if redefining class var type in subclass, with guess
  errors if redefining class var type in subclass, with guess
-  errors when typing a class variable inside a method
  errors when typing a class variable inside a method
-  errors if redefining class var type in included module
  errors if redefining class var type in included module
-  declares class var in generic class
  declares class var in generic class
-  declares class variable (2)
  declares class variable (2)
-  errors if using self as type var but there's no self
  errors if using self as type var but there's no self
-  says undefined class variable
  says undefined class variable
-  infers type from T.new
  infers type from T.new
-  errors on undefined constant (1)
  errors on undefined constant (1)
-  declares uninitialized (#2935)
  declares uninitialized (#2935)
-  errors if using class variable at the top level
  errors if using class variable at the top level
-  can assign to class variable if this type can be up-casted to ancestors class variable type (#4869)
  can assign to class variable if this type can be up-casted to ancestors class variable type (#4869)
+  infers type for generic class, with begin
  infers type for generic class, with begin
+  says can't infer type if only nil was assigned, in generic type
  says can't infer type if only nil was assigned, in generic type
+  infers type from named tuple literal
  infers type from named tuple literal
   errors when using Class (#2605)
  errors when using Class (#2605)
-  allows class var in primitive types (#612)
  allows class var in primitive types (#612)
-  doesn't error if accessing class variable before defined (#2941)
  doesn't error if accessing class variable before defined (#2941)
-  declares class var in generic module
  declares class var in generic module
-  types class var inside instance method
  types class var inside instance method
-  can find class var in subclass
  can find class var in subclass
-  can access constant from generic metaclass (#3719)
  can access constant from generic metaclass (#3719)
-  types class var as nil if assigned for the first time inside method (#2059)
  types class var as nil if assigned for the first time inside method (#2059)
-  types as nilable if doesn't have initializer
  types as nilable if doesn't have initializer
-  errors on undefined constant (2)
  errors on undefined constant (2)
-  doesn't error on recursive dependency if var is nilable (#2943)
  doesn't error on recursive dependency if var is nilable (#2943)
-  types class var inside proc literal inside class
  types class var inside proc literal inside class
-  errors if redefining class var type in subclass
  errors if redefining class var type in subclass
-  allows self.class as type var in class body (#537)
  allows self.class as type var in class body (#537)
-  types class var
  types class var
-  types class var as nil if not assigned at the top level
  types class var as nil if not assigned at the top level
-  errors if using local variable in initializer
  errors if using local variable in initializer
+  types generic instance as virtual type if generic type has subclasses (#3805)
  types generic instance as virtual type if generic type has subclasses (#3805)
+  errors if not initializing super variable in generic
  errors if not initializing super variable in generic
+  doesn't crash on #3580
  doesn't crash on #3580
+  doesn't error if initializes via super in macro def
  doesn't error if initializes via super in macro def
+  errors when assigning instance variable inside nested expression
  errors when assigning instance variable inside nested expression
+  guesses inside macro for
  guesses inside macro for
+immutability of returned container literals (#10818)
+  Annotation#args
  Annotation#args
+  When#conds
  When#conds
+  Generic#type_vars
  Generic#type_vars
+  ProcPointer#args
  ProcPointer#args
+  MultiAssign#targets
  MultiAssign#targets
+  ProcNotation#inputs
  ProcNotation#inputs
+  MultiAssign#values
  MultiAssign#values
+  StringInterpolation#expressions
  StringInterpolation#expressions
+  Union#types
  Union#types
+Crystal::Playground::Session
+  assert
  assert
 Crystal::Repl::Interpreter
   enum
     does enum value
    does enum value
     does enum new
    does enum new
-Code gen: def with default value
-  considers first the one with a restriction
  considers first the one with a restriction
-  considers first the one with more arguments
  considers first the one with more arguments
-  codegens def new with one default value
  codegens def new with one default value
-  resolves expanded call to current type, not to virtual type
  resolves expanded call to current type, not to virtual type
-  doesn't mix types of instance vars with initialize and new
  doesn't mix types of instance vars with initialize and new
-  codegens def with one default value
  codegens def with one default value
-MacroExpander
-  expands macro with and (1)
  expands macro with and (1)
-  expands macro with string substitution
  expands macro with string substitution
-  expands macro with and (2)
  expands macro with and (2)
-  expands macro with char
  expands macro with char
-  for
-    expands macro with for over range literal
    expands macro with for over range literal
-    expands macro with for over array literal with index
    expands macro with for over array literal with index
-    expands macro with for over array literal
    expands macro with for over array literal
-    expands macro with for over range literal, evaluating elements
    expands macro with for over range literal, evaluating elements
-    expands macro with for over hash literal with index
    expands macro with for over hash literal with index
-    expands macro with for over tuple literal
    expands macro with for over tuple literal
-    expands macro with for over embedded array literal
    expands macro with for over embedded array literal
-    expands macro with for over range literal, evaluating elements (exclusive)
    expands macro with for over range literal, evaluating elements (exclusive)
-    expands macro with for over hash literal
    expands macro with for over hash literal
-  expands macro with argument-less call substitution
  expands macro with argument-less call substitution
-  if
-    expands macro with if with not
    expands macro with if with not
-    expands macro with if when truthy
    expands macro with if when truthy
-    expands macro with if else when falsey
    expands macro with if else when falsey
-    expands macro with if with nop
    expands macro with if with nop
-    expands macro with if when falsey
    expands macro with if when falsey
-  does not expand when macro expression is {% ... %}
  does not expand when macro expression is {% ... %}
-  expands macro with or (1)
  expands macro with or (1)
-  expands macro with symbol
  expands macro with symbol
-  expands macro with var substitution
  expands macro with var substitution
-  does regular unless
  does regular unless
-  does regular if
  does regular if
-  outputs invisible location pragmas
  outputs invisible location pragmas
-  expands simple macro
  expands simple macro
-  expands macro with tuple
  expands macro with tuple
-  expands macro with hash
  expands macro with hash
-  expands macro with symbol substitution
  expands macro with symbol substitution
-  expands macro with range
  expands macro with range
-  can't use `yield` outside a macro
  can't use `yield` outside a macro
-  expands macro with or (2)
  expands macro with or (2)
-  expands macro with boolean
  expands macro with boolean
-  expands macro with array
  expands macro with array
-  expands macro with string
  expands macro with string
-  expands macro with string interpolation
  expands macro with string interpolation
-  expands macro with nil
  expands macro with nil
-  expands macro with integer
  expands macro with integer
+Normalize: return next break
+  doesn't remove after return when there's an unless
  doesn't remove after return when there's an unless
+  removes nodes after if that returns in both branches
  removes nodes after if that returns in both branches
+  removes nodes after break
  removes nodes after break
+  removes nodes after next
  removes nodes after next
+  doesn't remove nodes after if that returns in one branch
  doesn't remove nodes after if that returns in one branch
+  removes nodes after return
  removes nodes after return
+Crystal::Repl::Interpreter
+  procs
+    interprets call inside Proc type
    interprets call inside Proc type
+    interprets proc literal with args
    interprets proc literal with args
+    can downcast Proc(T) to Proc(Nil)
    can downcast Proc(T) to Proc(Nil)
+    discards proc call
    discards proc call
+    interprets no args proc literal
    interprets no args proc literal
+    casts from nilable proc type to proc type
    casts from nilable proc type to proc type
+  does call without receiver inside closure
  does call without receiver inside closure
+  casts proc call arguments to proc arg types (#12350)
  casts proc call arguments to proc arg types (#12350)
+  calls proc primitive on union of module that has no subtypes (#12954)
  calls proc primitive on union of module that has no subtypes (#12954)
+Normalize: chained comparisons
+  normalizes two comparisons with calls
  normalizes two comparisons with calls
+  normalizes one comparison with call
  normalizes one comparison with call
+  normalizes two comparisons with literal
  normalizes two comparisons with literal
+  normalizes one comparison with var
  normalizes one comparison with var
+  normalizes one comparison with literal
  normalizes one comparison with literal
+Crystal::Repl::Interpreter
+  integration
+    does Float64#to_s (simple)
    does Float64#to_s (simple)
+    does caller
    does caller
+    does String#includes?
    does String#includes?
+    does CSV
    does CSV
+    does YAML::Serializable
    does YAML::Serializable
+    does Int32#to_s
    does Int32#to_s
+    does JSON
    does JSON
+    does IO.pipe (checks that StaticArray is passed correctly to C calls)
    does IO.pipe (checks that StaticArray is passed correctly to C calls)
+    does Float64#to_s (complex)
    does Float64#to_s (complex)
+    does XML
    does XML
+    does some Hash methods
    does some Hash methods
+    does YAML
    does YAML
+    does Range#to_a, Array#to_s
    does Range#to_a, Array#to_s
+    does JSON::Serializable
    does JSON::Serializable
+Code gen: no return
+  codegens no return variable declaration (#1508)
  codegens no return variable declaration (#1508)
+  codegens if with no return and variable used afterwards
  codegens if with no return and variable used afterwards
+  codegens if with NoReturn on then and union on else
  codegens if with NoReturn on then and union on else
+  codegens untyped typeof (#5105)
  codegens untyped typeof (#5105)
+  codegens call with no return because of falsey if (#3661)
  codegens call with no return because of falsey if (#3661)
+  codegen types exception handler as NoReturn if ensure is NoReturn
  codegen types exception handler as NoReturn if ensure is NoReturn
+  codegens no return instance variable declaration (#1508)
  codegens no return instance variable declaration (#1508)
+  codegens Pointer(NoReturn).malloc
  codegens Pointer(NoReturn).malloc
+Code gen: and
+  codegens and with primitive type other than bool with union
  codegens and with primitive type other than bool with union
+  codegens and with bool union as left node 3
  codegens and with bool union as left node 3
+  codegens and with non-false union as left node
  codegens and with non-false union as left node
+  codegens assign in right node, inside if must not be nil
  codegens assign in right node, inside if must not be nil
+  codegens and with bool union as left node 1
  codegens and with bool union as left node 1
+  codegens and with bool and int 1
  codegens and with bool and int 1
+  codegens assign in right node, after if must be nilable
  codegens assign in right node, after if must be nilable
+  codegens and with primitive type other than bool
  codegens and with primitive type other than bool
+  codegens and with bool true and false
  codegens and with bool true and false
+  codegens and with bool union as left node 1
  codegens and with bool union as left node 1
+  codegens and with bool union as left node 4
  codegens and with bool union as left node 4
+  codegens and with bool union as left node 3
  codegens and with bool union as left node 3
+  codegens and with nil union as left node 1
  codegens and with nil union as left node 1
+  codegens and with nil union as left node 2
  codegens and with nil union as left node 2
+  codegens and with bool and int 2
  codegens and with bool and int 2
+  codegens and with bool union as left node 2
  codegens and with bool union as left node 2
+  codegens and with nilable as left node 1
  codegens and with nilable as left node 1
+  codegens and with bool true and true
  codegens and with bool true and true
+  codegens and with bool false and false
  codegens and with bool false and false
+  codegens and with primitive type other than bool
  codegens and with primitive type other than bool
+  codegens and with bool union as left node 2
  codegens and with bool union as left node 2
+  codegens and with nilable as left node 2
  codegens and with nilable as left node 2
+  codegens assign in right node, after must be nilable
  codegens assign in right node, after must be nilable
+  codegens and with bool false and true
  codegens and with bool false and true
+Normalize: or
+  normalizes or with is_a? on var
  normalizes or with is_a? on var
+  normalizes or with ! on var.is_a?(...)
  normalizes or with ! on var.is_a?(...)
+  normalizes or with variable on the left
  normalizes or with variable on the left
+  normalizes or with ! on var
  normalizes or with ! on var
+  normalizes or without variable
  normalizes or without variable
+  normalizes or with assignment on the left
  normalizes or with assignment on the left
+Semantic: nil
+  can call a fun with nil for typedef pointer
  can call a fun with nil for typedef pointer
+  marks instance variables as nil but doesn't explode on macros
  marks instance variables as nil but doesn't explode on macros
+  marks instance variables as nil when not in initialize 2
  marks instance variables as nil when not in initialize 2
+  restricts type of 'while foo'
  restricts type of 'while foo'
+  restricts type of 'while foo' on assign
  restricts type of 'while foo' on assign
+  types nil
  types nil
+  types empty
  types empty
+  marks instance variables as nil when not in initialize
  marks instance variables as nil when not in initialize
+  restricts type of 'if foo'
  restricts type of 'if foo'
+  can call a fun with nil for pointer
  can call a fun with nil for pointer
+  restricts type of 'if foo' on assign
  restricts type of 'if foo' on assign
+  doesn't check return type for nil
  doesn't check return type for nil
+  doesn't check return type for void
  doesn't check return type for void
 Crystal::Repl::Interpreter
   responds_to?
-    doesn't crash if def body ends up with no type (#12219)
    doesn't crash if def body ends up with no type (#12219)
     does responds_to?
    does responds_to?
-Codegen: private
-  codegens class var of private type with same name as public type (#11620)
  codegens class var of private type with same name as public type (#11620)
-  codegens private def in same file
  codegens private def in same file
-  codegens overloaded private def in same file
  codegens overloaded private def in same file
-  doesn't include filename for private types
  doesn't include filename for private types
-  codegens class vars of private types with same name (#11620)
  codegens class vars of private types with same name (#11620)
-Lexer string array
-  lexes string array with new line gives correct column for next token
  lexes string array with new line gives correct column for next token
-  lexes simple string array
  lexes simple string array
-  using { as delimiter
-    lexes simple string array
    lexes simple string array
-  using [ as delimiter
-    lexes simple string array
    lexes simple string array
-  lexes string array with new line
  lexes string array with new line
-  using < as delimiter
-    lexes simple string array
    lexes simple string array
-  using | as delimiter
-    lexes simple string array
    lexes simple string array
-Codegen: thread local
-  works with class variables  works with class variables  works with class variables  works with class variables������  works with class variables��  works with class variables����  works with class variables��  works with class variables��  works with class variables
  works with class variables
-  works with class variable in main thread  works with class variable in main thread  works with class variable in main thread  works with class variable in main thread  works with class variable in main thread  works with class variable in main thread������������  works with class variable in main thread��  works with class variable in main thread��  works with class variable in main thread
  works with class variable in main thread
-  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer  compiles with class variable referenced from initializer������������  compiles with class variable referenced from initializer��  compiles with class variable referenced from initializer��  compiles with class variable referenced from initializer
  compiles with class variable referenced from initializer
-Lexer doc
-  lexes with doc enabled but without docs
  lexes with doc enabled but without docs
-  lexes with doc enabled and docs, one line comment with two newlines and another comment
  lexes with doc enabled and docs, one line comment with two newlines and another comment
-  lexes without doc enabled
  lexes without doc enabled
-  lexes with doc enabled and docs, two line comment with leading whitespace
  lexes with doc enabled and docs, two line comment with leading whitespace
-  lexes with doc enabled and docs
  lexes with doc enabled and docs
-  resets doc after non newline or space token
  resets doc after non newline or space token
-  lexes with doc enabled and docs, two line comment
  lexes with doc enabled and docs, two line comment
-Codegen: double splat
-  evaluates double splat argument just once (#2677)
  evaluates double splat argument just once (#2677)
-  double splats named argument into arguments (1)
  double splats named argument into arguments (1)
-  double splats named argument with positional arguments
  double splats named argument with positional arguments
-  matches double splat with regular splat
  matches double splat with regular splat
-  double splats named argument into arguments (2)
  double splats named argument into arguments (2)
-  double splats twice 
  double splats twice 
-  matches double splat on method with named args
  matches double splat on method with named args
-  removes literal types in all matches (#6239)
  removes literal types in all matches (#6239)
-  double splats named argument with named args (2)
  double splats named argument with named args (2)
-  matches double splat on method with named args and regular args
  matches double splat on method with named args and regular args
-  double splats named argument with named args (1)
  double splats named argument with named args (1)
-Semantic: union
-  types union when arg is union
  types union when arg is union
-  finds method in Value
  finds method in Value
-  errors if instantiates union
  errors if instantiates union
-  types union when both obj and arg are union
  types union when both obj and arg are union
-  merges types in the same hierarchy with Union
  merges types in the same hierarchy with Union
-  types union
  types union
-  treats void as nil in union
  treats void as nil in union
-  can iterate T
  can iterate T
-  assigns to union and keeps new union type in call
  assigns to union and keeps new union type in call
-  types union of same type
  types union of same type
-  doesn't run virtual lookup on unbound unions (#9173)
  doesn't run virtual lookup on unbound unions (#9173)
-  looks up type in union type with free var
  looks up type in union type with free var
-  can reopen Union and access T
  can reopen Union and access T
-  types union of classes
  types union of classes
-  can use Union in type restriction (#2988)
  can use Union in type restriction (#2988)
-  can reopen Union
  can reopen Union
-  doesn't virtualize union elements (#7814)
  doesn't virtualize union elements (#7814)
-  doesn't crash with union of no-types (#5805)
  doesn't crash with union of no-types (#5805)
-  supports macro if inside union
  supports macro if inside union
-  commutativity
-    uninstantiated generic super-metaclass v.s. uninstantiated generic sub-metaclass
    uninstantiated generic super-metaclass v.s. uninstantiated generic sub-metaclass
-    module v.s. including generic module instance
    module v.s. including generic module instance
-    module v.s. including module
    module v.s. including module
-    module v.s. extending generic module instance metaclass
    module v.s. extending generic module instance metaclass
-    generic module instance v.s. including generic module instance
    generic module instance v.s. including generic module instance
-    generic module instance v.s. including module
    generic module instance v.s. including module
-    virtual metaclass v.s. generic subclass instance metaclass
    virtual metaclass v.s. generic subclass instance metaclass
-    generic module instance v.s. extending generic module instance metaclass
    generic module instance v.s. extending generic module instance metaclass
-    superclass v.s. uninstantiated generic subclass
    superclass v.s. uninstantiated generic subclass
-  finds method in Object
  finds method in Object
-  types union when obj is union
  types union when obj is union
-Semantic: require
-  file not found
-    require
    require
-    relative require
    relative require
-    wildcard
    wildcard
-    relative wildcard
    relative wildcard
-Code gen: op assign
-  evaluates exps once (#3398)
  evaluates exps once (#3398)
-  evaluates exps once, [] (#3398)
  evaluates exps once, [] (#3398)
-Lexer
-  lexes "true"
  lexes "true"
-  lexes "=="
  lexes "=="
-  lexes ":\"foo\""
  lexes ":\"foo\""
-  lexes "1i16"
  lexes "1i16"
-  lexes "def"
  lexes "def"
-  lexes "0"
  lexes "0"
-  says syntax error on "'"
  says syntax error on "'"
-  lexes "bar!"
  lexes "bar!"
-  lexes "private"
  lexes "private"
-  lexes "{"
  lexes "{"
-  lexes "$10?"
  lexes "$10?"
-  says syntax error on "2e+e"
  says syntax error on "2e+e"
-  lexes ":**"
  lexes ":**"
-  lexes "break"
  lexes "break"
-  lexes "next"
  lexes "next"
-  lexes "-0x8000000000000000_i64"
  lexes "-0x8000000000000000_i64"
-  lexes "|"
  lexes "|"
-  says syntax error on "-3_"
  says syntax error on "-3_"
-  lexes "for"
  lexes "for"
-  lexes "1i32"
  lexes "1i32"
-  lexes "**"
  lexes "**"
-  says syntax error on "0x100000000i32"
  says syntax error on "0x100000000i32"
-  lexes "yield!"
  lexes "yield!"
-  lexes "then"
  lexes "then"
-  lexes "while"
  lexes "while"
-  lexes "-0"
  lexes "-0"
-  lexes "0o700000000000000000000"
  lexes "0o700000000000000000000"
-  lexes "0x1_i64"
  lexes "0x1_i64"
-  lexes '\\'
  lexes '\\'
-  says syntax error on "65536_u16"
  says syntax error on "65536_u16"
-  lexes "340282366920938463463374607431768211455_u128"
  lexes "340282366920938463463374607431768211455_u128"
-  lexes "next!"
  lexes "next!"
-  says syntax error on "$0?"
  says syntax error on "$0?"
-  lexes "->"
  lexes "->"
-  lexes "begin!"
  lexes "begin!"
-  lexes "while?"
  lexes "while?"
-  lexes ":&-"
  lexes ":&-"
-  lexes "1"
  lexes "1"
-  lexes "1u64"
  lexes "1u64"
-  lexes "+0b1010"
  lexes "+0b1010"
-  says syntax error on "18446744073709551616"
  says syntax error on "18446744073709551616"
-  lexes "{{"
  lexes "{{"
-  lexes "0b100000000000000000000000000000000"
  lexes "0b100000000000000000000000000000000"
-  lexes symbol with quote
  lexes symbol with quote
-  lexes "super"
  lexes "super"
-  says syntax error on "2e+f32"
  says syntax error on "2e+f32"
-  lexes ":!"
  lexes ":!"
-  lexes "-1234"
  lexes "-1234"
-  says syntax error on "0o12345671234567_12345671234567_i8"
  says syntax error on "0o12345671234567_12345671234567_i8"
-  says syntax error on "4f65"
  says syntax error on "4f65"
-  lexes '\0'
  lexes '\0'
-  lexes "\x12"
  lexes "\x12"
-  lexes "@@foo"
  lexes "@@foo"
-  lexes "<<"
  lexes "<<"
-  lexes "extend"
  lexes "extend"
-  lexes "if"
  lexes "if"
-  lexes "~"
  lexes "~"
-  lexes "lib"
  lexes "lib"
-  says syntax error on "4f22"
  says syntax error on "4f22"
-  says syntax error on "-1_u32"
  says syntax error on "-1_u32"
-  says syntax error on "9999999999999999999_i32"
  says syntax error on "9999999999999999999_i32"
-  lexes "0🔮"
  lexes "0🔮"
-  lexes "||="
  lexes "||="
-  lexes "170141183460469231731687303715884105727_i128"
  lexes "170141183460469231731687303715884105727_i128"
-  lexes "::"
  lexes "::"
-  lexes "fun"
  lexes "fun"
-  lexes "1i128"
  lexes "1i128"
-  lexes "+1.0"
  lexes "+1.0"
-  lexes "0.5"
  lexes "0.5"
-  lexes "-"
  lexes "-"
-  lexes "0x100000000"
  lexes "0x100000000"
-  lexes symbol followed by ==
  lexes symbol followed by ==
-  lexes "-1"
  lexes "-1"
-  lexes "elsif?"
  lexes "elsif?"
-  lexes ":==="
  lexes ":==="
-  lexes ":^"
  lexes ":^"
-  lexes "offsetof"
  lexes "offsetof"
-  lexes "&-="
  lexes "&-="
-  lexes "@foo"
  lexes "@foo"
-  says syntax error on "\"\\xz\""
  says syntax error on "\"\\xz\""
-  lexes "2147483648.foo"
  lexes "2147483648.foo"
-  lexes '\t'
  lexes '\t'
-  lexes "false!"
  lexes "false!"
-  lexes "return"
  lexes "return"
-  says syntax error on "'\\uDFFF'"
  says syntax error on "'\\uDFFF'"
-  lexes "|="
  lexes "|="
-  lexes "break!"
  lexes "break!"
-  says syntax error on "-0u64"
  says syntax error on "-0u64"
-  lexes "/"
  lexes "/"
-  says syntax error on "'\\u{D800}'"
  says syntax error on "'\\u{D800}'"
-  lexes "false?"
  lexes "false?"
-  lexes "uninitialized"
  lexes "uninitialized"
-  says syntax error on "0xFF_i8"
  says syntax error on "0xFF_i8"
-  lexes "annotation"
  lexes "annotation"
-  lexes "0i32"
  lexes "0i32"
-  lexes "nil!"
  lexes "nil!"
-  lexes "responds_to?"
  lexes "responds_to?"
-  lexes "1i64"
  lexes "1i64"
-  says syntax error on "0b100000000000000000000000000000000i32"
  says syntax error on "0b100000000000000000000000000000000i32"
-  lexes "yield?"
  lexes "yield?"
-  says syntax error on "0b10000000_i8"
  says syntax error on "0b10000000_i8"
-  lexes "//="
  lexes "//="
-  lexes ":<"
  lexes ":<"
-  lexes "1i64hello"
  lexes "1i64hello"
-  lexes "9223372036854775808"
  lexes "9223372036854775808"
-  lexes "def!"
  lexes "def!"
-  lexes "while!"
  lexes "while!"
-  doesn't raise if many slash r with slash n
  doesn't raise if many slash r with slash n
-  says syntax error on "10e_10"
  says syntax error on "10e_10"
-  lexes "+1_i128"
  lexes "+1_i128"
-  lexes "2147483648"
  lexes "2147483648"
-  lexes "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_u128"
  lexes "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_u128"
-  lexes "begin"
  lexes "begin"
-  lexes "with_underscores"
  lexes "with_underscores"
-  says syntax error on "0_12"
  says syntax error on "0_12"
-  lexes ":*"
  lexes ":*"
-  lexes "1.0"
  lexes "1.0"
-  says syntax error on "-1_u8"
  says syntax error on "-1_u8"
-  says syntax error on "-1_u64"
  says syntax error on "-1_u64"
-  lexes "1i64"
  lexes "1i64"
-  lexes "+1234"
  lexes "+1234"
-  says syntax error on "\"\\400\""
  says syntax error on "\"\\400\""
-  lexes "1u16"
  lexes "1u16"
-  lexes "0x7fffffff_i32"
  lexes "0x7fffffff_i32"
-  lexes space after char
  lexes space after char
-  lexes "begin?"
  lexes "begin?"
-  says syntax error on "4.0_u32"
  says syntax error on "4.0_u32"
-  lexes "<"
  lexes "<"
-  lexes "\n\n\n"
  lexes "\n\n\n"
-  lexes "<<="
  lexes "<<="
-  says syntax error on "4294967296_u32"
  says syntax error on "4294967296_u32"
-  lexes "**="
  lexes "**="
-  says syntax error on "\"hi\\"
  says syntax error on "\"hi\\"
-  lexes "end!"
  lexes "end!"
-  lexes "10000000000000000000_u64"
  lexes "10000000000000000000_u64"
-  lexes "1_i64"
  lexes "1_i64"
-  lexes "1234"
  lexes "1234"
-  says syntax error on "4i22"
  says syntax error on "4i22"
-  lexes "+1.0f32"
  lexes "+1.0f32"
-  lexes "0b1000000000000000000000000000000000000000000000000000000000000000"
  lexes "0b1000000000000000000000000000000000000000000000000000000000000000"
-  says syntax error on "01_i64"
  says syntax error on "01_i64"
-  lexes "&&="
  lexes "&&="
-  lexes "include"
  lexes "include"
-  lexes "0o40000000000"
  lexes "0o40000000000"
-  lexes ":-"
  lexes ":-"
-  lexes "2_e2"
  lexes "2_e2"
-  lexes "of"
  lexes "of"
-  lexes "-0xFFFF"
  lexes "-0xFFFF"
-  lexes ":%"
  lexes ":%"
-  lexes ":&*"
  lexes ":&*"
-  lexes "is_a?"
  lexes "is_a?"
-  lexes "1u128"
  lexes "1u128"
-  lexes ">>="
  lexes ">>="
-  lexes "-1.0f32"
  lexes "-1.0f32"
-  lexes "://"
  lexes "://"
-  lexes "nil?"
  lexes "nil?"
-  says syntax error on "0o1234567123456712345671234567u64"
  says syntax error on "0o1234567123456712345671234567u64"
-  lexes '\b'
  lexes '\b'
-  lexes ":!="
  lexes ":!="
-  lexes "0o17777777777_i32"
  lexes "0o17777777777_i32"
-  lexes "1.0hello"
  lexes "1.0hello"
-  lexes "$foo123"
  lexes "$foo123"
-  says syntax error on "\"\\x1z\""
  says syntax error on "\"\\x1z\""
-  lexes "0xabcdef"
  lexes "0xabcdef"
-  lexes "break?"
  lexes "break?"
-  says syntax error on "0o73_f64"
  says syntax error on "0o73_f64"
-  lexes "$1"
  lexes "$1"
-  lexes "return!"
  lexes "return!"
-  lexes "$1?"
  lexes "$1?"
-  lexes __DIR__
  lexes __DIR__
-  lexes "1.2e+23_f32"
  lexes "1.2e+23_f32"
-  lexes "0_i32"
  lexes "0_i32"
-  lexes != after identifier (#4815)
  lexes != after identifier (#4815)
-  lexes "0b11111111111111111111111111111111"
  lexes "0b11111111111111111111111111111111"
-  lexes "until"
  lexes "until"
-  says syntax error on "$01"
  says syntax error on "$01"
-  lexes "macro"
  lexes "macro"
-  lexes __FILE__
  lexes __FILE__
-  says syntax error on "'\\u{DFFF}'"
  says syntax error on "'\\u{DFFF}'"
-  lexes ","
  lexes ","
-  lexes "{%"
  lexes "{%"
-  lexes "-0x80000000000000000000000000000000_i128"
  lexes "-0x80000000000000000000000000000000_i128"
-  lexes "|"
  lexes "|"
-  says syntax error on "'\\"
  says syntax error on "'\\"
-  lexes "12341234🔮"
  lexes "12341234🔮"
-  lexes ":かたな"
  lexes ":かたな"
-  lexes "next?"
  lexes "next?"
-  says syntax error on "18446744073709551616_u64"
  says syntax error on "18446744073709551616_u64"
-  says syntax error on "0x10000_0000_0000_0000"
  says syntax error on "0x10000_0000_0000_0000"
-  lexes "enum"
  lexes "enum"
-  says syntax error on ":\"foo"
  says syntax error on ":\"foo"
-  lexes "\8"
  lexes "\8"
-  says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000"
  says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000"
-  lexes regex after \r\n
  lexes regex after \r\n
-  lexes "&-@foo"
  lexes "&-@foo"
-  says syntax error on "4F32"
  says syntax error on "4F32"
-  lexes "\n"
  lexes "\n"
-  lexes float then zero (bug)
  lexes float then zero (bug)
-  lexes "0xffffffff"
  lexes "0xffffffff"
-  lexes '\n'
  lexes '\n'
-  lexes "0b001111111111111111111111111111111111111111111111111111111111111111"
  lexes "0b001111111111111111111111111111111111111111111111111111111111111111"
-  lexes "with_1"
  lexes "with_1"
-  lexes ":<="
  lexes ":<="
-  lexes "1_i16"
  lexes "1_i16"
-  lexes "0b1_i64"
  lexes "0b1_i64"
-  says syntax error on "4i3"
  says syntax error on "4i3"
-  says syntax error on "'\\u{}'"
  says syntax error on "'\\u{}'"
-  says syntax error on "0b🔮"
  says syntax error on "0b🔮"
-  lexes "do?"
  lexes "do?"
-  says syntax error on "-0x80000000000000000000000000000001"
  says syntax error on "-0x80000000000000000000000000000001"
-  says syntax error on "-0x80000000000000000000000000000000"
  says syntax error on "-0x80000000000000000000000000000000"
-  lexes "9223372036854775807"
  lexes "9223372036854775807"
-  lexes "\t"
  lexes "\t"
-  says syntax error on "4F64"
  says syntax error on "4F64"
-  lexes "if!"
  lexes "if!"
-  lexes "true!"
  lexes "true!"
-  lexes "<=>"
  lexes "<=>"
-  lexes "if?"
  lexes "if?"
-  lexes "0x00ffffffffffffffff"
  lexes "0x00ffffffffffffffff"
-  lexes "+0xFFFF"
  lexes "+0xFFFF"
-  lexes "-0o123"
  lexes "-0o123"
-  lexes "&="
  lexes "&="
-  says syntax error on "0b11_f32"
  says syntax error on "0b11_f32"
-  lexes "&+"
  lexes "&+"
-  says syntax error on "-.42"
  says syntax error on "-.42"
-  says syntax error on "'\\uD800'"
  says syntax error on "'\\uD800'"
-  says syntax error on "1__1"
  says syntax error on "1__1"
-  lexes symbol with backslash (#2187)
  lexes symbol with backslash (#2187)
-  lexes "0o1000000000000000000000"
  lexes "0o1000000000000000000000"
-  lexes "}"
  lexes "}"
-  lexes "rescue"
  lexes "rescue"
-  lexes "-@foo"
  lexes "-@foo"
-  lexes "fooBar"
  lexes "fooBar"
-  lexes "module"
  lexes "module"
-  lexes ":!~"
  lexes ":!~"
-  lexes "unless!"
  lexes "unless!"
-  lexes "&*="
  lexes "&*="
-  lexes "_"
  lexes "_"
-  says syntax error on "0123"
  says syntax error on "0123"
-  lexes __LINE__
  lexes __LINE__
-  says syntax error on "0o1000000000000000000000i64"
  says syntax error on "0o1000000000000000000000i64"
-  lexes "9223372036854775808_i128"
  lexes "9223372036854775808_i128"
-  lexes "=>"
  lexes "=>"
-  says syntax error on "\r1"
  says syntax error on "\r1"
-  lexes "!"
  lexes "!"
-  says syntax error on "4u33"
  says syntax error on "4u33"
-  lexes "1.2e+23"
  lexes "1.2e+23"
-  says syntax error on ":+1"
  says syntax error on ":+1"
-  says syntax error on "2e+_2"
  says syntax error on "2e+_2"
-  lexes ":+"
  lexes ":+"
-  lexes "$23?"
  lexes "$23?"
-  lexes "unless"
  lexes "unless"
-  lexes "0o123_i64"
  lexes "0o123_i64"
-  lexes "-1_i128"
  lexes "-1_i128"
-  lexes ":"
  lexes ":"
-  says syntax error on "2e+@foo"
  says syntax error on "2e+@foo"
-  says syntax error on "4u3"
  says syntax error on "4u3"
-  lexes ":foo?"
  lexes ":foo?"
-  lexes "0x10000_0000_0000_0000_i128"
  lexes "0x10000_0000_0000_0000_i128"
-  says syntax error on "-9223372036854775809"
  says syntax error on "-9223372036854775809"
-  says syntax error on "0x1afafafafafafafafafafaf"
  says syntax error on "0x1afafafafafafafafafafaf"
-  lexes "*="
  lexes "*="
-  lexes "asm"
  lexes "asm"
-  says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
  says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-  lexes "1u32"
  lexes "1u32"
-  lexes "1_u128"
  lexes "1_u128"
-  invalid byte sequence
  invalid byte sequence
-  lexes ":>>"
  lexes ":>>"
-  lexes "100_000"
  lexes "100_000"
-  lexes "1.0f32"
  lexes "1.0f32"
-  lexes "in"
  lexes "in"
-  says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000"
  says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000"
-  lexes "!@foo"
  lexes "!@foo"
-  lexes "&+@foo"
  lexes "&+@foo"
-  says syntax error on "-0e_12"
  says syntax error on "-0e_12"
-  lexes ":~"
  lexes ":~"
-  lexes "0o17777777777"
  lexes "0o17777777777"
-  says syntax error on "0o200000_00000000_00000000_u64"
  says syntax error on "0o200000_00000000_00000000_u64"
-  says syntax error on "0o7777777777777777777777777777777777777777777777777"
  says syntax error on "0o7777777777777777777777777777777777777777777777777"
-  lexes "18446744073709551616_u128"
  lexes "18446744073709551616_u128"
-  lexes "1e23f64"
  lexes "1e23f64"
-  lexes "❨╯°□°❩╯︵┻━┻"
  lexes "❨╯°□°❩╯︵┻━┻"
-  lexes "do!"
  lexes "do!"
-  says syntax error on "32768_i16"
  says syntax error on "32768_i16"
-  says syntax error on "-9999999999999999999"
  says syntax error on "-9999999999999999999"
-  lexes "+="
  lexes "+="
-  lexes "-0.0f32"
  lexes "-0.0f32"
-  lexes "0o001777777777777777777777"
  lexes "0o001777777777777777777777"
-  says syntax error on "0b1000000000000000000000000000000000000000000000000000000000000000i64"
  says syntax error on "0b1000000000000000000000000000000000000000000000000000000000000000i64"
-  lexes '\r'
  lexes '\r'
-  says syntax error on "'\\1'"
  says syntax error on "'\\1'"
-  lexes "-2147483649"
  lexes "-2147483649"
-  lexes "!~"
  lexes "!~"
-  lexes ".."
  lexes ".."
-  lexes "protected"
  lexes "protected"
-  lexes ">"
  lexes ">"
-  says syntax error on "/\\"
  says syntax error on "/\\"
-  lexes "out"
  lexes "out"
-  says syntax error on "18446744073709551616_i32"
  says syntax error on "18446744073709551616_i32"
-  lexes "^="
  lexes "^="
-  lexes "case"
  lexes "case"
-  lexes "1e-23"
  lexes "1e-23"
-  lexes "typeof"
  lexes "typeof"
-  lexes "-0.5"
  lexes "-0.5"
-  lexes "type"
  lexes "type"
-  lexes "["
  lexes "["
-  lexes "1_u64"
  lexes "1_u64"
-  says syntax error on "-2147483649_i32"
  says syntax error on "-2147483649_i32"
-  lexes "..."
  lexes "..."
-  lexes "something"
  lexes "something"
-  says syntax error on "2e+-2"
  says syntax error on "2e+-2"
-  lexes "$10"
  lexes "$10"
-  lexes "("
  lexes "("
-  says syntax error on "2e+"
  says syntax error on "2e+"
-  lexes "1e+23"
  lexes "1e+23"
-  lexes "/="
  lexes "/="
-  lexes "0e40"
  lexes "0e40"
-  lexes "as?"
  lexes "as?"
-  lexes "-9223372036854775808"
  lexes "-9223372036854775808"
-  says syntax error on "0o200_i8"
  says syntax error on "0o200_i8"
-  lexes "0xffffffffffffffff"
  lexes "0xffffffffffffffff"
-  lexes "\xFF"
  lexes "\xFF"
-  lexes "union"
  lexes "union"
-  lexes "verbatim"
  lexes "verbatim"
-  lexes "\4"
  lexes "\4"
-  lexes "[]="
  lexes "[]="
-  lexes "self"
  lexes "self"
-  lexes "2e01"
  lexes "2e01"
-  lexes regex after \n
  lexes regex after \n
-  lexes "0x7fffffffffffffff"
  lexes "0x7fffffffffffffff"
-  lexes "$_foo"
  lexes "$_foo"
-  lexes "else!"
  lexes "else!"
-  says syntax error on "-0_u64"
  says syntax error on "-0_u64"
-  lexes "1_000"
  lexes "1_000"
-  says syntax error on "0xfffffffffffffffff_u64"
  says syntax error on "0xfffffffffffffffff_u64"
-  lexes "1.0f32hello"
  lexes "1.0f32hello"
-  lexes comment at the end
  lexes comment at the end
-  lexes "0f32"
  lexes "0f32"
-  lexes '\v'
  lexes '\v'
-  lexes '\f'
  lexes '\f'
-  lexes "\110"
  lexes "\110"
-  says syntax error on "2e"
  says syntax error on "2e"
-  lexes "yield"
  lexes "yield"
-  lexes "+0o123"
  lexes "+0o123"
-  lexes "%"
  lexes "%"
-  says syntax error on "1_.1"
  says syntax error on "1_.1"
-  lexes ":[]="
  lexes ":[]="
-  lexes char with unicode codepoint and curly with six hex digits
  lexes char with unicode codepoint and curly with six hex digits
-  says syntax error on ".42"
  says syntax error on ".42"
-  lexes "elsif"
  lexes "elsif"
-  lexes "-1_i64"
  lexes "-1_i64"
-  lexes "ensure"
  lexes "ensure"
-  lexes "0b1111111111111111111111111111111_i32"
  lexes "0b1111111111111111111111111111111_i32"
-  lexes space after keyword
  lexes space after keyword
-  lexes ":foo!"
  lexes ":foo!"
-  lexes "return?"
  lexes "return?"
-  lexes "<="
  lexes "<="
-  lexes "else"
  lexes "else"
-  says syntax error on "9223372036854775808_i64"
  says syntax error on "9223372036854775808_i64"
-  lexes '\a'
  lexes '\a'
-  says syntax error on "4u12"
  says syntax error on "4u12"
-  lexes "1_i8"
  lexes "1_i8"
-  lexes "0x80000001"
  lexes "0x80000001"
-  lexes "1i128hello"
  lexes "1i128hello"
-  lexes "+"
  lexes "+"
-  lexes "@["
  lexes "@["
-  says syntax error on "118446744073709551616"
  says syntax error on "118446744073709551616"
-  lexes ":&+"
  lexes ":&+"
-  lexes 'a'
  lexes 'a'
-  lexes "-0b1010"
  lexes "-0b1010"
-  lexes "-0x80000001"
  lexes "-0x80000001"
-  says syntax error on "00"
  says syntax error on "00"
-  lexes "]"
  lexes "]"
-  says syntax error on "'\\u{110000}'"
  says syntax error on "'\\u{110000}'"
-  lexes "0xffff_ffff_ffff_ffff"
  lexes "0xffff_ffff_ffff_ffff"
-  lexes "^"
  lexes "^"
-  says syntax error on "128_i8"
  says syntax error on "128_i8"
-  lexes ":<=>"
  lexes ":<=>"
-  lexes "0o177777_77777777_77777777"
  lexes "0o177777_77777777_77777777"
-  says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000_u64"
  says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000_u64"
-  lexes ">="
  lexes ">="
-  lexes "0x3🔮"
  lexes "0x3🔮"
-  lexes "sizeof"
  lexes "sizeof"
-  lexes "1_u32"
  lexes "1_u32"
-  says syntax error on "-170141183460469231731687303715884105729"
  says syntax error on "-170141183460469231731687303715884105729"
-  says syntax error on "0o1234567123456712345671234567"
  says syntax error on "0o1234567123456712345671234567"
-  says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000u64"
  says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000u64"
-  says syntax error on "0o200000_00000000_00000000"
  says syntax error on "0o200000_00000000_00000000"
-  lexes "0o1000000000000000000000"
  lexes "0o1000000000000000000000"
-  lexes ":>="
  lexes ":>="
-  lexes "when"
  lexes "when"
-  lexes "14146167139683460000"
  lexes "14146167139683460000"
-  lexes "1_234.567_890"
  lexes "1_234.567_890"
-  lexes "1e23"
  lexes "1e23"
-  says syntax error on "-0o7777777777777777777777777777777777777777777777777"
  says syntax error on "-0o7777777777777777777777777777777777777777777777777"
-  lexes ":=="
  lexes ":=="
-  lexes "else?"
  lexes "else?"
-  lexes "class!"
  lexes "class!"
-  lexes "ident"
  lexes "ident"
-  lexes "[]?"
  lexes "[]?"
-  lexes "alias"
  lexes "alias"
-  says syntax error on "4u65"
  says syntax error on "4u65"
-  lexes char with unicode codepoint
  lexes char with unicode codepoint
-  lexes "0b0_1"
  lexes "0b0_1"
-  lexes "0i8"
  lexes "0i8"
-  lexes symbol followed by !=
  lexes symbol followed by !=
-  lexes "0b111111111111111111111111111111111111111111111111111111111111111"
  lexes "0b111111111111111111111111111111111111111111111111111111111111111"
-  lexes ":&**"
  lexes ":&**"
-  lexes "as"
  lexes "as"
-  lexes "false"
  lexes "false"
-  lexes "\1"
  lexes "\1"
-  lexes "118446744073709551616_u128"
  lexes "118446744073709551616_u128"
-  lexes "+1_i64"
  lexes "+1_i64"
-  lexes "0_f32"
  lexes "0_f32"
-  lexes "0b1111111111111111111111111111111"
  lexes "0b1111111111111111111111111111111"
-  lexes "0xFFFFFFFF"
  lexes "0xFFFFFFFF"
-  lexes "1E40"
  lexes "1E40"
-  lexes "instance_sizeof"
  lexes "instance_sizeof"
-  lexes comment and token
  lexes comment and token
-  lexes "&-"
  lexes "&-"
-  lexes "="
  lexes "="
-  lexes "pointerof"
  lexes "pointerof"
-  lexes "&"
  lexes "&"
-  says syntax error on "-9223372036854775809_i64"
  says syntax error on "-9223372036854775809_i64"
-  lexes "+0.5"
  lexes "+0.5"
-  lexes "struct"
  lexes "struct"
-  lexes char with unicode codepoint and curly
  lexes char with unicode codepoint and curly
-  lexes "1.2e+23_f64"
  lexes "1.2e+23_f64"
-  lexes "*"
  lexes "*"
-  lexes "1f32"
  lexes "1f32"
-  says syntax error on "'\\uFEDZ'"
  says syntax error on "'\\uFEDZ'"
-  lexes ">>"
  lexes ">>"
-  says syntax error on "-99999999999999999999"
  says syntax error on "-99999999999999999999"
-  lexes "&*"
  lexes "&*"
-  lexes ":&"
  lexes ":&"
-  says syntax error on "0o40000000000i32"
  says syntax error on "0o40000000000i32"
-  lexes "170141183460469231731687303715884105728_u128"
  lexes "170141183460469231731687303715884105728_u128"
-  doesn't raise if slash r with slash n
  doesn't raise if slash r with slash n
-  lexes "?"
  lexes "?"
-  says syntax error on "0x1afafafafafafafafafafafu64"
  says syntax error on "0x1afafafafafafafafafafafu64"
-  lexes ":>"
  lexes ":>"
-  lexes "||"
  lexes "||"
-  lexes dot and ident
  lexes dot and ident
-  lexes "."
  lexes "."
-  lexes "-1.0"
  lexes "-1.0"
-  lexes ";"
  lexes ";"
-  lexes "require"
  lexes "require"
-  says syntax error on "0x8000000000000000i64"
  says syntax error on "0x8000000000000000i64"
-  lexes ":/"
  lexes ":/"
-  says syntax error on "0b_10"
  says syntax error on "0b_10"
-  lexes "with"
  lexes "with"
-  lexes "0o777777777777777777777"
  lexes "0o777777777777777777777"
-  lexes "class"
  lexes "class"
-  lexes "abstract"
  lexes "abstract"
-  lexes "$?"
  lexes "$?"
-  lexes "unless?"
  lexes "unless?"
-  lexes ":=~"
  lexes ":=~"
-  lexes "-="
  lexes "-="
-  says syntax error on "340282366920938463463374607431768211456"
  says syntax error on "340282366920938463463374607431768211456"
-  lexes "&&"
  lexes "&&"
-  lexes "def?"
  lexes "def?"
-  lexes "+0"
  lexes "+0"
-  lexes "1_234.567_890_f32"
  lexes "1_234.567_890_f32"
-  lexes "&+="
  lexes "&+="
-  says syntax error on "/foo"
  says syntax error on "/foo"
-  lexes "1f64"
  lexes "1f64"
-  says syntax error on "-1_u16"
  says syntax error on "-1_u16"
-  lexes "0o123"
  lexes "0o123"
-  lexes ")"
  lexes ")"
-  lexes ":foo="
  lexes ":foo="
-  says syntax error on "-1_u128"
  says syntax error on "-1_u128"
-  lexes "!="
  lexes "!="
-  lexes "1.0f64"
  lexes "1.0f64"
-  says syntax error on "2ef32"
  says syntax error on "2ef32"
-  lexes ":|"
  lexes ":|"
-  says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
  says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-  lexes "0b1010"
  lexes "0b1010"
-  lexes ""
  lexes ""
-  lexes "true?"
  lexes "true?"
-  says syntax error on "2e8i8"
  says syntax error on "2e8i8"
-  lexes utf-8 multibyte char
  lexes utf-8 multibyte char
-  lexes '\0'
  lexes '\0'
-  says syntax error on "4f33"
  says syntax error on "4f33"
-  lexes "do"
  lexes "do"
-  lexes "+@foo"
  lexes "+@foo"
-  says syntax error on "2147483648_i32"
  says syntax error on "2147483648_i32"
-  lexes "elsif!"
  lexes "elsif!"
-  lexes "0x8000000000000000"
  lexes "0x8000000000000000"
-  says syntax error on "4u22"
  says syntax error on "4u22"
-  lexes "select"
  lexes "select"
-  lexes char with unicode codepoint and curly with zeros
  lexes char with unicode codepoint and curly with zeros
-  lexes "1.0f32"
  lexes "1.0f32"
-  lexes ":foo"
  lexes ":foo"
-  lexes "end"
  lexes "end"
-  says syntax error on "-32769_i16"
  says syntax error on "-32769_i16"
-  lexes "1_u8"
  lexes "1_u8"
-  lexes "[]"
  lexes "[]"
-  lexes "1i8"
  lexes "1i8"
-  says syntax error on "4i33"
  says syntax error on "4i33"
-  says syntax error on "0x1afafafafafafafafafafafi32"
  says syntax error on "0x1afafafafafafafafafafafi32"
-  says syntax error on "0F32"
  says syntax error on "0F32"
-  lexes "0xFFFF_u64"
  lexes "0xFFFF_u64"
-  lexes "0o37777777777"
  lexes "0o37777777777"
-  lexes "$~"
  lexes "$~"
-  lexes "1.foo"
  lexes "1.foo"
-  lexes "1u8"
  lexes "1u8"
-  lexes ":<<"
  lexes ":<<"
-  lexes "%}"
  lexes "%}"
-  says syntax error on "-11111111111111111111"
  says syntax error on "-11111111111111111111"
-  lexes "$FOO"
  lexes "$FOO"
-  says syntax error on "4i12"
  says syntax error on "4i12"
-  lexes " "
  lexes " "
-  lexes "1_i32"
  lexes "1_i32"
-  lexes ":[]?"
  lexes ":[]?"
-  lexes "=~"
  lexes "=~"
-  says syntax error on "-999999999999999999999999999999999999999"
  says syntax error on "-999999999999999999999999999999999999999"
-  lexes "%="
  lexes "%="
-  lexes "class?"
  lexes "class?"
-  lexes "foo?"
  lexes "foo?"
-  lexes '\''
  lexes '\''
-  lexes "==="
  lexes "==="
-  lexes "nil"
  lexes "nil"
-  lexes heredoc start
  lexes heredoc start
-  lexes "end?"
  lexes "end?"
-  lexes "1_u16"
  lexes "1_u16"
-  lexes "0x3fffffffffffffff"
  lexes "0x3fffffffffffffff"
-  lexes "Foo"
  lexes "Foo"
-  lexes "1_i64"
  lexes "1_i64"
-  lexes symbol followed by ===
  lexes symbol followed by ===
-  says syntax error on "256_u8"
  says syntax error on "256_u8"
-  lexes "1e+23_f32"
  lexes "1e+23_f32"
-  says syntax error on "118446744073709551616_u64"
  says syntax error on "118446744073709551616_u64"
-  lexes "+1"
  lexes "+1"
-  lexes utf-8 char
  lexes utf-8 char
-  says syntax error on "4i65"
  says syntax error on "4i65"
-  lexes "//"
  lexes "//"
-  lexes "-9223372036854775809_i128"
  lexes "-9223372036854775809_i128"
-  lexes "0xFFFF"
  lexes "0xFFFF"
-  says syntax error on "0x10000_0000_0000_0000_u64"
  says syntax error on "0x10000_0000_0000_0000_u64"
-  lexes not instance var
  lexes not instance var
-  lexes "1_i128"
  lexes "1_i128"
-  says syntax error on "-129_i8"
  says syntax error on "-129_i8"
-  lexes "18446744073709551615"
  lexes "18446744073709551615"
-  lexes "&**"
  lexes "&**"
-  lexes "$foo"
  lexes "$foo"
-  lexes "1hello"
  lexes "1hello"
-  lexes "\10"
  lexes "\10"
-  lexes "0x7fffffff"
  lexes "0x7fffffff"
-  lexes "-0xFFFFFFFF"
  lexes "-0xFFFFFFFF"
-  lexes ":[]"
  lexes ":[]"
-  lexes "0b11111111_11111111_11111111_11111111_11111111_11111111_11111111_11111111"
  lexes "0b11111111_11111111_11111111_11111111_11111111_11111111_11111111_11111111"
+    doesn't crash if def body ends up with no type (#12219)
    doesn't crash if def body ends up with no type (#12219)
+Crystal
+  normalize_path
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+Semantic: enum
+  errors if defining initialize in Enum (#7238)
  errors if defining initialize in Enum (#7238)
+  errors on enum without members (#3447)
  errors on enum without members (#3447)
+  creates enum from value
  creates enum from value
+  errors if declaring type inside enum (#3127)
  errors if declaring type inside enum (#3127)
+  marks as flags with base type (#2185)
  marks as flags with base type (#2185)
+  gives error on signed flags enum overflow after a member with value
  gives error on signed flags enum overflow after a member with value
+  attaches annotation to enum method (#6690)
  attaches annotation to enum method (#6690)
+  gives error on enum overflow after a member with value
  gives error on enum overflow after a member with value
+  has All value when defined as @[Flags]
  has All value when defined as @[Flags]
+  reopens enum with same base type (1)
  reopens enum with same base type (1)
+  reopens enum without base type (1)
  reopens enum without base type (1)
+  doesn't error when defining a flags enum in a lib with None or All
  doesn't error when defining a flags enum in a lib with None or All
+  allows redefining None to 0 for @[Flags] enum
  allows redefining None to 0 for @[Flags] enum
+  can redefine Enum.new
  can redefine Enum.new
+  can use macro for inside enum
  can use macro for inside enum
+  types enum
  types enum
+  doesn't error when defining a method for an enum with flags
  doesn't error when defining a method for an enum with flags
+  gives error on flags enum overflow
  gives error on flags enum overflow
+  errors if reopen and tries to define constant
  errors if reopen and tries to define constant
+  errors if invoking private enum method
  errors if invoking private enum method
+  errors if using a name twice
  errors if using a name twice
+  defines method on enum
  defines method on enum
+  disallows implicit conversion of int to enum
  disallows implicit conversion of int to enum
+  reopens enum without base type (2)
  reopens enum without base type (2)
+  errors if reopen but not enum
  errors if reopen but not enum
+  doesn't break assigned values in enum flags when a member has value 0 (#5767)
  doesn't break assigned values in enum flags when a member has value 0 (#5767)
+  reopens an enum
  reopens an enum
+  doesn't overflow on flags member (#7877)
  doesn't overflow on flags member (#7877)
+  errors if inheriting Enum (#3592)
  errors if inheriting Enum (#3592)
+  errors if enum value is too big for type (#678)
  errors if enum value is too big for type (#678)
+  doesn't overflow when going from negative to zero (#7874)
  doesn't overflow when going from negative to zero (#7874)
+  errors if declaring type inside enum, nested (#3127)
  errors if declaring type inside enum, nested (#3127)
+  doesn't visit enum members generated by macros twice (#10104)
  doesn't visit enum members generated by macros twice (#10104)
+  can use macro expression inside enum
  can use macro expression inside enum
+  defines class method on enum
  defines class method on enum
+  errors if using instance var inside enum (#991)
  errors if using instance var inside enum (#991)
+  finds method in enum type
  finds method in enum type
+  errors if reopening enum with different base type (2)
  errors if reopening enum with different base type (2)
+  gives error on enum overflow
  gives error on enum overflow
+  gives error on unsigned flags enum overflow after a member with value
  gives error on unsigned flags enum overflow after a member with value
+  finds class method in enum type
  finds class method in enum type
+  disallows All value for @[Flags] enum
  disallows All value for @[Flags] enum
+  types enum value
  types enum value
+  has None value when defined as @[Flags]
  has None value when defined as @[Flags]
+  reopens enum with same base type (2)
  reopens enum with same base type (2)
+  doesn't error when defining a non-flags enum with None or All
  doesn't error when defining a non-flags enum with None or All
+  allows class vars in enum
  allows class vars in enum
+  disallows redefining None to non-0 for @[Flags] enum
  disallows redefining None to non-0 for @[Flags] enum
+  errors if reopening enum with different base type (1)
  errors if reopening enum with different base type (1)
+Semantic: var
+  declares local variable and assigns wrong type
  declares local variable and assigns wrong type
+  declares local variable but doesn't assign it in all branches
  declares local variable but doesn't assign it in all branches
+  errors if declaring var that is already declared
  errors if declaring var that is already declared
+  types a variable
  types a variable
+  declares local variable with value
  declares local variable with value
+  reports undefined local variable or method
  reports undefined local variable or method
+  reports variable always nil
  reports variable always nil
+  parse local variable as method call even if local variable is declared in call arguments
  parse local variable as method call even if local variable is declared in call arguments
+  types an assign
  types an assign
+  lets type on else side of if with a Bool | Nil union
  lets type on else side of if with a Bool | Nil union
+  declares local variable and assigns it with if
  declares local variable and assigns it with if
+  types an assign with type declaration
  types an assign with type declaration
+  declares local variable and immediately reads it
  declares local variable and immediately reads it
+  reports there's no self
  reports there's no self
+  errors if reads from underscore
  errors if reads from underscore
+  errors if declaring generic type without type vars (with local var)
  errors if declaring generic type without type vars (with local var)
+  declares local variable and then assigns it
  declares local variable and then assigns it
+  errors if variable already exists
  errors if variable already exists
+Semantic: nilable instance var
+  says instance var was not initialized in all of the initialize methods, with var declaration
  says instance var was not initialized in all of the initialize methods, with var declaration
+  says instance var was used before initialized
  says instance var was used before initialized
+  says self was used before instance var was initialized (3)
  says self was used before instance var was initialized (3)
+  says self was used before instance var was initialized (2)
  says self was used before instance var was initialized (2)
+  says instance var was used before initialized (2)
  says instance var was used before initialized (2)
+  says instance var was not initialized in all of the initialize methods
  says instance var was not initialized in all of the initialize methods
+  finds type that doesn't initialize instance var (#1222)
  finds type that doesn't initialize instance var (#1222)
+  says self was used before instance var was initialized
  says self was used before instance var was initialized
+  marks instance var as nilable if assigned inside proc literal
  marks instance var as nilable if assigned inside proc literal
+  doesn't consider as nil if initialized with catch-all
  doesn't consider as nil if initialized with catch-all
+  marks instance var as nilable if assigned inside captured block (#1696)
  marks instance var as nilable if assigned inside captured block (#1696)
+  says instance var was not initialized in all of the initialize methods (2)
  says instance var was not initialized in all of the initialize methods (2)
+Code gen: c union
+  codegens union property default value 2
  codegens union property default value 2
+  aligns to the member with biggest align requirements
  aligns to the member with biggest align requirements
+  codegens union property setter 1
  codegens union property setter 1
+  automatically converts numeric union type in field assignment
  automatically converts numeric union type in field assignment
+  automatically converts by invoking to_unsafe
  automatically converts by invoking to_unsafe
+  codegens union property setter 2
  codegens union property setter 2
+  codegens union property default value
  codegens union property default value
+  builds union setter with fun type
  builds union setter with fun type
+  codegens union property setter 2 via pointer
  codegens union property setter 2 via pointer
+  codegens struct inside union
  codegens struct inside union
+  moves unions around correctly (#12550)  moves unions around correctly (#12550)  moves unions around correctly (#12550)  moves unions around correctly (#12550)  moves unions around correctly (#12550)  moves unions around correctly (#12550)  moves unions around correctly (#12550)  moves unions around correctly (#12550)  moves unions around correctly (#12550)
  moves unions around correctly (#12550)
+  automatically converts numeric type in field assignment
  automatically converts numeric type in field assignment
+  codegens assign c union to union
  codegens assign c union to union
+  reads union instance var
  reads union instance var
+  does to_s  does to_s  does to_s  does to_s  does to_s  does to_s  does to_s  does to_s  does to_s
  does to_s
+  codegens union property setter 1 via pointer
  codegens union property setter 1 via pointer
+  fills union type to the max size
  fills union type to the max size
+Code gen: named tuple
+  codegens tuple nilable index (1)
  codegens tuple nilable index (1)
+  upcasts named tuple inside compatible named tuple
  upcasts named tuple inside compatible named tuple
+  upcasts named tuple inside union to union with compatible named tuple
  upcasts named tuple inside union to union with compatible named tuple
+  passes named tuple to def
  passes named tuple to def
+  downcasts union inside tuple to value (#3907)
  downcasts union inside tuple to value (#3907)
+  codegens tuple nilable index (3)
  codegens tuple nilable index (3)
+  upcasts named tuple union to compatible named tuple
  upcasts named tuple union to compatible named tuple
+  does to_s for NamedTuple class  does to_s for NamedTuple class  does to_s for NamedTuple class  does to_s for NamedTuple class  does to_s for NamedTuple class  does to_s for NamedTuple class  does to_s for NamedTuple class  does to_s for NamedTuple class  does to_s for NamedTuple class
  does to_s for NamedTuple class
+  assigns two same-size named tuple types to a same var (#3132)
  assigns two same-size named tuple types to a same var (#3132)
+  allows named tuple covariance
  allows named tuple covariance
+  merges two named tuple types with same keys but different types (1)
  merges two named tuple types with same keys but different types (1)
+  provides T as a named tuple literal
  provides T as a named tuple literal
+  assigns named tuple inside union to union with compatible named tuple
  assigns named tuple inside union to union with compatible named tuple
+  codegens tuple nilable index (2)
  codegens tuple nilable index (2)
+  assigns named tuple to compatible named tuple
  assigns named tuple to compatible named tuple
+  gets keys at compile time (1)
  gets keys at compile time (1)
+  doesn't crash when overload doesn't match
  doesn't crash when overload doesn't match
+  gets keys at compile time (2)
  gets keys at compile time (2)
+  codegens union of tuple of float with tuple of tuple of float
  codegens union of tuple of float with tuple of tuple of float
+  assigns named tuple union to compatible named tuple
  assigns named tuple union to compatible named tuple
+  accesses T and creates instance from it
  accesses T and creates instance from it
+  codegens tuple index another order
  codegens tuple index another order
+  doesn't error if NamedTuple includes a non-generic module (#10380)
  doesn't error if NamedTuple includes a non-generic module (#10380)
+  gets size at compile time
  gets size at compile time
+  merges two named tuple types with same keys but different types (2)
  merges two named tuple types with same keys but different types (2)
+  codegens tuple index
  codegens tuple index
+Crystal::Repl::Interpreter
+  tuple
+    interprets tuple metaclass range indexer
    interprets tuple metaclass range indexer
+    interprets tuple literal of different types (1)
    interprets tuple literal of different types (1)
+    discards tuple access
    discards tuple access
+    does tuple indexer on union
    does tuple indexer on union
+    unpacks tuple in block arguments
    unpacks tuple in block arguments
+    interprets tuple range indexer
    interprets tuple range indexer
+    discards tuple (#12383)
    discards tuple (#12383)
+    interprets tuple metaclass indexer
    interprets tuple metaclass indexer
+    interprets tuple literal and access by known index
    interprets tuple literal and access by known index
+    extends sign when doing to_i32
    extends sign when doing to_i32
+    interprets tuple literal of different types (2)
    interprets tuple literal of different types (2)
+    interprets tuple range indexer (2)
    interprets tuple range indexer (2)
+    interprets tuple self
    interprets tuple self
+Crystal::Repl::Interpreter
+  class vars
+    interprets class var without initializer
    interprets class var without initializer
+    finds self in class var initializer (#12439)
    finds self in class var initializer (#12439)
+    interprets class var for virtual type
    interprets class var for virtual type
+    interprets class var with initializer
    interprets class var with initializer
+    reads class var initializer with union (#12633)
    reads class var initializer with union (#12633)
+    does class var initializer with union (#12633)
    does class var initializer with union (#12633)
+    interprets class var for virtual metaclass type
    interprets class var for virtual metaclass type
+Compiler
+  runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename   runs subcommand in preference to a filename 
  runs subcommand in preference to a filename 
+  compiles a file  compiles a file  compiles a file  compiles a file  compiles a file  compiles a file  compiles a file  compiles a file  compiles a file
  compiles a file
+  treats all arguments post-filename as program arguments
  treats all arguments post-filename as program arguments
+  has a valid version
  has a valid version
+Parser warnings
+  warns on missing space before colon
+    in anonymous block param type restriction
    in anonymous block param type restriction
+    in type declaration
    in type declaration
+    in return type restriction
    in return type restriction
+    in block param type restriction
    in block param type restriction
+  warns on suffix-less UInt64 literals > Int64::MAX
  warns on suffix-less UInt64 literals > Int64::MAX
+Semantic: recursive struct check
+  errors on recursive struct inside module
  errors on recursive struct inside module
+  errors on recursive abstract struct through module (#11384)
  errors on recursive abstract struct through module (#11384)
+  errors on private recursive type
  errors on private recursive type
+  detects recursive generic struct through module (#4720)
  detects recursive generic struct through module (#4720)
+  detects recursive struct through module
  detects recursive struct through module
+  errors on mutually recursive struct
  errors on mutually recursive struct
+  errors on recursive struct through named tuple
  errors on recursive struct through named tuple
+  errors on recursive generic struct inside module
  errors on recursive generic struct inside module
+  errors on recursive struct through recursive alias (#4454) (#4455)
  errors on recursive struct through recursive alias (#4454) (#4455)
+  errors on recursive struct through tuple
  errors on recursive struct through tuple
+  detects recursive struct through inheritance (#3071)
  detects recursive struct through inheritance (#3071)
+  detects recursive generic struct through generic module (#4720)
  detects recursive generic struct through generic module (#4720)
+  errors on recursive struct
  errors on recursive struct
 Semantic: virtual
-  types method call of virtual type
  types method call of virtual type
-  reports undefined method in subclass of abstract class
  reports undefined method in subclass of abstract class
-  reports no matches for virtual type
  reports no matches for virtual type
-  types class and subclass as one type
  types class and subclass as one type
-  dispatches virtual method with overload
  dispatches virtual method with overload
-  types method call of virtual type with override
  types method call of virtual type with override
+  restricts with union and doesn't merge to super type
  restricts with union and doesn't merge to super type
   doesn't check methods on abstract classes
  doesn't check methods on abstract classes
-  doesn't check methods on abstract classes 2
  doesn't check methods on abstract classes 2
+  checks cover in every concrete subclass
  checks cover in every concrete subclass
   types class and two subclasses
  types class and two subclasses
-  types instance var as virtual when using type declaration and has subclasses
  types instance var as virtual when using type declaration and has subclasses
-  checks method in every concrete subclass but method in Object
  checks method in every concrete subclass but method in Object
-  dispatches virtual method
  dispatches virtual method
-  automatically does virtual for generic type if there are subclasses
  automatically does virtual for generic type if there are subclasses
-  finds overloads of union of virtual, class and nil
  finds overloads of union of virtual, class and nil
+  types method call of virtual type
  types method call of virtual type
   reports missing cover for subclass of abstract class
  reports missing cover for subclass of abstract class
-  doesn't check cover for subclasses
  doesn't check cover for subclasses
-  removes instance var from subclasses
  removes instance var from subclasses
-  checks cover in every concrete subclass
  checks cover in every concrete subclass
-  types two subclasses
  types two subclasses
-  types two classes without a shared virtual
  types two classes without a shared virtual
   works with restriction alpha
  works with restriction alpha
-  types inspect
  types inspect
-  uses virtual type as generic type if class is abstract
  uses virtual type as generic type if class is abstract
-  restricts with union and doesn't merge to super type
  restricts with union and doesn't merge to super type
+  reports undefined method in subclass of abstract class
  reports undefined method in subclass of abstract class
+  types two subclasses
  types two subclasses
   doesn't check cover for abstract classes
  doesn't check cover for abstract classes
-  finds overloads of union of virtual, class and nil with abstract class
  finds overloads of union of virtual, class and nil with abstract class
+  removes instance var from subclasses
  removes instance var from subclasses
+  automatically does virtual for generic type if there are subclasses
  automatically does virtual for generic type if there are subclasses
   uses virtual type as generic type if class is abstract even in union
  uses virtual type as generic type if class is abstract even in union
   checks cover in every concrete subclass 3
  checks cover in every concrete subclass 3
+  dispatches virtual method
  dispatches virtual method
+  types two classes without a shared virtual
  types two classes without a shared virtual
+  types class and subclass as one type
  types class and subclass as one type
+  reports no matches for virtual type
  reports no matches for virtual type
+  dispatches virtual method with overload
  dispatches virtual method with overload
+  types inspect
  types inspect
+  finds overloads of union of virtual, class and nil
  finds overloads of union of virtual, class and nil
+  uses virtual type as generic type if class is abstract
  uses virtual type as generic type if class is abstract
+  types instance var as virtual when using type declaration and has subclasses
  types instance var as virtual when using type declaration and has subclasses
+  types method call of virtual type with override
  types method call of virtual type with override
+  doesn't check methods on abstract classes 2
  doesn't check methods on abstract classes 2
+  doesn't check cover for subclasses
  doesn't check cover for subclasses
   checks cover in every concrete subclass 2
  checks cover in every concrete subclass 2
-Crystal::JSONHierarchyPrinter
-  works
  works
-Semantic: metaclass
-  types Reference metaclass
  types Reference metaclass
-  types Class class
  types Class class
-  types generic metaclass superclass
  types generic metaclass superclass
-  types Object class
  types Object class
-  types generic module metaclass
  types generic module metaclass
-  can't reopen as struct
  can't reopen as struct
-  can't reopen as module
  can't reopen as module
-  types Object and Class metaclasses
  types Object and Class metaclasses
-  subtyping relations between metaclasses
-    generic modules (1)
    generic modules (1)
-    generic classes (1)
    generic classes (1)
-    generic classes (2)
    generic classes (2)
-    generic modules (3)
    generic modules (3)
-    generic modules (2)
    generic modules (2)
-    generic classes (3)
    generic classes (3)
-    non-generic modules
    non-generic modules
-    non-generic classes
    non-generic classes
-    virtual metaclass type with virtual type (#12628)
    virtual metaclass type with virtual type (#12628)
-  types generic class metaclass
  types generic class metaclass
-  types generic instance metaclass superclass
  types generic instance metaclass superclass
-  types metaclass superclass
  types metaclass superclass
-Code gen: struct
-  codegens passing pointerof(struct) to fun
  codegens passing pointerof(struct) to fun
-  automatically converts by invoking to_unsafe
  automatically converts by invoking to_unsafe
-  automatically converts numeric union type in struct field assignment
  automatically converts numeric union type in struct field assignment
-  sets instance var to proc  sets instance var to proc  sets instance var to proc  sets instance var to proc��  sets instance var to proc  sets instance var to proc������  sets instance var to proc������  sets instance var to proc��  sets instance var to proc
  sets instance var to proc
-  codegens struct get inside struct
  codegens struct get inside struct
-  codegens struct access with -> and then .
  codegens struct access with -> and then .
-  codegens struct set inside struct
  codegens struct set inside struct
-  can access member of uninitialized struct behind type (#8774)
  can access member of uninitialized struct behind type (#8774)
-  codegens struct property setter via pointer
  codegens struct property setter via pointer
-  codegens set struct value with constant
  codegens set struct value with constant
-  builds struct setter with fun type (1)
  builds struct setter with fun type (1)
-  automatically converts numeric type in struct field assignment
  automatically converts numeric type in struct field assignment
-  automatically converts nil to pointer
  automatically converts nil to pointer
-  can access instance var from the outside (#1092)
  can access instance var from the outside (#1092)
-  passes struct to method (1)
  passes struct to method (1)
-  builds struct setter with fun type (2)
  builds struct setter with fun type (2)
-  does to_s  does to_s  does to_s  does to_s  does to_s  does to_s������������  does to_s��  does to_s��  does to_s
  does to_s
-  codegens struct property default value
  codegens struct property default value
-  codegens struct property setter
  codegens struct property setter
-  codegens struct property setter via pointer
  codegens struct property setter via pointer
-  codegens pointer malloc of struct
  codegens pointer malloc of struct
-  codegens union inside struct
  codegens union inside struct
-  passes struct to method (2)
  passes struct to method (2)
-  allows using named arguments for new
  allows using named arguments for new
-  codegens assign struct to union
  codegens assign struct to union
-  yields struct via ->
  yields struct via ->
+  checks method in every concrete subclass but method in Object
  checks method in every concrete subclass but method in Object
+  finds overloads of union of virtual, class and nil with abstract class
  finds overloads of union of virtual, class and nil with abstract class
+Semantic: def
+  reports no overload matches 2
  reports no overload matches 2
+  errors if return type doesn't match on class method
  errors if return type doesn't match on class method
+  errors when default value is incompatible with non-type restriction
  errors when default value is incompatible with non-type restriction
+  types a call with an argument uses a new scope
  types a call with an argument uses a new scope
+  is ok if returns Int32? with explicit return
  is ok if returns Int32? with explicit return
+  types a call with a float
  types a call with a float
+  types empty body def
  types empty body def
+  allows recursion
  allows recursion
+  types getchar with Char
  types getchar with Char
+  defines class method
  defines class method
+  uses free variable and doesn't conflict with top-level type
  uses free variable and doesn't conflict with top-level type
+  lookups methods in super modules
  lookups methods in super modules
+  errors if declares def inside if
  errors if declares def inside if
+  clones regex literal value (#2384)
  clones regex literal value (#2384)
+  says can only defined def on types and self
  says can only defined def on types and self
+  types call with union argument
  types call with union argument
+  errors if return type doesn't match
  errors if return type doesn't match
+  gives correct error for wrong number of arguments for program call inside type (2) (#1024)
  gives correct error for wrong number of arguments for program call inside type (2) (#1024)
+  assigns def owner
  assigns def owner
+  uses free variable as block return type
  uses free variable as block return type
+  types call with global scope
  types call with global scope
+  types simple recursion
  types simple recursion
+  defines class method with self
  defines class method with self
+  allows recursion with arg
  allows recursion with arg
+  gives correct error for methods in Class
  gives correct error for methods in Class
+  types a call with a double
  types a call with a double
+  uses free variable with metaclass and default value
  uses free variable with metaclass and default value
+  errors when default value is incompatible with type restriction
  errors when default value is incompatible with type restriction
+  uses free variable with metaclass
  uses free variable with metaclass
+  types a call with an argument
  types a call with an argument
+  calls with default argument
  calls with default argument
+  points error at name (#6937)
  points error at name (#6937)
+  gives correct error for methods in Class (2)
  gives correct error for methods in Class (2)
+  types a call with an int
  types a call with an int
+  fixes bug #165
  fixes bug #165
+  says compile-time type on error
  says compile-time type on error
+  errors if trying to declare method on generic class instance
  errors if trying to declare method on generic class instance
+  errors when calling two functions with nil type
  errors when calling two functions with nil type
+  types putchar with Char
  types putchar with Char
+  can't use self in toplevel method
  can't use self in toplevel method
+  shows free variables if no overload matches
  shows free variables if no overload matches
+  accesses free var of default argument (#1101)
  accesses free var of default argument (#1101)
+  reports no block given
  reports no block given
+  types mutual recursion
  types mutual recursion
+  reports block given
  reports block given
+  reports undefined method
  reports undefined method
+  types simple recursion 2
  types simple recursion 2
+  uses free variable
  uses free variable
+  types a call with an argument
  types a call with an argument
+  reports no overload matches
  reports no overload matches
+  doesn't find type in namespace through free var
  doesn't find type in namespace through free var
+  types mutual infinite recursion
  types mutual infinite recursion
+  gives correct error for wrong number of arguments for program call inside type (#1024)
  gives correct error for wrong number of arguments for program call inside type (#1024)
+  errors if return type doesn't match on instance method
  errors if return type doesn't match on instance method
+  do not use body for the def type
  do not use body for the def type
+Code gen: not
+  doesn't crash
  doesn't crash
+  codegens not nil
  codegens not nil
+  codegens not nilable type (false)
  codegens not nilable type (false)
+  codegens not with inlinable value (#6451)
  codegens not with inlinable value (#6451)
+  codegens not nilable type (true)
  codegens not nilable type (true)
+  codegens not false
  codegens not false
+  codegens not true
  codegens not true
+  codegens not pointer (true)
  codegens not pointer (true)
+  codegens not number
  codegens not number
+  codegens not pointer (false)
  codegens not pointer (false)
+Crystal::Playground::AgentInstrumentorTransformer
+  instrument blocks and single yields
  instrument blocks and single yields
+  instrument case statement
  instrument case statement
+  instrument if statement
  instrument if statement
+  instrument instance variable and class variables reads and writes
  instrument instance variable and class variables reads and writes
+  instrument puts with args
  instrument puts with args
+  instrument ivar with obj
  instrument ivar with obj
+  instrument literals with expression names
  instrument literals with expression names
+  instrument assignments in the rhs
  instrument assignments in the rhs
+  instrument nested class defs
  instrument nested class defs
+  instrument single variables expressions
  instrument single variables expressions
+  instrument chained comparisons (#4663)
  instrument chained comparisons (#4663)
+  instrument string interpolations
  instrument string interpolations
+  instrument multi assignments in the rhs
  instrument multi assignments in the rhs
+  instrument exceptions
  instrument exceptions
+  instrument single statement var def
  instrument single statement var def
+  instrument is_a? expressions
  instrument is_a? expressions
+  instrument literals
  instrument literals
+  do not instrument class/module declared macro
  do not instrument class/module declared macro
+  instrument unless statement
  instrument unless statement
+  instrument binary expressions
  instrument binary expressions
+  do not instrument macro calls in class
  do not instrument macro calls in class
+  instrument while statement
  instrument while statement
+  instrument blocks and but non multi yields
  instrument blocks and but non multi yields
+  do not instrument records class
  do not instrument records class
+  instrument class defs
  instrument class defs
+  instrument inside modules
  instrument inside modules
+  do not instrument class initializing arguments
  do not instrument class initializing arguments
+  do not instrument constants assignments
  do not instrument constants assignments
+  do not instrument top level macro calls
  do not instrument top level macro calls
+  instrument returns inside def
  instrument returns inside def
+  instrument print with args
  instrument print with args
+  instrument unary expressions
  instrument unary expressions
+  instrument single statement def
  instrument single statement def
+  instrument not expressions
  instrument not expressions
+  instrument typeof
  instrument typeof
+  instrument nested blocks unless in same line
  instrument nested blocks unless in same line
+  allow visibility modifiers
  allow visibility modifiers
+  instrument multi statement def
  instrument multi statement def
+Semantic: extern struct
+  declares extern union with no constructor
  declares extern union with no constructor
+  overrides getter
  overrides getter
+  can be passed to C fun
  can be passed to C fun
+  declares extern struct with no constructor
  declares extern struct with no constructor
+  can use extern struct in lib
  can use extern struct in lib
+  declares with constructor
  declares with constructor
+  errors if using non-primitive for field type via module
  errors if using non-primitive for field type via module
+  errors if using non-primitive for field type
  errors if using non-primitive for field type
+  can new with named args
  can new with named args
+  can include module
  can include module
+  errors if using non-primitive type in constructor
  errors if using non-primitive type in constructor
+cleanup
+  strip tuple elements after unreachable element
  strip tuple elements after unreachable element
+  errors if assigning var to itself
  errors if assigning var to itself
+  strip named-tuple elements after unreachable element
  strip named-tuple elements after unreachable element
+  errors if assigning instance var to itself
  errors if assigning instance var to itself
+file_exists?
+  with relative path
+    reads file (doesn't exist)
    reads file (doesn't exist)
+    reads file (exists)
    reads file (exists)
+  with absolute path
+    returns false if file doesn't exist
    returns false if file doesn't exist
+    returns true if file exists
    returns true if file exists
+Code gen: union type
+  assigns union to union  assigns union to union  assigns union to union  assigns union to union  assigns union to union  assigns union to union  assigns union to union  assigns union to union  assigns union to union
  assigns union to union
+  codegens union type as return value
  codegens union type as return value
+  codegens union type for instance var
  codegens union type for instance var
+  codegens union type when no obj
  codegens union type when no obj
+  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2  assigns union to larger union when source is nilable 2
  assigns union to larger union when source is nilable 2
+  codegens union to_s  codegens union to_s  codegens union to_s  codegens union to_s  codegens union to_s  codegens union to_s  codegens union to_s  codegens union to_s  codegens union to_s
  codegens union to_s
+  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1  assigns union to larger union when source is nilable 1
  assigns union to larger union when source is nilable 1
+  codegens union type when obj is not union but arg is
  codegens union type when obj is not union but arg is
+  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable  dispatch call to object method on nilable
  dispatch call to object method on nilable
+  assigns union to larger union  assigns union to larger union  assigns union to larger union  assigns union to larger union  assigns union to larger union  assigns union to larger union  assigns union to larger union  assigns union to larger union  assigns union to larger union
  assigns union to larger union
+  respects union payload alignment when upcasting Bool (#14898)
  respects union payload alignment when upcasting Bool (#14898)
+  codegens if with same nested union
  codegens if with same nested union
+  codegens union type when obj is union and no args
  codegens union type when obj is union and no args
+  codegens union type when no obj and restrictions
  codegens union type when no obj and restrictions
+  sorts restrictions when there are unions
  sorts restrictions when there are unions
+  codegens union type when obj is union and arg is union
  codegens union type when obj is union and arg is union
+  provides T as a tuple literal
  provides T as a tuple literal
+  codegens union type when obj union but arg is not
  codegens union type when obj union but arg is not
+Semantic: uninitialized
+  disallows declaring var of type Number
  disallows declaring var of type Number
+  declares as uninitialized
  declares as uninitialized
+  can uninitialize variable outside initialize, generic (#2828)
  can uninitialize variable outside initialize, generic (#2828)
+  errors if declares var and then assigns other type
  errors if declares var and then assigns other type
+  disallows declaring var of type Class
  disallows declaring var of type Class
+  disallows declaring var of type Float
  disallows declaring var of type Float
+  disallows declaring var of type Enum
  disallows declaring var of type Enum
+  disallows declaring var of type Reference
  disallows declaring var of type Reference
+  disallows declaring var of type Struct
  disallows declaring var of type Struct
+  errors if declaring variable multiple times with different types (#917)
  errors if declaring variable multiple times with different types (#917)
+  errors if declaring generic type without type vars (with class var)
  errors if declaring generic type without type vars (with class var)
+  can use uninitialized with class type (#2940)
  can use uninitialized with class type (#2940)
+  disallows declaring var of type Int
  disallows declaring var of type Int
+  works with uninitialized NoReturn (#3314)
  works with uninitialized NoReturn (#3314)
+  uses virtual type for uninitialized (#8216)
  uses virtual type for uninitialized (#8216)
+  declares an instance variable in initialize as uninitialized
  declares an instance variable in initialize as uninitialized
+  declares as uninitialized and reads it
  declares as uninitialized and reads it
+  has type (#3641)
  has type (#3641)
+  can uninitialize variable outside initialize (#2828)
  can uninitialize variable outside initialize (#2828)
+  disallows declaring var of type Object
  disallows declaring var of type Object
+  disallows declaring var of type Value
  disallows declaring var of type Value
+  errors if declaring generic type without type vars (with instance var)
  errors if declaring generic type without type vars (with instance var)
+Crystal::Repl::Interpreter
+  autocast
+    autocasts float32 var to float64 (#12560)
    autocasts float32 var to float64 (#12560)
+    autocasts symbol to enum in ivar initializer (#12216)
    autocasts symbol to enum in ivar initializer (#12216)
+    autocasts integer var to float (#12560)
    autocasts integer var to float (#12560)
+    autocasts int in multidispatch
    autocasts int in multidispatch
+    autocasts number literal to integer
    autocasts number literal to integer
+    autocasts symbol to enum in multidispatch (#11782)
    autocasts symbol to enum in multidispatch (#11782)
+    autocasts symbol to enum
    autocasts symbol to enum
+    autocasts number literal to float
    autocasts number literal to float
+    autocasts integer var to integer (#12560)
    autocasts integer var to integer (#12560)
+Semantic: ssa
+  types if with return in else with assign
  types if with return in else with assign
+  types if with return in then with assign
  types if with return in then with assign
+  types a var inside an if without previous definition
  types a var inside an if without previous definition
+  types if with break in then
  types if with break in then
+  types block with break
  types block with break
+  types a var inside an if with previous definition
  types a var inside an if with previous definition
+  types while with break
  types while with break
+  types if with return in then
  types if with return in then
+  types a var that is declared in a while condition
  types a var that is declared in a while condition
+  types block with break doesn't infect initial vars
  types block with break doesn't infect initial vars
+  types a var with an if with nested if
  types a var with an if with nested if
+  doesn't change type to nilable inside if
  doesn't change type to nilable inside if
+  doesn't error if same variable is declared in multiple typeofs
  doesn't error if same variable is declared in multiple typeofs
+  types a var after begin ensure as having last type
  types a var after begin ensure as having last type
+  types a var inside an if without definition in else
  types a var inside an if without definition in else
+  types a var that is re-assigned in a while condition
  types a var that is re-assigned in a while condition
+  types re-assign inside while (bug)
  types re-assign inside while (bug)
+  doesn't error if same variable is used in multiple arguments of same typeof
  doesn't error if same variable is used in multiple arguments of same typeof
+  types if with unreachable in then
  types if with unreachable in then
+  types if with restricted type in then
  types if with restricted type in then
+  types a var that is re-assigned in a while and used in condition
  types a var that is re-assigned in a while and used in condition
+  types block with next
  types block with next
+  types a var inside an if without change in else
  types a var inside an if without change in else
+  types a var that is declared in a while with out
  types a var that is declared in a while with out
+  types if with return in both branches
  types if with return in both branches
+  types a var that is declared in a while condition with break after re-assignment
  types a var that is declared in a while condition with break after re-assignment
+  types a var after begin ensure as having last type (2)
  types a var after begin ensure as having last type (2)
+  types a var with an if but without change
  types a var with an if but without change
+  types while with next
  types while with next
+  types if with return in else
  types if with return in else
+  preserves type filters after block (bug)
  preserves type filters after block (bug)
+  types a var inside an if without change in then
  types a var inside an if without change in then
+  types if with next in then
  types if with next in then
+  types while with break with new var
  types while with break with new var
+  types a var that is re-assigned in a while in next and used in condition
  types a var that is re-assigned in a while in next and used in condition
+  types if with restricted type in else
  types if with restricted type in else
+  types a var that is re-assigned in a while
  types a var that is re-assigned in a while
+  types a var that is re-assigned in a block
  types a var that is re-assigned in a block
+  types re-assign inside if (bug)
  types re-assign inside if (bug)
+  types a var inside an if without definition in then
  types a var inside an if without definition in then
+  types while with break doesn't infect initial vars
  types while with break doesn't infect initial vars
+  types a var that is declared in a while condition with break before re-assignment
  types a var that is declared in a while condition with break before re-assignment
+  types if/else with var (bug)
  types if/else with var (bug)
+  types a var that is declared in a while
  types a var that is declared in a while
+  types a redefined variable
  types a redefined variable
+  errors if accessing variable declared inside typeof
  errors if accessing variable declared inside typeof
+Normalize: def
+  expands with splat and zero
  expands with splat and zero
+  expands a def with splat and double splat
  expands a def with splat and double splat
+  expands with named argument and yield
  expands with named argument and yield
+  expands a def on request with default arguments that yields (external names)
  expands a def on request with default arguments that yields (external names)
+  expands arg with default value after splat
  expands arg with default value after splat
+  gives correct body location with
+    default arg with restriction, without body
    default arg with restriction, without body
+    default arg, with body
    default arg, with body
+    block instance var arg, with body
    block instance var arg, with body
+    block instance var arg, without body
    block instance var arg, without body
+    default arg, without body
    default arg, without body
+    default arg with restriction, with body
    default arg with restriction, with body
+    splat arg, without body
    splat arg, without body
+    splat arg, with body
    splat arg, with body
+  expands a def with external names (2)
  expands a def with external names (2)
+  expands a def with double splat and two named args
  expands a def with double splat and two named args
+  expands a def on request with default arguments
  expands a def on request with default arguments
+  expands with more named arg which come in the correct order
  expands with more named arg which come in the correct order
+  expands a new def with double splat and two named args and regular args
  expands a new def with double splat and two named args and regular args
+  expands with splat and default argument
  expands with splat and default argument
+  expands with magic constant specifying one when all are magic
  expands with magic constant specifying one when all are magic
+  expands a def on request with default arguments (external names)
  expands a def on request with default arguments (external names)
+  expands with two named argument and one not
  expands with two named argument and one not
+  expands a def on request with default arguments and type restrictions
  expands a def on request with default arguments and type restrictions
+  expands a def with double splat and no args
  expands a def with double splat and no args
+  expands with one named arg that is the only one (1)
  expands with one named arg that is the only one (1)
+  expands def with reserved external name (#6559)
  expands def with reserved external name (#6559)
+  expands with splat with one arg before
  expands with splat with one arg before
+  expands with magic constant with named arg
  expands with magic constant with named arg
+  expands with magic constant
  expands with magic constant
+  expands with one named arg that is the only one (2)
  expands with one named arg that is the only one (2)
+  expands with two named argument
  expands with two named argument
+  expands with magic constant specifying one when not all are magic
  expands with magic constant specifying one when not all are magic
+  expands default value after splat index
  expands default value after splat index
+  expands with named argument
  expands with named argument
+  expands a def on request with default arguments and type restrictions (2)
  expands a def on request with default arguments and type restrictions (2)
+  expands a def with external names (1)
  expands a def with external names (1)
+  expands a def with double splat and two named args and regular args
  expands a def with double splat and two named args and regular args
+  expands a def on request with default arguments that yields
  expands a def on request with default arguments that yields
+  uses bare *
  uses bare *
+  expands a def on request with default arguments (2)
  expands a def on request with default arguments (2)
+  expands with splat
  expands with splat
+  expands with magic constant with named arg with yield
  expands with magic constant with named arg with yield
+  expands a def on request with default arguments that yields (2)
  expands a def on request with default arguments that yields (2)
+Codegen: is_a?
+  codegens is_a? casts union to nilable
  codegens is_a? casts union to nilable
+  codegens is_a? on right side of and
  codegens is_a? on right side of and
+  doesn't consider generic type to be a generic type of a recursive alias (#3524)
  doesn't consider generic type to be a generic type of a recursive alias (#3524)
+  doesn't error if result is discarded (#14113)
  doesn't error if result is discarded (#14113)
+  restricts metaclass against virtual metaclass type
  restricts metaclass against virtual metaclass type
+  evaluates method on filtered union type 2
  evaluates method on filtered union type 2
+  restricts type in else but lazily
  restricts type in else but lazily
+  codegens is_a? with nilable gives false because other type 1
  codegens is_a? with nilable gives false because other type 1
+  works with inherited generic class against an instantiation
  works with inherited generic class against an instantiation
+  evaluate method on filtered type
  evaluate method on filtered type
+  codegens is_a? with virtual and module
  codegens is_a? with virtual and module
+  does is_a? with generic class metaclass
  does is_a? with generic class metaclass
+  doesn't work with inherited generic class against an instantiation (2)
  doesn't work with inherited generic class against an instantiation (2)
+  does is_a?(generic type) for nested generic inheritance, through upcast (1)
  does is_a?(generic type) for nested generic inheritance, through upcast (1)
+  codegens is_a? from nilable reference union type to nil
  codegens is_a? from nilable reference union type to nil
+  restricts virtual metaclass against virtual metaclass type
  restricts virtual metaclass against virtual metaclass type
+  evaluates method on filtered union type
  evaluates method on filtered union type
+  codegens is_a? false for simple type
  codegens is_a? false for simple type
+  doesn't skip assignment when used in combination with .is_a? and && (#1121)
  doesn't skip assignment when used in combination with .is_a? and && (#1121)
+  doesn't type merge (1) (#548)
  doesn't type merge (1) (#548)
+  transforms else if condition is always falsey
  transforms else if condition is always falsey
+  does is_a? with more strict virtual type
  does is_a? with more strict virtual type
+  does is_a? with union type as Union(X, Y), don't resolve to virtual type (#10244)
  does is_a? with union type as Union(X, Y), don't resolve to virtual type (#10244)
+  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used
  codegens when is_a? is always false but properties are used
+  codegens is_a? with union gives true
  codegens is_a? with union gives true
+  passes is_a? with generic module type on virtual type (#10302)
  passes is_a? with generic module type on virtual type (#10302)
+  codegens is_a? true for simple type
  codegens is_a? true for simple type
+  does is_a? for virtual generic instance type against generic
  does is_a? for virtual generic instance type against generic
+  restricts union with union
  restricts union with union
+  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true
  codegens is_a? with a Const does comparison and gives true
+  says true for Class.is_a?(Class.class) (#4374)
  says true for Class.is_a?(Class.class) (#4374)
+  doesn't type merge (2) (#548)
  doesn't type merge (2) (#548)
+  visits 1.to_s twice, may trigger enclosing_call (#4364)  visits 1.to_s twice, may trigger enclosing_call (#4364)  visits 1.to_s twice, may trigger enclosing_call (#4364)  visits 1.to_s twice, may trigger enclosing_call (#4364)  visits 1.to_s twice, may trigger enclosing_call (#4364)  visits 1.to_s twice, may trigger enclosing_call (#4364)  visits 1.to_s twice, may trigger enclosing_call (#4364)  visits 1.to_s twice, may trigger enclosing_call (#4364)  visits 1.to_s twice, may trigger enclosing_call (#4364)
  visits 1.to_s twice, may trigger enclosing_call (#4364)
+  does is_a? with && and true condition
  does is_a? with && and true condition
+  restricts union metaclass to metaclass (#12295)
  restricts union metaclass to metaclass (#12295)
+  codegens untyped var (#4009)
  codegens untyped var (#4009)
+  doesn't skip assignment when used in combination with .is_a? (false case) (#1121)
  doesn't skip assignment when used in combination with .is_a? (false case) (#1121)
+  doesn't skip assignment when used in combination with .is_a? (true case, else) (#1121)
  doesn't skip assignment when used in combination with .is_a? (true case, else) (#1121)
+  works with inherited generic class against an instantiation (3)
  works with inherited generic class against an instantiation (3)
+  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)
  does is_a? for generic type against generic class instance type (#12304)
+  codegens is_a? with nilable gives false because no type
  codegens is_a? with nilable gives false because no type
+  evaluate method on filtered type nilable type not-nil
  evaluate method on filtered type nilable type not-nil
+  codegens is_a? with nilable gives false because no type
  codegens is_a? with nilable gives false because no type
+  codegens is_a? with virtual
  codegens is_a? with virtual
+  restricts simple type with union
  restricts simple type with union
+  does is_a?(generic type) for nested generic inheritance, through upcast (2)
  does is_a?(generic type) for nested generic inheritance, through upcast (2)
+  codegens is_a? with union gives false
  codegens is_a? with union gives false
+  virtual metaclass type is not virtual instance type (#12628)
  virtual metaclass type is not virtual instance type (#12628)
+  codegens is_a? with union gives true
  codegens is_a? with union gives true
+  does is_a? with union type, don't resolve to virtual type (#10244)
  does is_a? with union type, don't resolve to virtual type (#10244)
+  codegens is_a? with nilable gives false because other type 2
  codegens is_a? with nilable gives false because other type 2
+  codegens is_a? casts union to nilable in method
  codegens is_a? casts union to nilable in method
+  doesn't skip assignment when used in combination with .is_a? (true case, then) (#1121)
  doesn't skip assignment when used in combination with .is_a? (true case, then) (#1121)
+  says false for value.is_a?(Class)
  says false for value.is_a?(Class)
+  evaluate method on filtered type nilable type nil
  evaluate method on filtered type nilable type nil
+  evaluates method on filtered union type 3  evaluates method on filtered union type 3  evaluates method on filtered union type 3  evaluates method on filtered union type 3  evaluates method on filtered union type 3  evaluates method on filtered union type 3  evaluates method on filtered union type 3  evaluates method on filtered union type 3  evaluates method on filtered union type 3
  evaluates method on filtered union type 3
+  does is_a?(generic type) for nested generic inheritance (2)
  does is_a?(generic type) for nested generic inheritance (2)
+  codegens is_a? with nilable gives true
  codegens is_a? with nilable gives true
+  codegens is_a? from virtual type to module
  codegens is_a? from virtual type to module
+  does is_a?/responds_to? twice (#1451)
  does is_a?/responds_to? twice (#1451)
+  codegens is_a? from nilable reference union type to type
  codegens is_a? from nilable reference union type to type
+  says false for GenericChild(Base).is_a?(GenericBase(Child)) (#1294)
  says false for GenericChild(Base).is_a?(GenericBase(Child)) (#1294)
+  does is_a? for union of module and type
  does is_a? for union of module and type
+  codegens is_a? with virtual and nil
  codegens is_a? with virtual and nil
+  codegens is_a? with union gives false
  codegens is_a? with union gives false
+  gives false if generic type doesn't match exactly
  gives false if generic type doesn't match exactly
+  does is_a?(generic type) for nested generic inheritance (1) (#9660)
  does is_a?(generic type) for nested generic inheritance (1) (#9660)
+  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false
  codegens is_a? with a Const does comparison and gives false
+  transforms then if condition is always truthy
  transforms then if condition is always truthy
+  resets truthy state after visiting nodes (bug)
  resets truthy state after visiting nodes (bug)
+  says true for Class.is_a?(Class.class.class) (#4374)
  says true for Class.is_a?(Class.class.class) (#4374)
+Crystal::Repl::Interpreter
+  calls
+    does ReadInstanceVar with wants_struct_pointer
    does ReadInstanceVar with wants_struct_pointer
+    does call with struct as obj (2)
    does call with struct as obj (2)
+    mutates through inlined instance var with receiver
    mutates through inlined instance var with receiver
+    inlines call that returns self
    inlines call that returns self
+    puts struct pointer after tuple indexer
    puts struct pointer after tuple indexer
+    inlines method that just reads an instance var, but produces side effects of args
    inlines method that just reads an instance var, but produces side effects of args
+    inlines method that just reads an instance var
    inlines method that just reads an instance var
+    does call on instance var that's a struct, from a class
    does call on instance var that's a struct, from a class
+    inlines call that returns self (2)
    inlines call that returns self (2)
+    mutates through pointer (3)
    mutates through pointer (3)
+    mutates through inlined instance var without receiver
    mutates through inlined instance var without receiver
+    mutates through pointer (1)
    mutates through pointer (1)
+    calls a top-level method without arguments and no local vars
    calls a top-level method without arguments and no local vars
+    interprets call with default values
    interprets call with default values
+    discards call with struct as obj
    discards call with struct as obj
+    does Assign instance var with wants_struct_pointer
    does Assign instance var with wants_struct_pointer
+    does Assign var with wants_struct_pointer
    does Assign var with wants_struct_pointer
+    does call with struct as obj
    does call with struct as obj
+    mutates call argument
    mutates call argument
+    interprets implicit self call for pointer
    interprets implicit self call for pointer
+    calls a top-level method with two arguments
    calls a top-level method with two arguments
+    does call on ivar that's a struct, takes a pointer to instance var, inside if
    does call on ivar that's a struct, takes a pointer to instance var, inside if
+    does call on read instance var that's a struct, takes a pointer to instance var
    does call on read instance var that's a struct, takes a pointer to instance var
+    mutates through read instance var
    mutates through read instance var
+    calls a top-level method without arguments but with local vars
    calls a top-level method without arguments but with local vars
+    interprets call with named arguments
    interprets call with named arguments
+    interprets call with if
    interprets call with if
+    does call on self that's a struct, takes a pointer to instance var, inside if
    does call on self that's a struct, takes a pointer to instance var, inside if
+    does call on instance var that's a struct, from a struct
    does call on instance var that's a struct, from a struct
+    does call on constant that's a struct, takes a pointer to instance var, inside if
    does call on constant that's a struct, takes a pointer to instance var, inside if
+    does Assign class var with wants_struct_pointer
    does Assign class var with wants_struct_pointer
+    mutates through pointer (2)
    mutates through pointer (2)
+    does call on var that's a struct, takes a pointer to instance var, inside if
    does call on var that's a struct, takes a pointer to instance var, inside if
+    does call on constant that's a struct, takes a pointer to instance var
    does call on constant that's a struct, takes a pointer to instance var
+    inlines method that just reads an instance var (2)
    inlines method that just reads an instance var (2)
+    does call on Pointer#value that's a struct, takes a pointer to instance var
    does call on Pointer#value that's a struct, takes a pointer to instance var
+    interprets self for primitive types
    interprets self for primitive types
+    interprets explicit self call for primitive types
    interprets explicit self call for primitive types
+Code gen: lib
+  uses static array in lib extern (#5688)
  uses static array in lib extern (#5688)
+  passes nil to varargs (#1570)
  passes nil to varargs (#1570)
+  call to void function
  call to void function
+  refers to lib type (#960)
  refers to lib type (#960)
+  casts C fun to Crystal proc when accessing instance var (#2515)
  casts C fun to Crystal proc when accessing instance var (#2515)
+  doesn't crash with nil and varargs (#4414)
  doesn't crash with nil and varargs (#4414)
+  can use enum as fun return
  can use enum as fun return
+  can use enum as fun argument
  can use enum as fun argument
+  doesn't crash when casting -1 to UInt32 (#3594)
  doesn't crash when casting -1 to UInt32 (#3594)
+  allows setting/getting external variable as function pointer
  allows setting/getting external variable as function pointer
+  allows passing type to LibC if it has a converter with to_unsafe (bug)
  allows passing type to LibC if it has a converter with to_unsafe (bug)
+  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)  get fun field from union (#672)
  get fun field from union (#672)
+  allows invoking out with underscore 
  allows invoking out with underscore 
+  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)  get fun field from struct (#672)
  get fun field from struct (#672)
+  allows passing type to LibC if it has a converter with to_unsafe
  allows passing type to LibC if it has a converter with to_unsafe
+  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return  can use tuple as fun return
  can use tuple as fun return
+  codegens lib var set and get
  codegens lib var set and get
+  passes int as another float type in literal
  passes int as another float type in literal
 ASTNode#to_s
-  does to_s of "foo(\"bar baz\": 2)"
  does to_s of "foo(\"bar baz\": 2)"
-  does to_s of "&+1"
  does to_s of "&+1"
-  does to_s of "foo x: 1, y: 2, &.bar"
  does to_s of "foo x: 1, y: 2, &.bar"
-  does to_s of "`\#{1}\\n\\0`"
  does to_s of "`\#{1}\\n\\0`"
+  does to_s of "lib Foo\n  struct Foo\n    a : Void\n    b : Void\n  end\nend"
  does to_s of "lib Foo\n  struct Foo\n    a : Void\n    b : Void\n  end\nend"
+  does to_s of "offsetof(Foo, @bar)"
  does to_s of "offsetof(Foo, @bar)"
+  does to_s of "foo { |i| i.bar { i } }"
  does to_s of "foo { |i| i.bar { i } }"
+  does to_s of "lib Foo\n  A = Pointer(Void).new(0)\n  struct B\n    x : Void*\n    y : Int[1]\n  end\n  fun c(Void*) : Char[2]*\nend"
  does to_s of "lib Foo\n  A = Pointer(Void).new(0)\n  struct B\n    x : Void*\n    y : Int[1]\n  end\n  fun c(Void*) : Char[2]*\nend"
+  does to_s of "lib Foo\n  FOO = 0\nend"
  does to_s of "lib Foo\n  FOO = 0\nend"
+  does to_s of "def foo(& : ->)\nend"
  does to_s of "def foo(& : ->)\nend"
   does to_s of "asm(\"bl trap\" :::: \"unwind\")"
  does to_s of "asm(\"bl trap\" :::: \"unwind\")"
-  does to_s of "->(x : Int32, y : Bool) : Char do\n  'a'\nend"
  does to_s of "->(x : Int32, y : Bool) : Char do\n  'a'\nend"
-  does to_s of x = (1
-2
-)
  does to_s of x = (1
-2
-)
-  does to_s of "def foo(**args)\nend"
  does to_s of "def foo(**args)\nend"
-  does to_s of "%(\"\#{foo}\")"
  does to_s of "%(\"\#{foo}\")"
-  does to_s of "1[2, x: 3, &.foo]"
  does to_s of "1[2, x: 3, &.foo]"
+  does to_s of "# doc\ndef foo\nend"
  does to_s of "# doc\ndef foo\nend"
+  does to_s of "macro foo(x, @[Foo] *y)\nend"
  does to_s of "macro foo(x, @[Foo] *y)\nend"
+  does to_s of "\"\\e\\0\\\"\""
  does to_s of "\"\\e\\0\\\"\""
+  does to_s of "(1 + 2).as(Int32)"
  does to_s of "(1 + 2).as(Int32)"
+  does to_s of "foo do |k, v|\n  k.bar(1, 2, 3)\nend"
  does to_s of "foo do |k, v|\n  k.bar(1, 2, 3)\nend"
+  does to_s of "fun foo\nend"
  does to_s of "fun foo\nend"
+  does to_s of "\"\#{1}\\0\""
  does to_s of "\"\#{1}\\0\""
+  does to_s of "enum Foo\n  A = 0\n  B\nend"
  does to_s of "enum Foo\n  A = 0\n  B\nend"
+  does to_s of "&-1"
  does to_s of "&-1"
+  does to_s of "([] of T).foo"
  does to_s of "([] of T).foo"
+  does to_s of "@[Foo(1, 2, a: 1, b: 2)]"
  does to_s of "@[Foo(1, 2, a: 1, b: 2)]"
+  does to_s of "1 && (a = 2)"
  does to_s of "1 && (a = 2)"
+  does to_s of "foo(x : Foo((T -> U)))"
  does to_s of "foo(x : Foo((T -> U)))"
+  does to_s of "fun foo(a : Void, b : Void, ...) : Void\nend"
  does to_s of "fun foo(a : Void, b : Void, ...) : Void\nend"
   does to_s of "/ /"
  does to_s of "/ /"
-  does to_s of "foo(1, (2 + 3), bar: (4 + 5))"
  does to_s of "foo(1, (2 + 3), bar: (4 + 5))"
-  does to_s of "foo : A | (B -> C)"
  does to_s of "foo : A | (B -> C)"
-  does to_s of "(~1).foo"
  does to_s of "(~1).foo"
-  does to_s of "def foo(x : X, @[Foo] y : Y) forall X, Y\nend"
  does to_s of "def foo(x : X, @[Foo] y : Y) forall X, Y\nend"
-  does to_s of "def foo(x : X, y : Y) forall X, Y\nend"
  does to_s of "def foo(x : X, y : Y) forall X, Y\nend"
-  does to_s of "/\#{1 / 2}/"
  does to_s of "/\#{1 / 2}/"
-  does to_s of "{% if foo %}\n  foo_then\n{% end %}"
  does to_s of "{% if foo %}\n  foo_then\n{% end %}"
-  does to_s of "def foo(@[Foo] x : T = 1)\nend"
  does to_s of "def foo(@[Foo] x : T = 1)\nend"
-  does to_s of "alias Foo = Void"
  does to_s of "alias Foo = Void"
-  does to_s of "foo[x : (T -> U) -> V, W] = 1"
  does to_s of "foo[x : (T -> U) -> V, W] = 1"
-  does to_s of "a.as?(Int32)"
  does to_s of "a.as?(Int32)"
-  does to_s of "macro foo(@[Foo] x, @[Foo] *y)\nend"
  does to_s of "macro foo(@[Foo] x, @[Foo] *y)\nend"
-  does to_s of "%r{\#{1}\\/\\0}"
  does to_s of "%r{\#{1}\\/\\0}"
-  does to_s of "{% for foo in bar %}\n  {{ if true\n  foo\n  bar\nend }}\n{% end %}"
  does to_s of "{% for foo in bar %}\n  {{ if true\n  foo\n  bar\nend }}\n{% end %}"
-  does to_s of "他.说 = \"你好\""
  does to_s of "他.说 = \"你好\""
-  does to_s of "1 & 2 & (3 | 4)"
  does to_s of "1 & 2 & (3 | 4)"
-  does to_s of "macro foo(x)\n  yield\nend"
  does to_s of "macro foo(x)\n  yield\nend"
-  does to_s of "_foo.bar"
  does to_s of "_foo.bar"
-  does to_s of "macro foo(@[Foo] **args)\nend"
  does to_s of "macro foo(@[Foo] **args)\nend"
-  does to_s of "macro foo\n  123\nend"
  does to_s of "macro foo\n  123\nend"
   does to_s of "lib Foo\nend"
  does to_s of "lib Foo\nend"
+  does to_s of "def foo(x : (T -> U) | V)\nend"
  does to_s of "def foo(x : (T -> U) | V)\nend"
+  does to_s of "`\#{1}\\n\\0`"
  does to_s of "`\#{1}\\n\\0`"
+  does to_s of "enum A : B\nend"
  does to_s of "enum A : B\nend"
+  does to_s of "if (1 + 2\n3)\n  4\nend"
  does to_s of "if (1 + 2\n3)\n  4\nend"
+  does to_s of "{ {1, 2, 3} }"
  does to_s of "{ {1, 2, 3} }"
+  does to_s of "def foo(x, @[Foo] **args)\nend"
  does to_s of "def foo(x, @[Foo] **args)\nend"
+  does to_s of "あ.い, う.え.お = 1, 2"
  does to_s of "あ.い, う.え.お = 1, 2"
+  does to_s of "{% foo %}"
  does to_s of "{% foo %}"
+  does to_s of "select\nwhen foo\n  select\n  when bar\n    1\n  else\n    2\n  end\nelse\n  select\n  when baz\n    3\n  else\n    4\n  end\nend"
  does to_s of "select\nwhen foo\n  select\n  when bar\n    1\n  else\n    2\n  end\nelse\n  select\n  when baz\n    3\n  else\n    4\n  end\nend"
+  does to_s of "case 1\nwhen .[](2)\n  3\nwhen .[]=(4)\n  5\nend"
  does to_s of "case 1\nwhen .[](2)\n  3\nwhen .[]=(4)\n  5\nend"
+  does to_s of "macro foo\n{% @type %}\nend"
  does to_s of "macro foo\n{% @type %}\nend"
+  does to_s of "macro foo\n\\{%@type %}\nend"
  does to_s of "macro foo\n\\{%@type %}\nend"
+  does to_s of "(1 <= 2) <= 3"
  does to_s of "(1 <= 2) <= 3"
+  does to_s of "foo.*"
  does to_s of "foo.*"
+  does to_s of "macro foo(x)\n  yield\nend"
  does to_s of "macro foo(x)\n  yield\nend"
+  does to_s of "1_f64"
  does to_s of "1_f64"
+  does to_s of "def foo(x : (T -> U) -> V, *args : (T -> U) -> V, y : (T -> U) -> V, **opts : (T -> U) -> V, & : (T -> U) -> V) : ((T -> U) -> V)\nend"
  does to_s of "def foo(x : (T -> U) -> V, *args : (T -> U) -> V, y : (T -> U) -> V, **opts : (T -> U) -> V, & : (T -> U) -> V) : ((T -> U) -> V)\nend"
+  does to_s of "begin\n  ()\nend"
  does to_s of "begin\n  ()\nend"
   does to_s of "%r()imx"
  does to_s of "%r()imx"
-  does to_s of "class Foo\n  # doc\n  def foo\n  end\nend"
  does to_s of "class Foo\n  # doc\n  def foo\n  end\nend"
-  does to_s of "return begin\n  1\n  2\nend"
  does to_s of "return begin\n  1\n  2\nend"
+  does to_s of "foo { |(x, y)| x }"
  does to_s of "foo { |(x, y)| x }"
+  does to_s of "%r{\\/\\0}"
  does to_s of "%r{\\/\\0}"
+  does to_s of "->(x : Int32, y : Bool) : Char do\n  'a'\nend"
  does to_s of "->(x : Int32, y : Bool) : Char do\n  'a'\nend"
+  does to_s of "1[2, x: 3, &.foo]"
  does to_s of "1[2, x: 3, &.foo]"
+  does to_s of "yield(1)"
  does to_s of "yield(1)"
+  does to_s of "{% if foo %}\n  foo_then\n{% else %}\n  foo_else\n{% end %}"
  does to_s of "{% if foo %}\n  foo_then\n{% else %}\n  foo_else\n{% end %}"
+  does to_s of "1.~(2)"
  does to_s of "1.~(2)"
+  does to_s of "type(Foo = Void)"
  does to_s of "type(Foo = Void)"
+  does to_s of "{% for foo in bar %}\n  {{ foo }}\n{% end %}"
  does to_s of "{% for foo in bar %}\n  {{ foo }}\n{% end %}"
+  does to_s of "foo &.bar(1, 2, 3)"
  does to_s of "foo &.bar(1, 2, 3)"
   does to_s of "1.0"
  does to_s of "1.0"
-  does to_s of "begin\n  ()\nend"
  does to_s of "begin\n  ()\nend"
-  does to_s of "foo { |(x, (y, z))| x }"
  does to_s of "foo { |(x, (y, z))| x }"
-  does to_s of "->::foo(Int32, String)"
  does to_s of "->::foo(Int32, String)"
+  does to_s of "1.+(&block)"
  does to_s of "1.+(&block)"
+  does to_s of "foo(bar)"
  does to_s of "foo(bar)"
+  does to_s of "lib Foo::Bar\nend"
  does to_s of "lib Foo::Bar\nend"
+  does to_s of "foo[x, y, a: 1, b: 2] = z"
  does to_s of "foo[x, y, a: 1, b: 2] = z"
+  does to_s of "begin\n  (@x = x).is_a?(Foo)\nend"
  does to_s of "begin\n  (@x = x).is_a?(Foo)\nend"
+  does to_s of "(~1).foo"
  does to_s of "(~1).foo"
+  does to_s of "@foo.bar"
  does to_s of "@foo.bar"
   does to_s of "!(1 < 2)"
  does to_s of "!(1 < 2)"
-  does to_s of "def foo(x : (T -> U).class)\nend"
  does to_s of "def foo(x : (T -> U).class)\nend"
+  does to_s of "foo(\"bar baz\": 2)"
  does to_s of "foo(\"bar baz\": 2)"
+  does to_s of "class Foo\n  private def bar\n  end\nend"
  does to_s of "class Foo\n  private def bar\n  end\nend"
+  does to_s of "begin\n  (1)\n  2\nrescue\nend"
  does to_s of "begin\n  (1)\n  2\nrescue\nend"
+  does to_s of "macro foo\n  %bar{1, x} = 1\nend"
  does to_s of "macro foo\n  %bar{1, x} = 1\nend"
+  does to_s of "%r( )"
  does to_s of "%r( )"
+  does to_s of "Foo()"
  does to_s of "Foo()"
+  does to_s of "asm(\"nop\" ::: \"e\" : \"volatile\")"
  does to_s of "asm(\"nop\" ::: \"e\" : \"volatile\")"
+  does to_s of "macro foo(*, var)\nend"
  does to_s of "macro foo(*, var)\nend"
+  does to_s of "1.+(a: 2)"
  does to_s of "1.+(a: 2)"
+  does to_s of "他.说 = \"你好\""
  does to_s of "他.说 = \"你好\""
+  does to_s of "1[2, x: 3, &.foo]?"
  does to_s of "1[2, x: 3, &.foo]?"
+  does to_s of "-> : Int32 do\nend"
  does to_s of "-> : Int32 do\nend"
+  does to_s of "1.as(Int32)"
  does to_s of "1.as(Int32)"
   does to_s of "if 1\n  begin\n    2\n  end\nelse\n  begin\n    3\n  end\nend"
  does to_s of "if 1\n  begin\n    2\n  end\nelse\n  begin\n    3\n  end\nend"
-  does to_s of "/hello world/"
  does to_s of "/hello world/"
-  does to_s of "fun foo\nend"
  does to_s of "fun foo\nend"
-  does to_s of "\"\#{1}\\0\""
  does to_s of "\"\#{1}\\0\""
-  does to_s of "offsetof(Foo, @bar)"
  does to_s of "offsetof(Foo, @bar)"
-  does to_s of "{ {1, 2, 3} => 4 }"
  does to_s of "{ {1, 2, 3} => 4 }"
+  does to_s of "1[2, x: 3, &.foo] = 4"
  does to_s of "1[2, x: 3, &.foo] = 4"
+  does to_s of "%r()"
  does to_s of "%r()"
+  does to_s of "/\\(group\\)/"
  does to_s of "/\\(group\\)/"
+  does to_s of "!a"
  does to_s of "!a"
+  does to_s of "{foo: (1 + 2)}"
  does to_s of "{foo: (1 + 2)}"
+  does to_s of "foo(x : (T -> U) -> V, W)"
  does to_s of "foo(x : (T -> U) -> V, W)"
   does to_s of "1[&.foo]"
  does to_s of "1[&.foo]"
-  does to_s of "%x(whoami)"
  does to_s of "%x(whoami)"
-  does to_s of "macro foo(@[Foo] &block)\nend"
  does to_s of "macro foo(@[Foo] &block)\nend"
-  does to_s of "macro foo(x, @[Foo] *y)\nend"
  does to_s of "macro foo(x, @[Foo] *y)\nend"
-  does to_s of "case 1; in .foo?; 2; end"
  does to_s of "case 1; in .foo?; 2; end"
-  does to_s of "-> : Int32 do\nend"
  does to_s of "-> : Int32 do\nend"
-  does to_s of "{ {1, 2, 3} }"
  does to_s of "{ {1, 2, 3} }"
-  does to_s of "macro foo(@[Foo] id)\nend"
  does to_s of "macro foo(@[Foo] id)\nend"
-  does to_s of "foo.%"
  does to_s of "foo.%"
-  does to_s of "def foo(& : (->))\nend"
  does to_s of "def foo(& : (->))\nend"
-  does to_s of "1.[](2) do\nend"
  does to_s of "1.[](2) do\nend"
-  does to_s of "if (1 + 2\n3)\n  4\nend"
  does to_s of "if (1 + 2\n3)\n  4\nend"
-  does to_s of "1 <= 2 <= 3"
  does to_s of "1 <= 2 <= 3"
   does to_s of "begin\n  (1)\nend"
  does to_s of "begin\n  (1)\nend"
+  does to_s of "foo do\n  begin\n    bar\n  end\nend"
  does to_s of "foo do\n  begin\n    bar\n  end\nend"
+  does to_s of "begin\n  (1)\n  2\nend"
  does to_s of "begin\n  (1)\n  2\nend"
+  does to_s of "1.[](2) do\nend"
  does to_s of "1.[](2) do\nend"
+  does to_s of "a.as?(Int32)"
  does to_s of "a.as?(Int32)"
+  does to_s of "lib LibFoo\n  fun foo(x : Foo((T -> U)))\nend"
  does to_s of "lib LibFoo\n  fun foo(x : Foo((T -> U)))\nend"
+  does to_s of "macro foo\n\\{{ @type }}\nend"
  does to_s of "macro foo\n\\{{ @type }}\nend"
+  does to_s of "def foo(x : (T -> U).class)\nend"
  does to_s of "def foo(x : (T -> U).class)\nend"
+  does to_s of "/a/x"
  does to_s of "/a/x"
+  does to_s of "def foo(*args)\nend"
  does to_s of "def foo(*args)\nend"
   does to_s of `#{::String.interpolation(x)}`
  does to_s of `#{::String.interpolation(x)}`
   does to_s of "macro foo(**args)\nend"
  does to_s of "macro foo(**args)\nend"
-  does to_s of "1 <= (2 <= 3)"
  does to_s of "1 <= (2 <= 3)"
-  does to_s of "asm(\"nop\" ::::)"
  does to_s of "asm(\"nop\" ::::)"
-  does to_s of "foo do |k, v|\n  k.bar(1, 2, 3)\nend"
  does to_s of "foo do |k, v|\n  k.bar(1, 2, 3)\nend"
   does to_s of "lib LibFoo\n  fun foo(x : (T -> U).class)\nend"
  does to_s of "lib LibFoo\n  fun foo(x : (T -> U).class)\nend"
-  does to_s of "def foo(@[Foo] x y)\nend"
  does to_s of "def foo(@[Foo] x y)\nend"
-  does to_s of "macro foo\n\\{%@type %}\nend"
  does to_s of "macro foo\n\\{%@type %}\nend"
-  does to_s of "foo &.bar(1, 2, 3)"
  does to_s of "foo &.bar(1, 2, 3)"
-  does to_s of "({} of K => V).foo"
  does to_s of "({} of K => V).foo"
-  does to_s of "1.//(2, a: 3)"
  does to_s of "1.//(2, a: 3)"
-  does to_s of "foo(3, &.*(2))"
  does to_s of "foo(3, &.*(2))"
-  does to_s of "foo(&.==(2))"
  does to_s of "foo(&.==(2))"
-  does to_s of "asm(\"nop\" :: \"c\"(3), \"d\"(4) ::)"
  does to_s of "asm(\"nop\" :: \"c\"(3), \"d\"(4) ::)"
-  does to_s of "1.responds_to?(:\"&&\")"
  does to_s of "1.responds_to?(:\"&&\")"
-  does to_s of "1[&.foo]?"
  does to_s of "1[&.foo]?"
-  does to_s of "asm(\"nop\" : \"a\"(1), \"b\"(2) : \"c\"(3), \"d\"(4) : \"e\", \"f\" : \"volatile\", \"alignstack\", \"intel\")"
  does to_s of "asm(\"nop\" : \"a\"(1), \"b\"(2) : \"c\"(3), \"d\"(4) : \"e\", \"f\" : \"volatile\", \"alignstack\", \"intel\")"
-  does to_s of "yield(1)"
  does to_s of "yield(1)"
-  does to_s of "1.~(2)"
  does to_s of "1.~(2)"
-  does to_s of "begin\n  (1)\n  2\nrescue\nend"
  does to_s of "begin\n  (1)\n  2\nrescue\nend"
-  does to_s of "Foo(\"bar baz\": Int32)"
  does to_s of "Foo(\"bar baz\": Int32)"
-  does to_s of "macro foo(&)\nend"
  does to_s of "macro foo(&)\nend"
-  does to_s of "if true\n  (1)\n  2\nend"
  does to_s of "if true\n  (1)\n  2\nend"
-  does to_s of "def foo(*args)\nend"
  does to_s of "def foo(*args)\nend"
-  does to_s of "{% foo %}"
  does to_s of "{% foo %}"
-  does to_s of "select\nwhen foo\n  select\n  when bar\n    1\n  else\n    2\n  end\nelse\n  select\n  when baz\n    3\n  else\n    4\n  end\nend"
  does to_s of "select\nwhen foo\n  select\n  when bar\n    1\n  else\n    2\n  end\nelse\n  select\n  when baz\n    3\n  else\n    4\n  end\nend"
-  does to_s of "foo(bar)"
  does to_s of "foo(bar)"
-  does to_s of "{% for foo in bar %}\n  {{ foo }}\n{% end %}"
  does to_s of "{% for foo in bar %}\n  {{ foo }}\n{% end %}"
-  does to_s of "/hello world/imx"
  does to_s of "/hello world/imx"
-  does to_s of "enum Foo\n  A = 0\n  B\nend"
  does to_s of "enum Foo\n  A = 0\n  B\nend"
-  does to_s of "def foo(x, **args, &block : _ -> _)\nend"
  does to_s of "def foo(x, **args, &block : _ -> _)\nend"
-  does to_s of "begin\n  (1)\n  2\nend"
  does to_s of "begin\n  (1)\n  2\nend"
-  does to_s of "macro foo\n{% verbatim do %}1{% end %}\nend"
  does to_s of "macro foo\n{% verbatim do %}1{% end %}\nend"
-  does to_s of "def foo(@[Foo] *args)\nend"
  does to_s of "def foo(@[Foo] *args)\nend"
+  does to_s of "(1 || 1.1).as(Int32)"
  does to_s of "(1 || 1.1).as(Int32)"
+  does to_s of "def foo\n  yield\nend"
  does to_s of "def foo\n  yield\nend"
+  does to_s of "`\\n\\0`"
  does to_s of "`\\n\\0`"
+  does to_s of "foo[x : (T -> U) -> V, W] = 1"
  does to_s of "foo[x : (T -> U) -> V, W] = 1"
   does to_s of "def foo(x : Foo((T -> U)))\nend"
  does to_s of "def foo(x : Foo((T -> U)))\nend"
-  does to_s of "->::Foo::Bar.foo"
  does to_s of "->::Foo::Bar.foo"
-  does to_s of "1_f64"
  does to_s of "1_f64"
-  does to_s of "lib LibC\n  fun getch = \"get.char\"\nend"
  does to_s of "lib LibC\n  fun getch = \"get.char\"\nend"
-  does to_s of "asm(\"nop\" :::: \"volatile\")"
  does to_s of "asm(\"nop\" :::: \"volatile\")"
-  does to_s of "return true ? 1 : 2"
  does to_s of "return true ? 1 : 2"
-  does to_s of "def foo(x, @[Foo] **args)\nend"
  does to_s of "def foo(x, @[Foo] **args)\nend"
-  does to_s of "あ.い, う.え.お = 1, 2"
  does to_s of "あ.い, う.え.お = 1, 2"
-  does to_s of "/\\(group\\)/"
  does to_s of "/\\(group\\)/"
-  does to_s of "{\"foo bar\": 1}"
  does to_s of "{\"foo bar\": 1}"
-  does to_s of "foo &.bar"
  does to_s of "foo &.bar"
-  does to_s of "macro foo\n  {% for foo in bar %}\n    {{ foo }}\n  {% end %}\nend"
  does to_s of "macro foo\n  {% for foo in bar %}\n    {{ foo }}\n  {% end %}\nend"
-  does to_s of "\"\#{(1 + 2)}\""
  does to_s of "\"\#{(1 + 2)}\""
-  does to_s of "1.+(&block)"
  does to_s of "1.+(&block)"
   does to_s of "(1 & 2) & (3 | 4)"
  does to_s of "(1 & 2) & (3 | 4)"
-  does to_s of "foo(x : (T -> U) -> V, W)"
  does to_s of "foo(x : (T -> U) -> V, W)"
-  does to_s of "1e10_f64"
  does to_s of "1e10_f64"
-  does to_s of "macro foo(x, @[Foo] **args)\nend"
  does to_s of "macro foo(x, @[Foo] **args)\nend"
-  does to_s of "`\\n\\0`"
  does to_s of "`\\n\\0`"
-  does to_s of "foo.*"
  does to_s of "foo.*"
-  does to_s of "foo(a.as(Int32))"
  does to_s of "foo(a.as(Int32))"
-  does to_s of "{ {1 => 2} }"
  does to_s of "{ {1 => 2} }"
-  does to_s of "foo.nil?"
  does to_s of "foo.nil?"
-  does to_s of ":foo"
  does to_s of ":foo"
-  does to_s of "macro foo(*var)\nend"
  does to_s of "macro foo(*var)\nend"
-  does to_s of "def foo(x : (T -> U) | V)\nend"
  does to_s of "def foo(x : (T -> U) | V)\nend"
-  does to_s of "%r()"
  does to_s of "%r()"
-  does to_s of "foo(x : Foo((T -> U)))"
  does to_s of "foo(x : Foo((T -> U)))"
-  does to_s of "%r{\\/\\0}"
  does to_s of "%r{\\/\\0}"
-  does to_s of "(1 + 2)..3"
  does to_s of "(1 + 2)..3"
-  does to_s of "lib Foo\n  union Foo\n    a : Int\n    b : Int32\n  end\nend"
  does to_s of "lib Foo\n  union Foo\n    a : Int\n    b : Int32\n  end\nend"
-  does to_s of "macro foo\n\\{{ @type }}\nend"
  does to_s of "macro foo\n\\{{ @type }}\nend"
-  does to_s of "{foo: (1 + 2)}"
  does to_s of "{foo: (1 + 2)}"
-  does to_s of "case 1; when .foo?; 2; end"
  does to_s of "case 1; when .foo?; 2; end"
-  does to_s of "foo[x : (T -> U) -> V, W]"
  does to_s of "foo[x : (T -> U) -> V, W]"
-  does to_s of "foo(x : (T -> U) | V)"
  does to_s of "foo(x : (T -> U) | V)"
-  does to_s of "(a = 2) && 1"
  does to_s of "(a = 2) && 1"
-  does to_s of "@[Foo(1, 2, a: 1, b: 2)]"
  does to_s of "@[Foo(1, 2, a: 1, b: 2)]"
-  does to_s of "{ {foo: 2} }"
  does to_s of "{ {foo: 2} }"
-  does to_s of "1.+ do\nend"
  does to_s of "1.+ do\nend"
-  does to_s of "foo { |(x, y)| x }"
  does to_s of "foo { |(x, y)| x }"
+  does to_s of "/\\//"
  does to_s of "/\\//"
+  does to_s of "macro foo(@[Foo] id)\nend"
  does to_s of "macro foo(@[Foo] id)\nend"
+  does to_s of "macro foo\n  %bar = 1; end"
  does to_s of "macro foo\n  %bar = 1; end"
+  does to_s of "def foo(@[Foo] *args)\nend"
  does to_s of "def foo(@[Foo] *args)\nend"
+  does to_s of "{% verbatim do %}\n  1{{ 2 }}\n  3{{ 4 }}\n{% end %}"
  does to_s of "{% verbatim do %}\n  1{{ 2 }}\n  3{{ 4 }}\n{% end %}"
+  does to_s of "macro foo\n  {% for foo in bar %}\n    {{ foo }}\n  {% end %}\nend"
  does to_s of "macro foo\n  {% for foo in bar %}\n    {{ foo }}\n  {% end %}\nend"
+  does to_s of "def foo(x, **args, &block : _ -> _)\nend"
  does to_s of "def foo(x, **args, &block : _ -> _)\nend"
   does to_s of "foo._bar(1)"
  does to_s of "foo._bar(1)"
-  does to_s of "/\\?/"
  does to_s of "/\\?/"
-  does to_s of "@foo.bar"
  does to_s of "@foo.bar"
-  does to_s of "asm(\"nop\" :: \"a\"(1) :: \"volatile\")"
  does to_s of "asm(\"nop\" :: \"a\"(1) :: \"volatile\")"
-  does to_s of "1.+(a: 2)"
  does to_s of "1.+(a: 2)"
-  does to_s of ":\"{\""
  does to_s of ":\"{\""
-  does to_s of "(1..)"
  does to_s of "(1..)"
-  does to_s of "def foo(x : T = 1)\nend"
  does to_s of "def foo(x : T = 1)\nend"
-  does to_s of "lib Foo\n  struct Foo\n    a : Void\n    b : Void\n  end\nend"
  does to_s of "lib Foo\n  struct Foo\n    a : Void\n    b : Void\n  end\nend"
-  does to_s of "def foo(x : (T -> U) -> V, *args : (T -> U) -> V, y : (T -> U) -> V, **opts : (T -> U) -> V, & : (T -> U) -> V) : ((T -> U) -> V)\nend"
  does to_s of "def foo(x : (T -> U) -> V, *args : (T -> U) -> V, y : (T -> U) -> V, **opts : (T -> U) -> V, & : (T -> U) -> V) : ((T -> U) -> V)\nend"
-  does to_s of "def foo(x, **args, &block)\nend"
  does to_s of "def foo(x, **args, &block)\nend"
-  does to_s of "# doc\ndef foo\nend"
  does to_s of "# doc\ndef foo\nend"
-  does to_s of "def foo(**options, &block)\nend"
  does to_s of "def foo(**options, &block)\nend"
-  does to_s of "macro foo(*, __var var)\nend"
  does to_s of "macro foo(*, __var var)\nend"
-  does to_s of "enum A : B\nend"
  does to_s of "enum A : B\nend"
-  does to_s of "{(1 + 2) => (3 + 4)}"
  does to_s of "{(1 + 2) => (3 + 4)}"
-  does to_s of "def foo(x)\n  yield\nend"
  does to_s of "def foo(x)\n  yield\nend"
-  does to_s of "1[&.foo] = 2"
  does to_s of "1[&.foo] = 2"
-  does to_s of "macro foo\n  %bar{1, x} = 1\nend"
  does to_s of "macro foo\n  %bar{1, x} = 1\nend"
-  does to_s of "if true\n  (1)\nend"
  does to_s of "if true\n  (1)\nend"
+  does to_s of "def foo(@[Foo] x y)\nend"
  does to_s of "def foo(@[Foo] x y)\nend"
+  does to_s of "alias Foo = Void"
  does to_s of "alias Foo = Void"
   does to_s of "1_f32"
  does to_s of "1_f32"
-  does to_s of "foo[x, y, a: 1, b: 2] = z"
  does to_s of "foo[x, y, a: 1, b: 2] = z"
-  does to_s of "def foo(@[Foo] **args)\nend"
  does to_s of "def foo(@[Foo] **args)\nend"
+  does to_s of "macro foo(@[Foo] &block)\nend"
  does to_s of "macro foo(@[Foo] &block)\nend"
   does to_s of "foo(x : (T -> U).class)"
  does to_s of "foo(x : (T -> U).class)"
+  does to_s of "macro foo(x, **args)\nend"
  does to_s of "macro foo(x, **args)\nend"
   does to_s of "def foo(\"bar baz\" qux)\nend"
  does to_s of "def foo(\"bar baz\" qux)\nend"
-  does to_s of "lib Foo::Bar\nend"
  does to_s of "lib Foo::Bar\nend"
-  does to_s of "macro foo\n{{ @type }}\nend"
  does to_s of "macro foo\n{{ @type }}\nend"
-  does to_s of "type(Foo = Void)"
  does to_s of "type(Foo = Void)"
-  does to_s of "macro foo\n{% @type %}\nend"
  does to_s of "macro foo\n{% @type %}\nend"
+  does to_s of "def foo(& : (->))\nend"
  does to_s of "def foo(& : (->))\nend"
+  does to_s of "return begin\n  1\n  2\nend"
  does to_s of "return begin\n  1\n  2\nend"
+  does to_s of "/\\s/"
  does to_s of "/\\s/"
+  does to_s of "_foo.bar"
  does to_s of "_foo.bar"
+  does to_s of "begin\n  (1)\nrescue\nend"
  does to_s of "begin\n  (1)\nrescue\nend"
+  does to_s of "(a = 2) && 1"
  does to_s of "(a = 2) && 1"
+  does to_s of x = (1
+2
+)
  does to_s of x = (1
+2
+)
+  does to_s of "case 1; in .foo?; 2; end"
  does to_s of "case 1; in .foo?; 2; end"
+  does to_s of "\"\#{(1 + 2)}\""
  does to_s of "\"\#{(1 + 2)}\""
+  does to_s of "if true\n  (1)\n  2\nend"
  does to_s of "if true\n  (1)\n  2\nend"
+  does to_s of "foo x: 1, y: 2, &.bar"
  does to_s of "foo x: 1, y: 2, &.bar"
+  does to_s of "{ {foo: 2} }"
  does to_s of "{ {foo: 2} }"
   does to_s of "macro foo(&block)\nend"
  does to_s of "macro foo(&block)\nend"
-  does to_s of "lib LibC\n  fun getchar(Int, Float)\nend"
  does to_s of "lib LibC\n  fun getchar(Int, Float)\nend"
-  does to_s of "fun foo(a : Void, b : Void, ...) : Void\nend"
  does to_s of "fun foo(a : Void, b : Void, ...) : Void\nend"
-  does to_s of "(1 <= 2) <= 3"
  does to_s of "(1 <= 2) <= 3"
-  does to_s of "1.responds_to?(:to_s)"
  does to_s of "1.responds_to?(:to_s)"
-  does to_s of "{(1 + 2)}"
  does to_s of "{(1 + 2)}"
-  does to_s of "lib Foo\n  FOO = 0\nend"
  does to_s of "lib Foo\n  FOO = 0\nend"
-  does to_s of "def foo(**args : T)\nend"
  does to_s of "def foo(**args : T)\nend"
-  does to_s of "def foo(*args : _)\nend"
  does to_s of "def foo(*args : _)\nend"
-  does to_s of "begin\n  (@x = x).is_a?(Foo)\nend"
  does to_s of "begin\n  (@x = x).is_a?(Foo)\nend"
-  does to_s of "def foo\n  yield\nend"
  does to_s of "def foo\n  yield\nend"
-  does to_s of "macro foo(*, var)\nend"
  does to_s of "macro foo(*, var)\nend"
-  does to_s of "1.//(2, &block)"
  does to_s of "1.//(2, &block)"
-  does to_s of "foo { |i| i.bar { i } }"
  does to_s of "foo { |i| i.bar { i } }"
-  does to_s of "macro foo\n  %bar = 1; end"
  does to_s of "macro foo\n  %bar = 1; end"
-  does to_s of "1.as(Int32)"
  does to_s of "1.as(Int32)"
-  does to_s of "/a/x"
  does to_s of "/a/x"
-  does to_s of "foo[x, y, a: 1, b: 2]"
  does to_s of "foo[x, y, a: 1, b: 2]"
-  does to_s of "macro foo(@[Foo] &)\nend"
  does to_s of "macro foo(@[Foo] &)\nend"
-  does to_s of "case 1; when .!; 2; when .< 0; 3; end"
  does to_s of "case 1; when .!; 2; when .< 0; 3; end"
-  does to_s of "{% if foo %}\n  foo_then\n{% else %}\n  foo_else\n{% end %}"
  does to_s of "{% if foo %}\n  foo_then\n{% else %}\n  foo_else\n{% end %}"
+  does to_s of "def foo(x, **args, &block : (_ -> _))\nend"
  does to_s of "def foo(x, **args, &block : (_ -> _))\nend"
+  does to_s of "lib LibFoo\n  fun foo(x : (T -> U) -> V, W) : ((T -> U) -> V)\nend"
  does to_s of "lib LibFoo\n  fun foo(x : (T -> U) -> V, W) : ((T -> U) -> V)\nend"
+  does to_s of "[(1 + 2)] of Int32"
  does to_s of "[(1 + 2)] of Int32"
+  does to_s of "macro foo(&)\nend"
  does to_s of "macro foo(&)\nend"
+  does to_s of "1[&.foo]?"
  does to_s of "1[&.foo]?"
+  does to_s of "foo(3, &.*(2))"
  does to_s of "foo(3, &.*(2))"
+  does to_s of "macro foo(@[Foo] **args)\nend"
  does to_s of "macro foo(@[Foo] **args)\nend"
+  does to_s of "(1 + 2).as?(Int32)"
  does to_s of "(1 + 2).as?(Int32)"
   does to_s of "..3"
  does to_s of "..3"
-  does to_s of "case 1\nwhen .[](2)\n  3\nwhen .[]=(4)\n  5\nend"
  does to_s of "case 1\nwhen .[](2)\n  3\nwhen .[]=(4)\n  5\nend"
-  does to_s of "foo._bar"
  does to_s of "foo._bar"
-  does to_s of "/\\//"
  does to_s of "/\\//"
+  does to_s of "1[&.foo] = 2"
  does to_s of "1[&.foo] = 2"
+  does to_s of "->::Foo::Bar.foo"
  does to_s of "->::Foo::Bar.foo"
+  does to_s of "/\#{1 / 2}/"
  does to_s of "/\#{1 / 2}/"
+  does to_s of "foo { |(x, (y, z))| x }"
  does to_s of "foo { |(x, (y, z))| x }"
+  does to_s of "def foo(**args : T)\nend"
  does to_s of "def foo(**args : T)\nend"
+  does to_s of ":foo"
  does to_s of ":foo"
   does to_s of "1.~(2) do\nend"
  does to_s of "1.~(2) do\nend"
-  does to_s of "lib Foo\n  A = Pointer(Void).new(0)\n  struct B\n    x : Void*\n    y : Int[1]\n  end\n  fun c(Void*) : Char[2]*\nend"
  does to_s of "lib Foo\n  A = Pointer(Void).new(0)\n  struct B\n    x : Void*\n    y : Int[1]\n  end\n  fun c(Void*) : Char[2]*\nend"
-  does to_s of "Foo()"
  does to_s of "Foo()"
-  does to_s of "foo : (A | B).class"
  does to_s of "foo : (A | B).class"
-  does to_s of "macro foo\n  %bar = 1\nend"
  does to_s of "macro foo\n  %bar = 1\nend"
-  does to_s of "foo do\n  begin\n    bar\n  end\nend"
  does to_s of "foo do\n  begin\n    bar\n  end\nend"
   does to_s of "alias Foo::Bar = Void"
  does to_s of "alias Foo::Bar = Void"
-  does to_s of "(1 || 1.1).as(Int32)"
  does to_s of "(1 || 1.1).as(Int32)"
-  does to_s of "def foo(**x)\n  yield\nend"
  does to_s of "def foo(**x)\n  yield\nend"
-  does to_s of "def foo(& : ->)\nend"
  does to_s of "def foo(& : ->)\nend"
-  does to_s of "(1 + 2).as(Int32)"
  does to_s of "(1 + 2).as(Int32)"
+  does to_s of "def foo(@[Foo] x, @[Bar] **args, @[Baz] &block)\nend"
  does to_s of "def foo(@[Foo] x, @[Bar] **args, @[Baz] &block)\nend"
+  does to_s of "def foo(x : X, y : Y) forall X, Y\nend"
  does to_s of "def foo(x : X, y : Y) forall X, Y\nend"
+  does to_s of "foo[x : (T -> U) -> V, W]"
  does to_s of "foo[x : (T -> U) -> V, W]"
+  does to_s of "{\"foo bar\": 1}"
  does to_s of "{\"foo bar\": 1}"
+  does to_s of "foo &.bar"
  does to_s of "foo &.bar"
+  does to_s of "class Foo\n  # doc\n  def foo\n  end\nend"
  does to_s of "class Foo\n  # doc\n  def foo\n  end\nend"
+  does to_s of "lib Foo\n  union Foo\n    a : Int\n    b : Int32\n  end\nend"
  does to_s of "lib Foo\n  union Foo\n    a : Int\n    b : Int32\n  end\nend"
+  does to_s of "def foo(**args)\nend"
  does to_s of "def foo(**args)\nend"
+  does to_s of "foo(&.==(2))"
  does to_s of "foo(&.==(2))"
+  does to_s of "1e10_f64"
  does to_s of "1e10_f64"
+  does to_s of "def foo(**options, &block)\nend"
  does to_s of "def foo(**options, &block)\nend"
+  does to_s of "macro foo\n  123\nend"
  does to_s of "macro foo\n  123\nend"
+  does to_s of "def foo(@[Foo] x : T = 1)\nend"
  does to_s of "def foo(@[Foo] x : T = 1)\nend"
+  does to_s of "asm(\"nop\" :: \"c\"(3), \"d\"(4) ::)"
  does to_s of "asm(\"nop\" :: \"c\"(3), \"d\"(4) ::)"
+  does to_s of "&+1"
  does to_s of "&+1"
+  does to_s of "asm(\"nop\" ::::)"
  does to_s of "asm(\"nop\" ::::)"
   does to_s of "%r(/)"
  does to_s of "%r(/)"
-  does to_s of "/\\s/"
  does to_s of "/\\s/"
+  does to_s of "1 & 2 & (3 | 4)"
  does to_s of "1 & 2 & (3 | 4)"
+  does to_s of "lib LibFoo\n  fun foo(x : (T -> U) | V)\nend"
  does to_s of "lib LibFoo\n  fun foo(x : (T -> U) | V)\nend"
+  does to_s of "Foo(\"bar baz\": Int32)"
  does to_s of "Foo(\"bar baz\": Int32)"
+  does to_s of "def foo(@[Foo] **args)\nend"
  does to_s of "def foo(@[Foo] **args)\nend"
+  does to_s of "macro foo(*var)\nend"
  does to_s of "macro foo(*var)\nend"
+  does to_s of ":\"{\""
  does to_s of ":\"{\""
+  does to_s of "{(1 + 2)}"
  does to_s of "{(1 + 2)}"
+  does to_s of "1.+ do\nend"
  does to_s of "1.+ do\nend"
+  does to_s of "asm(\"nop\" : \"a\"(1), \"b\"(2) : \"c\"(3), \"d\"(4) : \"e\", \"f\" : \"volatile\", \"alignstack\", \"intel\")"
  does to_s of "asm(\"nop\" : \"a\"(1), \"b\"(2) : \"c\"(3), \"d\"(4) : \"e\", \"f\" : \"volatile\", \"alignstack\", \"intel\")"
+  does to_s of "def foo(**x)\n  yield\nend"
  does to_s of "def foo(**x)\n  yield\nend"
+  does to_s of "def foo(x)\n  yield\nend"
  does to_s of "def foo(x)\n  yield\nend"
+  does to_s of "foo : (A | B).class"
  does to_s of "foo : (A | B).class"
+  does to_s of "%(\"\#{foo}\")"
  does to_s of "%(\"\#{foo}\")"
+  does to_s of "%x(whoami)"
  does to_s of "%x(whoami)"
+  does to_s of "1.//(2, a: 3)"
  does to_s of "1.//(2, a: 3)"
+  does to_s of "({} of K => V).foo"
  does to_s of "({} of K => V).foo"
+  does to_s of "def foo(x : T = 1)\nend"
  does to_s of "def foo(x : T = 1)\nend"
+  does to_s of "/\\?/"
  does to_s of "/\\?/"
+  does to_s of "{ {1, 2, 3} => 4 }"
  does to_s of "{ {1, 2, 3} => 4 }"
+  does to_s of "lib LibC\n  fun getch = \"get.char\"\nend"
  does to_s of "lib LibC\n  fun getch = \"get.char\"\nend"
+  does to_s of "macro foo\n  %bar = 1\nend"
  does to_s of "macro foo\n  %bar = 1\nend"
+  does to_s of "if true\n  (1)\nend"
  does to_s of "if true\n  (1)\nend"
+  does to_s of "macro foo(@[Foo] &)\nend"
  does to_s of "macro foo(@[Foo] &)\nend"
+  does to_s of "/hello world/"
  does to_s of "/hello world/"
+  does to_s of "{% if foo %}\n  foo_then\n{% end %}"
  does to_s of "{% if foo %}\n  foo_then\n{% end %}"
+  does to_s of "def foo(x, **args, &block)\nend"
  does to_s of "def foo(x, **args, &block)\nend"
+  does to_s of "foo.nil?"
  does to_s of "foo.nil?"
   does to_s of "1.&**"
  does to_s of "1.&**"
+  does to_s of "macro foo\n{% verbatim do %}1{% end %}\nend"
  does to_s of "macro foo\n{% verbatim do %}1{% end %}\nend"
+  does to_s of "def foo(*args : _)\nend"
  does to_s of "def foo(*args : _)\nend"
+  does to_s of "macro foo\n{{ @type }}\nend"
  does to_s of "macro foo\n{{ @type }}\nend"
+  does to_s of "1.responds_to?(:to_s)"
  does to_s of "1.responds_to?(:to_s)"
+  does to_s of "foo : A | (B -> C)"
  does to_s of "foo : A | (B -> C)"
   does to_s of "foo()"
  does to_s of "foo()"
-  does to_s of "([] of T).foo"
  does to_s of "([] of T).foo"
-  does to_s of "def foo(x, **args)\nend"
  does to_s of "def foo(x, **args)\nend"
-  does to_s of "[(1 + 2)] of Int32"
  does to_s of "[(1 + 2)] of Int32"
-  does to_s of "!a"
  does to_s of "!a"
-  does to_s of "def foo(x, **args, &block : (_ -> _))\nend"
  does to_s of "def foo(x, **args, &block : (_ -> _))\nend"
-  does to_s of "asm(\"nop\" ::: \"e\" : \"volatile\")"
  does to_s of "asm(\"nop\" ::: \"e\" : \"volatile\")"
-  does to_s of "macro foo(x, *y)\nend"
  does to_s of "macro foo(x, *y)\nend"
-  does to_s of "def foo(@[Foo] x, @[Bar] **args, @[Baz] &block)\nend"
  does to_s of "def foo(@[Foo] x, @[Bar] **args, @[Baz] &block)\nend"
-  does to_s of "1 && (a = 2)"
  does to_s of "1 && (a = 2)"
-  does to_s of "class Foo\n  private def bar\n  end\nend"
  does to_s of "class Foo\n  private def bar\n  end\nend"
-  does to_s of "lib LibFoo\n  fun foo(x : (T -> U) -> V, W) : ((T -> U) -> V)\nend"
  does to_s of "lib LibFoo\n  fun foo(x : (T -> U) -> V, W) : ((T -> U) -> V)\nend"
-  does to_s of "1[2, x: 3, &.foo] = 4"
  does to_s of "1[2, x: 3, &.foo] = 4"
-  does to_s of "def foo(x y)\nend"
  does to_s of "def foo(x y)\nend"
-  does to_s of "(1 + 2).as?(Int32)"
  does to_s of "(1 + 2).as?(Int32)"
-  does to_s of "&-1"
  does to_s of "&-1"
-  does to_s of "{% verbatim do %}\n  1{{ 2 }}\n  3{{ 4 }}\n{% end %}"
  does to_s of "{% verbatim do %}\n  1{{ 2 }}\n  3{{ 4 }}\n{% end %}"
-  does to_s of "macro foo(x, **args)\nend"
  does to_s of "macro foo(x, **args)\nend"
+  does to_s of "macro foo(x, @[Foo] **args)\nend"
  does to_s of "macro foo(x, @[Foo] **args)\nend"
+  does to_s of "def foo(x : X, @[Foo] y : Y) forall X, Y\nend"
  does to_s of "def foo(x : X, @[Foo] y : Y) forall X, Y\nend"
   does to_s of "他.说(\"你好\")"
  does to_s of "他.说(\"你好\")"
-  does to_s of "1.&*"
  does to_s of "1.&*"
-  does to_s of "\"\\e\\0\\\"\""
  does to_s of "\"\\e\\0\\\"\""
-  does to_s of "lib LibFoo\n  fun foo(x : Foo((T -> U)))\nend"
  does to_s of "lib LibFoo\n  fun foo(x : Foo((T -> U)))\nend"
-  does to_s of "%r( )"
  does to_s of "%r( )"
-  does to_s of "lib LibFoo\n  fun foo(x : (T -> U) | V)\nend"
  does to_s of "lib LibFoo\n  fun foo(x : (T -> U) | V)\nend"
-  does to_s of "1[2, x: 3, &.foo]?"
  does to_s of "1[2, x: 3, &.foo]?"
-  does to_s of "1.[]="
  does to_s of "1.[]="
+  does to_s of "->::foo(Int32, String)"
  does to_s of "->::foo(Int32, String)"
+  does to_s of "%r{\#{1}\\/\\0}"
  does to_s of "%r{\#{1}\\/\\0}"
+  does to_s of "1.//(2, &block)"
  does to_s of "1.//(2, &block)"
+  does to_s of "foo(a.as(Int32))"
  does to_s of "foo(a.as(Int32))"
+  does to_s of "/hello world/imx"
  does to_s of "/hello world/imx"
+  does to_s of "1.responds_to?(:\"&&\")"
  does to_s of "1.responds_to?(:\"&&\")"
+  does to_s of "return true ? 1 : 2"
  does to_s of "return true ? 1 : 2"
+  does to_s of "case 1; when .foo?; 2; end"
  does to_s of "case 1; when .foo?; 2; end"
   does to_s of "{{ foo }}"
  does to_s of "{{ foo }}"
-  does to_s of "begin\n  (1)\nrescue\nend"
  does to_s of "begin\n  (1)\nrescue\nend"
-Code gen: c enum
-  codegens enum with 1 << 3 
  codegens enum with 1 << 3 
-  codegens enum with (1 + 2) * 3 
  codegens enum with (1 + 2) * 3 
-  codegens enum value 2
  codegens enum value 2
-  codegens enum with 3 &- 2 
  codegens enum with 3 &- 2 
-  codegens enum value
  codegens enum value
-  codegens enum with 3 * 2 
  codegens enum with 3 * 2 
-  codegens enum value 3
  codegens enum value 3
-  codegens enum that refers to another constant
  codegens enum that refers to another constant
-  codegens enum with 1 + 2 
  codegens enum with 1 + 2 
-  codegens enum value 4
  codegens enum value 4
-  codegens enum that refers to another enum constant
  codegens enum that refers to another enum constant
-  codegens enum with +1 
  codegens enum with +1 
-  codegens enum with 10 ^ 3 
  codegens enum with 10 ^ 3 
-  codegens enum with 3 - 2 
  codegens enum with 3 - 2 
-  codegens enum with 10 % 3 
  codegens enum with 10 % 3 
-  codegens enum with 10 & 3 
  codegens enum with 10 & 3 
-  codegens enum with 1 &+ 2 
  codegens enum with 1 &+ 2 
-  codegens enum with ~1 
  codegens enum with ~1 
-  codegens enum with 100 >> 3 
  codegens enum with 100 >> 3 
-  codegens enum with -1 
  codegens enum with -1 
-  codegens enum with 3 &* 2 
  codegens enum with 3 &* 2 
-  codegens enum with 10 // 2 
  codegens enum with 10 // 2 
-  codegens enum with 10 | 3 
  codegens enum with 10 | 3 
-Semantic: named args
-  matches specific overload with named arguments (#2753)
  matches specific overload with named arguments (#2753)
-  overloads based on required named args, with restrictions
  overloads based on required named args, with restrictions
-  errors if named arg already specified
  errors if named arg already specified
-  errors if named arg already specified but in same position
  errors if named arg already specified but in same position
-  errors if missing one argument
  errors if missing one argument
-  allows named arg if there's a splat
  allows named arg if there's a splat
-  passes #2696
  passes #2696
-  sends two regular arguments as named arguments
  sends two regular arguments as named arguments
-  errors if named arg already specified
  errors if named arg already specified
-  says correct error when forwarding named args (#7491)
  says correct error when forwarding named args (#7491)
-  sends two regular arguments as named arguments in inverted position (2)
  sends two regular arguments as named arguments in inverted position (2)
-  gives correct error message with external names (#3934)
  gives correct error message with external names (#3934)
-  overloads based on required named args
  overloads based on required named args
-  says no overload matches with named arg
  says no overload matches with named arg
-  errors if missing two arguments
  errors if missing two arguments
-  doesn't include arguments with default values in missing arguments error
  doesn't include arguments with default values in missing arguments error
-  errors if named arg not found in new
  errors if named arg not found in new
-  errors if named arg matches splat argument
  errors if named arg matches splat argument
-  doesn't fail on named argument with NoReturn type (#7760)
  doesn't fail on named argument with NoReturn type (#7760)
-  errors if named arg matches single splat argument
  errors if named arg matches single splat argument
-  gives correct error message for missing args after *
  gives correct error message for missing args after *
-  errors if named arg not found
  errors if named arg not found
-  sends one regular argument as named argument
  sends one regular argument as named argument
-  errors if doesn't pass named arg restriction
  errors if doesn't pass named arg restriction
-  uses bare splat in new
  uses bare splat in new
-  errors if named arg already specified, but multiple overloads (#7281)
  errors if named arg already specified, but multiple overloads (#7281)
-  matches specific overload with named arguments (2) (#2753)
  matches specific overload with named arguments (2) (#2753)
-  sends two regular arguments as named arguments in inverted position (1)
  sends two regular arguments as named arguments in inverted position (1)
-Code gen: c union
-  codegens struct inside union
  codegens struct inside union
-  codegens union property setter 2 via pointer
  codegens union property setter 2 via pointer
-  automatically converts by invoking to_unsafe
  automatically converts by invoking to_unsafe
-  codegens union property setter 1
  codegens union property setter 1
-  automatically converts numeric union type in field assignment
  automatically converts numeric union type in field assignment
-  codegens union property default value
  codegens union property default value
-  automatically converts numeric type in field assignment
  automatically converts numeric type in field assignment
-  reads union instance var
  reads union instance var
-  moves unions around correctly (#12550)  moves unions around correctly (#12550)  moves unions around correctly (#12550)  moves unions around correctly (#12550)  moves unions around correctly (#12550)����������  moves unions around correctly (#12550)��  moves unions around correctly (#12550)��  moves unions around correctly (#12550)��  moves unions around correctly (#12550)
  moves unions around correctly (#12550)
-  codegens assign c union to union
  codegens assign c union to union
-  aligns to the member with biggest align requirements
  aligns to the member with biggest align requirements
-  does to_s  does to_s  does to_s  does to_s  does to_s  does to_s����  does to_s����������  does to_s��  does to_s
  does to_s
-  codegens union property default value 2
  codegens union property default value 2
-  builds union setter with fun type
  builds union setter with fun type
-  codegens union property setter 1 via pointer
  codegens union property setter 1 via pointer
-  codegens union property setter 2
  codegens union property setter 2
-  fills union type to the max size
  fills union type to the max size
-Semantic: static array
-  can match number type argument of static array (#1203)
  can match number type argument of static array (#1203)
-  errors on negative static array size
  errors on negative static array size
-  allows instantiating static array instance var in initialize of generic type
  allows instantiating static array instance var in initialize of generic type
-  types static array new
  types static array new
-  doesn't crash on restriction (#584)
  doesn't crash on restriction (#584)
-  types static array new with size being a constant
  types static array new with size being a constant
-  doesn't match other number type argument of static array (#1203)
  doesn't match other number type argument of static array (#1203)
-  types static array new with size being a computed constant, and use N (bug)
  types static array new with size being a computed constant, and use N (bug)
-  doesn't crash on offsetof (#8858)
  doesn't crash on offsetof (#8858)
-  types static array with var declaration
  types static array with var declaration
-  types static array new with size being a nested constant inside type declaration (#5426)
  types static array new with size being a nested constant inside type declaration (#5426)
-  can match N type argument of static array (#1203)
  can match N type argument of static array (#1203)
-  types static array new with size being a computed constant
  types static array new with size being a computed constant
-  errors if trying to instantiate static array with N not an integer
  errors if trying to instantiate static array with N not an integer
-  types static array with type as size
  types static array with type as size
-  doesn't crash on sizeof (#8858)
  doesn't crash on sizeof (#8858)
-  doesn't crash on instance_sizeof (#8858)
  doesn't crash on instance_sizeof (#8858)
-Crystal::Repl::Interpreter
-  does call without receiver inside closure
  does call without receiver inside closure
-  procs
-    interprets no args proc literal
    interprets no args proc literal
-    casts from nilable proc type to proc type
    casts from nilable proc type to proc type
-    can downcast Proc(T) to Proc(Nil)
    can downcast Proc(T) to Proc(Nil)
-    interprets call inside Proc type
    interprets call inside Proc type
-    discards proc call
    discards proc call
-    interprets proc literal with args
    interprets proc literal with args
-  calls proc primitive on union of module that has no subtypes (#12954)
  calls proc primitive on union of module that has no subtypes (#12954)
-  casts proc call arguments to proc arg types (#12350)
  casts proc call arguments to proc arg types (#12350)
-Crystal::Repl::Interpreter
-  variadic calls
-    promotes int
    promotes int
-    promotes float
    promotes float
-    promotes enum
    promotes enum
-  command expansion
-    expands ldflags
    expands ldflags
-Code gen: alias
-  lazily solves aliases (#1346)
  lazily solves aliases (#1346)
-  casts to recursive alias  casts to recursive alias  casts to recursive alias  casts to recursive alias����  casts to recursive alias  casts to recursive alias������  casts to recursive alias����  casts to recursive alias��  casts to recursive alias
  casts to recursive alias
-  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)  invokes methods on empty array of recursive alias (2)����������������  invokes methods on empty array of recursive alias (2)
  invokes methods on empty array of recursive alias (2)
-  overloads alias against generic (2) (#3261)
  overloads alias against generic (2) (#3261)
-  overloads alias against generic (1) (#3261)
  overloads alias against generic (1) (#3261)
-  doesn't break with alias for link attributes
  doesn't break with alias for link attributes
-  codegens cast to alias that includes bool
  codegens cast to alias that includes bool
-  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)  invokes methods on empty array of recursive alias (3)��������������  invokes methods on empty array of recursive alias (3)��  invokes methods on empty array of recursive alias (3)
  invokes methods on empty array of recursive alias (3)
-  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)  invokes methods on empty array of recursive alias (1)������  invokes methods on empty array of recursive alias (1)��������  invokes methods on empty array of recursive alias (1)��  invokes methods on empty array of recursive alias (1)
  invokes methods on empty array of recursive alias (1)
-  casts to recursive alias
  casts to recursive alias
-  doesn't crash on cast to as recursive alias (#639)
  doesn't crash on cast to as recursive alias (#639)
-Semantic: automatic cast
-  doesn't autocast number on union (#8655)
  doesn't autocast number on union (#8655)
-  casts Int32 to Int64 in ivar assignment
  casts Int32 to Int64 in ivar assignment
-  errors when autocast default value doesn't match enum member
  errors when autocast default value doesn't match enum member
-  can autocast to union in default value (symbol and int)
  can autocast to union in default value (symbol and int)
-  can match multiple times with the same argument type (#7578)
  can match multiple times with the same argument type (#7578)
-  casts Symbol to Enum in ivar assignment
  casts Symbol to Enum in ivar assignment
-  casts literal integer (Int32 -> Float32)
  casts literal integer (Int32 -> Float32)
-  doesn't say 'ambiguous call' when there's an exact match for symbol (#6601)
  doesn't say 'ambiguous call' when there's an exact match for symbol (#6601)
-  casts Symbol to Enum in ivar type declaration
  casts Symbol to Enum in ivar type declaration
-  doesn't do multidispatch if an overload matches exactly (#8217)
  doesn't do multidispatch if an overload matches exactly (#8217)
-  casts literal integer in private top-level method (#7016)
  casts literal integer in private top-level method (#7016)
-  doesn't do multidispatch if an overload matches exactly (#8217)
  doesn't do multidispatch if an overload matches exactly (#8217)
-  autocasts float32 variable to float64 type (#9565)
  autocasts float32 variable to float64 type (#9565)
-  casts literal float (Float32 -> Float64)
  casts literal float (Float32 -> Float64)
-  casts integer expression to larger type (#9565)
  casts integer expression to larger type (#9565)
-  casts Int32 to Int64 in cvar assignment
  casts Int32 to Int64 in cvar assignment
-  autocasts nested type from non-nested type (#10315)
  autocasts nested type from non-nested type (#10315)
-  doesn't say 'ambiguous call' when there's an exact match for integer (#6601)
  doesn't say 'ambiguous call' when there's an exact match for integer (#6601)
-  can use automatic cast with `with ... yield` (#7736)
  can use automatic cast with `with ... yield` (#7736)
-  casts integer variable to larger type (#9565)
  casts integer variable to larger type (#9565)
-  doesn't cast integer variable to larger type (not #9565)
  doesn't cast integer variable to larger type (not #9565)
-  casts integer variable to larger type (Int64 to Int128) (#9565)
  casts integer variable to larger type (Int64 to Int128) (#9565)
-  casts Int32 to Int64 in lvar assignment
  casts Int32 to Int64 in lvar assignment
-  says ambiguous call for symbol
  says ambiguous call for symbol
-  casts literal integer through alias with union
  casts literal integer through alias with union
-  matches correct overload
  matches correct overload
-  casts Int32 to Int64 in ivar type declaration
  casts Int32 to Int64 in ivar type declaration
-  says ambiguous call for integer
  says ambiguous call for integer
-  casts literal integer through alias with union
  casts literal integer through alias with union
-  casts literal integer (Int32 -> Float64)
  casts literal integer (Int32 -> Float64)
-  casts literal integer (Int64 -> Int32, ok)
  casts literal integer (Int64 -> Int32, ok)
-  casts Symbol to Enum in cvar type declaration
  casts Symbol to Enum in cvar type declaration
-  casts literal integer (Int32 -> Int64)
  casts literal integer (Int32 -> Int64)
-  autocasts first argument and second matches without autocast
  autocasts first argument and second matches without autocast
-  can autocast to union in default value
  can autocast to union in default value
-  autocasts integer variable to float type (#9565)
  autocasts integer variable to float type (#9565)
-  says ambiguous call for integer var to union type (#9565)
  says ambiguous call for integer var to union type (#9565)
-  says ambiguous call for integer var to larger type (#9565)
  says ambiguous call for integer var to larger type (#9565)
-  casts literal integer (Int32 -> no restriction)
  casts literal integer (Int32 -> no restriction)
-  casts Int32 to Int64 in ivar type declaration in generic
  casts Int32 to Int64 in ivar type declaration in generic
-  casts symbol literal to enum
  casts symbol literal to enum
-  can autocast to alias in default value
  can autocast to alias in default value
-  errors if symbol name doesn't match enum member
  errors if symbol name doesn't match enum member
-  casts literal integer (Int64 -> Int32, too big)
  casts literal integer (Int64 -> Int32, too big)
-  says ambiguous call for integer (2)
  says ambiguous call for integer (2)
-  casts literal float (Float64 -> Float32)
  casts literal float (Float64 -> Float32)
-  says ambiguous call for integer on alias (#6620)
  says ambiguous call for integer on alias (#6620)
-  casts Int32 to Int64 in cvar type declaration
  casts Int32 to Int64 in cvar type declaration
-  can autocast to union in default value (multiple enums)
  can autocast to union in default value (multiple enums)
-  can't cast integer to another type when it doesn't fit (#9565)
  can't cast integer to another type when it doesn't fit (#9565)
-  casts Int32 -> Int64 in arg restriction
  casts Int32 -> Int64 in arg restriction
-  says ambiguous call on union (#8655)
  says ambiguous call on union (#8655)
-Codegen: extern struct
-  declares extern union, sets and gets instance var
  declares extern union, sets and gets instance var
-  declares extern struct with no constructor
  declares extern struct with no constructor
-  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI  codegens proc that takes an extern struct with C ABI����  codegens proc that takes an extern struct with C ABI������������  codegens proc that takes an extern struct with C ABI
  codegens proc that takes an extern struct with C ABI
-  doesn't crash with proc with extern struct that's a closure
  doesn't crash with proc with extern struct that's a closure
-  sets callback on extern struct  sets callback on extern struct  sets callback on extern struct  sets callback on extern struct  sets callback on extern struct����  sets callback on extern struct��������  sets callback on extern struct��  sets callback on extern struct��  sets callback on extern struct
  sets callback on extern struct
-  codegens proc that takes and returns large extern struct by value
  codegens proc that takes and returns large extern struct by value
-  declares extern union with no constructor
  declares extern union with no constructor
-  declares extern struct, sets and gets instance var
  declares extern struct, sets and gets instance var
-  codegens extern proc call twice (#4982)
  codegens extern proc call twice (#4982)
-  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret  codegens proc that takes and returns an extern struct with sret��������������  codegens proc that takes and returns an extern struct with sret��  codegens proc that takes and returns an extern struct with sret
  codegens proc that takes and returns an extern struct with sret
-  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI������������  codegens proc that takes and returns an extern struct with C ABI��  codegens proc that takes and returns an extern struct with C ABI��  codegens proc that takes and returns an extern struct with C ABI
  codegens proc that takes and returns an extern struct with C ABI
-  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil  codegens proc that takes an extern struct with C ABI, callback returns nil��������������  codegens proc that takes an extern struct with C ABI, callback returns nil��  codegens proc that takes an extern struct with C ABI, callback returns nil
  codegens proc that takes an extern struct with C ABI, callback returns nil
-  invokes proc with extern struct with sret
  invokes proc with extern struct with sret
-  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI  codegens proc that takes and returns an extern struct with C ABI��������������  codegens proc that takes and returns an extern struct with C ABI��  codegens proc that takes and returns an extern struct with C ABI
  codegens proc that takes and returns an extern struct with C ABI
-  sets callback on extern union  sets callback on extern union  sets callback on extern union  sets callback on extern union  sets callback on extern union  sets callback on extern union  sets callback on extern union��������������  sets callback on extern union��  sets callback on extern union
  sets callback on extern union
-  invokes proc with extern struct
  invokes proc with extern struct
-  declares extern struct with no constructor, assigns var
  declares extern struct with no constructor, assigns var
-  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)  codegens proc that takes an extern struct with C ABI (2)����  codegens proc that takes an extern struct with C ABI (2)����������  codegens proc that takes an extern struct with C ABI (2)��  codegens proc that takes an extern struct with C ABI (2)
  codegens proc that takes an extern struct with C ABI (2)
-context
-  can get context inside a module
  can get context inside a module
-  can get context inside initialize
  can get context inside initialize
-  does includes regex special variables
  does includes regex special variables
-  can't get context from uncalled method
  can't get context from uncalled method
-  includes args
  includes args
-  can get context of yielded block
  can get context of yielded block
-  can display json output
  can display json output
-  can display text output
  can display text output
-  includes top level vars
  includes top level vars
-  does includes args, instance vars, local variables and expressions on instance methods
  does includes args, instance vars, local variables and expressions on instance methods
-  can get context in contained class' class method
  can get context in contained class' class method
-  does includes self on classes
  does includes self on classes
-  can get context of nested yielded block
  can get context of nested yielded block
-  use type filters from if var
  use type filters from if var
-  can get context in file private method
  can get context in file private method
-  can get context of empty def
  can get context of empty def
-  includes last call
  includes last call
-  can get context in file private module
  can get context in file private module
-  use type filters from is_a?
  use type filters from is_a?
-  includes assignments
  includes assignments
-  can handle union types
  can handle union types
-  includes block args
  includes block args
-  does not includes temp variables
  does not includes temp variables
-  can get context in generic class
  can get context in generic class
-  consider different instances of def
  consider different instances of def
-  can get context of empty yielded block
  can get context of empty yielded block
-  can get context inside class methods
  can get context inside class methods
-Semantic: nil
-  restricts type of 'if foo'
  restricts type of 'if foo'
-  types empty
  types empty
-  marks instance variables as nil when not in initialize
  marks instance variables as nil when not in initialize
-  restricts type of 'while foo'
  restricts type of 'while foo'
-  doesn't check return type for nil
  doesn't check return type for nil
-  types nil
  types nil
-  restricts type of 'if foo' on assign
  restricts type of 'if foo' on assign
-  doesn't check return type for void
  doesn't check return type for void
-  marks instance variables as nil when not in initialize 2
  marks instance variables as nil when not in initialize 2
-  restricts type of 'while foo' on assign
  restricts type of 'while foo' on assign
-  can call a fun with nil for typedef pointer
  can call a fun with nil for typedef pointer
-  can call a fun with nil for pointer
  can call a fun with nil for pointer
-  marks instance variables as nil but doesn't explode on macros
  marks instance variables as nil but doesn't explode on macros
-Restrictions
-  restricts class union type to overloads with classes (2)
  restricts class union type to overloads with classes (2)
-  errors if using typeof in block restriction
  errors if using typeof in block restriction
-  matches number in bound free variable (#13605)
  matches number in bound free variable (#13605)
-  restricts class union type to overloads with classes
  restricts class union type to overloads with classes
-  errors if can't find type on lookup with nested type
  errors if can't find type on lookup with nested type
-  sets number as free variable (#2699)
  sets number as free variable (#2699)
-  errors on T::Type that's a union when used from block type restriction
  errors on T::Type that's a union when used from block type restriction
-  self always matches instance type in restriction
  self always matches instance type in restriction
-  restrict
-    restricts generic module instance with another generic module instance
    restricts generic module instance with another generic module instance
-    restricts class against uninstantiated generic base class through multiple inheritance (2) (#9660)
    restricts class against uninstantiated generic base class through multiple inheritance (2) (#9660)
-    restricts type with included module
    restricts type with included module
-    restricts module through generic include (#4287)
    restricts module through generic include (#4287)
-    restricts virtual generic class against uninstantiated generic subclass (1)
    restricts virtual generic class against uninstantiated generic subclass (1)
-    restricts type with same type
    restricts type with same type
-    restricts generic module instance with another module
    restricts generic module instance with another module
-    restricts type with another type
    restricts type with another type
-    restricts type with superclass
    restricts type with superclass
-    restricts generic module instance with class
    restricts generic module instance with class
-    restricts virtual type with included module 1
    restricts virtual type with included module 1
-    restricts module with another module
    restricts module with another module
-    restricts virtual type with included module 2
    restricts virtual type with included module 2
-    restricts class against uninstantiated generic base class through multiple inheritance (1) (#9660)
    restricts class against uninstantiated generic base class through multiple inheritance (1) (#9660)
-    restricts virtual generic class against uninstantiated generic subclass (2)
    restricts virtual generic class against uninstantiated generic subclass (2)
-  passes #278
  passes #278
-  works with static array that uses underscore
  works with static array that uses underscore
-  works with union against unions of generics
  works with union against unions of generics
-  sets number as unbound generic type var (#13110)
  sets number as unbound generic type var (#13110)
-  errors if using typeof inside generic type
  errors if using typeof inside generic type
-  errors on T::Type that's union when used from type restriction
  errors on T::Type that's union when used from type restriction
-  errors if using NamedTuple with positional args
  errors if using NamedTuple with positional args
-  errors if using Tuple with named args
  errors if using Tuple with named args
-  should not let GenericChild(Base) pass as a GenericBase(Child) (#1294)
  should not let GenericChild(Base) pass as a GenericBase(Child) (#1294)
-  restricts aliased typedef type (#9474)
  restricts aliased typedef type (#9474)
-  does not treat single path as free variable when given number (1) (#11859)
  does not treat single path as free variable when given number (1) (#11859)
-  works with generic class metaclass vs. generic instance class metaclass
  works with generic class metaclass vs. generic instance class metaclass
-  errors if using typeof
  errors if using typeof
-  restriction_of?
-    GenericClassType vs GenericClassInstanceType
-      doesn't mix different generic classes
      doesn't mix different generic classes
-      works with classes in different namespaces
      works with classes in different namespaces
-      keeps GenericClassInstanceType before GenericClassType
      keeps GenericClassInstanceType before GenericClassType
-      inserts GenericClassInstanceType before GenericClassType
      inserts GenericClassInstanceType before GenericClassType
-    Metaclass vs Path
-      inserts metaclass before Value
      inserts metaclass before Value
-      doesn't error if path is undefined and method is not called (2) (#12516)
      doesn't error if path is undefined and method is not called (2) (#12516)
-      keeps metaclass before Class
      keeps metaclass before Class
-      keeps metaclass before Value
      keeps metaclass before Value
-      keeps metaclass before Object
      keeps metaclass before Object
-      inserts metaclass before Object
      inserts metaclass before Object
-      doesn't error if path is undefined and method is not called (1) (#12516)
      doesn't error if path is undefined and method is not called (1) (#12516)
-      inserts metaclass before Class
      inserts metaclass before Class
-    NamedTuple vs NamedTuple
-      inserts more specialized NamedTuple before less specialized one
      inserts more specialized NamedTuple before less specialized one
-      doesn't mix incompatible NamedTuples (#10238)
      doesn't mix incompatible NamedTuples (#10238)
-      keeps more specialized NamedTuple before less specialized one
      keeps more specialized NamedTuple before less specialized one
-    Union
-      handles redefinitions (1) (#12330)
      handles redefinitions (1) (#12330)
-      orders union before generic (#12330)
      orders union before generic (#12330)
-      handles redefinitions (2) (#12330)
      handles redefinitions (2) (#12330)
-    free variables
-      inserts path before free variable with same name
      inserts path before free variable with same name
-      keeps path before free variable even if free var resolves to a more specialized type
      keeps path before free variable even if free var resolves to a more specialized type
-      inserts constant before free variable with same name
      inserts constant before free variable with same name
-      keeps constant before free variable with same name
      keeps constant before free variable with same name
-      keeps path before free variable with same name
      keeps path before free variable with same name
-      inserts path before free variable even if free var resolves to a more specialized type
      inserts path before free variable even if free var resolves to a more specialized type
-    Path vs NumberLiteral
-      inserts constant before number literal of same value with generic arguments
      inserts constant before number literal of same value with generic arguments
-      inserts number literal before constant of same value with generic arguments
      inserts number literal before constant of same value with generic arguments
-    Underscore vs Path
-      keeps underscore after Path (#12854)
      keeps underscore after Path (#12854)
-      works with splats and modules, under -Dpreview_overload_order (#12854)
      works with splats and modules, under -Dpreview_overload_order (#12854)
-      inserts Path before underscore (#12854)
      inserts Path before underscore (#12854)
-    Path vs Path
-      keeps typed Path before untyped Path
      keeps typed Path before untyped Path
-      inserts typed Path before untyped Path
      inserts typed Path before untyped Path
-    Metaclass vs Metaclass
-      inserts typed Metaclass before untyped Metaclass
      inserts typed Metaclass before untyped Metaclass
-      keeps typed Metaclass before untyped Metaclass
      keeps typed Metaclass before untyped Metaclass
-    Generic vs Path
-      inserts untyped Generic before untyped Path
      inserts untyped Generic before untyped Path
-      inserts typed Generic before untyped Path
      inserts typed Generic before untyped Path
-      keeps untyped Generic before untyped Path
      keeps untyped Generic before untyped Path
-      inserts untyped Generic before untyped Path (2)
      inserts untyped Generic before untyped Path (2)
-      keeps typed Generic before untyped Path
      keeps typed Generic before untyped Path
-    Generic vs Generic
-      keeps typed Generic before untyped Generic
      keeps typed Generic before untyped Generic
-      inserts typed Generic before untyped Generic
      inserts typed Generic before untyped Generic
-  errors if using free var without forall
  errors if using free var without forall
-  works with static array (#637)
  works with static array (#637)
-  doesn't error if using NamedTuple with no args
  doesn't error if using NamedTuple with no args
-  does not treat single path as free variable when given number (2) (#11859)
  does not treat single path as free variable when given number (2) (#11859)
-  self always matches instance type in return type
  self always matches instance type in return type
-  matches free variable for type variable
  matches free variable for type variable
-  doesn't error if using Tuple with no args
  doesn't error if using Tuple with no args
-  makes metaclass subclass pass parent metaclass restriction (#2079)
  makes metaclass subclass pass parent metaclass restriction (#2079)
-  matches alias against alias in block type
  matches alias against alias in block type
-  allows passing recursive type to free var (#1076)
  allows passing recursive type to free var (#1076)
-  matches virtual type against alias
  matches virtual type against alias
-  works with generic compared to fixed (primitive) type
  works with generic compared to fixed (primitive) type
-  restricts virtual metaclass type against metaclass (#3438)
  restricts virtual metaclass type against metaclass (#3438)
-  errors if can't find type on lookup
  errors if can't find type on lookup
-  works with generic class metaclass vs. generic class metaclass
  works with generic class metaclass vs. generic class metaclass
-  errors if using typeof in block restriction
  errors if using typeof in block restriction
-Crystal::Repl::Interpreter
-  control flow
-    interprets next inside while
    interprets next inside while
-    interprets next inside while inside block
    interprets next inside while inside block
-    interprets if bool (false)
    interprets if bool (false)
-    interprets if (nil literal)
    interprets if (nil literal)
-    interprets if (true literal)
    interprets if (true literal)
-    interprets break with value inside while (through break)
    interprets break with value inside while (through break)
-    interprets while
    interprets while
-    interprets if bool (true)
    interprets if bool (true)
-    interprets return Nil
    interprets return Nil
-    interprets break inside nested while
    interprets break inside nested while
-    interprets if (nil type)
    interprets if (nil type)
-    interprets if union type with bool, true
    interprets if union type with bool, true
-    interprets break inside while
    interprets break inside while
-    discards if
    discards if
-    interprets unless
    interprets unless
-    interprets if pointer, false
    interprets if pointer, false
-    interprets while, returns nil
    interprets while, returns nil
-    interprets return implicit nil and Int32
    interprets return implicit nil and Int32
-    discards while
    discards while
-    interprets if pointer, true
    interprets if pointer, true
-    interprets if union type with nil, false
    interprets if union type with nil, false
-    interprets break with value inside while (through normal flow)
    interprets break with value inside while (through normal flow)
-    interprets if (int type)
    interprets if (int type)
-    interprets break inside while inside block
    interprets break inside while inside block
-    interprets until
    interprets until
-    interprets if (false literal)
    interprets if (false literal)
-    interprets if union type with bool, false
    interprets if union type with bool, false
-    interprets return
    interprets return
-    interprets return Nil with explicit return (#12178)
    interprets return Nil with explicit return (#12178)
-Semantic: if
-  restricts && of !var.is_a(...)
  restricts && of !var.is_a(...)
-  types an if with else of different type
  types an if with else of different type
-  doesn't filter and recombine when variables don't change in if
  doesn't filter and recombine when variables don't change in if
-  restricts && else in sub && (right)
  restricts && else in sub && (right)
-  restricts type with !var.is_a?(...) and &&
  restricts type with !var.is_a?(...) and &&
-  errors if requires inside if
  errors if requires inside if
-  types an if without else
  types an if without else
-  restricts || else (1) (#3266)
  restricts || else (1) (#3266)
-  doesn't consider nil type in else branch with if with && (#7434)
  doesn't consider nil type in else branch with if with && (#7434)
-  restricts || else (3) (#3266)
  restricts || else (3) (#3266)
-  can invoke method on var that is declared on the right hand side of an and
  can invoke method on var that is declared on the right hand side of an and
-  types `if` with `&&` and assignment
  types `if` with `&&` and assignment
-  correctly filters type of variable if there's a raise with an interpolation that can't be typed
  correctly filters type of variable if there's a raise with an interpolation that can't be typed
-  restricts && else in sub && (left)
  restricts && else in sub && (left)
-  restricts || else (2) (#3266)
  restricts || else (2) (#3266)
-  types variable after unreachable else of && (#3360)
  types variable after unreachable else of && (#3360)
-  restricts with && always falsey
  restricts with && always falsey
-  doesn't fail on new variables inside typeof condition
  doesn't fail on new variables inside typeof condition
-  doesn't fail on Expressions condition (1)
  doesn't fail on Expressions condition (1)
-  restricts with || but doesn't unify types to base class
  restricts with || but doesn't unify types to base class
-  restricts type with !var.is_a?(...) and ||
  restricts type with !var.is_a?(...) and ||
-  doesn't restrict || else in sub && (left)
  doesn't restrict || else in sub && (left)
-  restricts the type of the right hand side of an || when using is_a? (#1728)
  restricts the type of the right hand side of an || when using is_a? (#1728)
-  doesn't restrict || else in sub && (right)
  doesn't restrict || else in sub && (right)
-  types an if with else of same type
  types an if with else of same type
-  restricts || else in sub || (left)
  restricts || else in sub || (left)
-  passes bug (related to #1729)
  passes bug (related to #1729)
-  restricts || of more than 2 clauses (#8864)
  restricts || of more than 2 clauses (#8864)
-  includes pointer types in falsey branch
  includes pointer types in falsey branch
-  doesn't restrict with || on var and non-restricting condition
  doesn't restrict with || on var and non-restricting condition
-  restricts with || (#2464)
  restricts with || (#2464)
-  doesn't restrict with || on different vars
  doesn't restrict with || on different vars
-  restricts type with !var and ||
  restricts type with !var and ||
-  restricts || else in sub || (right)
  restricts || else in sub || (right)
-  doesn't fail on nested conditionals inside typeof condition
  doesn't fail on nested conditionals inside typeof condition
-  doesn't fail on Expressions condition (2)
  doesn't fail on Expressions condition (2)
-  restricts and doesn't unify union types
  restricts and doesn't unify union types
-Lexer: location
-  stores column numbers
  stores column numbers
-  locations in same files are comparable based on line
  locations in same files are comparable based on line
-  uses two consecutive loc pragma 
  uses two consecutive loc pragma 
-  Location.parse
-    parses location from string
    parses location from string
-    raises ArgumentError if line number is invalid
    raises ArgumentError if line number is invalid
-    raises ArgumentError if missing colon
    raises ArgumentError if missing colon
-    raises ArgumentError if missing part
    raises ArgumentError if missing part
-    raises ArgumentError if column number is invalid
    raises ArgumentError if column number is invalid
-  locations with virtual files should be comparable
  locations with virtual files should be comparable
-  stores line numbers
  stores line numbers
-  overrides location with pragma
  overrides location with pragma
-  assigns correct loc location to node
  assigns correct loc location to node
-  parses var/call right after loc (#491)
  parses var/call right after loc (#491)
-  locations in different files have no order
  locations in different files have no order
-  pushes and pops its location
  pushes and pops its location
-Codegen: class var
-  codegens class var as nil if assigned for the first time inside method
  codegens class var as nil if assigned for the first time inside method
-  reads class var from virtual type metaclass
  reads class var from virtual type metaclass
-  codegens class var
  codegens class var
-  codegens generic class with class var
  codegens generic class with class var
-  initializes class var the moment it reaches it  initializes class var the moment it reaches it  initializes class var the moment it reaches it  initializes class var the moment it reaches it  initializes class var the moment it reaches it��  initializes class var the moment it reaches it����������  initializes class var the moment it reaches it  initializes class var the moment it reaches it����  initializes class var the moment it reaches it
  initializes class var the moment it reaches it
-  reads class var before initializing it (hoisting)
  reads class var before initializing it (hoisting)
-  uses var in class var initializer
  uses var in class var initializer
-  codegens class var with nilable reference type
  codegens class var with nilable reference type
-  reads class var from virtual type
  reads class var from virtual type
-  doesn't inherit class var value in subclass
  doesn't inherit class var value in subclass
-  gets pointerof class var
  gets pointerof class var
-  inline initialization of simple class var
  inline initialization of simple class var
-  initializes dependent constant before class var  initializes dependent constant before class var  initializes dependent constant before class var��  initializes dependent constant before class var��  initializes dependent constant before class var������  initializes dependent constant before class var��  initializes dependent constant before class var��  initializes dependent constant before class var��  initializes dependent constant before class var
  initializes dependent constant before class var
-  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module  doesn't crash with pointerof from another module������������  doesn't crash with pointerof from another module����  doesn't crash with pointerof from another module
  doesn't crash with pointerof from another module
-  accesses class var from proc literal
  accesses class var from proc literal
-  reads simple class var before another complex one
  reads simple class var before another complex one
-  codegens class var with begin and vars
  codegens class var with begin and vars
-  declares var as uninitialized and initializes it unsafely
  declares var as uninitialized and initializes it unsafely
-  initializes class var with array literal  initializes class var with array literal  initializes class var with array literal  initializes class var with array literal  initializes class var with array literal��  initializes class var with array literal��  initializes class var with array literal����������  initializes class var with array literal��  initializes class var with array literal
  initializes class var with array literal
-  initializes class var of union with single type
  initializes class var of union with single type
-  codegens class var inside module
  codegens class var inside module
-  codegens class var with type declaration begin and vars
  codegens class var with type declaration begin and vars
-  declares and initializes
  declares and initializes
-  codegens class var as nil
  codegens class var as nil
-  runs class var side effects (#8862)  runs class var side effects (#8862)  runs class var side effects (#8862)  runs class var side effects (#8862)  runs class var side effects (#8862)  runs class var side effects (#8862)��������  runs class var side effects (#8862)������  runs class var side effects (#8862)��  runs class var side effects (#8862)
  runs class var side effects (#8862)
-  gets pointerof class var complex constant
  gets pointerof class var complex constant
-  catch infinite loop in class var initializer  catch infinite loop in class var initializer  catch infinite loop in class var initializer  catch infinite loop in class var initializer  catch infinite loop in class var initializer  catch infinite loop in class var initializer  catch infinite loop in class var initializer����������  catch infinite loop in class var initializer������  catch infinite loop in class var initializer
  catch infinite loop in class var initializer
-  doesn't inherit class var value in module
  doesn't inherit class var value in module
-  codegens class var inside instance method
  codegens class var inside instance method
-  doesn't use nilable type for initializer
  doesn't use nilable type for initializer
-  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)��  doesn't error if class var shares name with const (#7865)����������  doesn't error if class var shares name with const (#7865)  doesn't error if class var shares name with const (#7865)����  doesn't error if class var shares name with const (#7865)
  doesn't error if class var shares name with const (#7865)
-  writes class var from virtual type
  writes class var from virtual type
-  codegens second class var initializer
  codegens second class var initializer
-Semantic: not
-  types not
  types not
-  filters types inside if/else
  filters types inside if/else
-  filters types with !is_a?
  filters types with !is_a?
-  filters types inside if
  filters types inside if
-  doesn't restrict and in while (#4243)
  doesn't restrict and in while (#4243)
-  doesn't restrict and
  doesn't restrict and
-  types not as NoReturn if exp is NoReturn
  types not as NoReturn if exp is NoReturn
-Code gen: exception
-  can use argument in rescue, with a different type (1) (#2844)  can use argument in rescue, with a different type (1) (#2844)  can use argument in rescue, with a different type (1) (#2844)  can use argument in rescue, with a different type (1) (#2844)  can use argument in rescue, with a different type (1) (#2844)������  can use argument in rescue, with a different type (1) (#2844)������  can use argument in rescue, with a different type (1) (#2844)��  can use argument in rescue, with a different type (1) (#2844)��  can use argument in rescue, with a different type (1) (#2844)
  can use argument in rescue, with a different type (1) (#2844)
-  executes ensure when no exception is raised (2)  executes ensure when no exception is raised (2)  executes ensure when no exception is raised (2)  executes ensure when no exception is raised (2)  executes ensure when no exception is raised (2)����  executes ensure when no exception is raised (2)��������  executes ensure when no exception is raised (2)��  executes ensure when no exception is raised (2)��  executes ensure when no exception is raised (2)
  executes ensure when no exception is raised (2)
-  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)��������������  executes ensure when exception is raised (1)��  executes ensure when exception is raised (1)
  executes ensure when exception is raised (1)
-  executes return inside rescue, executing ensure  executes return inside rescue, executing ensure  executes return inside rescue, executing ensure  executes return inside rescue, executing ensure��  executes return inside rescue, executing ensure����  executes return inside rescue, executing ensure������  executes return inside rescue, executing ensure��  executes return inside rescue, executing ensure��  executes return inside rescue, executing ensure
  executes return inside rescue, executing ensure
-  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target��������������  executes ensure from return until target��  executes ensure from return until target
  executes ensure from return until target
-  handle multiple exception types (1)  handle multiple exception types (1)  handle multiple exception types (1)  handle multiple exception types (1)����  handle multiple exception types (1)  handle multiple exception types (1)����  handle multiple exception types (1)������  handle multiple exception types (1)��  handle multiple exception types (1)
  handle multiple exception types (1)
-  handles exception in outer block (2)  handles exception in outer block (2)  handles exception in outer block (2)  handles exception in outer block (2)  handles exception in outer block (2)  handles exception in outer block (2)������  handles exception in outer block (2)��������  handles exception in outer block (2)��  handles exception in outer block (2)
  handles exception in outer block (2)
-  handle exception raised by proc literal  handle exception raised by proc literal  handle exception raised by proc literal  handle exception raised by proc literal  handle exception raised by proc literal  handle exception raised by proc literal  handle exception raised by proc literal��������������  handle exception raised by proc literal��  handle exception raised by proc literal
  handle exception raised by proc literal
-  can result into union (2)  can result into union (2)  can result into union (2)  can result into union (2)  can result into union (2)  can result into union (2)��  can result into union (2)������������  can result into union (2)��  can result into union (2)
  can result into union (2)
-  doesn't execute else if exception is raised conditionally (2)  doesn't execute else if exception is raised conditionally (2)  doesn't execute else if exception is raised conditionally (2)  doesn't execute else if exception is raised conditionally (2)��  doesn't execute else if exception is raised conditionally (2)  doesn't execute else if exception is raised conditionally (2)������  doesn't execute else if exception is raised conditionally (2)������  doesn't execute else if exception is raised conditionally (2)��  doesn't execute else if exception is raised conditionally (2)
  doesn't execute else if exception is raised conditionally (2)
-  codegens exception handler with return  codegens exception handler with return  codegens exception handler with return  codegens exception handler with return  codegens exception handler with return  codegens exception handler with return����  codegens exception handler with return����������  codegens exception handler with return��  codegens exception handler with return
  codegens exception handler with return
-  handles rescuing union between module type and class type  handles rescuing union between module type and class type  handles rescuing union between module type and class type  handles rescuing union between module type and class type  handles rescuing union between module type and class type  handles rescuing union between module type and class type  handles rescuing union between module type and class type��������������  handles rescuing union between module type and class type��  handles rescuing union between module type and class type
  handles rescuing union between module type and class type
-  doesn't execute else if exception is raised conditionally (1)  doesn't execute else if exception is raised conditionally (1)  doesn't execute else if exception is raised conditionally (1)  doesn't execute else if exception is raised conditionally (1)  doesn't execute else if exception is raised conditionally (1)��  doesn't execute else if exception is raised conditionally (1)������  doesn't execute else if exception is raised conditionally (1)������  doesn't execute else if exception is raised conditionally (1)��  doesn't execute else if exception is raised conditionally (1)
  doesn't execute else if exception is raised conditionally (1)
-  executes ensure of break inside block  executes ensure of break inside block  executes ensure of break inside block  executes ensure of break inside block  executes ensure of break inside block������  executes ensure of break inside block������  executes ensure of break inside block��  executes ensure of break inside block��  executes ensure of break inside block
  executes ensure of break inside block
-  doesn't crash on #1988  doesn't crash on #1988  doesn't crash on #1988  doesn't crash on #1988  doesn't crash on #1988  doesn't crash on #1988��������  doesn't crash on #1988������  doesn't crash on #1988��  doesn't crash on #1988
  doesn't crash on #1988
-  types parenthesized expression (#5511)  types parenthesized expression (#5511)  types parenthesized expression (#5511)  types parenthesized expression (#5511)  types parenthesized expression (#5511)������  types parenthesized expression (#5511)������  types parenthesized expression (#5511)  types parenthesized expression (#5511)����  types parenthesized expression (#5511)
  types parenthesized expression (#5511)
-  executes ensure when no exception is raised (1)  executes ensure when no exception is raised (1)  executes ensure when no exception is raised (1)  executes ensure when no exception is raised (1)  executes ensure when no exception is raised (1)����  executes ensure when no exception is raised (1)��  executes ensure when no exception is raised (1)��������  executes ensure when no exception is raised (1)��  executes ensure when no exception is raised (1)
  executes ensure when no exception is raised (1)
-  can result into union (1)  can result into union (1)  can result into union (1)  can result into union (1)  can result into union (1)  can result into union (1)  can result into union (1)��������������  can result into union (1)��  can result into union (1)
  can result into union (1)
-  executes ensure of break inside while inside body with block  executes ensure of break inside while inside body with block  executes ensure of break inside while inside body with block  executes ensure of break inside while inside body with block  executes ensure of break inside while inside body with block��  executes ensure of break inside while inside body with block��  executes ensure of break inside while inside body with block����������  executes ensure of break inside while inside body with block��  executes ensure of break inside while inside body with block
  executes ensure of break inside while inside body with block
-  codegens issue #118 (1)
  codegens issue #118 (1)
-  doesn't execute else if exception is raised (2)  doesn't execute else if exception is raised (2)  doesn't execute else if exception is raised (2)  doesn't execute else if exception is raised (2)������  doesn't execute else if exception is raised (2)����  doesn't execute else if exception is raised (2)��  doesn't execute else if exception is raised (2)��  doesn't execute else if exception is raised (2)��  doesn't execute else if exception is raised (2)
  doesn't execute else if exception is raised (2)
-  captures exception thrown from proc  captures exception thrown from proc  captures exception thrown from proc  captures exception thrown from proc  captures exception thrown from proc  captures exception thrown from proc  captures exception thrown from proc��������������  captures exception thrown from proc��  captures exception thrown from proc
  captures exception thrown from proc
-  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)������������  catches exception thrown by as inside method (#4030)��  catches exception thrown by as inside method (#4030)��  catches exception thrown by as inside method (#4030)
  catches exception thrown by as inside method (#4030)
-  executes ensure when exception is unhandled (2)  executes ensure when exception is unhandled (2)  executes ensure when exception is unhandled (2)��  executes ensure when exception is unhandled (2)��  executes ensure when exception is unhandled (2)��  executes ensure when exception is unhandled (2)������  executes ensure when exception is unhandled (2)��  executes ensure when exception is unhandled (2)��  executes ensure when exception is unhandled (2)
  executes ensure when exception is unhandled (2)
-  handles exception in outer block (1)  handles exception in outer block (1)  handles exception in outer block (1)  handles exception in outer block (1)��  handles exception in outer block (1)����  handles exception in outer block (1)������  handles exception in outer block (1)��  handles exception in outer block (1)��  handles exception in outer block (1)
  handles exception in outer block (1)
-  uses exception after rescue  uses exception after rescue  uses exception after rescue  uses exception after rescue��  uses exception after rescue  uses exception after rescue����������  uses exception after rescue��  uses exception after rescue��  uses exception after rescue
  uses exception after rescue
-  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue������������  executes ensure of break inside while inside rescue��  executes ensure of break inside while inside rescue��  executes ensure of break inside while inside rescue
  executes ensure of break inside while inside rescue
-  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns��  executes ensure when the main block returns������������  executes ensure when the main block returns��  executes ensure when the main block returns
  executes ensure when the main block returns
-  handles rescuing union between module types  handles rescuing union between module types  handles rescuing union between module types  handles rescuing union between module types  handles rescuing union between module types  handles rescuing union between module types  handles rescuing union between module types��������  handles rescuing union between module types��������  handles rescuing union between module types
  handles rescuing union between module types
-  executes else if no exception is raised (1)  executes else if no exception is raised (1)  executes else if no exception is raised (1)  executes else if no exception is raised (1)  executes else if no exception is raised (1)  executes else if no exception is raised (1)��  executes else if no exception is raised (1)������������  executes else if no exception is raised (1)��  executes else if no exception is raised (1)
  executes else if no exception is raised (1)
-  executes body if nothing raised (1)  executes body if nothing raised (1)  executes body if nothing raised (1)  executes body if nothing raised (1)  executes body if nothing raised (1)  executes body if nothing raised (1)  executes body if nothing raised (1)��������������  executes body if nothing raised (1)��  executes body if nothing raised (1)
  executes body if nothing raised (1)
-  doesn't codegen duplicated ensure if unreachable (#709)
  doesn't codegen duplicated ensure if unreachable (#709)
-  executes ensure of next inside while inside body  executes ensure of next inside while inside body  executes ensure of next inside while inside body  executes ensure of next inside while inside body  executes ensure of next inside while inside body����  executes ensure of next inside while inside body  executes ensure of next inside while inside body����������  executes ensure of next inside while inside body��  executes ensure of next inside while inside body
  executes ensure of next inside while inside body
-  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns��������������  executes ensure when the main block returns��  executes ensure when the main block returns
  executes ensure when the main block returns
-  handles nested exceptions  handles nested exceptions  handles nested exceptions  handles nested exceptions  handles nested exceptions����  handles nested exceptions  handles nested exceptions����������  handles nested exceptions��  handles nested exceptions
  handles nested exceptions
-  receives exception object  receives exception object  receives exception object  receives exception object  receives exception object  receives exception object  receives exception object��������������  receives exception object��  receives exception object
  receives exception object
-  executes ensure when exception is unhandled (1)  executes ensure when exception is unhandled (1)  executes ensure when exception is unhandled (1)  executes ensure when exception is unhandled (1)  executes ensure when exception is unhandled (1)��������  executes ensure when exception is unhandled (1)����  executes ensure when exception is unhandled (1)��  executes ensure when exception is unhandled (1)��  executes ensure when exception is unhandled (1)
  executes ensure when exception is unhandled (1)
-  executes ensure of calling method when doing break inside block (#1233)  executes ensure of calling method when doing break inside block (#1233)  executes ensure of calling method when doing break inside block (#1233)  executes ensure of calling method when doing break inside block (#1233)  executes ensure of calling method when doing break inside block (#1233)������  executes ensure of calling method when doing break inside block (#1233)������  executes ensure of calling method when doing break inside block (#1233)��  executes ensure of calling method when doing break inside block (#1233)��  executes ensure of calling method when doing break inside block (#1233)
  executes ensure of calling method when doing break inside block (#1233)
-  handles rescuing module type  handles rescuing module type  handles rescuing module type  handles rescuing module type��������  handles rescuing module type��  handles rescuing module type��  handles rescuing module type��  handles rescuing module type��  handles rescuing module type
  handles rescuing module type
-  does not rescue just any union  does not rescue just any union  does not rescue just any union  does not rescue just any union������  does not rescue just any union����  does not rescue just any union  does not rescue just any union����  does not rescue just any union��  does not rescue just any union
  does not rescue just any union
-  executes ensure when exception is raised (2)  executes ensure when exception is raised (2)  executes ensure when exception is raised (2)��  executes ensure when exception is raised (2)��  executes ensure when exception is raised (2)  executes ensure when exception is raised (2)  executes ensure when exception is raised (2)����������  executes ensure when exception is raised (2)��  executes ensure when exception is raised (2)
  executes ensure when exception is raised (2)
-  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns��������  executes ensure when the main block yields and returns������  executes ensure when the main block yields and returns��  executes ensure when the main block yields and returns
  executes ensure when the main block yields and returns
-  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block����  executes ensure of next inside block����������  executes ensure of next inside block��  executes ensure of next inside block
  executes ensure of next inside block
-  closures rescue variable (#8141)
  closures rescue variable (#8141)
-  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers��������������  executes ensure of break inside while inside body with nested handlers��  executes ensure of break inside while inside body with nested handlers
  executes ensure of break inside while inside body with nested handlers
-  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue����  rescues with types defaults to generic rescue����������  rescues with types defaults to generic rescue��  rescues with types defaults to generic rescue
  rescues with types defaults to generic rescue
-  handles subclass  handles subclass  handles subclass  handles subclass  handles subclass  handles subclass������������  handles subclass  handles subclass����  handles subclass
  handles subclass
-  runs NoReturn ensure (#3082)  runs NoReturn ensure (#3082)  runs NoReturn ensure (#3082)  runs NoReturn ensure (#3082)������  runs NoReturn ensure (#3082)  runs NoReturn ensure (#3082)����  runs NoReturn ensure (#3082)����  runs NoReturn ensure (#3082)��  runs NoReturn ensure (#3082)
  runs NoReturn ensure (#3082)
-  codegens return from rescue with value  codegens return from rescue with value  codegens return from rescue with value������  codegens return from rescue with value  codegens return from rescue with value����  codegens return from rescue with value  codegens return from rescue with value  codegens return from rescue with value������  codegens return from rescue with value
  codegens return from rescue with value
-  rescues with type  rescues with type  rescues with type������  rescues with type��  rescues with type��  rescues with type  rescues with type����  rescues with type��  rescues with type
  rescues with type
-  propagates raise status (#2074)  propagates raise status (#2074)  propagates raise status (#2074)  propagates raise status (#2074)  propagates raise status (#2074)��  propagates raise status (#2074)  propagates raise status (#2074)������������  propagates raise status (#2074)��  propagates raise status (#2074)
  propagates raise status (#2074)
-  executes ensure when raising inside rescue  executes ensure when raising inside rescue  executes ensure when raising inside rescue  executes ensure when raising inside rescue  executes ensure when raising inside rescue������  executes ensure when raising inside rescue������  executes ensure when raising inside rescue��  executes ensure when raising inside rescue��  executes ensure when raising inside rescue
  executes ensure when raising inside rescue
-  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally������������  executes rescue if something is raised conditionally��  executes rescue if something is raised conditionally��  executes rescue if something is raised conditionally
  executes rescue if something is raised conditionally
-  executes else if no exception is raised (2)  executes else if no exception is raised (2)  executes else if no exception is raised (2)  executes else if no exception is raised (2)  executes else if no exception is raised (2)����������  executes else if no exception is raised (2)  executes else if no exception is raised (2)����  executes else if no exception is raised (2)��  executes else if no exception is raised (2)
  executes else if no exception is raised (2)
-  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)������  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)����������  can use argument in rescue, with a different type (2) (#2844)
  can use argument in rescue, with a different type (2) (#2844)
-  executes rescue if something is raised unconditionally��  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally��������������  executes rescue if something is raised unconditionally
  executes rescue if something is raised unconditionally
-  can rescue TypeCastError (#2607)  can rescue TypeCastError (#2607)  can rescue TypeCastError (#2607)��  can rescue TypeCastError (#2607)����  can rescue TypeCastError (#2607)  can rescue TypeCastError (#2607)������  can rescue TypeCastError (#2607)��  can rescue TypeCastError (#2607)��  can rescue TypeCastError (#2607)
  can rescue TypeCastError (#2607)
-  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)����  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)����������  does ensure after rescue which returns (#171)��  does ensure after rescue which returns (#171)
  does ensure after rescue which returns (#171)
-  handle multiple exception types (2)  handle multiple exception types (2)  handle multiple exception types (2)  handle multiple exception types (2)  handle multiple exception types (2)������  handle multiple exception types (2)����  handle multiple exception types (2)  handle multiple exception types (2)������  handle multiple exception types (2)
  handle multiple exception types (2)
-  does not rescue just any module��  does not rescue just any module��  does not rescue just any module��  does not rescue just any module��  does not rescue just any module��  does not rescue just any module��  does not rescue just any module��  does not rescue just any module��  does not rescue just any module
  does not rescue just any module
-  rescues a valid nested union  rescues a valid nested union  rescues a valid nested union  rescues a valid nested union  rescues a valid nested union  rescues a valid nested union  rescues a valid nested union��������������  rescues a valid nested union��  rescues a valid nested union
  rescues a valid nested union
-  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target��  executes ensure from return until target������������  executes ensure from return until target��  executes ensure from return until target
  executes ensure from return until target
-  codegens rescue specific leaf exception  codegens rescue specific leaf exception  codegens rescue specific leaf exception  codegens rescue specific leaf exception  codegens rescue specific leaf exception  codegens rescue specific leaf exception  codegens rescue specific leaf exception��������������  codegens rescue specific leaf exception��  codegens rescue specific leaf exception
  codegens rescue specific leaf exception
-  ensure without rescue  ensure without rescue  ensure without rescue  ensure without rescue  ensure without rescue  ensure without rescue  ensure without rescue  ensure without rescue����������������  ensure without rescue
  ensure without rescue
-  rescues a valid union  rescues a valid union  rescues a valid union  rescues a valid union  rescues a valid union��  rescues a valid union����������  rescues a valid union��  rescues a valid union��  rescues a valid union
  rescues a valid union
-  codegens issue #118 (2)
  codegens issue #118 (2)
-  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block��  executes ensure of next inside block������  executes ensure of next inside block����  executes ensure of next inside block����  executes ensure of next inside block
  executes ensure of next inside block
-  can use argument in rescue (#2844)  can use argument in rescue (#2844)  can use argument in rescue (#2844)  can use argument in rescue (#2844)  can use argument in rescue (#2844)  can use argument in rescue (#2844)��  can use argument in rescue (#2844)��  can use argument in rescue (#2844)������������  can use argument in rescue (#2844)
  can use argument in rescue (#2844)
-  runs #2441  runs #2441  runs #2441  runs #2441  runs #2441  runs #2441��������  runs #2441������  runs #2441��  runs #2441
  runs #2441
-  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)������������  doesn't execute else if exception is raised (1)��  doesn't execute else if exception is raised (1)��  doesn't execute else if exception is raised (1)
  doesn't execute else if exception is raised (1)
-  executes ensure of break inside while inside else  executes ensure of break inside while inside else  executes ensure of break inside while inside else  executes ensure of break inside while inside else  executes ensure of break inside while inside else  executes ensure of break inside while inside else  executes ensure of break inside while inside else��������������  executes ensure of break inside while inside else��  executes ensure of break inside while inside else
  executes ensure of break inside while inside else
-  executes ensure of break inside while inside body  executes ensure of break inside while inside body  executes ensure of break inside while inside body  executes ensure of break inside while inside body  executes ensure of break inside while inside body  executes ensure of break inside while inside body������������  executes ensure of break inside while inside body��  executes ensure of break inside while inside body��  executes ensure of break inside while inside body
  executes ensure of break inside while inside body
-Code gen: ssa
-  codegens declaration of var inside then when true
  codegens declaration of var inside then when true
-  codegens a var that is re-assigned in a block (1)
  codegens a var that is re-assigned in a block (1)
-  codegens a var that is declared in a block (1)
  codegens a var that is declared in a block (1)
-  codegens a var that is re-assigned in a block
  codegens a var that is re-assigned in a block
-  codegens a var that is declared in a block (2)
  codegens a var that is declared in a block (2)
-  codegens a redefined var
  codegens a redefined var
-  codegens ssa bug with if/else on var
  codegens ssa bug with if/else on var
-  codegens a var that is re-assigned in a block (2)
  codegens a var that is re-assigned in a block (2)
-  codegens ssa bug (1)
  codegens ssa bug (1)
-  codegens a redefined var inside method
  codegens a redefined var inside method
-  codegens a redefined var inside method with argument
  codegens a redefined var inside method with argument
-  codegens ssa bug (2)
  codegens ssa bug (2)
-  codegens declaration of var inside then when false
  codegens declaration of var inside then when false
-Crystal::Init::InitProject
-  correctly uses git config
  correctly uses git config
-  has proper contents
  has proper contents
+  does to_s of "asm(\"nop\" :::: \"volatile\")"
  does to_s of "asm(\"nop\" :::: \"volatile\")"
+  does to_s of "{(1 + 2) => (3 + 4)}"
  does to_s of "{(1 + 2) => (3 + 4)}"
+  does to_s of "def foo(x y)\nend"
  does to_s of "def foo(x y)\nend"
+  does to_s of "(1 + 2)..3"
  does to_s of "(1 + 2)..3"
+  does to_s of "def foo(x, **args)\nend"
  does to_s of "def foo(x, **args)\nend"
+  does to_s of "macro foo(*, __var var)\nend"
  does to_s of "macro foo(*, __var var)\nend"
+  does to_s of "1 <= 2 <= 3"
  does to_s of "1 <= 2 <= 3"
+  does to_s of "{ {1 => 2} }"
  does to_s of "{ {1 => 2} }"
+  does to_s of "lib LibC\n  fun getchar(Int, Float)\nend"
  does to_s of "lib LibC\n  fun getchar(Int, Float)\nend"
+  does to_s of "foo(x : (T -> U) | V)"
  does to_s of "foo(x : (T -> U) | V)"
+  does to_s of "1 <= (2 <= 3)"
  does to_s of "1 <= (2 <= 3)"
+  does to_s of "1.[]="
  does to_s of "1.[]="
+  does to_s of "(1..)"
  does to_s of "(1..)"
+  does to_s of "case 1; when .!; 2; when .< 0; 3; end"
  does to_s of "case 1; when .!; 2; when .< 0; 3; end"
+  does to_s of "foo.%"
  does to_s of "foo.%"
+  does to_s of "foo(1, (2 + 3), bar: (4 + 5))"
  does to_s of "foo(1, (2 + 3), bar: (4 + 5))"
+  does to_s of "1.&*"
  does to_s of "1.&*"
+  does to_s of "asm(\"nop\" :: \"a\"(1) :: \"volatile\")"
  does to_s of "asm(\"nop\" :: \"a\"(1) :: \"volatile\")"
+  does to_s of "foo[x, y, a: 1, b: 2]"
  does to_s of "foo[x, y, a: 1, b: 2]"
+  does to_s of "macro foo(x, *y)\nend"
  does to_s of "macro foo(x, *y)\nend"
+  does to_s of "{% for foo in bar %}\n  {{ if true\n  foo\n  bar\nend }}\n{% end %}"
  does to_s of "{% for foo in bar %}\n  {{ if true\n  foo\n  bar\nend }}\n{% end %}"
+  does to_s of "macro foo(@[Foo] x, @[Foo] *y)\nend"
  does to_s of "macro foo(@[Foo] x, @[Foo] *y)\nend"
+  does to_s of "foo._bar"
  does to_s of "foo._bar"
+.parse_args
+  DIR (relative to home)
  DIR (relative to home)
+  NAME DIR
  NAME DIR
+  DIR
  DIR
+  DIR (absolute)
  DIR (absolute)
+  DIR with path
  DIR with path
+  DIR = .
  DIR = .
+Semantic: external/internal
+  macros
+    can call with external name and use with internal, after splat
    can call with external name and use with internal, after splat
+    can call with external name and use with internal
    can call with external name and use with internal
+    can call positionally
    can call positionally
+  overloads based on external name (#2610)
  overloads based on external name (#2610)
+  can call with external name and use with internal
  can call with external name and use with internal
+  can call with external name and use with internal, after splat
  can call with external name and use with internal, after splat
+  can call positionally
  can call positionally
+Semantic: alias
+  can use .class in alias (#2835)
  can use .class in alias (#2835)
+  inherits class through alias
  inherits class through alias
+  can pass recursive alias to proc
  can pass recursive alias to proc
+  allows defining recursive aliases
  allows defining recursive aliases
+  allows recursive array with alias
  allows recursive array with alias
+  errors if trying to resolve type of recursive alias
  errors if trying to resolve type of recursive alias
+  resolves alias type
  resolves alias type
+  finds type through alias (#4645)
  finds type through alias (#4645)
+  errors if alias is already defined as another type
  errors if alias is already defined as another type
+  reopens module through alias within itself
  reopens module through alias within itself
+  errors if trying to use typeof in alias
  errors if trying to use typeof in alias
+  errors if defining infinite recursive alias in union
  errors if defining infinite recursive alias in union
+  resolves type through alias (#563)
  resolves type through alias (#563)
+  allows using alias type as generic type
  allows using alias type as generic type
+  looks up alias for macro resolution (#3548)
  looks up alias for macro resolution (#3548)
+  errors if alias already defined
  errors if alias already defined
+  reopens struct through alias
  reopens struct through alias
+  declares alias inside type
  declares alias inside type
+  reopens struct through alias within itself
  reopens struct through alias within itself
+  uses constant in alias (#3259)
  uses constant in alias (#3259)
+  allows using generic type of recursive alias as restriction (#488)
  allows using generic type of recursive alias as restriction (#488)
+  doesn't crash by infinite recursion against type alias and generics (#5329)
  doesn't crash by infinite recursion against type alias and generics (#5329)
+  overloads union type through alias
  overloads union type through alias
+  includes module through alias
  includes module through alias
+  allows defining recursive fun aliases
  allows defining recursive fun aliases
+  works with alias type as restriction
  works with alias type as restriction
+  inherits struct through alias
  inherits struct through alias
+  reopens class through alias within itself
  reopens class through alias within itself
+  doesn't find type parameter in alias (#3502)
  doesn't find type parameter in alias (#3502)
+  uses constant in alias with math (#3259)
  uses constant in alias with math (#3259)
+  reopens module through alias
  reopens module through alias
+  errors if declares alias inside if
  errors if declares alias inside if
+  errors if defining infinite recursive alias
  errors if defining infinite recursive alias
+  reopens class through alias
  reopens class through alias
 Semantic: hooks
-  does inherited macro
  does inherited macro
+  types macro finished hook bug regarding initialize (#3964)
  types macro finished hook bug regarding initialize (#3964)
   does inherited macro for generic class
  does inherited macro for generic class
-  does included macro
  does included macro
-  does extended macro
  does extended macro
-  errors if wrong extended params size
  errors if wrong extended params size
-  does included macro for generic module
  does included macro for generic module
-  errors if wrong finished params length
  errors if wrong finished params length
   does added method macro
  does added method macro
-  types initializer in inherited
  types initializer in inherited
-  includes error message in included hook (#889)
  includes error message in included hook (#889)
-  does inherited macro through generic instance type (#9693)
  does inherited macro through generic instance type (#9693)
-  types macro finished hook bug regarding initialize (#3964)
  types macro finished hook bug regarding initialize (#3964)
-  errors if wrong extended params length
  errors if wrong extended params length
-  errors if wrong inherited params size
  errors if wrong inherited params size
-  errors if wrong included params size
  errors if wrong included params size
+  errors if wrong finished params length
  errors if wrong finished params length
   does not invoke 'method_added' hook recursively
  does not invoke 'method_added' hook recursively
-Crystal::Repl::Interpreter
-  is_a?
-    does is_a? from NilableType to NonGenericClassType (true)
    does is_a? from NilableType to NonGenericClassType (true)
-    does is_a? from NilableReferenceUnionType to NonGenericClassType (false)
    does is_a? from NilableReferenceUnionType to NonGenericClassType (false)
-    does is_a? from NilableReferenceUnionType to NonGenericClassType (true)
    does is_a? from NilableReferenceUnionType to NonGenericClassType (true)
-    does is_a? from NilableType to NonGenericClassType (false)
    does is_a? from NilableType to NonGenericClassType (false)
-    does is_a? from VirtualType to NonGenericClassType (false)
    does is_a? from VirtualType to NonGenericClassType (false)
-    does is_a? from NilableType to GenericClassInstanceType (false)
    does is_a? from NilableType to GenericClassInstanceType (false)
-    does is_a? from NilableProcType to non-Nil
    does is_a? from NilableProcType to non-Nil
-    does is_a? from NilableType to GenericClassInstanceType (true)
    does is_a? from NilableType to GenericClassInstanceType (true)
-    does is_a? from NilableProcType to Nil
    does is_a? from NilableProcType to Nil
-    does is_a? from VirtualType to NonGenericClassType (true)
    does is_a? from VirtualType to NonGenericClassType (true)
-Crystal::FFI::CallInterface
-  .new
-    sum struct
    sum struct
-    all primitive arg types
    all primitive arg types
-    simple call
    simple call
-    array
    array
-    make struct
    make struct
-    with args
    with args
-  .variadic
-    basic
    basic
-    zero varargs
    zero varargs
-    validates args size
    validates args size
-Crystal::Repl::Interpreter
-  bugs
-    does multidispatch on virtual struct
    does multidispatch on virtual struct
-    does multidispatch on virtual struct union nil
    does multidispatch on virtual struct union nil
-    correctly puts virtual metaclass type in union
    correctly puts virtual metaclass type in union
-    doesn't pass self to top-level method
    doesn't pass self to top-level method
-    does leading zeros
    does leading zeros
-    doesn't pass self to top-level method (FileNode)
    doesn't pass self to top-level method (FileNode)
-    doesn't override local variable value with block var with the same name
    doesn't override local variable value with block var with the same name
-    breaks from current block, not from outer block
    breaks from current block, not from outer block
-    doesn't incorrectly consider a non-closure as closure
    doesn't incorrectly consider a non-closure as closure
-Semantic: struct
-  errors if invoking to_unsafe and got different type
  errors if invoking to_unsafe and got different type
-  errors if invoking to_i32! and got wrong type
  errors if invoking to_i32! and got wrong type
-  can access instance var from the outside (#1092)
  can access instance var from the outside (#1092)
-  errors if already defined with another type
  errors if already defined with another type
-  errors if includes and field already exists
  errors if includes and field already exists
-  types struct getter multiple levels via new
  types struct getter multiple levels via new
-  errors if invoking to_unsafe and got error in that call
  errors if invoking to_unsafe and got error in that call
-  automatically converts numeric type in struct field assignment
  automatically converts numeric type in struct field assignment
-  errors if using void via typedef in struct field type
  errors if using void via typedef in struct field type
-  errors on struct setter if different type via new
  errors on struct setter if different type via new
-  errors on struct setter if different type
  errors on struct setter if different type
-  types struct getter to struct
  types struct getter to struct
-  errors on struct if no field
  errors on struct if no field
-  errors if includes and field already exists, the other way around
  errors if includes and field already exists, the other way around
-  errors if setting closure
  errors if setting closure
-  supports macro if inside struct
  supports macro if inside struct
-  types Struct#new
  types Struct#new
-  types struct setter
  types struct setter
-  marks as packed
  marks as packed
-  types struct
  types struct
-  errors if already defined with another type (2)
  errors if already defined with another type (2)
-  types struct getter
  types struct getter
-  errors on empty c struct (#633)
  errors on empty c struct (#633)
-  errors if using void in struct field type
  errors if using void in struct field type
-  includes another struct
  includes another struct
-  errors if includes non-cstruct type
  errors if includes non-cstruct type
-  errors if includes unknown type
  errors if includes unknown type
-  errors if invoking to_i32! and got error in that call
  errors if invoking to_i32! and got error in that call
-  types struct getter on pointer type
  types struct getter on pointer type
-  errors if already defined
  errors if already defined
-  allows inline forward declaration
  allows inline forward declaration
-  types struct getter with keyword name
  types struct getter with keyword name
-Normalize: op assign
-  normalizes exp[value] &&=
  normalizes exp[value] &&=
-  normalizes var +=
  normalizes var +=
-  normalizes exp[value] +=
  normalizes exp[value] +=
-  normalizes var &&=
  normalizes var &&=
-  normalizes var -=
  normalizes var -=
-  normalizes exp.value ||=
  normalizes exp.value ||=
-  normalizes var &+=
  normalizes var &+=
-  normalizes exp.value &&=
  normalizes exp.value &&=
-  normalizes var.value +=
  normalizes var.value +=
-  normalizes var &-=
  normalizes var &-=
-  normalizes @@var[0] +=
  normalizes @@var[0] +=
-  normalizes @@var.value +=
  normalizes @@var.value +=
-  normalizes @var[0] +=
  normalizes @var[0] +=
-  normalizes exp[value] ||=
  normalizes exp[value] ||=
-  normalizes var ||=
  normalizes var ||=
-  normalizes exp[0] +=
  normalizes exp[0] +=
-  normalizes var[0] +=
  normalizes var[0] +=
-  normalizes var &*=
  normalizes var &*=
-  normalizes exp.value +=
  normalizes exp.value +=
-  normalizes @var.value +=
  normalizes @var.value +=
-  normalizes var *=
  normalizes var *=
-Code gen: hash literal spec
-  creates custom generic hash in module (#5684)
  creates custom generic hash in module (#5684)
-  creates custom generic hash via alias (1)
  creates custom generic hash via alias (1)
-  creates custom generic hash via alias (2)
  creates custom generic hash via alias (2)
-  creates custom generic hash
  creates custom generic hash
-  creates custom non-generic hash in module
  creates custom non-generic hash in module
-  creates custom generic hash with type vars
  creates custom generic hash with type vars
-  assignment in hash-like literal works  assignment in hash-like literal works  assignment in hash-like literal works  assignment in hash-like literal works��  assignment in hash-like literal works��������  assignment in hash-like literal works��  assignment in hash-like literal works  assignment in hash-like literal works����  assignment in hash-like literal works
  assignment in hash-like literal works
-  assignment in hash literal works  assignment in hash literal works  assignment in hash literal works  assignment in hash literal works  assignment in hash literal works  assignment in hash literal works��������  assignment in hash literal works������  assignment in hash literal works��  assignment in hash literal works
  assignment in hash literal works
-  creates custom non-generic hash
  creates custom non-generic hash
-  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)����������  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)����  doesn't crash on hash literal with proc pointer (#646)��  doesn't crash on hash literal with proc pointer (#646)
  doesn't crash on hash literal with proc pointer (#646)
-Crystal::Repl::Interpreter
-  unions
-    converts from NilableType to NonGenericClassType
    converts from NilableType to NonGenericClassType
-    put and remove from union in instance var
    put and remove from union in instance var
-    put and remove from union in local var
    put and remove from union in local var
-    returns large union type (#15041)
    returns large union type (#15041)
-    put and remove from union, together with is_a? (truthy case)
    put and remove from union, together with is_a? (truthy case)
-    returns union type
    returns union type
-    puts union inside union
    puts union inside union
-    discards is_a?
    discards is_a?
-    put and remove from union, together with is_a? (falsey case)
    put and remove from union, together with is_a? (falsey case)
-Semantic: super
-  finds super initialize if not explicitly defined in superclass, 2 (#273)
  finds super initialize if not explicitly defined in superclass, 2 (#273)
-  gives correct error when calling super and target is abstract method (#2675)
  gives correct error when calling super and target is abstract method (#2675)
-  types super when inside fun and forwards args
  types super when inside fun and forwards args
-  types super with named arguments, def has bare splat parameter (#8895)
  types super with named arguments, def has bare splat parameter (#8895)
-  errors no superclass method in top-level
  errors no superclass method in top-level
-  calls super in module method (2) (#556)
  calls super in module method (2) (#556)
-  types super without arguments
  types super without arguments
-  types super when inside fun
  types super when inside fun
-  types super with forwarded arguments, different internal names (#8895)
  types super with forwarded arguments, different internal names (#8895)
-  calls super in module method (3) (#556)
  calls super in module method (3) (#556)
-  types super with forwarded arguments, def has bare splat parameter (#8895)
  types super with forwarded arguments, def has bare splat parameter (#8895)
-  calls super in module method (1) (#556)
  calls super in module method (1) (#556)
-  errors if invoking super and match isn't found in direct superclass in initialize (even though it's find in one superclass)
  errors if invoking super and match isn't found in direct superclass in initialize (even though it's find in one superclass)
-  says correct error message when no overload matches in super call (#272)
  says correct error message when no overload matches in super call (#272)
-  finds super initialize if not explicitly defined in superclass, 1 (#273)
  finds super initialize if not explicitly defined in superclass, 1 (#273)
-  errors on super where only target would be a top level method (#5201)
  errors on super where only target would be a top level method (#5201)
-  types super with forwarded arguments, parent has parameters
  types super with forwarded arguments, parent has parameters
-  errors on super outside method (#4481)
  errors on super outside method (#4481)
-  types super when container method is defined in parent class
  types super when container method is defined in parent class
-  doesn't error if invoking super and match isn't found in direct superclass (even though it's find in one superclass)
  doesn't error if invoking super and match isn't found in direct superclass (even though it's find in one superclass)
-  calls super in generic module method
  calls super in generic module method
-  types super without arguments and instance variable
  types super without arguments and instance variable
-  invokes super inside macro (#6636)
  invokes super inside macro (#6636)
-  errors no superclass method in top-level def
  errors no superclass method in top-level def
-  types super when container method is defined in parent class two levels up
  types super when container method is defined in parent class two levels up
-  types super with named arguments, def has bare splat parameter (2) (#8895)
  types super with named arguments, def has bare splat parameter (2) (#8895)
-  types super with forwarded arguments, def has double splat parameter (#8895)
  types super with forwarded arguments, def has double splat parameter (#8895)
-  errors if calling super on module method and not found
  errors if calling super on module method and not found
-  errors no superclass method
  errors no superclass method
-Semantic: generic class
-  errors if using Float in a generic type
  errors if using Float in a generic type
-  inherits from generic with forwarding (2)
  inherits from generic with forwarding (2)
-  never types Generic as virtual outside generic type parameter (#3989)
  never types Generic as virtual outside generic type parameter (#3989)
-  instantiates generic variadic class, accesses T from instance method through superclass
  instantiates generic variadic class, accesses T from instance method through superclass
-  initializes instance variable of generic type using type var (#961)
  initializes instance variable of generic type using type var (#961)
-  can define instance var forward declared (#962)
  can define instance var forward declared (#962)
-  allows initializing instance variable in inherited generic type
  allows initializing instance variable in inherited generic type
-  instantiates generic variadic class, accesses T from instance method through superclass, more args
  instantiates generic variadic class, accesses T from instance method through superclass, more args
-  restricts non-generic to generic with free var
  restricts non-generic to generic with free var
-  replaces type parameters in virtual metaclasses (#10691)
  replaces type parameters in virtual metaclasses (#10691)
-  never types Path as virtual outside generic type parameter (#3989)
  never types Path as virtual outside generic type parameter (#3989)
-  errors if passing integer literal to Tuple as generic argument (#1120)
  errors if passing integer literal to Tuple as generic argument (#1120)
-  restricts generic type argument through alias in a non-strict way
  restricts generic type argument through alias in a non-strict way
-  instantiates generic variadic class, accesses T from class method through superclass
  instantiates generic variadic class, accesses T from class method through superclass
-  restricts virtual generic instance type against generic (#3351)
  restricts virtual generic instance type against generic (#3351)
-  creates pointer of generic type and uses it (2)
  creates pointer of generic type and uses it (2)
-  doesn't crash when matching restriction against number literal (2) (#3157)
  doesn't crash when matching restriction against number literal (2) (#3157)
-  errors if inheriting from generic and incorrect number of type vars
  errors if inheriting from generic and incorrect number of type vars
-  unifies generic metaclass types
  unifies generic metaclass types
-  restricts generic to generic with free var
  restricts generic to generic with free var
-  restricts non-generic to generic
  restricts non-generic to generic
-  errors if using Class in a generic type
  errors if using Class in a generic type
-  recomputes on new subclass
  recomputes on new subclass
-  errors if using Pointer in a generic type
  errors if using Pointer in a generic type
-  instantiates generic variadic class, accesses T from class method
  instantiates generic variadic class, accesses T from class method
-  errors if inheriting generic type and not specifying type vars (#460)
  errors if inheriting generic type and not specifying type vars (#460)
-  errors if using Tuple in a generic type
  errors if using Tuple in a generic type
-  nests generics with the same type var (#3297)
  nests generics with the same type var (#3297)
-  splats generic type var
  splats generic type var
-  disallow using a non-instantiated generic type as a generic type argument
  disallow using a non-instantiated generic type as a generic type argument
-  allows T::Type with T a generic type
  allows T::Type with T a generic type
-  inherits non-generic to generic (2)
  inherits non-generic to generic (2)
-  can use type var that resolves to number in restriction (#6502)
  can use type var that resolves to number in restriction (#6502)
-  finds generic type argument from method with default value
  finds generic type argument from method with default value
-  inherits non-generic to generic (1)
  inherits non-generic to generic (1)
-  errors if using Enum in a generic type
  errors if using Enum in a generic type
-  inherits instance var type annotation from generic to concrete with T
  inherits instance var type annotation from generic to concrete with T
-  errors if splatting a non-tuple (#9853)
  errors if splatting a non-tuple (#9853)
-  instantiates generic variadic class, accesses T from instance method, more args
  instantiates generic variadic class, accesses T from instance method, more args
-  subclasses twice with same generic class (#3423)
  subclasses twice with same generic class (#3423)
-  errors if using Struct in a generic type
  errors if using Struct in a generic type
-  errors if using Proc in a generic type
  errors if using Proc in a generic type
-  doesn't compute generic instance var initializers in formal superclass's context (#4753)
  doesn't compute generic instance var initializers in formal superclass's context (#4753)
-  defines empty initialize on inherited generic class
  defines empty initialize on inherited generic class
-  doesn't find T type parameter of current type in superclass (#4604)
  doesn't find T type parameter of current type in superclass (#4604)
-  correctly checks argument count when target type has a splat (#9855)
  correctly checks argument count when target type has a splat (#9855)
-  shows error due to generic instantiation (#7083)
  shows error due to generic instantiation (#7083)
-  doesn't crash when matching restriction against number literal (#3157)
  doesn't crash when matching restriction against number literal (#3157)
-  errors if using StaticArray in a generic type
  errors if using StaticArray in a generic type
-  errors if inheriting from generic when it is non-generic
  errors if inheriting from generic when it is non-generic
-  replaces type parameters for virtual types (#3235)
  replaces type parameters for virtual types (#3235)
-  errors if using Object in a generic type
  errors if using Object in a generic type
-  creates pointer of generic type and uses it
  creates pointer of generic type and uses it
-  can use type var that resolves to number in restriction using Int128
  can use type var that resolves to number in restriction using Int128
-  inherits from generic with instantiation
  inherits from generic with instantiation
-  instantiates generic variadic class, accesses T from instance method
  instantiates generic variadic class, accesses T from instance method
-  errors if using Value in a generic type
  errors if using Value in a generic type
-  inherits from generic with instantiation with instance var
  inherits from generic with instantiation with instance var
-  doesn't duplicate overload on generic class with class method (#2385)
  doesn't duplicate overload on generic class with class method (#2385)
-  instantiates generic class with default argument in initialize (#394)
  instantiates generic class with default argument in initialize (#394)
-  errors if using Int in a generic type
  errors if using Int in a generic type
-  allows initializing instance variable (#665)
  allows initializing instance variable (#665)
-  inherits from generic with forwarding (1)
  inherits from generic with forwarding (1)
-  virtual metaclass type implements super virtual metaclass type (#3007)
  virtual metaclass type implements super virtual metaclass type (#3007)
-  resolves T through metaclass inheritance (#7914)
  resolves T through metaclass inheritance (#7914)
-  errors if passing integer literal to Proc as generic argument (#1120)
  errors if passing integer literal to Proc as generic argument (#1120)
-  errors if using Number in a generic type
  errors if using Number in a generic type
-  errors if using Number in recursive alias
  errors if using Number in recursive alias
-  instantiates generic variadic class, accesses T from instance method, more args (2)
  instantiates generic variadic class, accesses T from instance method, more args (2)
-  error on T::Type with T a generic type that's a union
  error on T::Type with T a generic type that's a union
-  doesn't allow union of generic class with module to be assigned to a generic class with module (#2425)
  doesn't allow union of generic class with module to be assigned to a generic class with module (#2425)
-  doesn't consider unbound generic instantiations as concrete (#7200)
  doesn't consider unbound generic instantiations as concrete (#7200)
-  errors on too nested tuple instance
  errors on too nested tuple instance
-  errors on too nested generic instance, with union type
  errors on too nested generic instance, with union type
-  inherits twice
  inherits twice
-  errors if using Number in alias
  errors if using Number in alias
-  calls super on generic type when superclass has no initialize (#933)
  calls super on generic type when superclass has no initialize (#933)
-  errors if invoking new on private new in generic type (#3485)
  errors if invoking new on private new in generic type (#3485)
-  errors if using Reference in a generic type
  errors if using Reference in a generic type
-  errors if passing integer literal to Union as generic argument
  errors if passing integer literal to Union as generic argument
-  can use virtual type for generic class
  can use virtual type for generic class
-  disallow using a non-instantiated module type as a generic type argument
  disallow using a non-instantiated module type as a generic type argument
-  types macro def with generic instance
  types macro def with generic instance
-  gives helpful error message when generic type var is missing in block spec (#1526)
  gives helpful error message when generic type var is missing in block spec (#1526)
-  gives helpful error message when generic type var is missing (#1526)
  gives helpful error message when generic type var is missing (#1526)
-  inherits instance var type annotation from generic to generic to concrete
  inherits instance var type annotation from generic to generic to concrete
-  errors on too nested generic instance
  errors on too nested generic instance
-  errors if using Number | String in a generic type
  errors if using Number | String in a generic type
-  doesn't find unbound type parameter in main code inside generic type (#6168)
  doesn't find unbound type parameter in main code inside generic type (#6168)
-  inherits class methods from generic class
  inherits class methods from generic class
-  inherits instance var type annotation from generic to concrete
  inherits instance var type annotation from generic to concrete
-Lexer macro
-  lexes macro with nested if
  lexes macro with nested if
-  lexes with if/end inside escaped macro (#1029)
  lexes with if/end inside escaped macro (#1029)
-  lexes macro without nested if
  lexes macro without nested if
-  lexes macro with semicolon before end
  lexes macro with semicolon before end
-  lexes macro with if as suffix after return
  lexes macro with if as suffix after return
-  lexes macro with nested until
  lexes macro with nested until
-  lexes macro with nested begin
  lexes macro with nested begin
-  lexes begin end
  lexes begin end
-  lexes macro with embedded string with %[
  lexes macro with embedded string with %[
-  lexes macro with nested annotation
  lexes macro with nested annotation
-  lexes macro with nested struct
  lexes macro with nested struct
-  lexes macro with embedded string
  lexes macro with embedded string
-  lexes macro with embedded string with %< ignores begin
  lexes macro with embedded string with %< ignores begin
-  lexes macro with nested unless
  lexes macro with nested unless
-  lexes macro with curly escape in comment
  lexes macro with curly escape in comment
-  lexes macro with nested enum
  lexes macro with nested enum
-  lexes with unless inside escaped macro (#5664)
  lexes with unless inside escaped macro (#5664)
-  lexes macro with embedded string with %<
  lexes macro with embedded string with %<
-  lexes macro with nested macro
  lexes macro with nested macro
-  lexes macro with string interpolation and double curly brace
  lexes macro with string interpolation and double curly brace
-  lexes macro with curly escape
  lexes macro with curly escape
-  lexes macro with nested while
  lexes macro with nested while
-  keeps correct line number after lexes the part of keyword and newline (#4656)
  keeps correct line number after lexes the part of keyword and newline (#4656)
-  lexes macro with nested abstract class
  lexes macro with nested abstract class
-  lexes macro with embedded char and sharp
  lexes macro with embedded char and sharp
-  lexes macro with nested module
  lexes macro with nested module
-  lexes macro with expression
  lexes macro with expression
-  lexes macro with nested do
  lexes macro with nested do
-  lexes macro with embedded string and backslash
  lexes macro with embedded string and backslash
-  lexes macro with nested class
  lexes macro with nested class
-  lexes macro with nested abstract def
  lexes macro with nested abstract def
-  skips whitespace
  skips whitespace
-  lexes simple macro
  lexes simple macro
-  doesn't lex macro var if escaped
  doesn't lex macro var if escaped
-  lexes macro with embedded string with %( ignores begin
  lexes macro with embedded string with %( ignores begin
-  lexes macro with nested fun
  lexes macro with nested fun
-  lexes macro with embedded string with %[ ignores begin
  lexes macro with embedded string with %[ ignores begin
-  lexes macro with control
  lexes macro with control
-  lexes macro with if as suffix
  lexes macro with if as suffix
-  lexes macro with comments
  lexes macro with comments
-  reaches end
  reaches end
-  lexes macro with embedded string with %(
  lexes macro with embedded string with %(
-  lexes bug #654
  lexes bug #654
-  lexes escaped quote inside string (#895)
  lexes escaped quote inside string (#895)
-  lexes macro with nested def
  lexes macro with nested def
-  lexes macro with nested lib
  lexes macro with nested lib
-  lexes macro with nested embedded string with %(
  lexes macro with nested embedded string with %(
-  lexes macro var
  lexes macro var
-  lexes macro with embedded string and expression
  lexes macro with embedded string and expression
-  lexes macro with if after assign
  lexes macro with if after assign
-  lexes macro with slash not followed by curly
  lexes macro with slash not followed by curly
-  lexes with for inside escaped macro (#1029)
  lexes with for inside escaped macro (#1029)
-  lexes macro with nested abstract struct
  lexes macro with nested abstract struct
-  lexes macro with comments and expressions
  lexes macro with comments and expressions
-  keeps correct column and line numbers
  keeps correct column and line numbers
-  lexes macro with nested select
  lexes macro with nested select
-  lexes macro with nested union
  lexes macro with nested union
-  lexes macro with nested case
  lexes macro with nested case
-Crystal::Playground::Session
-  assert
  assert
-Code gen: hooks
-  does added method macro
  does added method macro
-  fixes empty types in hooks (#3946)
  fixes empty types in hooks (#3946)
+  does inherited macro through generic instance type (#9693)
  does inherited macro through generic instance type (#9693)
+  does inherited macro
  does inherited macro
   does extended macro
  does extended macro
-  does inherited macro recursively
  does inherited macro recursively
-  does inherited macro before class body  does inherited macro before class body  does inherited macro before class body  does inherited macro before class body  does inherited macro before class body  does inherited macro before class body  does inherited macro before class body��������������  does inherited macro before class body��  does inherited macro before class body
  does inherited macro before class body
+  errors if wrong extended params length
  errors if wrong extended params length
+  types initializer in inherited
  types initializer in inherited
   does included macro
  does included macro
-  does finished
  does finished
-  does inherited macro
  does inherited macro
-Semantic: ReferenceStorage
-  allows a different name
  allows a different name
-  errors if T is a nilable type
  errors if T is a nilable type
-  errors if T is a union type
  errors if T is a union type
-  errors if T is a value type
  errors if T is a value type
-  errors if T is a struct type
  errors if T is a struct type
-Crystal::Repl::Interpreter
-  class vars
-    does class var initializer with union (#12633)
    does class var initializer with union (#12633)
-    reads class var initializer with union (#12633)
    reads class var initializer with union (#12633)
-    interprets class var without initializer
    interprets class var without initializer
-    interprets class var for virtual type
    interprets class var for virtual type
-    interprets class var with initializer
    interprets class var with initializer
-    interprets class var for virtual metaclass type
    interprets class var for virtual metaclass type
-    finds self in class var initializer (#12439)
    finds self in class var initializer (#12439)
-Code gen: uninitialized
-  codegens declare instance var with static array type
  codegens declare instance var with static array type
-  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)  works inside while/begin/rescue (bug inside #759)����������������  works inside while/begin/rescue (bug inside #759)
  works inside while/begin/rescue (bug inside #759)
-  doesn't break on inherited declared var (#390)
  doesn't break on inherited declared var (#390)
-  codegens declare var and read it
  codegens declare var and read it
-  codegens declare var and changes it
  codegens declare var and changes it
-  codegens value (#3641)
  codegens value (#3641)
-  works with uninitialized NoReturn (#3314)
  works with uninitialized NoReturn (#3314)
-  codegens declare instance var
  codegens declare instance var
+  does included macro for generic module
  does included macro for generic module
+  errors if wrong included params size
  errors if wrong included params size
+  includes error message in included hook (#889)
  includes error message in included hook (#889)
+  errors if wrong extended params size
  errors if wrong extended params size
+  errors if wrong inherited params size
  errors if wrong inherited params size
+Code gen: return
+  doesn't crash when method returns nil and can be inlined
  doesn't crash when method returns nil and can be inlined
+  codegens return followed by another expression
  codegens return followed by another expression
+  returns empty from function
  returns empty from function
+  forms a tuple from multiple return values
  forms a tuple from multiple return values
+  flattens splats inside multiple return values
  flattens splats inside multiple return values
+  return from function with union type
  return from function with union type
+  codegens assign with if with two returns
  codegens assign with if with two returns
+  codegens bug with return if true
  codegens bug with return if true
+  codegens return
  codegens return
+  return from function with nilable type
  return from function with nilable type
+  return from function with nilable type 2
  return from function with nilable type 2
+  codegens return inside if
  codegens return inside if
+  returns in var assignment (#3364)
  returns in var assignment (#3364)
+  return union
  return union
+Crystal::Doc::Type
+  #instance_methods
+    sorts operators first
    sorts operators first
+  ASTNode has no ancestors
  ASTNode has no ancestors
+  #macros
+    sorts operators first
    sorts operators first
+  ASTNode has no superclass
  ASTNode has no superclass
+  doesn't show types for alias type
  doesn't show types for alias type
+  #node_to_html
+    shows tuples
    shows tuples
+    shows generic path with necessary colons
    shows generic path with necessary colons
+    shows relative generic
    shows relative generic
+    shows relative path
    shows relative path
+    shows generic path with unnecessary colons
    shows generic path with unnecessary colons
+    shows named tuples
    shows named tuples
+  finds construct when searching class method (#8095)
  finds construct when searching class method (#8095)
+  #class_methods
+    sorts operators first
    sorts operators first
+Code gen: offsetof
+  returns offset allowing manual access of first class field
  returns offset allowing manual access of first class field
+  returns offset of extern union
  returns offset of extern union
+  returns offset allowing manual access of struct field that isn't first
  returns offset allowing manual access of struct field that isn't first
+  returns offset of `StaticArray#@buffer`
  returns offset of `StaticArray#@buffer`
+  returns offset allowing manual access of tuple items
  returns offset allowing manual access of tuple items
+  returns offset allowing manual access of first struct field
  returns offset allowing manual access of first struct field
+  returns offset allowing manual access of class field that isn't first
  returns offset allowing manual access of class field that isn't first
+Normalize: case
+  normalizes case with call
  normalizes case with call
+  normalizes case with multiple expressions with all underscores
  normalizes case with multiple expressions with all underscores
+  normalizes case without value with many expressions in when
  normalizes case without value with many expressions in when
+  normalizes case with multiple expressions
  normalizes case with multiple expressions
+  normalizes case with multiple expressions and non-tuple
  normalizes case with multiple expressions and non-tuple
+  normalizes case with multiple expressions and implicit obj
  normalizes case with multiple expressions and implicit obj
+  normalizes case with Path.class to is_a? (in)
  normalizes case with Path.class to is_a? (in)
+  normalizes case with Path.class to is_a?
  normalizes case with Path.class to is_a?
+  normalizes case with generic to is_a?
  normalizes case with generic to is_a?
+  normalizes case with implicit call
  normalizes case with implicit call
+  normalizes case with Path to is_a?
  normalizes case with Path to is_a?
+  normalizes case with assignment wrapped by paren
  normalizes case with assignment wrapped by paren
+  normalizes case without when but else
  normalizes case without when but else
+  normalizes case with assignment
  normalizes case with assignment
+  normalizes case with Generic.class to is_a?
  normalizes case with Generic.class to is_a?
+  normalizes case without value
  normalizes case without value
+  normalizes case with implicit !
  normalizes case with implicit !
+  normalizes case with multiple expressions with all underscores twice
  normalizes case with multiple expressions with all underscores twice
+  normalizes case with implicit responds_to? (#3040)
  normalizes case with implicit responds_to? (#3040)
+  normalizes case with implicit as? (#3040)
  normalizes case with implicit as? (#3040)
+  normalizes case with multiple expressions and types
  normalizes case with multiple expressions and types
+  normalizes case without cond, when but else
  normalizes case without cond, when but else
+  normalizes case with var in cond
  normalizes case with var in cond
+  normalizes case with implicit is_a? (#3040)
  normalizes case with implicit is_a? (#3040)
+  normalizes case with multiple expressions with underscore
  normalizes case with multiple expressions with underscore
+  normalizes case with implicit as (#3040)
  normalizes case with implicit as (#3040)
+  normalizes case with nil to is_a?
  normalizes case with nil to is_a?
+  normalizes case without when and else
  normalizes case without when and else
+  normalizes case without cond, when and else
  normalizes case without cond, when and else
+  normalizes case with many expressions in when
  normalizes case with many expressions in when
+  normalizes case with multiple expressions and comma
  normalizes case with multiple expressions and comma
+Crystal::Command::FlagsVisitor
+  different flags
  different flags
+  only macro
  only macro
+  unique flags
  unique flags
 Code gen: block
-  codegens bug with yield not_nil! that is never not nil
  codegens bug with yield not_nil! that is never not nil
-  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)��������������  codegens dispatch with block and break (2)��  codegens dispatch with block and break (2)
  codegens dispatch with block and break (2)
-  can call methods from block when yielder is an instance method
  can call methods from block when yielder is an instance method
-  breaks from while in function called from block
  breaks from while in function called from block
   codegens block bug with conditional next and unconditional break (2)
  codegens block bug with conditional next and unconditional break (2)
-  yields more exps than block arg, through splat
  yields more exps than block arg, through splat
-  return from block called from dispatch
  return from block called from dispatch
+  codegens method invocation on a object of a captured block with a type that was never instantiated
  codegens method invocation on a object of a captured block with a type that was never instantiated
+  dispatches with captured and non-captured block (#3969)
  dispatches with captured and non-captured block (#3969)
+  clears nilable var before inlining block method (#10087)
  clears nilable var before inlining block method (#10087)
+  can break without value from yielder that returns nilable (2)
  can break without value from yielder that returns nilable (2)
+  codegens block with nilable type with return (2)
  codegens block with nilable type with return (2)
+  codegens method invocation on a object of a captured block with a type that was never instantiated (2)
  codegens method invocation on a object of a captured block with a type that was never instantiated (2)
+  codegens call with block with call with arg that yields
  codegens call with block with call with arg that yields
+  
  
   codegens nested return
  codegens nested return
-  nexts in var assignment (#3364)
  nexts in var assignment (#3364)
-  allows using var as block arg with outer var
  allows using var as block arg with outer var
-  allows access to local variables
  allows access to local variables
-  yields inside yield (#682)
  yields inside yield (#682)
-  allows modifying yielded value (with variable)
  allows modifying yielded value (with variable)
-  returns from block with value  returns from block with value  returns from block with value  returns from block with value  returns from block with value��������  returns from block with value����  returns from block with value��  returns from block with value��  returns from block with value
  returns from block with value
+  codegens bug with yield not_nil! that is never not nil
  codegens bug with yield not_nil! that is never not nil
+  return from block called from dispatch
  return from block called from dispatch
+  uses splat in block argument
  uses splat in block argument
+  break block with yielder inside while  break block with yielder inside while  break block with yielder inside while  break block with yielder inside while  break block with yielder inside while  break block with yielder inside while  break block with yielder inside while  break block with yielder inside while  break block with yielder inside while
  break block with yielder inside while
+  break from block with value  break from block with value  break from block with value  break from block with value  break from block with value  break from block with value  break from block with value  break from block with value  break from block with value
  break from block with value
+  codegens block with union arg (2)
  codegens block with union arg (2)
+  break from block with value
  break from block with value
+  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)  codegens dispatch with block and break (2)
  codegens dispatch with block and break (2)
+  uses splat in block argument, many args
  uses splat in block argument, many args
+  it yields nil from another call
  it yields nil from another call
+  yields splat
  yields splat
+  returns from proc literal
  returns from proc literal
   codegens block with union with return
  codegens block with union with return
-  uses block splat argument with union types
  uses block splat argument with union types
-  return from block
  return from block
-  block with nilable type 2
  block with nilable type 2
-  does next from captured block
  does next from captured block
-  allows modifying yielded value (with literal)
  allows modifying yielded value (with literal)
-  doesn't codegen after while that always yields and breaks
  doesn't codegen after while that always yields and breaks
-  codegens block with return and yield and no return
  codegens block with return and yield and no return
-  union value of yielder function
  union value of yielder function
-  codegens block with nilable type with return (1)
  codegens block with nilable type with return (1)
+  codegens block call when argument type changes
  codegens block call when argument type changes
+  unpacks tuple but doesn't override local variables
  unpacks tuple but doesn't override local variables
+  codegens nested break
  codegens nested break
+  allows initialize with yield (#224)
  allows initialize with yield (#224)
+  uses block var with same name as local var
  uses block var with same name as local var
   (bug) doesn't set needs_value to true on every yield (#12442)
  (bug) doesn't set needs_value to true on every yield (#12442)
+  nexts in var assignment (#3364)
  nexts in var assignment (#3364)
+  auto-unpacks tuple
  auto-unpacks tuple
   call block from dispatch
  call block from dispatch
+  union value of yielder function
  union value of yielder function
+  uses block splat argument with union types
  uses block splat argument with union types
+  does next from captured block
  does next from captured block
+  executes yield expression if no arg is given for block
  executes yield expression if no arg is given for block
+  block with nilable type 2
  block with nilable type 2
+  codegens call with blocks of different type without args
  codegens call with blocks of different type without args
+  codegens block with union arg (1)
  codegens block with union arg (1)
+  allows modifying yielded value (with variable)
  allows modifying yielded value (with variable)
+  allow return from function called from yielder function
  allow return from function called from yielder function
+  pass self to yielder function
  pass self to yielder function
   return from yielder function (2)
  return from yielder function (2)
-  doesn't crash if yield exp has no type (#12670)
  doesn't crash if yield exp has no type (#12670)
-  codegens method invocation on a object of a captured block with a type that was never instantiated (2)
  codegens method invocation on a object of a captured block with a type that was never instantiated (2)
-  codegens bug with block and arg and var
  codegens bug with block and arg and var
-  codegens captured block that returns union, but proc only returns a single type
  codegens captured block that returns union, but proc only returns a single type
-  breaks in var assignment (#3364)
  breaks in var assignment (#3364)
-  return from yielder function
  return from yielder function
-  codegens block bug with conditional next and unconditional break (1)
  codegens block bug with conditional next and unconditional break (1)
-  can break without value from yielder that returns nilable (2)
  can break without value from yielder that returns nilable (2)
-  codegens method invocation on a object of a captured block with a type that was never instantiated
  codegens method invocation on a object of a captured block with a type that was never instantiated
-  codegens block with virtual type arg
  codegens block with virtual type arg
-  codegens while/break inside block
  codegens while/break inside block
-  return from block that always returns from function that always yields inside if block
  return from block that always returns from function that always yields inside if block
-  uses block inside array literal (bug)  uses block inside array literal (bug)  uses block inside array literal (bug)  uses block inside array literal (bug)  uses block inside array literal (bug)  uses block inside array literal (bug)������������  uses block inside array literal (bug)��  uses block inside array literal (bug)��  uses block inside array literal (bug)
  uses block inside array literal (bug)
-  break block with yielder inside while  break block with yielder inside while  break block with yielder inside while  break block with yielder inside while  break block with yielder inside while  break block with yielder inside while������������  break block with yielder inside while��  break block with yielder inside while��  break block with yielder inside while
  break block with yielder inside while
-  can use self inside a block called from dispatch
  can use self inside a block called from dispatch
-  nested yields
  nested yields
   break from block returns from yielder
  break from block returns from yielder
-  allow return from function called from yielder function
  allow return from function called from yielder function
-  can use instance methods from yielder function
  can use instance methods from yielder function
-  generate inline
  generate inline
-  codegens block call when argument type changes
  codegens block call when argument type changes
-  it yields nil from another call
  it yields nil from another call
-  dispatches with captured and non-captured block (#3969)
  dispatches with captured and non-captured block (#3969)
-  assigns yield to argument
  assigns yield to argument
-  pass arguments to yielder function
  pass arguments to yielder function
-  call block from dispatch and use local vars  call block from dispatch and use local vars  call block from dispatch and use local vars  call block from dispatch and use local vars  call block from dispatch and use local vars  call block from dispatch and use local vars  call block from dispatch and use local vars��������������  call block from dispatch and use local vars��  call block from dispatch and use local vars
  call block from dispatch and use local vars
-  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s����  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s����������  doesn't crash on untyped array to_s��  doesn't crash on untyped array to_s
  doesn't crash on untyped array to_s
-  yields splat
  yields splat
-  can set instance vars from yielder function
  can set instance vars from yielder function
   pass self and arguments to yielder function
  pass self and arguments to yielder function
-  codegens call with blocks of different type without args
  codegens call with blocks of different type without args
-  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)��  codegens dispatch with block and break (1)������������  codegens dispatch with block and break (1)��  codegens dispatch with block and break (1)
  codegens dispatch with block and break (1)
-  executes yield expression if no arg is given for block
  executes yield expression if no arg is given for block
-  codegens block with union arg (1)
  codegens block with union arg (1)
-  return from block that always returns from function that conditionally yields
  return from block that always returns from function that conditionally yields
-  uses splat in block argument, many args
  uses splat in block argument, many args
-  codegens block with multiple underscores (#3054)
  codegens block with multiple underscores (#3054)
+  can use self inside a block called from dispatch
  can use self inside a block called from dispatch
+  breaks from while in function called from block
  breaks from while in function called from block
+  can use instance methods from yielder function
  can use instance methods from yielder function
+  allows using var as block arg with outer var
  allows using var as block arg with outer var
+  codegens bug with block and arg and var
  codegens bug with block and arg and var
   break without value returns nil
  break without value returns nil
-  pass self to yielder function
  pass self to yielder function
-  break from block with value
  break from block with value
-  break with value from yielder that returns a nilable
  break with value from yielder that returns a nilable
-  codegens block with nilable type with return (2)
  codegens block with nilable type with return (2)
-  uses splat in block argument
  uses splat in block argument
+  doesn't crash if yield exp has no type (#12670)
  doesn't crash if yield exp has no type (#12670)
+  codegens block which always breaks but never enters (#494)
  codegens block which always breaks but never enters (#494)
+  yields more exps than block arg, through splat
  yields more exps than block arg, through splat
+  passes yield arguments
  passes yield arguments
+  codegens block with return and yield and no return
  codegens block with return and yield and no return
+  generate inline
  generate inline
+  codegens block bug with conditional next and unconditional break (4)
  codegens block bug with conditional next and unconditional break (4)
+  allows access to local variables
  allows access to local variables
   codegens block bug with conditional next and unconditional break (3)
  codegens block bug with conditional next and unconditional break (3)
-  codegens if with call with block (ssa issue)
  codegens if with call with block (ssa issue)
-  can use global constant
  can use global constant
-  codegens captured block with next inside yielded block (#2097)
  codegens captured block with next inside yielded block (#2097)
-  can access instance vars from yielder function
  can access instance vars from yielder function
+  codegens while/break inside block
  codegens while/break inside block
+  uses block inside array literal (bug)  uses block inside array literal (bug)  uses block inside array literal (bug)  uses block inside array literal (bug)  uses block inside array literal (bug)  uses block inside array literal (bug)  uses block inside array literal (bug)  uses block inside array literal (bug)  uses block inside array literal (bug)
  uses block inside array literal (bug)
+  codegens block bug with conditional next and unconditional break (1)
  codegens block bug with conditional next and unconditional break (1)
+  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)  codegens dispatch with block and break (1)
  codegens dispatch with block and break (1)
+  breaks in var assignment (#3364)
  breaks in var assignment (#3364)
+  doesn't codegen call if arg yields and always breaks
  doesn't codegen call if arg yields and always breaks
   doesn't crash on yield exp without a type (#8100)
  doesn't crash on yield exp without a type (#8100)
-  codegens block bug with conditional next and unconditional break (4)
  codegens block bug with conditional next and unconditional break (4)
-  clears nilable var before inlining block method (#10087)
  clears nilable var before inlining block method (#10087)
+  returns from block with value  returns from block with value  returns from block with value  returns from block with value  returns from block with value  returns from block with value  returns from block with value  returns from block with value  returns from block with value
  returns from block with value
+  can use global constant
  can use global constant
+  allows yield from dispatch call
  allows yield from dispatch call
+  return from block that always returns from function that conditionally yields
  return from block that always returns from function that conditionally yields
+  break with value from yielder that returns a nilable
  break with value from yielder that returns a nilable
+  can call methods from block when yielder is an instance method
  can call methods from block when yielder is an instance method
+  codegens block with virtual type arg
  codegens block with virtual type arg
+  codegens captured block that returns union, but proc only returns a single type
  codegens captured block that returns union, but proc only returns a single type
   block with nilable type
  block with nilable type
-  unpacks tuple but doesn't override local variables
  unpacks tuple but doesn't override local variables
-  uses block var with same name as local var
  uses block var with same name as local var
-  codegens nested break
  codegens nested break
-  passes yield arguments
  passes yield arguments
-  allows initialize with yield (#224)
  allows initialize with yield (#224)
+  doesn't codegen after while that always yields and breaks
  doesn't codegen after while that always yields and breaks
+  can access instance vars from yielder function
  can access instance vars from yielder function
+  pass arguments to yielder function
  pass arguments to yielder function
   can break without value from yielder that returns nilable (1)
  can break without value from yielder that returns nilable (1)
+  codegens block with multiple underscores (#3054)
  codegens block with multiple underscores (#3054)
+  can set instance vars from yielder function
  can set instance vars from yielder function
+  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s  doesn't crash on untyped array to_s
  doesn't crash on untyped array to_s
+  codegens if with call with block (ssa issue)
  codegens if with call with block (ssa issue)
+  yields inside yield (#682)
  yields inside yield (#682)
+  call block from dispatch and use local vars  call block from dispatch and use local vars  call block from dispatch and use local vars  call block from dispatch and use local vars  call block from dispatch and use local vars  call block from dispatch and use local vars  call block from dispatch and use local vars  call block from dispatch and use local vars  call block from dispatch and use local vars
  call block from dispatch and use local vars
+  return from yielder function
  return from yielder function
   returns void when called with block
  returns void when called with block
+  nested yields
  nested yields
+  return from block
  return from block
+  codegens block with nilable type with return (1)
  codegens block with nilable type with return (1)
+  allows modifying yielded value (with literal)
  allows modifying yielded value (with literal)
+  return from block that always returns from function that always yields inside if block
  return from block that always returns from function that always yields inside if block
+  codegens captured block with next inside yielded block (#2097)
  codegens captured block with next inside yielded block (#2097)
+  assigns yield to argument
  assigns yield to argument
   codegens block with repeated underscore and different types (#4711)
  codegens block with repeated underscore and different types (#4711)
-  codegens block which always breaks but never enters (#494)
  codegens block which always breaks but never enters (#494)
-  
  
-  codegens call with block with call with arg that yields
  codegens call with block with call with arg that yields
-  break from block with value  break from block with value  break from block with value  break from block with value  break from block with value  break from block with value������������  break from block with value��  break from block with value��  break from block with value
  break from block with value
-  auto-unpacks tuple
  auto-unpacks tuple
-  returns from proc literal
  returns from proc literal
-  allows yield from dispatch call
  allows yield from dispatch call
-  doesn't codegen call if arg yields and always breaks
  doesn't codegen call if arg yields and always breaks
-  codegens block with union arg (2)
  codegens block with union arg (2)
-Crystal::CrystalPath
-  finds "test_files/**"
  finds "test_files/**"
-  doesn't finds "test_files/missing_file.cr"
  doesn't finds "test_files/missing_file.cr"
-  doesn't finds "build/reproducible-path/crystal-1.14.0+dfsg/spec/compiler/crystal_path/crystal_path_spec.cr"
  doesn't finds "build/reproducible-path/crystal-1.14.0+dfsg/spec/compiler/crystal_path/crystal_path_spec.cr"
-  doesn't finds "../crystal_path/test_files/file_one"
  doesn't finds "../crystal_path/test_files/file_one"
-  includes 'lib' by default
  includes 'lib' by default
-  finds "other_test_files"
  finds "other_test_files"
-  finds "test_files/*"
  finds "test_files/*"
-  doesn't finds "../../src/file_three"
  doesn't finds "../../src/file_three"
-  finds "test_files/file_four"
  finds "test_files/file_four"
-  #each_file_expansion
-    ./foo
    ./foo
-    foo.cr
    foo.cr
-    foo/bar/baz
    foo/bar/baz
-    foo
    foo
-    foo.cr/bar
    foo.cr/bar
-    ./foo.cr
    ./foo.cr
-    ./foo/bar/baz
    ./foo/bar/baz
-    foo/bar
    foo/bar
-    ./foo/bar
    ./foo/bar
-    foo.cr/bar.cr
    foo.cr/bar.cr
-  finds "test_files/file_one"
  finds "test_files/file_one"
-  finds "foo.cr"
  finds "foo.cr"
-  finds "./file_two.cr"
  finds "./file_two.cr"
-  finds "./test_folder/file_three.cr"
  finds "./test_folder/file_three.cr"
-  doesn't finds "./crystal_path_spec"
  doesn't finds "./crystal_path_spec"
-  finds "test_files/file_one"
  finds "test_files/file_one"
-  finds "crystal_path_spec"
  finds "crystal_path_spec"
-  doesn't finds "test_folder/file_three.cr"
  doesn't finds "test_folder/file_three.cr"
-  finds "test_files/file_three"
  finds "test_files/file_three"
-  .expand_paths
  .expand_paths
-  doesn't finds "test_folder/*"
  doesn't finds "test_folder/*"
-  doesn't finds "file_two.cr"
  doesn't finds "file_two.cr"
-  finds "../test_folder"
  finds "../test_folder"
-  finds "test_files/file_one.cr"
  finds "test_files/file_one.cr"
-  finds "test_files/another"
  finds "test_files/another"
-  overrides path with environment variable
  overrides path with environment variable
-  finds "test_files/yet_another"
  finds "test_files/yet_another"
-  finds "test_files"
  finds "test_files"
-  finds "../**"
  finds "../**"
-  doesn't finds "./crystal_path_spec.cr"
  doesn't finds "./crystal_path_spec.cr"
-  finds "./test_folder/*"
  finds "./test_folder/*"
-Semantic: macro overload
-  doesn't overwrite last macro definition if named args differs
  doesn't overwrite last macro definition if named args differs
+Crystal::Formatter
+  formats "begin\n1\nrescue   ex\n3\nend"
  formats "begin\n1\nrescue   ex\n3\nend"
+  formats "foo do\n  [foo <<-X\n  bar\n  X\n  ]\nend"
  formats "foo do\n  [foo <<-X\n  bar\n  X\n  ]\nend"
+  formats "1.=== do\nend"
  formats "1.=== do\nend"
+  formats "macro foo\n  {% if 1 %} 2 {% else %} 3 {% end %}\nend"
  formats "macro foo\n  {% if 1 %} 2 {% else %} 3 {% end %}\nend"
+  formats "if 1\nelse\n2\nend\n3"
  formats "if 1\nelse\n2\nend\n3"
+  formats "case  1 \n when 2 then \n 3 \n end"
  formats "case  1 \n when 2 then \n 3 \n end"
+  formats "next  *1"
  formats "next  *1"
+  formats "enum Foo\nA  \nend"
  formats "enum Foo\nA  \nend"
+  formats "foo\n  .foo1(bar\n    .bar1\n    .bar2)"
  formats "foo\n  .foo1(bar\n    .bar1\n    .bar2)"
+  formats "a = begin\n1\n2\nend"
  formats "a = begin\n1\n2\nend"
+  formats "x  :   Int32[ 8 ]"
  formats "x  :   Int32[ 8 ]"
+  formats "getter foo : Int32 # comment\n\ndef foo\nend"
  formats "getter foo : Int32 # comment\n\ndef foo\nend"
+  formats ":|"
  formats ":|"
+  formats "a+1"
  formats "a+1"
+  formats "%i(one   two  three)"
  formats "%i(one   two  three)"
+  formats "begin\n  #hola\n  1\nend\n"
  formats "begin\n  #hola\n  1\nend\n"
+  formats "\"foo \#{ 1  +  2 }\""
  formats "\"foo \#{ 1  +  2 }\""
+  formats "def foo(\n  a,\n  b,\n)\nend"
  formats "def foo(\n  a,\n  b,\n)\nend"
+  formats "if 1\n  [\n    1,\n  ].none?\nend"
  formats "if 1\n  [\n    1,\n  ].none?\nend"
+  formats "enum Foo\nend"
  formats "enum Foo\nend"
+  formats "long_variable_name = [\n  {\n    :foo => 1,\n  },\n  {\n    :bar => 2,\n  },\n]"
  formats "long_variable_name = [\n  {\n    :foo => 1,\n  },\n  {\n    :bar => 2,\n  },\n]"
+  formats "1.>=(2) { 3 }"
  formats "1.>=(2) { 3 }"
+  formats "def foo(x)\n  {% if true %}\n    \\{% if true %}\n      x = 1\n    \\{% else %}\n      x = 2\n    \\{% end %}\n    \\{% for x in y %}\n      x = 1\n    \\{% end %}\n    \\{{x}}\n    \\{% x %}\n  {% end %}\nend"
  formats "def foo(x)\n  {% if true %}\n    \\{% if true %}\n      x = 1\n    \\{% else %}\n      x = 2\n    \\{% end %}\n    \\{% for x in y %}\n      x = 1\n    \\{% end %}\n    \\{{x}}\n    \\{% x %}\n  {% end %}\nend"
+  formats " <<-EOF\n 1\nEOF"
  formats " <<-EOF\n 1\nEOF"
+  formats "unless a\n    # hello\n 2\nend"
  formats "unless a\n    # hello\n 2\nend"
+  formats "def foo(x)\n  case 1\n  when self // 2\n    3\n  end\nend"
  formats "def foo(x)\n  case 1\n  when self // 2\n    3\n  end\nend"
+  formats "/foo/imx"
  formats "/foo/imx"
+  formats "if 1\n  node.is_a?(T)\nend"
  formats "if 1\n  node.is_a?(T)\nend"
+  formats "def foo : A(B)\n  nil\nend"
  formats "def foo : A(B)\n  nil\nend"
+  formats "foo : (F(A)) | D"
  formats "foo : (F(A)) | D"
+  formats "case 1\nwhen 1, # 1\n     2, # 2\n     3  # 3\n  1\nend"
  formats "case 1\nwhen 1, # 1\n     2, # 2\n     3  # 3\n  1\nend"
+  formats "class Foo; 1; end"
  formats "class Foo; 1; end"
+  formats "a = if 1\n2\nelsif 3\n4\nend"
  formats "a = if 1\n2\nelsif 3\n4\nend"
+  formats "foo(\n  a: 1,\n  b: 2,\n  )\n"
  formats "foo(\n  a: 1,\n  b: 2,\n  )\n"
+  formats "typeof( 1, 2, 3 )"
  formats "typeof( 1, 2, 3 )"
+  formats "instance_alignof( Int32 )"
  formats "instance_alignof( Int32 )"
+  formats "lib Foo\nfun foo()  :  Int32\nend"
  formats "lib Foo\nfun foo()  :  Int32\nend"
+  formats "def foo\n# hello\n1\nend"
  formats "def foo\n# hello\n1\nend"
+  formats "def foo(&: Int32)\nend"
  formats "def foo(&: Int32)\nend"
+  formats "asm(\"nop\" : \"a\"(0), \"b\"(1) )"
  formats "asm(\"nop\" : \"a\"(0), \"b\"(1) )"
+  formats "macro foo( x , y )\nend"
  formats "macro foo( x , y )\nend"
+  formats "def foo(@[MyAnn] &block); end"
  formats "def foo(@[MyAnn] &block); end"
+  formats "foo do\n  # bar\nend"
  formats "foo do\n  # bar\nend"
+  formats "foo({\n  1 => 2,\n  3 => {\n    4 => 5,\n  },\n})"
  formats "foo({\n  1 => 2,\n  3 => {\n    4 => 5,\n  },\n})"
+  formats "if 1\n2\nelsif\n3\n4\nelsif 5\n6\nend"
  formats "if 1\n2\nelsif\n3\n4\nelsif 5\n6\nend"
+  formats "begin\n  query = <<-HEREDOC\n    foo\n  HEREDOC\nend"
  formats "begin\n  query = <<-HEREDOC\n    foo\n  HEREDOC\nend"
+  formats "foo(  )"
  formats "foo(  )"
+  formats "%[hello]"
  formats "%[hello]"
+  formats "lib Bar\n  enum Foo\n    A\n  end\nend"
  formats "lib Bar\n  enum Foo\n    A\n  end\nend"
+  formats "def //(x)\n  1\nend"
  formats "def //(x)\n  1\nend"
+  formats "if 1\n# nothing\nend"
  formats "if 1\n# nothing\nend"
+  formats "\"foo \#{ 1 } \#{ __DIR__ }\""
  formats "\"foo \#{ 1 } \#{ __DIR__ }\""
+  formats "macro flags\n  {% if 1 %}\\\n  {% end %}\\\nend"
  formats "macro flags\n  {% if 1 %}\\\n  {% end %}\\\nend"
+  formats "a &.b.as C"
  formats "a &.b.as C"
+  formats "0x1234_u32"
  formats "0x1234_u32"
+  formats "if a\nif b\n3\nelse\n4\nend\nend"
  formats "if a\nif b\n3\nelse\n4\nend\nend"
+  formats "foo 1, do\n2\nend"
  formats "foo 1, do\n2\nend"
+  formats "break {1, 2}, {3, 4}"
  formats "break {1, 2}, {3, 4}"
+  formats "1  # foo\n2  # bar"
  formats "1  # foo\n2  # bar"
+  formats "if 1\n  ->{ 1 }\nend"
  formats "if 1\n  ->{ 1 }\nend"
+  formats "yield  1  , *2"
  formats "yield  1  , *2"
+  formats "$1?"
  formats "$1?"
+  formats "@[ Foo ]\ndef foo\nend"
  formats "@[ Foo ]\ndef foo\nend"
+  formats "class Foo\n@x  : Int32\nend"
  formats "class Foo\n@x  : Int32\nend"
+  formats "x  :   (A -> B)"
  formats "x  :   (A -> B)"
+  formats "def foo(*y, **z)\nend"
  formats "def foo(*y, **z)\nend"
+  formats "__FILE__"
  formats "__FILE__"
+  formats "foo(\n  1,\n  &.foo\n)"
  formats "foo(\n  1,\n  &.foo\n)"
+  formats "1 if nil?\na.b + c"
  formats "1 if nil?\na.b + c"
+  formats "enum Baz\nA = 1\nFOO\n\nEX = 3\nend"
  formats "enum Baz\nA = 1\nFOO\n\nEX = 3\nend"
+  formats "foo &.@bar"
  formats "foo &.@bar"
+  formats "::NamedTuple()"
  formats "::NamedTuple()"
+  formats "asm(\"nop\")"
  formats "asm(\"nop\")"
+  formats "foo &.bar.is_a?(Baz)"
  formats "foo &.bar.is_a?(Baz)"
+  formats "case 1\nwhen a; 2\nelse; ; b\nend"
  formats "case 1\nwhen a; 2\nelse; ; b\nend"
+  formats "/\#{1}/imx"
  formats "/\#{1}/imx"
+  formats "foo(1,\n2,\n)"
  formats "foo(1,\n2,\n)"
+  formats "def foo(x)\n  {% if true %}\n    x = x + 2\n  {% end %}\nend"
  formats "def foo(x)\n  {% if true %}\n    x = x + 2\n  {% end %}\nend"
+  formats "class   Foo  < \n  Bar \n\n 1  \n\nend"
  formats "class   Foo  < \n  Bar \n\n 1  \n\nend"
+  formats "Foo(  )"
  formats "Foo(  )"
+  formats "a[b] ||= c"
  formats "a[b] ||= c"
+  formats "begin\nend\n\n# a\n"
  formats "begin\nend\n\n# a\n"
+  formats "a(&.b.c.as(C))"
  formats "a(&.b.c.as(C))"
+  formats "macro [](x)\nend"
  formats "macro [](x)\nend"
+  formats "[\n  a(), # b\n]"
  formats "[\n  a(), # b\n]"
+  formats "asm(\"a\" :: : : \"volatile\")"
  formats "asm(\"a\" :: : : \"volatile\")"
+  formats "return  *1  ,2"
  formats "return  *1  ,2"
+  formats "1..\n2"
  formats "1..\n2"
+  formats "alignof( Int32 )"
  formats "alignof( Int32 )"
+  formats "ary.size = (1).to_i"
  formats "ary.size = (1).to_i"
+  formats "alias  Foo  =   Bar"
  formats "alias  Foo  =   Bar"
+  formats "def a\n  b(\n    1, # x\n    # y\n  )\nend"
  formats "def a\n  b(\n    1, # x\n    # y\n  )\nend"
+  formats "Foo( A , 1 )"
  formats "Foo( A , 1 )"
+  formats "class Foo\n  def foo\n    # nothing\n  end\nend"
  formats "class Foo\n  def foo\n    # nothing\n  end\nend"
+  formats "case  1 \n when 2 ; 3 \n when 4 ; 5\nend"
  formats "case  1 \n when 2 ; 3 \n when 4 ; 5\nend"
+  formats "1 // 2"
  formats "1 // 2"
+  formats "def foo(**b, # comment\n        &block)\nend"
  formats "def foo(**b, # comment\n        &block)\nend"
+  formats " .. 2"
  formats " .. 2"
+  formats "foo.bar\n.baz"
  formats "foo.bar\n.baz"
+  formats "module Foo; 1; end"
  formats "module Foo; 1; end"
+  formats "asm(\"nop\" : \"a\"(0) : \"b\"(1) )"
  formats "asm(\"nop\" : \"a\"(0) : \"b\"(1) )"
+  formats "1\n2  \n  # foo"
  formats "1\n2  \n  # foo"
+  formats "\n   # hello\n\n1"
  formats "\n   # hello\n\n1"
+  formats "$?"
  formats "$?"
+  formats "macro foo\n  {% unless 1 %} 2 {% end %}\nend"
  formats "macro foo\n  {% unless 1 %} 2 {% end %}\nend"
+  formats "\"\#{\n  foo = 1}\""
  formats "\"\#{\n  foo = 1}\""
+  formats "next"
  formats "next"
+  formats "if 1\n  {% for x in y %} {% end %}\nend"
  formats "if 1\n  {% for x in y %} {% end %}\nend"
+  formats "case 1\nend"
  formats "case 1\nend"
+  formats "unless a\n2\nend"
  formats "unless a\n2\nend"
+  formats "%i{one(   two(  three)}"
  formats "%i{one(   two(  three)}"
+  formats "{% if flag?(:freebsd) %}\n  1 + 2\n{% end %}\n\ncase x\nwhen 1234 then 1\nelse           x\nend"
  formats "{% if flag?(:freebsd) %}\n  1 + 2\n{% end %}\n\ncase x\nwhen 1234 then 1\nelse           x\nend"
+  formats "foo(\n  1, 2, &block)"
  formats "foo(\n  1, 2, &block)"
+  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n  @[MyAnn] baz\n); end"
  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n  @[MyAnn] baz\n); end"
+  formats "def foo\n  1\n  #\nrescue\nend"
  formats "def foo\n  1\n  #\nrescue\nend"
+  formats "asm(\n# foo\n\"nop\"\n# bar\n)"
  formats "asm(\n# foo\n\"nop\"\n# bar\n)"
+  formats "`foo \#{ bar }`"
  formats "`foo \#{ bar }`"
+  formats "{% verbatim do %}{{1}} + {{2}}{% end %}"
  formats "{% verbatim do %}{{1}} + {{2}}{% end %}"
+  formats "::Foo:: Bar"
  formats "::Foo:: Bar"
+  formats "def %(x)\n  1\nend"
  formats "def %(x)\n  1\nend"
+  formats "def a\n  {\n    1, # x\n    # y\n  }\nend"
  formats "def a\n  {\n    1, # x\n    # y\n  }\nend"
+  formats "def   foo (\nx ,\n y )  \n  end"
  formats "def   foo (\nx ,\n y )  \n  end"
+  formats "foo &.as?(T)"
  formats "foo &.as?(T)"
+  formats "foo({% verbatim do %}{{1}} + {{2}}{% end %})"
  formats "foo({% verbatim do %}{{1}} + {{2}}{% end %})"
+  adds trailing comma to def multi-line normal, splat, and double splat parameters
+    formats "macro foo(\n  a,\n  *b\n)\nend"
    formats "macro foo(\n  a,\n  *b\n)\nend"
+    formats "def foo(\n  a,\n  b\n)\nend"
    formats "def foo(\n  a,\n  b\n)\nend"
+    formats "def foo(\n  a,\n  *b\n)\nend"
    formats "def foo(\n  a,\n  *b\n)\nend"
+    formats "def foo(\n  a,\n  @[Ann] b\n)\nend"
    formats "def foo(\n  a,\n  @[Ann] b\n)\nend"
+    formats "def foo(\n  a, # Foo\n  b # Bar\n)\nend"
    formats "def foo(\n  a, # Foo\n  b # Bar\n)\nend"
+    formats "def foo(\n  a,\n  **b\n)\nend"
    formats "def foo(\n  a,\n  **b\n)\nend"
+    formats "def foo(\n  a, b\n)\nend"
    formats "def foo(\n  a, b\n)\nend"
+    formats "fun foo(\n  a : Int32,\n  ...\n)\nend"
    formats "fun foo(\n  a : Int32,\n  ...\n)\nend"
+    formats "def foo(\n  a,\n  &block\n)\nend"
    formats "def foo(\n  a,\n  &block\n)\nend"
+    formats "def foo(a, *args, &block)\nend"
    formats "def foo(a, *args, &block)\nend"
+    formats "def foo(\n  a : Int32,\n  b : Int32\n)\nend"
    formats "def foo(\n  a : Int32,\n  b : Int32\n)\nend"
+    formats "def foo(a, *args)\nend"
    formats "def foo(a, *args)\nend"
+    formats "def foo(\n  a : Int32,\n  b : Int32 = 1\n)\nend"
    formats "def foo(\n  a : Int32,\n  b : Int32 = 1\n)\nend"
+    formats "macro foo(\n  a,\n  b\n)\nend"
    formats "macro foo(\n  a,\n  b\n)\nend"
+    formats "def foo(a, b)\nend"
    formats "def foo(a, b)\nend"
+    formats "def foo(\n  a,\n)\nend"
    formats "def foo(\n  a,\n)\nend"
+    formats "def foo(\n  a, b,\n  c, d\n)\nend"
    formats "def foo(\n  a, b,\n  c, d\n)\nend"
+    formats "def foo(a, **kwargs, &block)\nend"
    formats "def foo(a, **kwargs, &block)\nend"
+    formats "def foo(a, **kwargs)\nend"
    formats "def foo(a, **kwargs)\nend"
+    formats "def foo(a)\nend"
    formats "def foo(a)\nend"
+    formats "def foo(\n  a,\n  @[Ann]\n  b\n)\nend"
    formats "def foo(\n  a,\n  @[Ann]\n  b\n)\nend"
+    formats "def foo(\n  a,\n  b c\n)\nend"
    formats "def foo(\n  a,\n  b c\n)\nend"
+    formats "def foo(a, &block)\nend"
    formats "def foo(a, &block)\nend"
+    formats "fun foo(\n  a : Int32,\n  b : Int32\n)\nend"
    formats "fun foo(\n  a : Int32,\n  b : Int32\n)\nend"
+  formats "\"1\#{\"\#{\"2\"}\"}3\#{\"4\"}5\""
  formats "\"1\#{\"\#{\"2\"}\"}3\#{\"4\"}5\""
+  formats "asm(\"nop\"\n: \"a\"(0) )"
  formats "asm(\"nop\"\n: \"a\"(0) )"
+  formats "  <<-HTML\n   foo\n  HTML"
  formats "  <<-HTML\n   foo\n  HTML"
+  formats " * a = 1 "
  formats " * a = 1 "
+  formats "foo &.[]?(  1, 2  )"
  formats "foo &.[]?(  1, 2  )"
+  formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n        : \"f\",\n          \"g\")"
  formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n        : \"f\",\n          \"g\")"
+  formats "case\nend"
  formats "case\nend"
+  formats "foo ((1) ? 2 : 3)"
  formats "foo ((1) ? 2 : 3)"
+  formats "if 1\n2 && 3\nend"
  formats "if 1\n2 && 3\nend"
+  formats "Foo:: Bar"
  formats "Foo:: Bar"
+  formats "abstract  class Foo\nend"
  formats "abstract  class Foo\nend"
+  formats "def foo\n  1 #\nrescue\nend"
  formats "def foo\n  1 #\nrescue\nend"
+  formats "{% if true %}\n  <<-FOO\n    hello  \n  FOO\n{% end %}"
  formats "{% if true %}\n  <<-FOO\n    hello  \n  FOO\n{% end %}"
+  formats "1.==(2) { 3 }"
  formats "1.==(2) { 3 }"
+  formats "foo[bar.baz]\n  .qux"
  formats "foo[bar.baz]\n  .qux"
+  formats "select   \n when  foo  ;  2 \n end"
  formats "select   \n when  foo  ;  2 \n end"
+  formats "foo \\\n  1,\n  2\n\nbar \\\n  foo: 1,\n  bar: 2"
  formats "foo \\\n  1,\n  2\n\nbar \\\n  foo: 1,\n  bar: 2"
+  formats "[\n  1, 2, # foo\n  3, 4,\n]"
  formats "[\n  1, 2, # foo\n  3, 4,\n]"
+  formats "long_variable_name = [\n  {\n    :foo => 1,\n  }, {\n    :bar => 2,\n  },\n]"
  formats "long_variable_name = [\n  {\n    :foo => 1,\n  }, {\n    :bar => 2,\n  },\n]"
+  formats "->Foo.foo="
  formats "->Foo.foo="
+  formats "a = case 1\nwhen 2\n3\nelse\n4\nend"
  formats "a = case 1\nwhen 2\n3\nelse\n4\nend"
+  formats "foo[ 1,  2 ]?"
  formats "foo[ 1,  2 ]?"
+  formats "def foo\n  1\n  2\nrescue IO\n  1\nend"
  formats "def foo\n  1\n  2\nrescue IO\n  1\nend"
+  formats "next {1, 2}, 3"
  formats "next {1, 2}, 3"
+  formats "foo bar, \\\nbaz"
  formats "foo bar, \\\nbaz"
+  formats "1\n\n\n2"
  formats "1\n\n\n2"
+  formats "foo \"bar\": 1, \"baz qux\": 2"
  formats "foo \"bar\": 1, \"baz qux\": 2"
+  formats "foo.[]"
  formats "foo.[]"
+  formats "macro foo\n  %foo\nend"
  formats "macro foo\n  %foo\nend"
+  formats "case  1 \n when 2 then 3 \n end"
  formats "case  1 \n when 2 then 3 \n end"
+  formats "[\n  [\n    1,\n  ], [\n    2,\n  ], [\n    3,\n  ],\n]"
  formats "[\n  [\n    1,\n  ], [\n    2,\n  ], [\n    3,\n  ],\n]"
+  formats "[\n  a(),\n]"
  formats "[\n  a(),\n]"
+  formats "{ {1, 2, 3} => 4 }"
  formats "{ {1, 2, 3} => 4 }"
+  formats "foo = 1\n->foo.bar(Int32)"
  formats "foo = 1\n->foo.bar(Int32)"
+  formats "enum Foo : Int32\nA = 1\ndef foo\n1\nend\nend"
  formats "enum Foo : Int32\nA = 1\ndef foo\n1\nend\nend"
+  formats "module Foo\n  1 # bar\nend\n\nmodule Foo\n  1\n  # bar\nend\n\nmodule Foo\n  1\n\n  # bar\nend\n\nmodule Foo\n  1\n  2\n  # bar\nend\n\nmodule Foo\n  1\n  2\n\n  # bar\nend\n\nif 1\n  1\n  # bar\nend\n\nif 1\n  1\n\n  # bar\nend\n\n1\n2\n# foo\n\n1\n2\n\n# foo\n"
  formats "module Foo\n  1 # bar\nend\n\nmodule Foo\n  1\n  # bar\nend\n\nmodule Foo\n  1\n\n  # bar\nend\n\nmodule Foo\n  1\n  2\n  # bar\nend\n\nmodule Foo\n  1\n  2\n\n  # bar\nend\n\nif 1\n  1\n  # bar\nend\n\nif 1\n  1\n\n  # bar\nend\n\n1\n2\n# foo\n\n1\n2\n\n# foo\n"
+  formats "{ # foo\n  1 => 2,\n}"
  formats "{ # foo\n  1 => 2,\n}"
+  formats "->foo!"
  formats "->foo!"
+  formats "(\n  a = 1\n  a\n)"
  formats "(\n  a = 1\n  a\n)"
+  formats "case\nend"
  formats "case\nend"
+  formats "begin\n  / /\nend"
  formats "begin\n  / /\nend"
+  formats "<<-HTML\n  \#{__FILE__}\n  HTML"
  formats "<<-HTML\n  \#{__FILE__}\n  HTML"
+  formats "foo(\n  <<-HERE,\n  hello\n  HERE\n  1,\n)"
  formats "foo(\n  <<-HERE,\n  hello\n  HERE\n  1,\n)"
+  formats "case  1 \n when 2 \n 3 \n else 4 \n end"
  formats "case  1 \n when 2 \n 3 \n else 4 \n end"
+  formats "x, y = <<-FOO, <<-BAR\n  hello\n  FOO\n  world\n  BAR"
  formats "x, y = <<-FOO, <<-BAR\n  hello\n  FOO\n  world\n  BAR"
+  formats "def x(@y = ->(z) {})\nend"
  formats "def x(@y = ->(z) {})\nend"
+  formats "@[Foo( 1, 2 )]"
  formats "@[Foo( 1, 2 )]"
+  formats "{\n  variables => true,\n  query     => <<-HEREDOC,\n    foo\n  HEREDOC\n  foo => true,\n}"
  formats "{\n  variables => true,\n  query     => <<-HEREDOC,\n    foo\n  HEREDOC\n  foo => true,\n}"
+  formats "  {% begin %} 2 {% end %}"
  formats "  {% begin %} 2 {% end %}"
+  formats "def foo\n1\nend"
  formats "def foo\n1\nend"
+  formats "->do\nx\nend"
  formats "->do\nx\nend"
+  formats "return  1 ,  2"
  formats "return  1 ,  2"
+  formats "def foo\n  {% for x in y %}\n    foo  +  bar\n  {% end %}\nend"
  formats "def foo\n  {% for x in y %}\n    foo  +  bar\n  {% end %}\nend"
+  formats "asm(\"nop\" : : )"
  formats "asm(\"nop\" : : )"
+  formats "macro foo\n  {{x}}  <<-FOO\n    hello  \n  FOO\nend"
  formats "macro foo\n  {{x}}  <<-FOO\n    hello  \n  FOO\nend"
+  formats "foo(\n  1,\n  a: 1,\n  b: 2,\n)"
  formats "foo(\n  1,\n  a: 1,\n  b: 2,\n)"
+  formats "{\n  \"a\" => 1, \"b\" => 2,\n  \"foo\" => 3, \"bar\" => 4,\n  \"coconio\" => 5, \"lala\" => 6,\n}\n"
  formats "{\n  \"a\" => 1, \"b\" => 2,\n  \"foo\" => 3, \"bar\" => 4,\n  \"coconio\" => 5, \"lala\" => 6,\n}\n"
+  formats "1 \\\nrescue 2"
  formats "1 \\\nrescue 2"
+  formats "def foo(\n\n#foo\nx,\n\n#bar\nz\n)\nend"
  formats "def foo(\n\n#foo\nx,\n\n#bar\nz\n)\nend"
+  formats "return( *1  , *2 )"
  formats "return( *1  , *2 )"
+  formats "{ * 1 * 2,\n*\n3, 4 }"
  formats "{ * 1 * 2,\n*\n3, 4 }"
+  formats "foo   &.is_a?(T)"
  formats "foo   &.is_a?(T)"
+  formats "x : { {A, B}, {C, D} }"
  formats "x : { {A, B}, {C, D} }"
+  formats "\"\#{\n  foo = 1\n}\""
  formats "\"\#{\n  foo = 1\n}\""
+  formats "foo { |x| (x).a }"
  formats "foo { |x| (x).a }"
+  formats "bar = foo(->{\n  1 + 2\n})"
  formats "bar = foo(->{\n  1 + 2\n})"
+  formats "def   foo(x   :  self ?) \n  end"
  formats "def   foo(x   :  self ?) \n  end"
+  formats "def foo( x , * y )\nend"
  formats "def foo( x , * y )\nend"
+  formats "macro foo\n    1  +  2 \n    end"
  formats "macro foo\n    1  +  2 \n    end"
+  formats "{ A: 1 }\n"
  formats "{ A: 1 }\n"
+  formats "%r(foo \#{ bar })"
  formats "%r(foo \#{ bar })"
+  formats "foo(\n  1, 2)"
  formats "foo(\n  1, 2)"
+  formats "1   ;    2"
  formats "1   ;    2"
+  formats "$? = 1"
  formats "$? = 1"
+  formats "1.<= do\nend"
  formats "1.<= do\nend"
+  formats "'a'"
  formats "'a'"
+  formats "{ \"foo\" =>  1 }"
  formats "{ \"foo\" =>  1 }"
+  formats "\"foo\" \\\n \"bar\" \\\n \"baz\""
  formats "\"foo\" \\\n \"bar\" \\\n \"baz\""
+  formats ":&+"
  formats ":&+"
+  formats "alias X = (A, B) ->\nbar : C"
  formats "alias X = (A, B) ->\nbar : C"
+  formats "macro flags\n  {% if 1 %}{{1}}a{{2}}{% end %}\\\nend"
  formats "macro flags\n  {% if 1 %}{{1}}a{{2}}{% end %}\\\nend"
+  formats "false"
  formats "false"
+  formats "<<-FOO\nbarfoobar\nFOO"
  formats "<<-FOO\nbarfoobar\nFOO"
+  formats "1 \\\nif 2"
  formats "1 \\\nif 2"
+  formats "@[Foo::Bar]"
  formats "@[Foo::Bar]"
+  formats "asm(\"a\" ::: \"a\"\n        : \"volatile\",\n          \"intel\")"
  formats "asm(\"a\" ::: \"a\"\n        : \"volatile\",\n          \"intel\")"
+  formats "nil"
  formats "nil"
+  formats "x  :   Int32*"
  formats "x  :   Int32*"
+  formats "if 1;\n2;\nelse;\n3;\nend"
  formats "if 1;\n2;\nelse;\n3;\nend"
+  formats "1\nyield\n2"
  formats "1\nyield\n2"
+  formats "a(&.b.c.as C)"
  formats "a(&.b.c.as C)"
+  formats "1 / 2"
  formats "1 / 2"
+  formats "+ 1"
  formats "+ 1"
+  formats "->@@foo.foo="
  formats "->@@foo.foo="
+  formats ":&*"
  formats ":&*"
+  formats "private def foo\nend\nprivate def bar\nend"
  formats "private def foo\nend\nprivate def bar\nend"
+  formats "foo[&.bar] = 1"
  formats "foo[&.bar] = 1"
+  formats "foo(bar(\n  1,\n  baz(\n    2,\n    3,\n  )\n))"
  formats "foo(bar(\n  1,\n  baz(\n    2,\n    3,\n  )\n))"
+  formats "-> : Int32? {}"
  formats "-> : Int32? {}"
+  formats "a[1] , b[2] = 1  ,  2"
  formats "a[1] , b[2] = 1  ,  2"
+  formats "foo.as?(T).bar"
  formats "foo.as?(T).bar"
+  formats "foo : (Array(String)?) | String"
  formats "foo : (Array(String)?) | String"
+  formats "def foo(@[AnnOne]   @[AnnTwo]   &  ); end"
  formats "def foo(@[AnnOne]   @[AnnTwo]   &  ); end"
+  formats "def foo(\n  foo,\n\n  @[MyAnn]\n  @[MyAnn]\n  & : Nil -> Nil\n); end"
  formats "def foo(\n  foo,\n\n  @[MyAnn]\n  @[MyAnn]\n  & : Nil -> Nil\n); end"
+  formats "{ foo:  1 }"
  formats "{ foo:  1 }"
+  formats "break 1, {2, 3}"
  formats "break 1, {2, 3}"
+  formats "foo(&.@bar)"
  formats "foo(&.@bar)"
+  formats "SomeLib.UppercasedFunCall 1, 2"
  formats "SomeLib.UppercasedFunCall 1, 2"
+  formats "enum Foo\n  {% begin %}\n    A\n    B\n    C\n  {% end %}\nend"
  formats "enum Foo\n  {% begin %}\n    A\n    B\n    C\n  {% end %}\nend"
+  formats "{ {1}.foo, 2 }"
  formats "{ {1}.foo, 2 }"
+  formats "lib Foo\n  fun foo =\n\n\n    bar : Void\nend"
  formats "lib Foo\n  fun foo =\n\n\n    bar : Void\nend"
+  formats "begin\n  array[\n    0, # Zero\n  ]\nend"
  formats "begin\n  array[\n    0, # Zero\n  ]\nend"
+  formats "next( 1 )"
  formats "next( 1 )"
+  formats "a &.b.as(C)"
  formats "a &.b.as(C)"
+  formats "@[ Foo(foo: 1) ]\ndef foo\nend"
  formats "@[ Foo(foo: 1) ]\ndef foo\nend"
+  formats "foo  1"
  formats "foo  1"
+  adds `&` to yielding methods that don't have a block parameter (#8764)
+    formats "def foo # bar\n  yield\nend"
    formats "def foo # bar\n  yield\nend"
+    formats "def foo(\nx, y)\n  yield\nend"
    formats "def foo(\nx, y)\n  yield\nend"
+    formats "def foo(x,\n)\n  yield\nend"
    formats "def foo(x,\n)\n  yield\nend"
+    formats "def foo(\nx,\n)\n  yield\nend"
    formats "def foo(\nx,\n)\n  yield\nend"
+    formats "def foo(x\n)\n  yield\nend"
    formats "def foo(x\n)\n  yield\nend"
+    formats "def foo(x,\ny,)\n  yield\nend"
    formats "def foo(x,\ny,)\n  yield\nend"
+    formats "def foo(x)\n  yield\nend"
    formats "def foo(x)\n  yield\nend"
+    formats "def foo()\n  yield\nend"
    formats "def foo()\n  yield\nend"
+    formats "def foo(a, **b)\n  yield\nend"
    formats "def foo(a, **b)\n  yield\nend"
+    formats "macro f\n  yield\n  {{ yield }}\nend"
    formats "macro f\n  yield\n  {{ yield }}\nend"
+    formats "def foo(\n)\n  yield\nend"
    formats "def foo(\n)\n  yield\nend"
+    formats "def foo(\nx,\ny)\n  yield\nend"
    formats "def foo(\nx,\ny)\n  yield\nend"
+    formats "def foo(x,\ny)\n  yield\nend"
    formats "def foo(x,\ny)\n  yield\nend"
+    formats "def foo(\nx)\n  yield\nend"
    formats "def foo(\nx)\n  yield\nend"
+    formats "def foo\n  yield\nend"
    formats "def foo\n  yield\nend"
+    formats "def foo(x ,)\n  yield\nend"
    formats "def foo(x ,)\n  yield\nend"
+  formats "1 ensure 2"
  formats "1 ensure 2"
+  formats "x  :   {A, B}"
  formats "x  :   {A, B}"
+  formats "{% if 1 %}\n  2\n{% end %}\ndef foo\nend"
  formats "{% if 1 %}\n  2\n{% end %}\ndef foo\nend"
+  formats "foo.bar(1) # comment\n  .baz"
  formats "foo.bar(1) # comment\n  .baz"
+  formats "foo.bar / 2\n"
  formats "foo.bar / 2\n"
+  formats "foo([\n  1,\n  2,\n  3,\n])"
  formats "foo([\n  1,\n  2,\n  3,\n])"
+  formats "macro foo()\n  {% if 1 %} 2 {% end %}\nend"
  formats "macro foo()\n  {% if 1 %} 2 {% end %}\nend"
+  formats "@@a"
  formats "@@a"
+  formats "if 1\n  {{1 + 2}}\nend"
  formats "if 1\n  {{1 + 2}}\nend"
+  formats "page= <<-HTML\n  foo\nHTML"
  formats "page= <<-HTML\n  foo\nHTML"
+  formats "def foo(\"bar baz\" qux)\nend"
  formats "def foo(\"bar baz\" qux)\nend"
+  formats "def   foo (  x  :  Foo.class )  \n  end"
  formats "def   foo (  x  :  Foo.class )  \n  end"
+  formats "[\n]   of   \n   Foo  "
  formats "[\n]   of   \n   Foo  "
+  formats "def foo(\n   @[MyAnn]   bar\n); end"
  formats "def foo(\n   @[MyAnn]   bar\n); end"
+  formats "def foo(a, **b : Int32)\nend"
  formats "def foo(a, **b : Int32)\nend"
+  formats "->@foo.foo"
  formats "->@foo.foo"
+  formats "foo.bar  &.baz( 1 , 2 )"
  formats "foo.bar  &.baz( 1 , 2 )"
+  formats "if 1;\n2;\nelsif 3;\n4;\nend"
  formats "if 1;\n2;\nelsif 3;\n4;\nend"
+  formats "foo(\n1,\n 2  \n)"
  formats "foo(\n1,\n 2  \n)"
+  formats "{ %() }"
  formats "{ %() }"
+  formats "loop do\n  1\n  loop do\n    2\n  rescue\n    3\n  end\n  4\nend"
  formats "loop do\n  1\n  loop do\n    2\n  rescue\n    3\n  end\n  4\nend"
+  formats "{% foo <<-X\nbar\nX\n%}"
  formats "{% foo <<-X\nbar\nX\n%}"
+  formats "\n\n1"
  formats "\n\n1"
+  formats "if a\nif b\nelse\n4\nend\nend"
  formats "if a\nif b\nelse\n4\nend\nend"
+  formats "def   foo (  x  :  self )  \n  end"
  formats "def   foo (  x  :  self )  \n  end"
+  formats "1   +   2"
  formats "1   +   2"
+  formats "def   foo (  bar  @@select)  \n  end"
  formats "def   foo (  bar  @@select)  \n  end"
+  formats "if 1\n  foo(\n    bar,\n    # comment\n  )\nend"
  formats "if 1\n  foo(\n    bar,\n    # comment\n  )\nend"
+  formats "[1, 2, 3] of Foo"
  formats "[1, 2, 3] of Foo"
+  formats "def foo(x : A(B), y)\nend"
  formats "def foo(x : A(B), y)\nend"
+  formats "10/a"
  formats "10/a"
+  formats "begin\n1\nrescue   ex   :   Int32 \n3\nend"
  formats "begin\n1\nrescue   ex   :   Int32 \n3\nend"
+  formats "foo   &.bar"
  formats "foo   &.bar"
+  formats "1   unless   2"
  formats "1   unless   2"
+  formats "-> do\nend"
  formats "-> do\nend"
+  formats "macro foo( x  =   1, y  =  2,  &block)\nend"
  formats "macro foo( x  =   1, y  =  2,  &block)\nend"
+  formats "class Foo\nend\nclass Bar\nend"
  formats "class Foo\nend\nclass Bar\nend"
+  formats "Hash{\n  foo => <<-EOF,\n  foo\n  EOF\n  bar => <<-BAR,\n  bar\n  BAR\n}"
  formats "Hash{\n  foo => <<-EOF,\n  foo\n  EOF\n  bar => <<-BAR,\n  bar\n  BAR\n}"
+  formats "  ((1) + 2)"
  formats "  ((1) + 2)"
+  formats "def `(x)\n  1\nend"
  formats "def `(x)\n  1\nend"
+  formats "a = foo(bar(baz3 do\nend))"
  formats "a = foo(bar(baz3 do\nend))"
+  formats ":\"foo\""
  formats ":\"foo\""
+  formats "foo do;\n1; end"
  formats "foo do;\n1; end"
+  formats "if a\n2\n3\nelse\n4\n5\nend"
  formats "if a\n2\n3\nelse\n4\n5\nend"
+  formats "[\n  # foo\n] of String"
  formats "[\n  # foo\n] of String"
+  formats "private   getter   foo"
  formats "private   getter   foo"
+  formats "X(typeof(begin\n  e.is_a?(Y) ? 1 : 2\nend))"
  formats "X(typeof(begin\n  e.is_a?(Y) ? 1 : 2\nend))"
+  formats "foo a , *b"
  formats "foo a , *b"
+  formats "def foo : (A, B) ->\n  nil\nend"
  formats "def foo : (A, B) ->\n  nil\nend"
+  formats "1 # foo\n/ 1 /"
  formats "1 # foo\n/ 1 /"
+  formats "def   foo (  @x)  \n  end"
  formats "def   foo (  @x)  \n  end"
+  formats "\"\\a\\c\#{foo}\\b\\d\""
  formats "\"\\a\\c\#{foo}\\b\\d\""
+  formats "return 1\n# end"
  formats "return 1\n# end"
+  formats "return( 1 , 2 )"
  formats "return( 1 , 2 )"
+  formats "break {1, 2}, 3"
  formats "break {1, 2}, 3"
+  formats "if a\n2\nelse\nend"
  formats "if a\n2\nelse\nend"
+  formats "->@foo.foo?"
  formats "->@foo.foo?"
+  formats "break { {1, 2}, {3, 4} }, 5"
  formats "break { {1, 2}, {3, 4} }, 5"
+  formats "select   \n when  foo \n 2 \n end"
  formats "select   \n when  foo \n 2 \n end"
+  formats "foo.bar(&.% baz)"
  formats "foo.bar(&.% baz)"
+  formats "<<-FOO\nfoo\n1\nFOO"
  formats "<<-FOO\nfoo\n1\nFOO"
+  formats "lib Foo\nunion Foo\nend\nend"
  formats "lib Foo\nunion Foo\nend\nend"
+  formats "select   \n when  foo \n 2 \n else \n 3 \n end"
  formats "select   \n when  foo \n 2 \n else \n 3 \n end"
+  formats "macro foo\n  <<-FOO\n    hello  \n  FOO\nend"
  formats "macro foo\n  <<-FOO\n    hello  \n  FOO\nend"
+  formats "foo do  | x | \n x \n end"
  formats "foo do  | x | \n x \n end"
+  formats "def foo( & block )\nend"
  formats "def foo( & block )\nend"
+  formats "def foo(\n  **a\n\n  # comment\n)\n  1\nend"
  formats "def foo(\n  **a\n\n  # comment\n)\n  1\nend"
+  formats "select # some comment\nwhen bar\n  break\nend"
  formats "select # some comment\nwhen bar\n  break\nend"
+  formats "foo {;;1}"
  formats "foo {;;1}"
+  formats "macro foo(x)\n  {% if 1 %} 2 {% end %}\nend"
  formats "macro foo(x)\n  {% if 1 %} 2 {% end %}\nend"
+  formats "begin; 1; end"
  formats "begin; 1; end"
+  formats "bar = foo(->{\n  1 + 2\n})"
  formats "bar = foo(->{\n  1 + 2\n})"
+  formats "foo &.[]?"
  formats "foo &.[]?"
+  formats "if 1\n2\nelsif\n3\n4\nend"
  formats "if 1\n2\nelsif\n3\n4\nend"
+  formats "begin\n1 ? 2 : 3\nend"
  formats "begin\n1 ? 2 : 3\nend"
+  formats "a &.!.!"
  formats "a &.!.!"
+  formats "/foo/"
  formats "/foo/"
+  formats "1/2"
  formats "1/2"
+  formats "def foo: Int32\nend"
  formats "def foo: Int32\nend"
+  formats "def foo(x @@y)\nend"
  formats "def foo(x @@y)\nend"
+  formats "1 # foo\n1234 # bar"
  formats "1 # foo\n1234 # bar"
+  formats "{ {{FOO}}, nil}"
  formats "{ {{FOO}}, nil}"
+  formats "x  :   Int32**"
  formats "x  :   Int32**"
+  formats "_ = 1"
  formats "_ = 1"
+  formats "yield( 1 , 2 )"
  formats "yield( 1 , 2 )"
+  formats "private FOO = 2\nprivate A = 1"
  formats "private FOO = 2\nprivate A = 1"
+  formats "[] of Int32\n1"
  formats "[] of Int32\n1"
+  formats "break { {1, 2}, {3, 4} }"
  formats "break { {1, 2}, {3, 4} }"
+  formats "foo([\n  1, 2,\n  3, 4,\n])"
  formats "foo([\n  1, 2,\n  3, 4,\n])"
+  formats "def foo\n2  # foo\nend"
  formats "def foo\n2  # foo\nend"
+  formats "1.[]=(2) { 3 }"
  formats "1.[]=(2) { 3 }"
+  formats "foo.[] =1"
  formats "foo.[] =1"
+  formats "@x   &&=   1"
  formats "@x   &&=   1"
+  formats "foo.[ 1,  2 ]?"
  formats "foo.[ 1,  2 ]?"
+  formats "macro foo\n  {% if 1 %} 2 {% end %}\nend"
  formats "macro foo\n  {% if 1 %} 2 {% end %}\nend"
+  formats "a = \\\n  # foo\n  nil"
  formats "a = \\\n  # foo\n  nil"
+  formats "def foo\nend\n\ndef bar\nend\n\n# foo"
  formats "def foo\nend\n\ndef bar\nend\n\n# foo"
+  formats "foo x, self // 1"
  formats "foo x, self // 1"
+  formats "def a\n  b(\n    1, # x\n    # y\n    a: 1, # x\n    # y\n    b: 2 # z\n  )\nend"
  formats "def a\n  b(\n    1, # x\n    # y\n    a: 1, # x\n    # y\n    b: 2 # z\n  )\nend"
+  formats "class Foo\n  # ```\n  # 1\n  # ```\nend\n"
  formats "class Foo\n  # ```\n  # 1\n  # ```\nend\n"
+  formats "foo.[]"
  formats "foo.[]"
+  formats "<<-FOO\nfoo\nFOO"
  formats "<<-FOO\nfoo\nFOO"
+  formats "0u64"
  formats "0u64"
+  formats "foo bar # comment\n\n# doc\ndef baz; end"
  formats "foo bar # comment\n\n# doc\ndef baz; end"
+  formats "a, b = \nif 1\n2\nend"
  formats "a, b = \nif 1\n2\nend"
+  formats "case  1 \n when  .foo? \n 3 \n end"
  formats "case  1 \n when  .foo? \n 3 \n end"
+  formats "next  1"
  formats "next  1"
+  formats "->{1}"
  formats "->{1}"
+  formats "foo 1, # comment\n  do\n  end"
  formats "foo 1, # comment\n  do\n  end"
+  formats "[\n1,\n\n2]"
  formats "[\n1,\n\n2]"
+  formats "def foo(a, # comment\n        *b)\nend"
  formats "def foo(a, # comment\n        *b)\nend"
+  formats "a&+1"
  formats "a&+1"
+  formats "foo(1 &+ \n2)"
  formats "foo(1 &+ \n2)"
+  formats "alias Foo=\nBar"
  formats "alias Foo=\nBar"
+  formats "1   *   2"
  formats "1   *   2"
+  formats "foo &.bar.nil?()"
  formats "foo &.bar.nil?()"
+  formats "{ {1, 2, 3} }"
  formats "{ {1, 2, 3} }"
+  formats "def foo(x, *, z)\nend"
  formats "def foo(x, *, z)\nend"
+  formats "foo {;1}"
  formats "foo {;1}"
+  formats "(size - 1).downto(0) do |i|\n  yield @buffer[i]\nend"
  formats "(size - 1).downto(0) do |i|\n  yield @buffer[i]\nend"
+  formats "1  #foo  \n2  #bar"
  formats "1  #foo  \n2  #bar"
+  formats "1*2"
  formats "1*2"
+  formats "{ {% for x in 1..2 %}3{% end %}, nil }"
  formats "{ {% for x in 1..2 %}3{% end %}, nil }"
+  formats "@x[ 1 ]   +=   2"
  formats "@x[ 1 ]   +=   2"
+  formats "macro foo\n  {{\n1 + 2 }}\nend"
  formats "macro foo\n  {{\n1 + 2 }}\nend"
+  formats "yield 1\n2"
  formats "yield 1\n2"
+  formats "case 1\nwhen a; 2\nelse; b\nend"
  formats "case 1\nwhen a; 2\nelse; b\nend"
+  formats "foo(bar(\n  1,\n  baz(2,\n      3,\n     )\n))"
  formats "foo(bar(\n  1,\n  baz(2,\n      3,\n     )\n))"
+  formats "def   foo (  x , y ,\n)  \n  end"
  formats "def   foo (  x , y ,\n)  \n  end"
+  formats "lib Foo::Bar\nend"
  formats "lib Foo::Bar\nend"
+  formats "module Ton\n  macro foo\n    class {{name.id}}\n    end\n  end\nend"
  formats "module Ton\n  macro foo\n    class {{name.id}}\n    end\n  end\nend"
+  formats "A = 10\nFOO = 123\nBARBAZ = 1234\n"
  formats "A = 10\nFOO = 123\nBARBAZ = 1234\n"
+  formats "next  1  , *2"
  formats "next  1  , *2"
+  formats "  <<-HTML\n    hello \n    world   \n    HTML"
  formats "  <<-HTML\n    hello \n    world   \n    HTML"
+  formats "def foo\n  # Comment\n\n\nend"
  formats "def foo\n  # Comment\n\n\nend"
+  formats "foo &.[](1, 2)"
  formats "foo &.[](1, 2)"
+  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n\n  @[MyAnn] baz\n); end"
  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n\n  @[MyAnn] baz\n); end"
+  formats "macro foo\n  %foo{x.id+2}\nend"
  formats "macro foo\n  %foo{x.id+2}\nend"
+  formats "lib LibFoo\n  {% begin %}\n    fun foo : Int32\n  {% end %}\nend"
  formats "lib LibFoo\n  {% begin %}\n    fun foo : Int32\n  {% end %}\nend"
+  formats "bar do\n  foo <<-X\n  bar\n  X\nend"
  formats "bar do\n  foo <<-X\n  bar\n  X\nend"
+  formats "yield( 1 )"
  formats "yield( 1 )"
+  formats "lib Foo\n  {% if 1 %}\n    fun foo\n  {% end %}\nend\n\nmacro bar\n  1\nend"
  formats "lib Foo\n  {% if 1 %}\n    fun foo\n  {% end %}\nend\n\nmacro bar\n  1\nend"
+  formats "foo 1, # comment\n  # bar\n  do\n  end"
  formats "foo 1, # comment\n  # bar\n  do\n  end"
+  formats "1 ? 2 : 3"
  formats "1 ? 2 : 3"
+  formats "class Foo;end"
  formats "class Foo;end"
+  formats "->Foo.foo!"
  formats "->Foo.foo!"
+  formats "if a\n2\n3\nend"
  formats "if a\n2\n3\nend"
+  formats "x, y, z = <<-FOO, <<-BAR, <<-BAZ\n  hello\n  FOO\n  world\n  BAR\n  qux\nBAZ"
  formats "x, y, z = <<-FOO, <<-BAR, <<-BAZ\n  hello\n  FOO\n  world\n  BAR\n  qux\nBAZ"
+  Unicode bi-directional control characters
+    formats "NamedTuple(\"\u202B\": Int32)"
    formats "NamedTuple(\"\u202B\": Int32)"
+    formats "NamedTuple(\"\u2068\": Int32)"
    formats "NamedTuple(\"\u2068\": Int32)"
+    formats "{\"\u202C\": 1}"
    formats "{\"\u202C\": 1}"
+    formats "%q(\u2069)"
    formats "%q(\u2069)"
+    formats "%(\u202B)"
    formats "%(\u202B)"
+    formats "/\u202A/"
    formats "/\u202A/"
+    formats "<<-'EOS'\n\u2066\nEOS"
    formats "<<-'EOS'\n\u2066\nEOS"
+    formats "%(\u202C)"
    formats "%(\u202C)"
+    formats "<<-'EOS'\n\u202C\nEOS"
    formats "<<-'EOS'\n\u202C\nEOS"
+    formats "%Q(\u202B)"
    formats "%Q(\u202B)"
+    formats "{\"\u2067\": 1}"
    formats "{\"\u2067\": 1}"
+    formats "/\u202E\#{1}/"
    formats "/\u202E\#{1}/"
+    formats "/\u2068\#{1}/"
    formats "/\u2068\#{1}/"
+    formats "%r(\u202D\#{1})"
    formats "%r(\u202D\#{1})"
+    formats "foo(\"\u2069\": 1)"
    formats "foo(\"\u2069\": 1)"
+    formats "foo(\"\u2067\": 1)"
    formats "foo(\"\u2067\": 1)"
+    formats "\"\\c\u202C\""
    formats "\"\\c\u202C\""
+    formats "<<-EOS\n\u2067\nEOS"
    formats "<<-EOS\n\u2067\nEOS"
+    formats "%r(\u202B\#{1})"
    formats "%r(\u202B\#{1})"
+    formats "<<-EOS\n\u2066\nEOS"
    formats "<<-EOS\n\u2066\nEOS"
+    formats "foo(\"\u2068\": 1)"
    formats "foo(\"\u2068\": 1)"
+    formats "/\u202B/"
    formats "/\u202B/"
+    formats "/\u202D/"
    formats "/\u202D/"
+    formats "def foo(\"\u2067\" x)\nend"
    formats "def foo(\"\u2067\" x)\nend"
+    formats "<<-'EOS'\n\u202A\nEOS"
    formats "<<-'EOS'\n\u202A\nEOS"
+    formats "%w(\u202C)"
    formats "%w(\u202C)"
+    formats "NamedTuple(\"\u202A\": Int32)"
    formats "NamedTuple(\"\u202A\": Int32)"
+    formats "%w(\u202A)"
    formats "%w(\u202A)"
+    formats "\"\u202D\#{1}\""
    formats "\"\u202D\#{1}\""
+    formats "<<-EOS\n\u2066\#{1}\nEOS"
    formats "<<-EOS\n\u2066\#{1}\nEOS"
+    formats "/\u202E/"
    formats "/\u202E/"
+    formats "%i(\u202E)"
    formats "%i(\u202E)"
+    formats "%(\u202D)"
    formats "%(\u202D)"
+    formats "def foo(\"\u202A\" x)\nend"
    formats "def foo(\"\u202A\" x)\nend"
+    formats "%Q(\u2069)"
    formats "%Q(\u2069)"
+    formats "<<-EOS\n\u2069\nEOS"
    formats "<<-EOS\n\u2069\nEOS"
+    formats "%r(\u2067)"
    formats "%r(\u2067)"
+    formats "foo(\"\u202A\": 1)"
    formats "foo(\"\u202A\": 1)"
+    formats "%r(\u2069)"
    formats "%r(\u2069)"
+    formats "def foo(\"\u2069\" x)\nend"
    formats "def foo(\"\u2069\" x)\nend"
+    formats "%r(\u202D)"
    formats "%r(\u202D)"
+    formats "%q(\u202D)"
    formats "%q(\u202D)"
+    formats "\"\u202C\""
    formats "\"\u202C\""
+    formats "\"\\c\u2069\""
    formats "\"\\c\u2069\""
+    formats "\"\u202D\""
    formats "\"\u202D\""
+    formats "%(\u2067)"
    formats "%(\u2067)"
+    formats "%r(\u202B)"
    formats "%r(\u202B)"
+    formats "<<-'EOS'\n\u202B\nEOS"
    formats "<<-'EOS'\n\u202B\nEOS"
+    formats "def foo(\"\u2066\" x)\nend"
    formats "def foo(\"\u2066\" x)\nend"
+    formats "\"\u202E\#{1}\""
    formats "\"\u202E\#{1}\""
+    formats "%Q(\u2067)"
    formats "%Q(\u2067)"
+    formats "def foo(\"\u202D\" x)\nend"
    formats "def foo(\"\u202D\" x)\nend"
+    formats "%(\u202A)"
    formats "%(\u202A)"
+    formats "<<-EOS\n\u202D\nEOS"
    formats "<<-EOS\n\u202D\nEOS"
+    formats "{\"\u202A\": 1}"
    formats "{\"\u202A\": 1}"
+    formats "\"\\c\u202A\""
    formats "\"\\c\u202A\""
+    formats "NamedTuple(\"\u202E\": Int32)"
    formats "NamedTuple(\"\u202E\": Int32)"
+    formats "/\u202C/"
    formats "/\u202C/"
+    formats "%Q(\u2068)"
    formats "%Q(\u2068)"
+    formats "%i(\u2068)"
    formats "%i(\u2068)"
+    formats "%w(\u202D)"
    formats "%w(\u202D)"
+    formats "def foo(\"\u202C\" x)\nend"
    formats "def foo(\"\u202C\" x)\nend"
+    formats "\"\\c\u2068\""
    formats "\"\\c\u2068\""
+    formats "%q(\u2067)"
    formats "%q(\u2067)"
+    formats "foo(\"\u202D\": 1)"
    formats "foo(\"\u202D\": 1)"
+    formats "%Q(\u202C)"
    formats "%Q(\u202C)"
+    formats "\"\\c\u202E\#{1}\""
    formats "\"\\c\u202E\#{1}\""
+    formats "%Q(\u202C\#{1})"
    formats "%Q(\u202C\#{1})"
+    formats "def foo(\"\u2068\" x)\nend"
    formats "def foo(\"\u2068\" x)\nend"
+    formats "<<-EOS\n\u2069\#{1}\nEOS"
    formats "<<-EOS\n\u2069\#{1}\nEOS"
+    formats "{\"\u202D\": 1}"
    formats "{\"\u202D\": 1}"
+    formats "<<-EOS\n\u202C\nEOS"
    formats "<<-EOS\n\u202C\nEOS"
+    formats "/\u202D\#{1}/"
    formats "/\u202D\#{1}/"
+    formats "NamedTuple(\"\u2066\": Int32)"
    formats "NamedTuple(\"\u2066\": Int32)"
+    formats "%q(\u2066)"
    formats "%q(\u2066)"
+    formats "<<-EOS\n\u202C\#{1}\nEOS"
    formats "<<-EOS\n\u202C\#{1}\nEOS"
+    formats "%w(\u202E)"
    formats "%w(\u202E)"
+    formats "%i(\u202A)"
    formats "%i(\u202A)"
+    formats "{\"\u2068\": 1}"
    formats "{\"\u2068\": 1}"
+    formats "NamedTuple(\"\u202C\": Int32)"
    formats "NamedTuple(\"\u202C\": Int32)"
+    formats "\"\\c\u202D\#{1}\""
    formats "\"\\c\u202D\#{1}\""
+    formats "%i(\u2066)"
    formats "%i(\u2066)"
+    formats "<<-'EOS'\n\u2067\nEOS"
    formats "<<-'EOS'\n\u2067\nEOS"
+    formats "{\"\u202B\": 1}"
    formats "{\"\u202B\": 1}"
+    formats "%r(\u202E)"
    formats "%r(\u202E)"
+    formats "\"\u2069\#{1}\""
    formats "\"\u2069\#{1}\""
+    formats "%r(\u2069\#{1})"
    formats "%r(\u2069\#{1})"
+    formats "%q(\u2068)"
    formats "%q(\u2068)"
+    formats "foo(\"\u202C\": 1)"
    formats "foo(\"\u202C\": 1)"
+    formats "%r(\u2067\#{1})"
    formats "%r(\u2067\#{1})"
+    formats "%r(\u202C)"
    formats "%r(\u202C)"
+    formats "{\"\u2069\": 1}"
    formats "{\"\u2069\": 1}"
+    formats "\"\u2069\""
    formats "\"\u2069\""
+    formats "%q(\u202E)"
    formats "%q(\u202E)"
+    formats "%r(\u202C\#{1})"
    formats "%r(\u202C\#{1})"
+    formats "/\u202B\#{1}/"
    formats "/\u202B\#{1}/"
+    formats "NamedTuple(\"\u2069\": Int32)"
    formats "NamedTuple(\"\u2069\": Int32)"
+    formats "/\u2068/"
    formats "/\u2068/"
+    formats "%i(\u202D)"
    formats "%i(\u202D)"
+    formats "%i(\u202C)"
    formats "%i(\u202C)"
+    formats "%r(\u2068\#{1})"
    formats "%r(\u2068\#{1})"
+    formats "foo(\"\u202B\": 1)"
    formats "foo(\"\u202B\": 1)"
+    formats "\"\\c\u2068\#{1}\""
    formats "\"\\c\u2068\#{1}\""
+    formats "<<-EOS\n\u2068\#{1}\nEOS"
    formats "<<-EOS\n\u2068\#{1}\nEOS"
+    formats "%q(\u202C)"
    formats "%q(\u202C)"
+    formats "<<-EOS\n\u202A\#{1}\nEOS"
    formats "<<-EOS\n\u202A\#{1}\nEOS"
+    formats "%(\u202E)"
    formats "%(\u202E)"
+    formats "<<-EOS\n\u202D\#{1}\nEOS"
    formats "<<-EOS\n\u202D\#{1}\nEOS"
+    formats "{\"\u202E\": 1}"
    formats "{\"\u202E\": 1}"
+    formats "\"\u202A\#{1}\""
    formats "\"\u202A\#{1}\""
+    formats "%(\u2069)"
    formats "%(\u2069)"
+    formats "%w(\u202B)"
    formats "%w(\u202B)"
+    formats "<<-'EOS'\n\u202E\nEOS"
    formats "<<-'EOS'\n\u202E\nEOS"
+    formats "<<-'EOS'\n\u202D\nEOS"
    formats "<<-'EOS'\n\u202D\nEOS"
+    formats "<<-EOS\n\u202E\#{1}\nEOS"
    formats "<<-EOS\n\u202E\#{1}\nEOS"
+    formats "%r(\u2066)"
    formats "%r(\u2066)"
+    formats "%Q(\u2066)"
    formats "%Q(\u2066)"
+    formats "\"\u202B\""
    formats "\"\u202B\""
+    formats "<<-EOS\n\u202E\nEOS"
    formats "<<-EOS\n\u202E\nEOS"
+    formats "%Q(\u202A\#{1})"
    formats "%Q(\u202A\#{1})"
+    formats "def foo(\"\u202B\" x)\nend"
    formats "def foo(\"\u202B\" x)\nend"
+    formats "\"\\c\u2067\#{1}\""
    formats "\"\\c\u2067\#{1}\""
+    formats "\"\u2068\""
    formats "\"\u2068\""
+    formats "\"\u2067\""
    formats "\"\u2067\""
+    formats "%Q(\u202E\#{1})"
    formats "%Q(\u202E\#{1})"
+    formats "/\u2069/"
    formats "/\u2069/"
+    formats "%Q(\u2067\#{1})"
    formats "%Q(\u2067\#{1})"
+    formats "%Q(\u2069\#{1})"
    formats "%Q(\u2069\#{1})"
+    formats "\"\u202B\#{1}\""
    formats "\"\u202B\#{1}\""
+    formats "%w(\u2066)"
    formats "%w(\u2066)"
+    formats "\"\u2066\#{1}\""
    formats "\"\u2066\#{1}\""
+    formats "%Q(\u202D\#{1})"
    formats "%Q(\u202D\#{1})"
+    formats "\"\\c\u202A\#{1}\""
    formats "\"\\c\u202A\#{1}\""
+    formats "\"\u202C\#{1}\""
    formats "\"\u202C\#{1}\""
+    formats "/\u2066\#{1}/"
    formats "/\u2066\#{1}/"
+    formats "\"\\c\u2069\#{1}\""
    formats "\"\\c\u2069\#{1}\""
+    formats "NamedTuple(\"\u2067\": Int32)"
    formats "NamedTuple(\"\u2067\": Int32)"
+    formats "<<-EOS\n\u202A\nEOS"
    formats "<<-EOS\n\u202A\nEOS"
+    formats "/\u202C\#{1}/"
    formats "/\u202C\#{1}/"
+    formats "NamedTuple(\"\u202D\": Int32)"
    formats "NamedTuple(\"\u202D\": Int32)"
+    formats "%r(\u2066\#{1})"
    formats "%r(\u2066\#{1})"
+    formats "/\u2069\#{1}/"
    formats "/\u2069\#{1}/"
+    formats "{\"\u2066\": 1}"
    formats "{\"\u2066\": 1}"
+    formats "%i(\u2067)"
    formats "%i(\u2067)"
+    formats "%(\u2066)"
    formats "%(\u2066)"
+    formats "%w(\u2068)"
    formats "%w(\u2068)"
+    formats "\"\\c\u202B\#{1}\""
    formats "\"\\c\u202B\#{1}\""
+    formats "\"\\c\u202E\""
    formats "\"\\c\u202E\""
+    formats "\"\u2068\#{1}\""
    formats "\"\u2068\#{1}\""
+    formats "\"\u202A\""
    formats "\"\u202A\""
+    formats "<<-'EOS'\n\u2068\nEOS"
    formats "<<-'EOS'\n\u2068\nEOS"
+    formats "%r(\u202A)"
    formats "%r(\u202A)"
+    formats "\"\\c\u202B\""
    formats "\"\\c\u202B\""
+    formats "\"\u202E\""
    formats "\"\u202E\""
+    formats "%q(\u202B)"
    formats "%q(\u202B)"
+    formats "/\u2067/"
    formats "/\u2067/"
+    formats "%(\u2068)"
    formats "%(\u2068)"
+    formats "<<-'EOS'\n\u2069\nEOS"
    formats "<<-'EOS'\n\u2069\nEOS"
+    formats "%r(\u202A\#{1})"
    formats "%r(\u202A\#{1})"
+    formats "<<-EOS\n\u2068\nEOS"
    formats "<<-EOS\n\u2068\nEOS"
+    formats "%r(\u202E\#{1})"
    formats "%r(\u202E\#{1})"
+    formats "%Q(\u202B\#{1})"
    formats "%Q(\u202B\#{1})"
+    formats "\"\\c\u202D\""
    formats "\"\\c\u202D\""
+    formats "%Q(\u202E)"
    formats "%Q(\u202E)"
+    formats "%i(\u202B)"
    formats "%i(\u202B)"
+    formats "\"\\c\u2066\""
    formats "\"\\c\u2066\""
+    formats "<<-EOS\n\u2067\#{1}\nEOS"
    formats "<<-EOS\n\u2067\#{1}\nEOS"
+    formats "\"\\c\u2066\#{1}\""
    formats "\"\\c\u2066\#{1}\""
+    formats "foo(\"\u202E\": 1)"
    formats "foo(\"\u202E\": 1)"
+    formats "\"\\c\u202C\#{1}\""
    formats "\"\\c\u202C\#{1}\""
+    formats "<<-EOS\n\u202B\nEOS"
    formats "<<-EOS\n\u202B\nEOS"
+    formats "<<-EOS\n\u202B\#{1}\nEOS"
    formats "<<-EOS\n\u202B\#{1}\nEOS"
+    formats "%Q(\u2066\#{1})"
    formats "%Q(\u2066\#{1})"
+    formats "%w(\u2067)"
    formats "%w(\u2067)"
+    formats "%Q(\u2068\#{1})"
    formats "%Q(\u2068\#{1})"
+    formats "/\u2067\#{1}/"
    formats "/\u2067\#{1}/"
+    formats "\"\u2066\""
    formats "\"\u2066\""
+    formats "%Q(\u202A)"
    formats "%Q(\u202A)"
+    formats "/\u202A\#{1}/"
    formats "/\u202A\#{1}/"
+    formats "%r(\u2068)"
    formats "%r(\u2068)"
+    formats "%w(\u2069)"
    formats "%w(\u2069)"
+    formats "%Q(\u202D)"
    formats "%Q(\u202D)"
+    formats "%i(\u2069)"
    formats "%i(\u2069)"
+    formats "%q(\u202A)"
    formats "%q(\u202A)"
+    formats "\"\u2067\#{1}\""
    formats "\"\u2067\#{1}\""
+    formats "def foo(\"\u202E\" x)\nend"
    formats "def foo(\"\u202E\" x)\nend"
+    formats "\"\\c\u2067\""
    formats "\"\\c\u2067\""
+    formats "foo(\"\u2066\": 1)"
    formats "foo(\"\u2066\": 1)"
+    formats "/\u2066/"
    formats "/\u2066/"
+  formats "yield( *1  , *2 )"
  formats "yield( *1  , *2 )"
+  formats "foo(//, //)"
  formats "foo(//, //)"
+  formats "&- 1"
  formats "&- 1"
+  formats "if a\n  b &c\nend"
  formats "if a\n  b &c\nend"
+  formats "foo = 1\n->foo.foo?"
  formats "foo = 1\n->foo.foo?"
+  formats "foo(->do\n  1 + 2\nend)"
  formats "foo(->do\n  1 + 2\nend)"
+  formats "# ```text\n# 1 + 2\n# ```\n#\n# ```\n# 3 + 4\n# ```"
  formats "# ```text\n# 1 + 2\n# ```\n#\n# ```\n# 3 + 4\n# ```"
+  formats "def a\n  b(\n    a: 1, # x\n    # y\n    b: 2\n  )\nend"
  formats "def a\n  b(\n    a: 1, # x\n    # y\n    b: 2\n  )\nend"
+  formats "x  :   (A -> B)?"
  formats "x  :   (A -> B)?"
+  formats "with foo yield bar"
  formats "with foo yield bar"
+  formats "1   &+   2"
  formats "1   &+   2"
+  formats "sizeof( Int32 )"
  formats "sizeof( Int32 )"
+  formats "foo.bar(&.%(baz))"
  formats "foo.bar(&.%(baz))"
+  formats "lib Foo\nfun foo( ... )  :  Int32\nend"
  formats "lib Foo\nfun foo( ... )  :  Int32\nend"
+  formats "foo : A(B)\nbar : C"
  formats "foo : A(B)\nbar : C"
+  formats "foo &.bar.responds_to?(:baz)"
  formats "foo &.bar.responds_to?(:baz)"
+  formats "module   Moo \n\n 1  \n\nend"
  formats "module   Moo \n\n 1  \n\nend"
+  formats "NamedTuple(\n  a: Int32,)"
  formats "NamedTuple(\n  a: Int32,)"
+  formats "{ 1   =>   2 }"
  formats "{ 1   =>   2 }"
+  formats "x : {A, B, }"
  formats "x : {A, B, }"
+  formats "foo[&.bar]?"
  formats "foo[&.bar]?"
+  formats "struct   Foo \n\n 1  \n\nend"
  formats "struct   Foo \n\n 1  \n\nend"
+  formats "def foo # bar\n  # baz\nend"
  formats "def foo # bar\n  # baz\nend"
+  formats "if 1\n  ((1) + 2)\nend"
  formats "if 1\n  ((1) + 2)\nend"
+  formats "->do\nend"
  formats "->do\nend"
+  formats "foo[x: 1, &.bar] = 1"
  formats "foo[x: 1, &.bar] = 1"
+  formats "asm(\"nop\" : \"a\"(0), \"b\"(1)\n: \"c\"(2), \"d\"(3) )"
  formats "asm(\"nop\" : \"a\"(0), \"b\"(1)\n: \"c\"(2), \"d\"(3) )"
+  formats "-> : Int32* {}"
  formats "-> : Int32* {}"
+  gives proper line number in syntax error inside macro
  gives proper line number in syntax error inside macro
+  formats "%<hello>"
  formats "%<hello>"
+  formats "def   foo (  x  :  Int32 )  \n  end"
  formats "def   foo (  x  :  Int32 )  \n  end"
+  formats "case  1 \n when 2 ; 3 \n end"
  formats "case  1 \n when 2 ; 3 \n end"
+  formats "#!shebang\n1 + 2"
  formats "#!shebang\n1 + 2"
+  formats "def foo=(x)\nend"
  formats "def foo=(x)\nend"
+  formats "unless a\nelse\n2\nend"
  formats "unless a\nelse\n2\nend"
+  formats "return {1, 2}, 3"
  formats "return {1, 2}, 3"
+  formats "x[ y ] += 1"
  formats "x[ y ] += 1"
+  formats "foo({\n  1 => 2,\n  3 => 4,\n  5 => 6,\n})"
  formats "foo({\n  1 => 2,\n  3 => 4,\n  5 => 6,\n})"
+  formats "macro foo\n  {{ 1 + 2 }}\\\n 1\n end"
  formats "macro foo\n  {{ 1 + 2 }}\\\n 1\n end"
+  formats "->(){}"
  formats "->(){}"
+  formats ":foo"
  formats ":foo"
+  formats "-> : {Int32} { String }"
  formats "-> : {Int32} { String }"
+  formats "break  1  , *2"
  formats "break  1  , *2"
+  formats "  <<-HTML\n  foo\nHTML"
  formats "  <<-HTML\n  foo\nHTML"
+  formats "lib Foo\nstruct Foo\nx  :  Int32\nend\nend"
  formats "lib Foo\nstruct Foo\nx  :  Int32\nend\nend"
+  formats "def bar\n  foo(<<-X,\n  a\n  X\n    1)\nend"
  formats "def bar\n  foo(<<-X,\n  a\n  X\n    1)\nend"
+  formats "foo(&.bar)"
  formats "foo(&.bar)"
+  formats "macro foo\n  1  \n  {{  \n    42  \n  }}  \n  2  \nend"
  formats "macro foo\n  1  \n  {{  \n    42  \n  }}  \n  2  \nend"
+  formats "lib Foo\nalias  Foo  =  Bar -> \n$a : Int32\nend"
  formats "lib Foo\nalias  Foo  =  Bar -> \n$a : Int32\nend"
+  formats "def   foo ( x )  :  Int32 \n  end"
  formats "def   foo ( x )  :  Int32 \n  end"
+  formats "class Foo\n  enum Bar\n  A; B; C;\n  D; E; F\nend\nend\n"
  formats "class Foo\n  enum Bar\n  A; B; C;\n  D; E; F\nend\nend\n"
+  formats "a &.!"
  formats "a &.!"
+  formats "a = %w(\n  one two\n  three four\n)"
  formats "a = %w(\n  one two\n  three four\n)"
+  formats "responds_to? :foo"
  formats "responds_to? :foo"
+  formats "1.!=() { 3 }"
  formats "1.!=() { 3 }"
+  formats "case 1 # foo\nwhen 2\nend"
  formats "case 1 # foo\nwhen 2\nend"
+  formats "if a\n2\nend"
  formats "if a\n2\nend"
+  formats "select\nwhen foo\n  # foo\n  # bar\nelse\n  # foo\n  # bar\nend"
  formats "select\nwhen foo\n  # foo\n  # bar\nelse\n  # foo\n  # bar\nend"
+  formats "if 1\nbegin\n2\nensure\n3\nend\nend"
  formats "if 1\nbegin\n2\nensure\n3\nend\nend"
+  formats "[\n  # foo\n  1,\n\n  # bar\n  2,\n]"
  formats "[\n  # foo\n  1,\n\n  # bar\n  2,\n]"
+  formats "{%\n  if 1\n    2\n  end\n%}"
  formats "{%\n  if 1\n    2\n  end\n%}"
+  formats "{\n  \"foo\":    1,\n  \"babraz\": 2,\n}"
  formats "{\n  \"foo\":    1,\n  \"babraz\": 2,\n}"
+  formats "if 1 # foo\n2\nend"
  formats "if 1 # foo\n2\nend"
+  formats "foo   &.==(2)"
  formats "foo   &.==(2)"
+  formats "def foo(x)\n  case //\n  when //\n    3\n  end\nend"
  formats "def foo(x)\n  case //\n  when //\n    3\n  end\nend"
+  formats "begin\n  a\nend.b { }\nc"
  formats "begin\n  a\nend.b { }\nc"
+  formats "x  =   uninitialized   Int32"
  formats "x  =   uninitialized   Int32"
+  formats "foo ()"
  formats "foo ()"
+  formats "[/ /, / /]"
  formats "[/ /, / /]"
+  formats "def foo( & )\nend"
  formats "def foo( & )\nend"
+  formats "::Tuple(T)"
  formats "::Tuple(T)"
+  formats "1\n.as(Int32)"
  formats "1\n.as(Int32)"
+  formats "if # some comment\n 2 # another\n 3 # final \n end # end "
  formats "if # some comment\n 2 # another\n 3 # final \n end # end "
+  formats "if 0\n1 &&\n2 &&\n3\nend"
  formats "if 0\n1 &&\n2 &&\n3\nend"
+  formats "macro foo\n  {% for value, i in values %}\\\n    {% if true %}\\\n    {% end %}\\\n    {{ 1 }}/\n  {% end %}\\\nend\n\n{\n  1 => 2,\n  1234 => 5,\n}\n"
  formats "macro foo\n  {% for value, i in values %}\\\n    {% if true %}\\\n    {% end %}\\\n    {{ 1 }}/\n  {% end %}\\\nend\n\n{\n  1 => 2,\n  1234 => 5,\n}\n"
+  formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\#{foo}\\v\\f\\e\""
  formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\#{foo}\\v\\f\\e\""
+  formats "1   if   2"
  formats "1   if   2"
+  formats "foo(\n1,\n\n 2  \n)"
  formats "foo(\n1,\n\n 2  \n)"
+  formats "return { 1 ,  2 }"
  formats "return { 1 ,  2 }"
+  formats "1 &&\n2"
  formats "1 &&\n2"
+  formats "foo[1, &.bar] = 1"
  formats "foo[1, &.bar] = 1"
+  formats "def foo(\n  foo,\n\n  @[MyAnn]\n  &block\n); end"
  formats "def foo(\n  foo,\n\n  @[MyAnn]\n  &block\n); end"
+  formats "def foo(\n  a,\n  &block\n)\nend"
  formats "def foo(\n  a,\n  &block\n)\nend"
+  formats "{\n  <<-KEY => 1,\n  key\n  KEY\n}"
  formats "{\n  <<-KEY => 1,\n  key\n  KEY\n}"
+  formats "yield 1 , \n2"
  formats "yield 1 , \n2"
+  formats "break( 1 , 2 )"
  formats "break( 1 , 2 )"
+  formats "1.<=() { 3 }"
  formats "1.<=() { 3 }"
+  formats "a = foo &.bar do\n  1 + 2\nend"
  formats "a = foo &.bar do\n  1 + 2\nend"
+  formats "foo &.[]=(  1, 2  )"
  formats "foo &.[]=(  1, 2  )"
+  formats "next {1, 2}, {3, 4}"
  formats "next {1, 2}, {3, 4}"
+  formats "yield  *1  ,2"
  formats "yield  *1  ,2"
+  formats "asm(\"nop\" :::: \"volatile\"  , \"alignstack\"  ,  \"intel\"   )"
  formats "asm(\"nop\" :::: \"volatile\"  , \"alignstack\"  ,  \"intel\"   )"
+  formats "foo(self // 1)"
  formats "foo(self // 1)"
+  formats "foo : self? | A"
  formats "foo : self? | A"
+  formats "class Foo\n# nothing\nend"
  formats "class Foo\n# nothing\nend"
+  formats ":<<"
  formats ":<<"
+  formats "->: Int32 do\nx\nend"
  formats "->: Int32 do\nx\nend"
+  formats "foo[x: 1, &.bar]"
  formats "foo[x: 1, &.bar]"
+  formats "def foo(x, **z, &block)\nend"
  formats "def foo(x, **z, &block)\nend"
+  formats "- 1"
  formats "- 1"
+  formats "あ.い, う.え.お = 1, 2"
  formats "あ.い, う.え.お = 1, 2"
+  formats "# Hello\n#\n# ```\n# puts 1+2 # bye\n# 1+2 # hello\n#\n# 1+2\n# ```\n\n# ```\n# puts 1+2\n\n# ```\n# puts 1+2\n\n# Hola\n#\n#     1+2\n#     foo do\n#     3+4\n#     end\n\n# Hey\n#\n#     1+2\n#     foo do\n#     3+4\n#     end\n#\n# ```\n# 1+2\n# ```\n#\n#     1+2\n#\n# Bye\n"
  formats "# Hello\n#\n# ```\n# puts 1+2 # bye\n# 1+2 # hello\n#\n# 1+2\n# ```\n\n# ```\n# puts 1+2\n\n# ```\n# puts 1+2\n\n# Hola\n#\n#     1+2\n#     foo do\n#     3+4\n#     end\n\n# Hey\n#\n#     1+2\n#     foo do\n#     3+4\n#     end\n#\n# ```\n# 1+2\n# ```\n#\n#     1+2\n#\n# Bye\n"
+  formats "->foo?"
  formats "->foo?"
+  formats "asm(\"a\" : : :: \"volatile\")"
  formats "asm(\"a\" : : :: \"volatile\")"
+  formats "a = if 1\n2\nelse\n3\nend"
  formats "a = if 1\n2\nelse\n3\nend"
+  formats "foo(\n# x\n1,\n\n# y\nz: 2\n)"
  formats "foo(\n# x\n1,\n\n# y\nz: 2\n)"
+  formats "<<-HTML\n  hello \n  world   \n  HTML"
  formats "<<-HTML\n  hello \n  world   \n  HTML"
+  formats "class   Foo \n\n 1  \n\nend"
  formats "class   Foo \n\n 1  \n\nend"
+  formats "foo : (A) | D"
  formats "foo : (A) | D"
+  formats "return { {1, 2}, {3, 4} }, 5"
  formats "return { {1, 2}, {3, 4} }, 5"
+  formats "\"\#{\"\#{foo}\"}\""
  formats "\"\#{\"\#{foo}\"}\""
+  formats "pointerof( @a )"
  formats "pointerof( @a )"
+  formats "{% if true %}\n  # x\n{% end %}"
  formats "{% if true %}\n  # x\n{% end %}"
+  formats "yield(1 , \n2)"
  formats "yield(1 , \n2)"
+  formats "def foo(  @[MyAnn]  v  ); end"
  formats "def foo(  @[MyAnn]  v  ); end"
+  formats "1  ||  2"
  formats "1  ||  2"
+  formats "def foo\na = bar do\n1\nend\nend"
  formats "def foo\na = bar do\n1\nend\nend"
+  formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1), \"c\"(2) )"
  formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1), \"c\"(2) )"
+  formats "{1 => 2,\n  3 => 4, # lala\n}\n"
  formats "{1 => 2,\n  3 => 4, # lala\n}\n"
+  formats "Hash{\n  foo => <<-EOF\n  foo\n  EOF\n}"
  formats "Hash{\n  foo => <<-EOF\n  foo\n  EOF\n}"
+  formats "foo = 1\n->foo.[]=(Int32)"
  formats "foo = 1\n->foo.[]=(Int32)"
+  formats "if 1\n[   1  ,    2  ,    3  ]\nend"
  formats "if 1\n[   1  ,    2  ,    3  ]\nend"
+  formats "foo[&.bar]"
  formats "foo[&.bar]"
+  formats "   {{\n1 + 2 }}"
  formats "   {{\n1 + 2 }}"
+  formats "Foo(  * T, { * A  ,*\n  B } )"
  formats "Foo(  * T, { * A  ,*\n  B } )"
+  formats "yield  *1"
  formats "yield  *1"
+  formats "<<-HTML\n  \#{\"foo\"}\n  \#{\"bar\"}\n  HTML"
  formats "<<-HTML\n  \#{\"foo\"}\n  \#{\"bar\"}\n  HTML"
+  formats "foo(1, ) { }"
  formats "foo(1, ) { }"
+  formats "1.!=(2) { 3 }"
  formats "1.!=(2) { 3 }"
+  formats "instance_sizeof( Int32 )"
  formats "instance_sizeof( Int32 )"
+  formats "foo . bar"
  formats "foo . bar"
+  formats "@x : A(B | C)?"
  formats "@x : A(B | C)?"
+  formats "class Actor\n  macro inherited\nend\nend\n"
  formats "class Actor\n  macro inherited\nend\nend\n"
+  formats "foo ( )"
  formats "foo ( )"
+  formats "asm(\"a\" :: \"d\"(e)\n)"
  formats "asm(\"a\" :: \"d\"(e)\n)"
+  formats "def foo : A | B(C)\n  nil\nend"
  formats "def foo : A | B(C)\n  nil\nend"
+  formats "bar = foo({\n        1 => 2,\n        3 => 4,\n        5 => 6,\n      })"
  formats "bar = foo({\n        1 => 2,\n        3 => 4,\n        5 => 6,\n      })"
+  formats "break  1"
  formats "break  1"
+  formats "::foo(1, 2)"
  formats "::foo(1, 2)"
+  formats "foo &.bar do\n  1 + 2\nend"
  formats "foo &.bar do\n  1 + 2\nend"
+  formats "if a\n2\nelse\n3\nend"
  formats "if a\n2\nelse\n3\nend"
+  formats "->{\n  # first comment\n  puts \"hi\"\n  # second comment\n}"
  formats "->{\n  # first comment\n  puts \"hi\"\n  # second comment\n}"
+  formats "foo : (A -> B)\nbar : C"
  formats "foo : (A -> B)\nbar : C"
+  formats "def foo(\nx, #foo\nz #bar\n)\nend"
  formats "def foo(\nx, #foo\nz #bar\n)\nend"
+  formats "foo 1,\na: 1,\nb: 2,\nc: 3"
  formats "foo 1,\na: 1,\nb: 2,\nc: 3"
+  formats "::Pointer(T)"
  formats "::Pointer(T)"
+  formats "select\n# when foo\nwhen bar\n  break\nend"
  formats "select\n# when foo\nwhen bar\n  break\nend"
+  formats "bar = foo(->do\n  1 + 2\nend)"
  formats "bar = foo(->do\n  1 + 2\nend)"
+  formats "foo(\n  <<-HERE,\n  hello\n  HERE\n  # foo\n  foo: 1,\n)"
  formats "foo(\n  <<-HERE,\n  hello\n  HERE\n  # foo\n  foo: 1,\n)"
+  formats "foo(1, / /)"
  formats "foo(1, / /)"
+  formats "case 1\nelse\n  2\nend"
  formats "case 1\nelse\n  2\nend"
+  formats "{ {1 => 2} }"
  formats "{ {1 => 2} }"
+  formats "# ```text\n#  1  +  2\n# ```"
  formats "# ```text\n#  1  +  2\n# ```"
+  formats "def   foo (  x ,\n y )  \n  end"
  formats "def   foo (  x ,\n y )  \n  end"
+  formats "begin\n  # Comment\n\n\nend"
  formats "begin\n  # Comment\n\n\nend"
+  formats "1 ?\n  2    :   \n 3"
  formats "1 ?\n  2    :   \n 3"
+  formats "if a\n    # hello\n 2\nend"
  formats "if a\n    # hello\n 2\nend"
+  formats "case 0\nwhen 0 then 1; 2\n# Comments\nend"
  formats "case 0\nwhen 0 then 1; 2\n# Comments\nend"
+  formats "true"
  formats "true"
+  formats "x =  <<-EOF\n 1\nEOF"
  formats "x =  <<-EOF\n 1\nEOF"
+  formats "1234 # foo\n1 # bar"
  formats "1234 # foo\n1 # bar"
+  formats "while 1\n2  # foo\nend"
  formats "while 1\n2  # foo\nend"
+  formats "foo.as? ( Int32* )"
  formats "foo.as? ( Int32* )"
+  formats "break"
  formats "break"
+  formats "begin\n  ()\nend"
  formats "begin\n  ()\nend"
+  formats "@[Foo(\n  foo: 1\n)]\ndef foo\nend"
  formats "@[Foo(\n  foo: 1\n)]\ndef foo\nend"
+  formats "1 \\\nensure 2"
  formats "1 \\\nensure 2"
+  formats "a = case 1\n    when 1, # 1\n         2, # 2\n         3  # 3\n      1\n    end"
  formats "a = case 1\n    when 1, # 1\n         2, # 2\n         3  # 3\n      1\n    end"
+  formats "def foo(x)\n  {% if true %}\n    # comment\n    Foo = 1\n    B   = 2\n  {% end %}\nend"
  formats "def foo(x)\n  {% if true %}\n    # comment\n    Foo = 1\n    B   = 2\n  {% end %}\nend"
+  formats "foo(\n  [\n    1,\n    2,\n  ],\n  [\n    3,\n    4,\n  ]\n)"
  formats "foo(\n  [\n    1,\n    2,\n  ],\n  [\n    3,\n    4,\n  ]\n)"
+  formats "macro foo=(x)\nend"
  formats "macro foo=(x)\nend"
+  formats "a = / /"
  formats "a = / /"
+  formats "macro foo\n  if 1\n 1 + 2\n end\nend"
  formats "macro foo\n  if 1\n 1 + 2\n end\nend"
+  formats "1\n# hello\n\n\n"
  formats "1\n# hello\n\n\n"
+  formats "-> :: Foo . foo!"
  formats "-> :: Foo . foo!"
+  formats "def   foo (  @select)  \n  end"
  formats "def   foo (  @select)  \n  end"
+  formats "#### ###"
  formats "#### ###"
+  formats "foo(a: 1 // 2)"
  formats "foo(a: 1 // 2)"
+  formats "def foo(**z, &block)\nend"
  formats "def foo(**z, &block)\nend"
+  formats "foo(\n  1,\n  2\n) do\n  1\nend"
  formats "foo(\n  1,\n  2\n) do\n  1\nend"
+  formats "next { 1 ,  2 }"
  formats "next { 1 ,  2 }"
+  formats "-> : Int32 | String { 1 }"
  formats "-> : Int32 | String { 1 }"
+  formats "def foo(x : (   A  |  B   )) : (   A  |  B   )\nend"
  formats "def foo(x : (   A  |  B   )) : (   A  |  B   )\nend"
+  formats "return( 1 )"
  formats "return( 1 )"
+  formats "foo[1, &.bar]?"
  formats "foo[1, &.bar]?"
+  formats "extend  Foo"
  formats "extend  Foo"
+  formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n        : \"f\")"
  formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n        : \"f\")"
+  formats "foo : Foo * * * * *"
  formats "foo : Foo * * * * *"
+  formats "{1 => 2, 3 => 4}\n{5234234 => 234098234, 7 => 8}"
  formats "{1 => 2, 3 => 4}\n{5234234 => 234098234, 7 => 8}"
+  formats "a.b &.[c]?\n1"
  formats "a.b &.[c]?\n1"
+  formats "fun foo(x : Int32) : Int32\n  1\nend"
  formats "fun foo(x : Int32) : Int32\n  1\nend"
+  formats "foo.bar do\n  baz\n    .b\nend"
  formats "foo.bar do\n  baz\n    .b\nend"
+  formats "case\n# hello\nwhen 1\n  2\nend"
  formats "case\n# hello\nwhen 1\n  2\nend"
+  formats "x.try &.[]= 123, 456"
  formats "x.try &.[]= 123, 456"
+  formats "foo(  1  ,   2 )"
  formats "foo(  1  ,   2 )"
+  formats "return 1, {2, 3}"
  formats "return 1, {2, 3}"
+  formats "->( x , y )   { x }"
  formats "->( x , y )   { x }"
+  formats "foo &.[]?(1, 2)"
  formats "foo &.[]?(1, 2)"
+  formats "def foo(@[AnnOne]   @[AnnTwo]   &block : Int32 ->  ); end"
  formats "def foo(@[AnnOne]   @[AnnTwo]   &block : Int32 ->  ); end"
+  formats "lib Foo\nfun foo(x : Int32, ... )  :  Int32\nend"
  formats "lib Foo\nfun foo(x : Int32, ... )  :  Int32\nend"
+  formats "->( ){ x }"
  formats "->( ){ x }"
+  formats "if 1 &&\n2 &&\n3\n4\nend"
  formats "if 1 &&\n2 &&\n3\n4\nend"
+  formats "case / /\nwhen /x/, / /\n  / /\nend"
  formats "case / /\nwhen /x/, / /\n  / /\nend"
+  formats "def   foo (  bar  @select)  \n  end"
  formats "def   foo (  bar  @select)  \n  end"
+  formats "x = {% if flag?(:foo) %}\n      foo  +  bar\n    {% else %}\n      baz  +  qux\n    {% end %}"
  formats "x = {% if flag?(:foo) %}\n      foo  +  bar\n    {% else %}\n      baz  +  qux\n    {% end %}"
+  formats "lib Foo\n  fun foo =\n    \"bar\"(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo =\n    \"bar\"(Int32) : Int32\nend"
+  formats "foo(\"bar\": 1, \"baz qux\": 2)"
  formats "foo(\"bar\": 1, \"baz qux\": 2)"
+  formats "bar = foo([\n  1,\n  2,\n  3,\n])"
  formats "bar = foo([\n  1,\n  2,\n  3,\n])"
+  formats "foo = 1\n->foo.bar=(Int32)"
  formats "foo = 1\n->foo.bar=(Int32)"
+  formats "foo do  | x , y | \n x \n end"
  formats "foo do  | x , y | \n x \n end"
+  formats "{1, 2, 3}"
  formats "{1, 2, 3}"
+  formats "if 1\n[\n  a() # b\n]\nend"
  formats "if 1\n[\n  a() # b\n]\nend"
+  formats "self.as(Int32)"
  formats "self.as(Int32)"
+  formats "if 1\ncase 1\nwhen 2\n3\nend\nend"
  formats "if 1\ncase 1\nwhen 2\n3\nend\nend"
+  formats "next 1, {2, 3}"
  formats "next 1, {2, 3}"
+  formats "lib Foo\nstruct Foo\nx  :  Int32\ny : Float64\nend\nend"
  formats "lib Foo\nstruct Foo\nx  :  Int32\ny : Float64\nend\nend"
+  formats "foo(1,\n  &.bar)"
  formats "foo(1,\n  &.bar)"
+  formats "macro foo(\n  a,\n  *b,\n)\nend"
  formats "macro foo(\n  a,\n  *b,\n)\nend"
+  formats "1.<= { 3 }"
  formats "1.<= { 3 }"
+  formats "if a\n2; 3\nelse\n3\nend"
  formats "if a\n2; 3\nelse\n3\nend"
+  formats "! 1"
  formats "! 1"
+  formats "foo(\n  1,\n) {\n  2\n}"
  formats "foo(\n  1,\n) {\n  2\n}"
+  formats "def foo(@[MyAnn] & : String -> Nil); end"
  formats "def foo(@[MyAnn] & : String -> Nil); end"
+  formats "begin\n  select\n  when foo\n    # foo\n    # bar\n  else\n    # foo\n    # bar\n  end\nend"
  formats "begin\n  select\n  when foo\n    # foo\n    # bar\n  else\n    # foo\n    # bar\n  end\nend"
+  formats "1 .. 2"
  formats "1 .. 2"
+  formats "->foo"
  formats "->foo"
+  formats "foo(/ /)"
  formats "foo(/ /)"
+  formats "1.[]=() { 3 }"
  formats "1.[]=() { 3 }"
+  formats "foo(A |\nB |\nC)"
  formats "foo(A |\nB |\nC)"
+  formats "10 // a"
  formats "10 // a"
+  formats "a = foo(baz1 do\nend)"
  formats "a = foo(baz1 do\nend)"
+  formats "$~.bar"
  formats "$~.bar"
+  formats "{%\n  if true\n    1\n  else\n    2\n  end\n%}"
  formats "{%\n  if true\n    1\n  else\n    2\n  end\n%}"
+  formats "x  :   (A -> )"
  formats "x  :   (A -> )"
+  formats "foo.bar = \n1"
  formats "foo.bar = \n1"
+  formats "1   >   2"
  formats "1   >   2"
+  formats "\"\#{\"foo\"}\""
  formats "\"\#{\"foo\"}\""
+  formats "require \"foo\"\n\n@x : Int32\n\nclass Bar\nend"
  formats "require \"foo\"\n\n@x : Int32\n\nclass Bar\nend"
+  formats "1   ;\n    2"
  formats "1   ;\n    2"
+  formats "def foo()\n1\nend"
  formats "def foo()\n1\nend"
+  formats "   {%\na = 1\n   %}"
  formats "   {%\na = 1\n   %}"
+  formats "foo[] =1"
  formats "foo[] =1"
+  formats "def foo(a : T, b : U) forall T, U         #\n  #\nend"
  formats "def foo(a : T, b : U) forall T, U         #\n  #\nend"
+  formats "def foo(x)\n  case self // x\n  when 2\n    3\n  end\nend"
  formats "def foo(x)\n  case self // x\n  when 2\n    3\n  end\nend"
+  formats "class Foo\ndef foo\n1\nensure\n2\nend\nend"
  formats "class Foo\ndef foo\n1\nensure\n2\nend\nend"
+  formats "begin\n 0[1] rescue 2 end"
  formats "begin\n 0[1] rescue 2 end"
+  formats "%w(one   two  three)"
  formats "%w(one   two  three)"
+  formats "->( x )\n:\nInt32 { }"
  formats "->( x )\n:\nInt32 { }"
+  formats "foo { | ( a, *b , c ) | a }"
  formats "foo { | ( a, *b , c ) | a }"
+  formats "struct Foo\n  # bar\n  # baz\n1\nend"
  formats "struct Foo\n  # bar\n  # baz\n1\nend"
+  formats "long_variable_name = [{\n  :foo => 1,\n}, {\n  :bar => 2,\n}]"
  formats "long_variable_name = [{\n  :foo => 1,\n}, {\n  :bar => 2,\n}]"
+  formats "abstract def foo\nabstract def bar"
  formats "abstract def foo\nabstract def bar"
+  formats "foo 1, a: 1,\nb: 2,\nc: 3,\n&block"
  formats "foo 1, a: 1,\nb: 2,\nc: 3,\n&block"
+  formats "inner &.color=(@color)\n1"
  formats "inner &.color=(@color)\n1"
+  formats "1.as   Int32"
  formats "1.as   Int32"
+  formats "foo &.responds_to?(:foo).bar"
  formats "foo &.responds_to?(:foo).bar"
+  formats "require   \"foo\""
  formats "require   \"foo\""
+  formats "foo.bar. as?   Int32"
  formats "foo.bar. as?   Int32"
+  formats "1 == / /"
  formats "1 == / /"
+  formats "nil?"
  formats "nil?"
+  formats "foo{|x| x}"
  formats "foo{|x| x}"
+  formats "%(\n1\n)\n\n{\n    1 => 2,\n  234 => 5,\n}"
  formats "%(\n1\n)\n\n{\n    1 => 2,\n  234 => 5,\n}"
+  formats "$0"
  formats "$0"
+  formats "# Hello\n#\n# ```cr\n#   1\n# ```\n# Bye"
  formats "# Hello\n#\n# ```cr\n#   1\n# ```\n# Bye"
+  formats "{%\n  unless true\n    1\n  end\n%}"
  formats "{%\n  unless true\n    1\n  end\n%}"
+  formats "x.try &.[] 123"
  formats "x.try &.[] 123"
+  formats "<<-FOO\n1\nFOO\n\n{\n   1 => 2,\n  10 => 3,\n}"
  formats "<<-FOO\n1\nFOO\n\n{\n   1 => 2,\n  10 => 3,\n}"
+  formats "$?.bar"
  formats "$?.bar"
+  formats "->(x : Int32) { }"
  formats "->(x : Int32) { }"
+  formats "foo   &.responds_to?(:foo)"
  formats "foo   &.responds_to?(:foo)"
+  formats "if a\nelse\n2\nend"
  formats "if a\nelse\n2\nend"
+  formats "foo(\"b\#{1}\" \\\n\"baz\")"
  formats "foo(\"b\#{1}\" \\\n\"baz\")"
+  formats "`foo`"
  formats "`foo`"
+  formats "<<-HTML\n  \#{1}x\n  y\n  HTML"
  formats "<<-HTML\n  \#{1}x\n  y\n  HTML"
+  formats ":&**"
  formats ":&**"
+  formats "  <<-HTML\n  \#{1} \#{2}\n  HTML"
  formats "  <<-HTML\n  \#{1} \#{2}\n  HTML"
+  formats "def foo\nend\n\n\n\ndef bar\nend"
  formats "def foo\nend\n\n\n\ndef bar\nend"
+  formats "@[Foo]"
  formats "@[Foo]"
+  formats "def foo(\n  **a\n  # comment\n)\n  1\nend"
  formats "def foo(\n  **a\n  # comment\n)\n  1\nend"
+  formats "foo do\n  {{ foo <<-X\n  bar\n  X\n  }}\nend"
  formats "foo do\n  {{ foo <<-X\n  bar\n  X\n  }}\nend"
+  formats "asm(\n\"nop\"\n)"
  formats "asm(\n\"nop\"\n)"
+  formats "asm(\"a\" : :: : \"volatile\")"
  formats "asm(\"a\" : :: : \"volatile\")"
+  formats "foo{}"
  formats "foo{}"
+  formats "@foo : Int32 # comment\n\ndef foo\nend"
  formats "@foo : Int32 # comment\n\ndef foo\nend"
+  formats "foo[a, b: 2]"
  formats "foo[a, b: 2]"
+  formats "@[::Foo::Bar]"
  formats "@[::Foo::Bar]"
+  formats "Foo( Bar(  ) )"
  formats "Foo( Bar(  ) )"
+  formats "[\n  {\n    1 => 2,\n  }, {\n    3 => 4,\n  }, {\n    5 => 6,\n  },\n]"
  formats "[\n  {\n    1 => 2,\n  }, {\n    3 => 4,\n  }, {\n    5 => 6,\n  },\n]"
+  formats "def foo\n  1\nend\n\n# Comment\n\ndef bar\n  2\nend"
  formats "def foo\n  1\nend\n\n# Comment\n\ndef bar\n  2\nend"
+  formats "foo { | a, ( _ , c ) | a + c }"
  formats "foo { | a, ( _ , c ) | a + c }"
+  formats "yield (1).foo"
  formats "yield (1).foo"
+  formats "foo[ 1 , 2 ]"
  formats "foo[ 1 , 2 ]"
+  formats "foo.[1]"
  formats "foo.[1]"
+  formats "while / /\nend"
  formats "while / /\nend"
+  formats "->@foo.foo="
  formats "->@foo.foo="
+  formats "foo  x:  1"
  formats "foo  x:  1"
+  formats "lib Foo\n  fun bar = Bar\nend"
  formats "lib Foo\n  fun bar = Bar\nend"
+  formats "def   foo(x   :  (A | B)) \n  end"
  formats "def   foo(x   :  (A | B)) \n  end"
+  formats "def foo\n@x  :  Int32\nend"
  formats "def foo\n@x  :  Int32\nend"
+  formats "foo : self?"
  formats "foo : self?"
+  formats "1\n\n2"
  formats "1\n\n2"
+  formats "foo({\nbar: 1,\n})"
  formats "foo({\nbar: 1,\n})"
+  formats "def foo( x , & block  :   ->)\nend"
  formats "def foo( x , & block  :   ->)\nend"
+  formats "(a).b { }\nc"
  formats "(a).b { }\nc"
+  formats "foo : Foo*****"
  formats "foo : Foo*****"
+  formats "while 1\n2\nend"
  formats "while 1\n2\nend"
+  formats "unless a\nunless b\nelse\n4\nend\nend"
  formats "unless a\nunless b\nelse\n4\nend\nend"
+  formats "case  1 \n when 2 \n 3 \n when 4 \n 5 \n end"
  formats "case  1 \n when 2 \n 3 \n when 4 \n 5 \n end"
+  formats "->Foo.foo?"
  formats "->Foo.foo?"
+  formats "{% begin %}\n  \"\n    foo\"\n{% end %}"
  formats "{% begin %}\n  \"\n    foo\"\n{% end %}"
+  formats "lib Foo\n  fun foo = bar(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo = bar(Int32) : Int32\nend"
+  formats "yield  *1  , *2"
  formats "yield  *1  , *2"
+  formats "0_u64"
  formats "0_u64"
+  formats "\"1\#{\"4\#{\"\#{\"2\"}\"}3\"}3\#{__DIR__}4\#{5}6\""
  formats "\"1\#{\"4\#{\"\#{\"2\"}\"}3\"}3\#{__DIR__}4\#{5}6\""
+  formats "foo : StaticArray(Foo, 12)[34]"
  formats "foo : StaticArray(Foo, 12)[34]"
+  formats "lib Foo\n  fun foo = bar(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo = bar(Int32) : Int32\nend"
+  formats "a = b = 1\na, b =\n  b, a"
  formats "a = b = 1\na, b =\n  b, a"
+  formats "def foo\n  <<-FOO\n  foo \#{1}\n  FOO\nend"
  formats "def foo\n  <<-FOO\n  foo \#{1}\n  FOO\nend"
+  formats "->{}"
  formats "->{}"
+  formats "def   foo (  &@block)  \n  end"
  formats "def   foo (  &@block)  \n  end"
+  formats "def foo(a, **b, # comment\n        &block)\nend"
  formats "def foo(a, **b, # comment\n        &block)\nend"
+  formats "1 # foo\n/ 1 /"
  formats "1 # foo\n/ 1 /"
+  formats "yield(\n1 , \n2)"
  formats "yield(\n1 , \n2)"
+  formats "def foo\n1\nensure\n2\nend"
  formats "def foo\n1\nensure\n2\nend"
+  formats "-> : Array(Int32) {}"
  formats "-> : Array(Int32) {}"
+  formats "(())"
  formats "(())"
+  formats "{ \"foo\":  1 }"
  formats "{ \"foo\":  1 }"
+  formats "foo([\n  1,\n  bar do\n  end,\n  [\n    2,\n  ],\n])"
  formats "foo([\n  1,\n  bar do\n  end,\n  [\n    2,\n  ],\n])"
+  formats "module Moo ( T )\nend"
  formats "module Moo ( T )\nend"
+  formats "# ```\n# macro foo\n#   1\n# end\n# ```\n"
  formats "# ```\n# macro foo\n#   1\n# end\n# ```\n"
+  formats "if 1\n1\n\n# foo\nend"
  formats "if 1\n1\n\n# foo\nend"
+  formats "asm(\"nop\" ::: \"eax\" )"
  formats "asm(\"nop\" ::: \"eax\" )"
+  formats "String?"
  formats "String?"
+  formats "[] of Foo"
  formats "[] of Foo"
+  formats "\"hel\nlo\""
  formats "\"hel\nlo\""
+  formats "1 + \\\n2\n3"
  formats "1 + \\\n2\n3"
+  formats "foo.bar # comment\n  .baz"
  formats "foo.bar # comment\n  .baz"
+  formats "module Foo\n1\n\n# foo\nend"
  formats "module Foo\n1\n\n# foo\nend"
+  formats "foo.as(T).bar"
  formats "foo.as(T).bar"
+  formats "alias A = (B) -> C"
  formats "alias A = (B) -> C"
+  formats "next  *1  ,2"
  formats "next  *1  ,2"
+  formats "foo a , **b"
  formats "foo a , **b"
+  formats "<<-HTML\n  \#{\"fo\#{\"o\"}\"}\n  HTML"
  formats "<<-HTML\n  \#{\"fo\#{\"o\"}\"}\n  HTML"
+  formats "if 1\nif 2\n3 # foo\nend\nend"
  formats "if 1\nif 2\n3 # foo\nend\nend"
+  formats "foo 1,\n2"
  formats "foo 1,\n2"
+  formats "__DIR__"
  formats "__DIR__"
+  formats "def foo : self | Nil\n  nil\nend"
  formats "def foo : self | Nil\n  nil\nend"
+  formats "def foo\n  {{@type}}\nend"
  formats "def foo\n  {{@type}}\nend"
+  formats "[1, 2,\n  3, 4]\n"
  formats "[1, 2,\n  3, 4]\n"
+  formats "@[Foo(\n  1,\n)]"
  formats "@[Foo(\n  1,\n)]"
+  formats "foo(\n 1, # hola\n2, # chau\n )"
  formats "foo(\n 1, # hola\n2, # chau\n )"
+  formats "foo(1 + \n2)"
  formats "foo(1 + \n2)"
+  formats "{\n    1 => 2, 3 => 4,\n  567 => 8910,\n}"
  formats "{\n    1 => 2, 3 => 4,\n  567 => 8910,\n}"
+  formats "macro foo\n  {% if 1 %} 2 {% elsif 3 %} 4 {% else %} 5 {% end %}\nend"
  formats "macro foo\n  {% if 1 %} 2 {% elsif 3 %} 4 {% else %} 5 {% end %}\nend"
+  formats "a = 1\ncase\nwhen 2\nelse\n  a /= 3\nend"
  formats "a = 1\ncase\nwhen 2\nelse\n  a /= 3\nend"
+  formats "x : Int32 |\nString"
  formats "x : Int32 |\nString"
+  formats "def /(x)\n  1\nend"
  formats "def /(x)\n  1\nend"
+  formats "def   foo (  x , y )  \n  end"
  formats "def   foo (  x , y )  \n  end"
+  formats "foo.[] = 1"
  formats "foo.[] = 1"
+  formats "%x(foo \#{ bar })"
  formats "%x(foo \#{ bar })"
+  formats "{% if z %}\n  class   Foo\n  end\n{% end %}"
  formats "{% if z %}\n  class   Foo\n  end\n{% end %}"
+  formats "def foo(\n  a,\n  b\n)\nend"
  formats "def foo(\n  a,\n  b\n)\nend"
+  formats "macro foo\n  macro bar\n    \\{% begin %}\n      \\\\{% puts %}\n    \\{% end %}\n  end\nend"
  formats "macro foo\n  macro bar\n    \\{% begin %}\n      \\\\{% puts %}\n    \\{% end %}\n  end\nend"
+  formats "return  *1  , *2"
  formats "return  *1  , *2"
+  formats "%w{one(   two(  three)}"
  formats "%w{one(   two(  three)}"
+  formats "foo &.bar.nil?"
  formats "foo &.bar.nil?"
+  formats "x  :   (A | B)"
  formats "x  :   (A | B)"
+  formats "-> :: Foo . foo"
  formats "-> :: Foo . foo"
+  formats "def foo\n  1\n  # Comment\n\n\nend"
  formats "def foo\n  1\n  # Comment\n\n\nend"
+  formats "begin\n1\nrescue   Int32 \n3\nend"
  formats "begin\n1\nrescue   Int32 \n3\nend"
+  formats "module M\n  @[MyAnn(\n    1\n\n  )]\nend"
  formats "module M\n  @[MyAnn(\n    1\n\n  )]\nend"
+  formats "1 rescue 2"
  formats "1 rescue 2"
+  formats "x  :   A?"
  formats "x  :   A?"
+  formats "foo(1, # foo\n  &.bar)"
  formats "foo(1, # foo\n  &.bar)"
+  formats "class Bar\nprotected def foo(x)\na=b(c)\nend\nend"
  formats "class Bar\nprotected def foo(x)\na=b(c)\nend\nend"
+  formats "begin\n1\nrescue\n3\nensure\n2\nend"
  formats "begin\n1\nrescue\n3\nensure\n2\nend"
+  formats "[\n1,\n2,\n3]"
  formats "[\n1,\n2,\n3]"
+  formats "a = 1 if 1 == 2 ||\n  3 == 4\n"
  formats "a = 1 if 1 == 2 ||\n  3 == 4\n"
+  formats "def foo(x)\n  self // x\nend"
  formats "def foo(x)\n  self // x\nend"
+  formats "  macro foo\n  end\n\n  :+"
  formats "  macro foo\n  end\n\n  :+"
+  formats "def foo( x , & block  : Int32 ->)\nend"
  formats "def foo( x , & block  : Int32 ->)\nend"
+  formats ":>>"
  formats ":>>"
+  formats "\"\\a\\c\\b\\d\""
  formats "\"\\a\\c\\b\\d\""
+  formats "while 1 &&\n2 &&\n3\n4\nend"
  formats "while 1 &&\n2 &&\n3\n4\nend"
+  formats "long_variable_name = [1, 2, 3,\n                      4, 5, 6]"
  formats "long_variable_name = [1, 2, 3,\n                      4, 5, 6]"
+  formats "\"foo \#{bar}\" \\\n \"baz\""
  formats "\"foo \#{bar}\" \\\n \"baz\""
+  formats "foo   &.bar( 1 , 2 )"
  formats "foo   &.bar( 1 , 2 )"
+  formats "Union(Int32, String)?"
  formats "Union(Int32, String)?"
+  formats "coco.lala\nfoo\n  .bar"
  formats "coco.lala\nfoo\n  .bar"
+  formats "foo.as   Int32*"
  formats "foo.as   Int32*"
+  formats "foo  1  ,   2"
  formats "foo  1  ,   2"
+  formats "1 # foo\n1234 # bar\n\n10 # bar"
  formats "1 # foo\n1234 # bar\n\n10 # bar"
+  formats "while 1;\n2; end"
  formats "while 1;\n2; end"
+  formats "foo (1), 2"
  formats "foo (1), 2"
+  formats "foo.bar(&.baz)"
  formats "foo.bar(&.baz)"
+  formats "def foo(a : T, b : U) forall T, U\n  #\nend"
  formats "def foo(a : T, b : U) forall T, U\n  #\nend"
+  formats "def foo(a,\n        *b)\nend"
  formats "def foo(a,\n        *b)\nend"
+  formats "foo[1, &.bar]"
  formats "foo[1, &.bar]"
+  formats "a = 1\n;\nb = 2"
  formats "a = 1\n;\nb = 2"
+  formats "{1 => foo <<-X\nbar\nX\n}"
  formats "{1 => foo <<-X\nbar\nX\n}"
+  formats "next( 1 , 2 )"
  formats "next( 1 , 2 )"
+  formats "SomeLib.UppercasedFunCall"
  formats "SomeLib.UppercasedFunCall"
+  formats "1 if 2\n# foo\n3"
  formats "1 if 2\n# foo\n3"
+  formats "def foo(x) # bar\n  # baz\nend"
  formats "def foo(x) # bar\n  # baz\nend"
+  formats ":+"
  formats ":+"
+  formats "asm(\"a\" : \"b\"(c)\n)"
  formats "asm(\"a\" : \"b\"(c)\n)"
+  formats "call(foo <<-X\nbar\nX\n)"
  formats "call(foo <<-X\nbar\nX\n)"
+  formats "return {1, 2}, {3, 4}"
  formats "return {1, 2}, {3, 4}"
+  formats "def foo(@[AnnOne] @[AnnTwo] v); end"
  formats "def foo(@[AnnOne] @[AnnTwo] v); end"
+  formats "unless a\n2\n3\nelse\n4\n5\nend"
  formats "unless a\n2\n3\nelse\n4\n5\nend"
+  formats "->( x : Int32 , y )   { x }"
  formats "->( x : Int32 , y )   { x }"
+  formats "lib Foo\nend"
  formats "lib Foo\nend"
+  formats "foo.bar=(2)\n1"
  formats "foo.bar=(2)\n1"
+  formats "foo[]"
  formats "foo[]"
+  formats "x\n# foo\n\n# bar"
  formats "x\n# foo\n\n# bar"
+  formats "foo = 1\n->foo.foo!"
  formats "foo = 1\n->foo.foo!"
+  formats "\n# hello\n\n1"
  formats "\n# hello\n\n1"
+  formats "->\n:\nInt32\n{\n}"
  formats "->\n:\nInt32\n{\n}"
+  formats "return  1"
  formats "return  1"
+  formats "begin\n  1 \\\n    + 2\n  3\nend"
  formats "begin\n  1 \\\n    + 2\n  3\nend"
+  formats "if 1\n  return foo(\n    1,\n    2,\n  )\nend"
  formats "if 1\n  return foo(\n    1,\n    2,\n  )\nend"
+  formats "def foo(\n   @[MyAnn]\n bar\n); end"
  formats "def foo(\n   @[MyAnn]\n bar\n); end"
+  formats ":-"
  formats ":-"
+  formats "a = foo(1, 2, {\n  foo: 1,\n  bar: 2,\n})"
  formats "a = foo(1, 2, {\n  foo: 1,\n  bar: 2,\n})"
+  formats "1_234"
  formats "1_234"
+  formats "lib Foo\n  fun foo =\n    bar(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo =\n    bar(Int32) : Int32\nend"
+  formats "a &.b[c]?"
  formats "a &.b[c]?"
+  formats "asm(\"nop\" :: )"
  formats "asm(\"nop\" :: )"
+  formats "[\n# foo\n] of String"
  formats "[\n# foo\n] of String"
+  formats "0i64"
  formats "0i64"
+  formats "case 1\nwhen 2\n#comment\nend"
  formats "case 1\nwhen 2\n#comment\nend"
+  formats "1.===(2) { 3 }"
  formats "1.===(2) { 3 }"
+  formats "->{\nx\n}"
  formats "->{\nx\n}"
+  formats "def foo(x, **z)\nend"
  formats "def foo(x, **z)\nend"
+  formats "[ * [ * [ 1 ] ], *    \n[ 2] ]"
  formats "[ * [ * [ 1 ] ], *    \n[ 2] ]"
+  formats "if 1;\n2; end"
  formats "if 1;\n2; end"
+  formats "1.!= do\nend"
  formats "1.!= do\nend"
+  formats "def foo(x) : Int32 # bar\n  # baz\nend"
  formats "def foo(x) : Int32 # bar\n  # baz\nend"
+  formats "::NamedTuple(T)"
  formats "::NamedTuple(T)"
+  formats "\"hel\\nlo\""
  formats "\"hel\\nlo\""
+  formats "def foo\n\n1\n\nend"
  formats "def foo\n\n1\n\nend"
+  formats "[\n  <<-EOF,\n  foo\n  EOF\n  <<-BAR,\n  bar\n  BAR\n]"
  formats "[\n  <<-EOF,\n  foo\n  EOF\n  <<-BAR,\n  bar\n  BAR\n]"
+  does not add `&` without flag `method_signature_yield`
+    formats "def foo(a, **b)\n  yield\nend"
    formats "def foo(a, **b)\n  yield\nend"
+    formats "def foo(\nx,\n)\n  yield\nend"
    formats "def foo(\nx,\n)\n  yield\nend"
+    formats "def foo(x,\n)\n  yield\nend"
    formats "def foo(x,\n)\n  yield\nend"
+    formats "def foo(x,\ny,)\n  yield\nend"
    formats "def foo(x,\ny,)\n  yield\nend"
+    formats "def foo # bar\n  yield\nend"
    formats "def foo # bar\n  yield\nend"
+    formats "def foo\n  yield\nend"
    formats "def foo\n  yield\nend"
+    formats "def foo(\nx)\n  yield\nend"
    formats "def foo(\nx)\n  yield\nend"
+    formats "def foo(x)\n  yield\nend"
    formats "def foo(x)\n  yield\nend"
+    formats "def foo(\n)\n  yield\nend"
    formats "def foo(\n)\n  yield\nend"
+    formats "def foo(\nx, y)\n  yield\nend"
    formats "def foo(\nx, y)\n  yield\nend"
+    formats "def foo()\n  yield\nend"
    formats "def foo()\n  yield\nend"
+    formats "def foo(x ,)\n  yield\nend"
    formats "def foo(x ,)\n  yield\nend"
+    formats "def foo(x\n)\n  yield\nend"
    formats "def foo(x\n)\n  yield\nend"
+    formats "def foo(\nx,\ny)\n  yield\nend"
    formats "def foo(\nx,\ny)\n  yield\nend"
+    formats "def foo(x,\n        y)\n  yield\nend"
    formats "def foo(x,\n        y)\n  yield\nend"
+  formats "lib LibFoo\n  {% begin %}\n    fun x = y(Int32)\n  {% end %}\nend"
  formats "lib LibFoo\n  {% begin %}\n    fun x = y(Int32)\n  {% end %}\nend"
+  formats "foo &.bar.as?(T)"
  formats "foo &.bar.as?(T)"
+  formats "if 1\n  {% if 2 %} {% end %}\nend"
  formats "if 1\n  {% if 2 %} {% end %}\nend"
+  formats "<<-HTML\n  \#{\"foo\"}\#{1}\n  HTML"
  formats "<<-HTML\n  \#{\"foo\"}\#{1}\n  HTML"
+  formats "a=1"
  formats "a=1"
+  formats "1.<=(2) { 3 }"
  formats "1.<=(2) { 3 }"
+  formats "break( 1 )"
  formats "break( 1 )"
+  formats "<<-HTML\n  \#{1}x\n  HTML"
  formats "<<-HTML\n  \#{1}x\n  HTML"
+  formats "lib Foo\nfun foo(x   :   Int32, y   :   Float64)  :  Int32\nend"
  formats "lib Foo\nfun foo(x   :   Int32, y   :   Float64)  :  Int32\nend"
+  formats "foo.bar += \n1"
  formats "foo.bar += \n1"
+  formats "-> : Int32 {}"
  formats "-> : Int32 {}"
+  formats "enum Foo\nA = 1\nend"
  formats "enum Foo\nA = 1\nend"
+  formats "{% if true %}\n  # x\n  #\n{% end %}\n\n# ```\n# x\n# ```"
  formats "{% if true %}\n  # x\n  #\n{% end %}\n\n# ```\n# x\n# ```"
+  formats "macro foo\n  \\{\nend"
  formats "macro foo\n  \\{\nend"
+  formats "@x[ 1 ]   &&=   2"
  formats "@x[ 1 ]   &&=   2"
+  formats "\"foo \#{ __DIR__ }\""
  formats "\"foo \#{ __DIR__ }\""
+  formats "foo.bar. as   Int32"
  formats "foo.bar. as   Int32"
+  formats "-> : {Int32, String} {}"
  formats "-> : {Int32, String} {}"
+  formats "enum Baz\nA = 1\nFOO = 2\n\nEX = 3\nend"
  formats "enum Baz\nA = 1\nFOO = 2\n\nEX = 3\nend"
+  formats "class Foo ( *T, U )\nend"
  formats "class Foo ( *T, U )\nend"
+  formats "a = \"\n\"\n1    # 1\n12 # 2\n"
  formats "a = \"\n\"\n1    # 1\n12 # 2\n"
+  formats "::Tuple()"
  formats "::Tuple()"
+  formats "/foo \#{ bar }/"
  formats "/foo \#{ bar }/"
+  formats "macro foo\n  {% for x in y %}\\ 2 {% end %}\\\nend"
  formats "macro foo\n  {% for x in y %}\\ 2 {% end %}\\\nend"
+  formats "foo : (self)?"
  formats "foo : (self)?"
+  formats "x = a do\n  1 ||\n    2\nend"
  formats "x = a do\n  1 ||\n    2\nend"
+  formats "Foo( x:  Int32  ,  y: Float64 )"
  formats "Foo( x:  Int32  ,  y: Float64 )"
+  formats "def foo(**z)\nend"
  formats "def foo(**z)\nend"
+  formats "foo(\n  1,\n  # 2,\n  # 3,\n)"
  formats "foo(\n  1,\n  # 2,\n  # 3,\n)"
+  formats "@x   ||=   1"
  formats "@x   ||=   1"
+  formats "1 ||\n  # foo\n  2"
  formats "1 ||\n  # foo\n  2"
+  formats "begin\n  1\n  # Comment\n\n\nend"
  formats "begin\n  1\n  # Comment\n\n\nend"
+  formats "foo { | a, ( b , c ) | a + b + c }"
  formats "foo { | a, ( b , c ) | a + b + c }"
+  formats "foo &.as?(T).bar"
  formats "foo &.as?(T).bar"
+  formats "{ 1   =>   2 ,\n\n   3  =>  4 }"
  formats "{ 1   =>   2 ,\n\n   3  =>  4 }"
+  formats "->{}"
  formats "->{}"
+  formats "foo : Pointer(Foo)*"
  formats "foo : Pointer(Foo)*"
+  formats "while 1  # foo\nend"
  formats "while 1  # foo\nend"
+  formats "()"
  formats "()"
+  formats "def   foo (  @@x)  \n  end"
  formats "def   foo (  @@x)  \n  end"
+  formats "foo[&.bar] ||= 1"
  formats "foo[&.bar] ||= 1"
+  formats "foo &.[]=(1, 2)"
  formats "foo &.[]=(1, 2)"
+  formats "def foo\n@x   =  uninitialized   Int32\nend"
  formats "def foo\n@x   =  uninitialized   Int32\nend"
+  formats "case nil\nelse nil; nil\n# comment\nend"
  formats "case nil\nelse nil; nil\n# comment\nend"
+  formats "foo(->{\n  1 + 2\n})"
  formats "foo(->{\n  1 + 2\n})"
+  formats "def foo(@x)\n\nrescue\nend"
  formats "def foo(@x)\n\nrescue\nend"
+  formats "unless a\nunless b\n3\nelse\n4\nend\nend"
  formats "unless a\nunless b\n3\nelse\n4\nend\nend"
+  formats "#######"
  formats "#######"
+  formats "{\n  variables => true,\n  query     => <<-HEREDOC,\n    foo\n  HEREDOC\n}"
  formats "{\n  variables => true,\n  query     => <<-HEREDOC,\n    foo\n  HEREDOC\n}"
+  formats "macro foo\n  {% if 1 %}\\ 2 {% else %}\\ 3 {% end %}\\\nend"
  formats "macro foo\n  {% if 1 %}\\ 2 {% else %}\\ 3 {% end %}\\\nend"
+  formats "case / /\nwhen / /, /x/\n  / /\nend"
  formats "case / /\nwhen / /, /x/\n  / /\nend"
+  formats "foo 1 ,  &bar"
  formats "foo 1 ,  &bar"
+  formats "a = foo(bar(\n  1,\n  2,\n))"
  formats "a = foo(bar(\n  1,\n  2,\n))"
+  formats "def foo\n1\nrescue\n2\nend"
  formats "def foo\n1\nrescue\n2\nend"
+  formats "foo(1, 2, {\n  foo: 1,\n  bar: 2,\n})"
  formats "foo(1, 2, {\n  foo: 1,\n  bar: 2,\n})"
+  formats "case 1\nwhen 8     then 1\nwhen 16    then 2\nwhen 256   then 3\nwhen 'a'   then 5\nwhen \"foo\" then 6\nelse            4\nend"
  formats "case 1\nwhen 8     then 1\nwhen 16    then 2\nwhen 256   then 3\nwhen 'a'   then 5\nwhen \"foo\" then 6\nelse            4\nend"
+  formats "-> : {x: Int32, y: String} {}"
  formats "-> : {x: Int32, y: String} {}"
+  formats "foo 1, a: 1,\nb: 2,\nc: 3"
  formats "foo 1, a: 1,\nb: 2,\nc: 3"
+  formats ":\"foo bar\""
  formats ":\"foo bar\""
+  formats "case 1\nwhen 1      then 1\nwhen 123    then 2\nwhen 1..123 then 3\nelse             4\nend"
  formats "case 1\nwhen 1      then 1\nwhen 123    then 2\nwhen 1..123 then 3\nelse             4\nend"
+  formats "foo \\\nbar"
  formats "foo \\\nbar"
+  formats "<<-HTML\n  hello \n  HTML"
  formats "<<-HTML\n  hello \n  HTML"
+  formats "unless a\n2\nelse\n3\nend"
  formats "unless a\n2\nelse\n3\nend"
+  formats "macro []=(x, y)\nend"
  formats "macro []=(x, y)\nend"
+  formats "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2) )"
  formats "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2) )"
+  formats "foo &.nil?"
  formats "foo &.nil?"
+  formats "def +(x)\nend"
  formats "def +(x)\nend"
+  formats "def foo(\n  @[MyAnn]\n  bar\n); end"
  formats "def foo(\n  @[MyAnn]\n  bar\n); end"
+  formats "a &.a.!"
  formats "a &.a.!"
+  formats "next { {1, 2}, {3, 4} }, 5"
  formats "next { {1, 2}, {3, 4} }, 5"
+  formats "begin\n1\nrescue   ex   :   Int32  |  Float64  \n3\nend"
  formats "begin\n1\nrescue   ex   :   Int32  |  Float64  \n3\nend"
+  formats "class Foo\ndef   foo (\nx ,\n y )  \n  end\nend"
  formats "class Foo\ndef   foo (\nx ,\n y )  \n  end\nend"
+  formats "  (  1;  2;   3  )  "
  formats "  (  1;  2;   3  )  "
+  formats "foo(1, 2,)"
  formats "foo(1, 2,)"
+  formats "  [   1  ,    2  ,    3  ]  "
  formats "  [   1  ,    2  ,    3  ]  "
+  formats "'\\u{0123}'"
  formats "'\\u{0123}'"
+  formats "module Readline\n  @@completion_proc : (String -> Array(String)?) | (String -> Array(String)) | Nil\nend"
  formats "module Readline\n  @@completion_proc : (String -> Array(String)?) | (String -> Array(String)) | Nil\nend"
+  formats "yield  1 ,  2"
  formats "yield  1 ,  2"
+  formats "%(hello)"
  formats "%(hello)"
+  formats "[ # foo\n  1,\n]"
  formats "[ # foo\n  1,\n]"
+  formats "a = \\\n  # foo\n  bar(1)"
  formats "a = \\\n  # foo\n  bar(1)"
+  formats "lib Foo\nstruct Foo\nx  ,  y  :  Int32\nend\nend"
  formats "lib Foo\nstruct Foo\nx  ,  y  :  Int32\nend\nend"
+  formats "lib Foo\nfun foo  :  Int32\nend"
  formats "lib Foo\nfun foo  :  Int32\nend"
+  formats "{} of A => B\n{} of Foo => Bar"
  formats "{} of A => B\n{} of Foo => Bar"
+  formats "def foo(@[MyAnn] &); end"
  formats "def foo(@[MyAnn] &); end"
+  formats "Set{ # foo\n  1,\n}"
  formats "Set{ # foo\n  1,\n}"
+  formats "[\n  1, 2, # foo\n  3,\n]"
  formats "[\n  1, 2, # foo\n  3,\n]"
+  formats "a = [\n1,\n2]"
  formats "a = [\n1,\n2]"
+  formats "def foo(\n  foo,\n  @[MyAnn] &block\n); end"
  formats "def foo(\n  foo,\n  @[MyAnn] &block\n); end"
+  formats "lib Foo\n  fun foo(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo(Int32) : Int32\nend"
+  formats "foo[1, &.bar] ||= 1"
  formats "foo[1, &.bar] ||= 1"
+  formats "a  ||  b"
  formats "a  ||  b"
+  formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1),\n\"c\"(2) )"
  formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1),\n\"c\"(2) )"
+  formats "def foo : Int32\n  1\nend"
  formats "def foo : Int32\n  1\nend"
+  formats "bar do\n  call(foo <<-X\n  bar\n  X\n  )\nend"
  formats "bar do\n  call(foo <<-X\n  bar\n  X\n  )\nend"
+  formats "X(typeof(begin\n  e.is_a?(Y)\nend))"
  formats "X(typeof(begin\n  e.is_a?(Y)\nend))"
+  formats "break  1 ,  2"
  formats "break  1 ,  2"
+  formats "foo  x:  1,  y:  2"
  formats "foo  x:  1,  y:  2"
+  formats "foo(\n# x\n1,\n\n# y\nz: 2,\n\n# a\nb: 3)"
  formats "foo(\n# x\n1,\n\n# y\nz: 2,\n\n# a\nb: 3)"
+  formats "   {{ 1 + 2 }}"
  formats "   {{ 1 + 2 }}"
+  formats ":*"
  formats ":*"
+  formats "->@@foo.foo"
  formats "->@@foo.foo"
+  formats "if 1\n2\n3\n# foo\nend"
  formats "if 1\n2\n3\n# foo\nend"
+  formats "foo.@bar"
  formats "foo.@bar"
+  formats "module Foo\n# nothing\nend"
  formats "module Foo\n# nothing\nend"
+  formats "foo &.[](  1, 2  )"
  formats "foo &.[](  1, 2  )"
+  formats "foo.% bar"
  formats "foo.% bar"
+  formats "NamedTuple(a: Int32,)"
  formats "NamedTuple(a: Int32,)"
+  formats "@a"
  formats "@a"
+  formats "def foo(@[AnnOne]   @[AnnTwo] v); end"
  formats "def foo(@[AnnOne]   @[AnnTwo] v); end"
+  formats "foo(\n  <<-HERE,\n  hello\n  HERE\n  foo: 1,\n)"
  formats "foo(\n  <<-HERE,\n  hello\n  HERE\n  foo: 1,\n)"
+  formats "::StaticArray(T)"
  formats "::StaticArray(T)"
+  formats "foo(1, &.bar)"
  formats "foo(1, &.bar)"
+  formats "lib LibFoo\n  struct Bar\n    {% begin %}\n      x : Int32\n    {% end %}\n  end\nend"
  formats "lib LibFoo\n  struct Bar\n    {% begin %}\n      x : Int32\n    {% end %}\n  end\nend"
+  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n\n  @[MyAnn] @[MyAnn] baz,\n\n  @[MyAnn]\n  @[MyAnn]\n  biz\n); end"
  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n\n  @[MyAnn] @[MyAnn] baz,\n\n  @[MyAnn]\n  @[MyAnn]\n  biz\n); end"
+  assert
  assert
+  formats "__LINE__"
  formats "__LINE__"
+  formats "foo &.bar.as(T)"
  formats "foo &.bar.as(T)"
+  formats "macro foo # bar\n  baz\nend"
  formats "macro foo # bar\n  baz\nend"
+  formats "(1)"
  formats "(1)"
+  formats "[\n  a() # b\n]"
  formats "[\n  a() # b\n]"
+  formats "   {{\n1 + 2\n   }}"
  formats "   {{\n1 + 2\n   }}"
+  formats "<<-FOO\nfoo\nfoo\nFOO"
  formats "<<-FOO\nfoo\nfoo\nFOO"
+  formats "return  1  , *2"
  formats "return  1  , *2"
+  formats "1.== do\nend"
  formats "1.== do\nend"
+  formats "run(\"a\", 1)"
  formats "run(\"a\", 1)"
+  formats "foo[ 1 , 2 ]   =3"
  formats "foo[ 1 , 2 ]   =3"
+  formats "a = begin\n  1\nend\n\na =\nbegin\n  1\nend\n\na = if 1\n  2\nend\n\nb = 1\nb ||= begin\n  2\nend\n\nb ||= if 1\n  2\nend\n\nb += if 1\n  2\nend\n\nb +=\nif 1\n  2\nend\n\na, b = begin\n  1\nend\n\na, b =\nbegin\n  1\nend\n\nc[x] = begin\n  2\nend\n\nc[x] =\nbegin\n  2\nend\n\nc[x] = if 1\n  2\nend\n\nc[x] ||= begin 1\n  2\nend\n\nc[x] ||= if 1\n  2\nend\n\nc[x] += if 1\n  2\nend\n\nc[x] += begin 1\n  2\nend\n\nc[x] +=\nbegin\n  1\n  2\nend\n\nfoo.bar = begin\nend\n\nfoo.bar =\nbegin\nend\n\nfoo.bar = if\n  2\nend\n\nfoo.bar += begin\n  2\nend\n\nfoo.bar += if\n  2\nend\n\n"
  formats "a = begin\n  1\nend\n\na =\nbegin\n  1\nend\n\na = if 1\n  2\nend\n\nb = 1\nb ||= begin\n  2\nend\n\nb ||= if 1\n  2\nend\n\nb += if 1\n  2\nend\n\nb +=\nif 1\n  2\nend\n\na, b = begin\n  1\nend\n\na, b =\nbegin\n  1\nend\n\nc[x] = begin\n  2\nend\n\nc[x] =\nbegin\n  2\nend\n\nc[x] = if 1\n  2\nend\n\nc[x] ||= begin 1\n  2\nend\n\nc[x] ||= if 1\n  2\nend\n\nc[x] += if 1\n  2\nend\n\nc[x] += begin 1\n  2\nend\n\nc[x] +=\nbegin\n  1\n  2\nend\n\nfoo.bar = begin\nend\n\nfoo.bar =\nbegin\nend\n\nfoo.bar = if\n  2\nend\n\nfoo.bar += begin\n  2\nend\n\nfoo.bar += if\n  2\nend\n\n"
+  formats "-> :: foo"
  formats "-> :: foo"
+  formats "module Foo;end"
  formats "module Foo;end"
+  formats "1.===() { 3 }"
  formats "1.===() { 3 }"
+  formats "def foo(x y)\nend"
  formats "def foo(x y)\nend"
+  formats "def foo\nselect   \n when  foo \n 2 \n else \n 3 \nend\nend"
  formats "def foo\nselect   \n when  foo \n 2 \n else \n 3 \nend\nend"
+  formats "a = 1\nb, c = 2, 3\n{% begin %}\n  a |= 1\n  b |= 2\n  c |= 3\n{% end %}"
  formats "a = 1\nb, c = 2, 3\n{% begin %}\n  a |= 1\n  b |= 2\n  c |= 3\n{% end %}"
+  formats "<<-HTML\n  foo\n  \#{\"foo\"}\n  HTML"
  formats "<<-HTML\n  foo\n  \#{\"foo\"}\n  HTML"
+  formats "asm(\"a\" :::: \"volatile\"\n)"
  formats "asm(\"a\" :::: \"volatile\"\n)"
+  formats "asm(\"nop\" : \"a\"(0),\n\"b\"(1)\n: \"c\"(2), \"d\"(3) )"
  formats "asm(\"nop\" : \"a\"(0),\n\"b\"(1)\n: \"c\"(2), \"d\"(3) )"
+  formats "foo bar:baz, qux:other"
  formats "foo bar:baz, qux:other"
+  formats "1 #=> 2"
  formats "1 #=> 2"
+  formats "foo (1)"
  formats "foo (1)"
+  formats "1 && (\n  2 || 3\n)"
  formats "1 && (\n  2 || 3\n)"
+  formats "1.as?   Int32"
  formats "1.as?   Int32"
+  formats "foo"
  formats "foo"
+  formats "macro foo\nend"
  formats "macro foo\nend"
+  formats "foo(baz1 do\nend)"
  formats "foo(baz1 do\nend)"
+  formats "begin\n  1 + \\\n    2\n  3\nend"
  formats "begin\n  1 + \\\n    2\n  3\nend"
+  formats "def   foo (  x  =   1 )  \n  end"
  formats "def   foo (  x  =   1 )  \n  end"
+  formats "def foo(\n  foo,\n  @[MyAnn]\n  &block\n); end"
  formats "def foo(\n  foo,\n  @[MyAnn]\n  &block\n); end"
+  formats "yield"
  formats "yield"
+  formats "foo\n.bar\n.baz"
  formats "foo\n.bar\n.baz"
+  formats "String???"
  formats "String???"
+  formats "foo   &bar"
  formats "foo   &bar"
+  formats "case  1 \n when 2 \n 3 \n else \n 4 \n end"
  formats "case  1 \n when 2 \n 3 \n else \n 4 \n end"
+  formats "{ # foo\n  1,\n}"
  formats "{ # foo\n  1,\n}"
+  formats "macro foo(x, *, z)\nend"
  formats "macro foo(x, *, z)\nend"
+  formats "def   foo (  x  :   Int32  =  1 )  \n  end"
  formats "def   foo (  x  :   Int32  =  1 )  \n  end"
+  formats "p = Foo[\n  1, 2, 3,\n  4, 5, 6\n]\n"
  formats "p = Foo[\n  1, 2, 3,\n  4, 5, 6\n]\n"
+  formats "def foo(a, &@b)\nend"
  formats "def foo(a, &@b)\nend"
+  formats "lib Foo\ntype  Foo  =   Bar\nend"
  formats "lib Foo\ntype  Foo  =   Bar\nend"
+  formats "foo(\n  1,\n  # 2,\n  3,\n)"
  formats "foo(\n  1,\n  # 2,\n  3,\n)"
+  formats "def foo\n1\n2\n# foo\nend"
  formats "def foo\n1\n2\n# foo\nend"
+  formats "macro foo\n  {%1 + 2%}\\\nend"
  formats "macro foo\n  {%1 + 2%}\\\nend"
+  formats "[\n  1, # foo\n  3,\n]"
  formats "[\n  1, # foo\n  3,\n]"
+  formats "<<-HTML\n  \#{1}x\n  y\n  z\n  HTML"
  formats "<<-HTML\n  \#{1}x\n  y\n  z\n  HTML"
+  formats "class Foo ( T )\nend"
  formats "class Foo ( T )\nend"
+  formats "def foo(**a,)\n  1\nend"
  formats "def foo(**a,)\n  1\nend"
+  formats "case 1\nwhen \"foo\"     ; 3\nwhen \"lalalala\"; 4\nelse             5\nend"
  formats "case 1\nwhen \"foo\"     ; 3\nwhen \"lalalala\"; 4\nelse             5\nend"
+  formats "case nil\nelse nil; nil # comment\nend"
  formats "case nil\nelse nil; nil # comment\nend"
+  formats "if 1\n2  # foo\nend"
  formats "if 1\n2  # foo\nend"
+  formats "include  Foo"
  formats "include  Foo"
+  formats "[] of (((Array(T))))"
  formats "[] of (((Array(T))))"
+  formats "module Foo ( U, *T ); 1; end"
  formats "module Foo ( U, *T ); 1; end"
+  formats "  <<-EOF\n 1\n  2\n EOF"
  formats "  <<-EOF\n 1\n  2\n EOF"
+  formats "macro foo\n{% verbatim do %}1 + 2{% end %}\nend"
  formats "macro foo\n{% verbatim do %}1 + 2{% end %}\nend"
+  formats "1.[]= do\nend"
  formats "1.[]= do\nend"
+  formats "begin\n1\n2\n3\nend"
  formats "begin\n1\n2\n3\nend"
+  formats "x  :   A  |  B"
  formats "x  :   A  |  B"
+  formats "foo.foo1(\n  bar\n    .bar1\n    .bar2)"
  formats "foo.foo1(\n  bar\n    .bar1\n    .bar2)"
+  formats "1+2*3"
  formats "1+2*3"
+  formats "->foo="
  formats "->foo="
+  formats "10 / a"
  formats "10 / a"
+  formats "def foo(\n  **a # comment\n)\n  1\nend"
  formats "def foo(\n  **a # comment\n)\n  1\nend"
+  formats "case 1\nwhen 2\n  3\n  # foo\nelse\n  4\n  # bar\nend"
  formats "case 1\nwhen 2\n  3\n  # foo\nelse\n  4\n  # bar\nend"
+  formats "while 1\n# nothing\nend"
  formats "while 1\n# nothing\nend"
+  formats "if 1\n  foo(\n    1,\n    2 # lala\n    )\nend\n"
  formats "if 1\n  foo(\n    1,\n    2 # lala\n    )\nend\n"
+  formats "asm(\"a\" ::: \"f\"\n)"
  formats "asm(\"a\" ::: \"f\"\n)"
+  formats "alias Foo= Bar"
  formats "alias Foo= Bar"
+  formats "foo[x: 1, &.bar]?"
  formats "foo[x: 1, &.bar]?"
+  formats "foo.as ( Int32* )"
  formats "foo.as ( Int32* )"
+  formats "  <<-HTML\n   \#{1}\n  HTML"
  formats "  <<-HTML\n   \#{1}\n  HTML"
+  formats "1\n.."
  formats "1\n.."
+  formats "{ {foo: 2} }"
  formats "{ {foo: 2} }"
+  formats "@[Foo]\ndef foo\nend"
  formats "@[Foo]\ndef foo\nend"
+  formats "a.b &.[c]\n1"
  formats "a.b &.[c]\n1"
+  formats "FOO = 2\nA = 1"
  formats "FOO = 2\nA = 1"
+  formats "{x => self // 1}"
  formats "{x => self // 1}"
+  formats "asm(\"a\" : \"b\"(c) : \"d\"(e) :: \"volatile\")"
  formats "asm(\"a\" : \"b\"(c) : \"d\"(e) :: \"volatile\")"
+  formats "\"hello\""
  formats "\"hello\""
+  formats "def foo(\n  **a\n)\n  1\nend"
  formats "def foo(\n  **a\n)\n  1\nend"
+  formats "1.>=() { 3 }"
  formats "1.>=() { 3 }"
+  formats "foo &.[a] = 1"
  formats "foo &.[a] = 1"
+  formats "asm(\n  # the assembly template string, following the\n  # syntax for LLVM's integrated assembler\n  \"nop\" :               # output operands\n\"=r\"(foo), \"=r\"(bar) : # input operands\n\"r\"(1), \"r\"(baz) :     # names of clobbered registers\n\"eax\", \"memory\" :      # optional flags, corresponding to the LLVM IR\n  # sideeffect / alignstack / inteldialect / unwind attributes\n\"volatile\", \"alignstack\", \"intel\", \"unwind\"\n)"
  formats "asm(\n  # the assembly template string, following the\n  # syntax for LLVM's integrated assembler\n  \"nop\" :               # output operands\n\"=r\"(foo), \"=r\"(bar) : # input operands\n\"r\"(1), \"r\"(baz) :     # names of clobbered registers\n\"eax\", \"memory\" :      # optional flags, corresponding to the LLVM IR\n  # sideeffect / alignstack / inteldialect / unwind attributes\n\"volatile\", \"alignstack\", \"intel\", \"unwind\"\n)"
+  formats ":^"
  formats ":^"
+  formats "alias A = (B(C, (C | D)) | E)"
  formats "alias A = (B(C, (C | D)) | E)"
+  formats "->Foo.foo"
  formats "->Foo.foo"
+  formats "def foo\nend;def bar\nend"
  formats "def foo\nend;def bar\nend"
+  formats "foo do\n  {1 => foo <<-X\n  bar\n  X\n  }\nend"
  formats "foo do\n  {1 => foo <<-X\n  bar\n  X\n  }\nend"
+  formats "<<-FOO\nbarfoo\nFOO"
  formats "<<-FOO\nbarfoo\nFOO"
+  formats "lib Foo\n  fun foo =\n    \"bar\"(Int32) : Int32\n  # comment\nend"
  formats "lib Foo\n  fun foo =\n    \"bar\"(Int32) : Int32\n  # comment\nend"
+  formats "1 && # foo\n  2 &&\n  3"
  formats "1 && # foo\n  2 &&\n  3"
+  formats "def foo : (A | B(C))\n  nil\nend"
  formats "def foo : (A | B(C))\n  nil\nend"
+  formats "# Here is the doc of a method, and contains an example:\n#\n# ```\n# result = foo\n#\n# puts result\n# ```\ndef foo\n  # ...\nend\n"
  formats "# Here is the doc of a method, and contains an example:\n#\n# ```\n# result = foo\n#\n# puts result\n# ```\ndef foo\n  # ...\nend\n"
+  formats "macro foo\n  1 + 2\nend"
  formats "macro foo\n  1 + 2\nend"
+  formats "foo a , b ,  x:  1"
  formats "foo a , b ,  x:  1"
+  formats "macro foo\n    def   bar  \n  end \n    end"
  formats "macro foo\n    def   bar  \n  end \n    end"
+  formats "a = if 1\n2\n3\nend"
  formats "a = if 1\n2\n3\nend"
+  formats "macro foo\n  {% 1 + 2 %}\nend"
  formats "macro foo\n  {% 1 + 2 %}\nend"
+  formats "def foo(**z : Foo)\nend"
  formats "def foo(**z : Foo)\nend"
+  formats "\" \" * 2"
  formats "\" \" * 2"
+  formats "foo(<<-X,\na\nX\n  1)"
  formats "foo(<<-X,\na\nX\n  1)"
+  formats "def foo(x : X)  forall   X ,   Y; end"
  formats "def foo(x : X)  forall   X ,   Y; end"
+  formats "def foo\n  1 #\nrescue\nend"
  formats "def foo\n  1 #\nrescue\nend"
+  formats "a = 1\ndef bar\nend"
  formats "a = 1\ndef bar\nend"
+  formats "{\n  a:   1,\n  foo: bar,\n}"
  formats "{\n  a:   1,\n  foo: bar,\n}"
+  formats "def foo(x : (self)?)\nend"
  formats "def foo(x : (self)?)\nend"
+  formats "x  :   Int32"
  formats "x  :   Int32"
+  formats "[c.x]\n  .foo"
  formats "[c.x]\n  .foo"
+  formats "lib Foo\nstruct Foo\nx  ,  y  , z :  Int32\nend\nend"
  formats "lib Foo\nstruct Foo\nx  ,  y  , z :  Int32\nend\nend"
+  formats "def run\n\nrescue\n  2\n  3\nend"
  formats "def run\n\nrescue\n  2\n  3\nend"
+  formats "1 &&\n2 &&\n3"
  formats "1 &&\n2 &&\n3"
+  formats "# foo\na = 1 # bar"
  formats "# foo\na = 1 # bar"
+  formats "begin\n1\nrescue   ex\n3\nelse\n4\nend"
  formats "begin\n1\nrescue   ex\n3\nelse\n4\nend"
+  formats "getter foo # comment\n\ndef foo\nend"
  formats "getter foo # comment\n\ndef foo\nend"
+  formats "alias Foo::Bar=Baz"
  formats "alias Foo::Bar=Baz"
+  formats "-> : Int32[1] {}"
  formats "-> : Int32[1] {}"
+  formats "asm(\"nop\" ::: \"eax\" ,  \"ebx\" )"
  formats "asm(\"nop\" ::: \"eax\" ,  \"ebx\" )"
+  formats "break  *1  ,2"
  formats "break  *1  ,2"
+  formats "foo.bar   +=   2"
  formats "foo.bar   +=   2"
+  formats "enum Foo : Int32\nA = 1\nend"
  formats "enum Foo : Int32\nA = 1\nend"
+  formats "1 \\\n+ 2"
  formats "1 \\\n+ 2"
+  formats "macro foo\n  {% for x in y %} 2 {% end %}\nend"
  formats "macro foo\n  {% for x in y %} 2 {% end %}\nend"
+  formats "next  1 ,  2"
  formats "next  1 ,  2"
+  formats "->{}"
  formats "->{}"
+  formats "x: Int32"
  formats "x: Int32"
+  formats "-> { }"
  formats "-> { }"
+  formats "-> :: foo?"
  formats "-> :: foo?"
+  formats "foo (1).bar"
  formats "foo (1).bar"
+  formats "select   \n when  foo  then  2 \n end"
  formats "select   \n when  foo  then  2 \n end"
+  formats "is_a? Foo"
  formats "is_a? Foo"
+  formats "foo(\"bar\" \\\n\"baz\")"
  formats "foo(\"bar\" \\\n\"baz\")"
+  formats "1 +\n  # foo\n  2"
  formats "1 +\n  # foo\n  2"
+  formats "->@foo.foo!"
  formats "->@foo.foo!"
+  formats "asm(\n\"nop\" : \"a\"(0), \"b\"(1) )"
  formats "asm(\n\"nop\" : \"a\"(0), \"b\"(1) )"
+  formats "あ.い = 1"
  formats "あ.い = 1"
+  formats "%w(\n  one two\n  three four\n)"
  formats "%w(\n  one two\n  three four\n)"
+  formats "foo\n  \nbar"
  formats "foo\n  \nbar"
+  formats "Union(Foo::Bar?, Baz?, Qux(T, U?))"
  formats "Union(Foo::Bar?, Baz?, Qux(T, U?))"
+  formats "\n# hello\n1"
  formats "\n# hello\n1"
+  formats "foo \\\n  1,\n  2"
  formats "foo \\\n  1,\n  2"
+  formats "foo . is_a? Bar"
  formats "foo . is_a? Bar"
+  formats "unless a\n2\nelse\nend"
  formats "unless a\n2\nelse\nend"
+  formats "foo &.as(T).bar"
  formats "foo &.as(T).bar"
+  formats "x  :   Int32  =   1"
  formats "x  :   Int32  =   1"
+  formats "def foo(x, *, y, **z)\nend"
  formats "def foo(x, *, y, **z)\nend"
+  formats "<<-FOO\nFOO"
  formats "<<-FOO\nFOO"
+  formats "  case 1\n  when 2\n    3\n  else #:newline, :eof\n    1 if 2\n    return 3\n  end\n"
  formats "  case 1\n  when 2\n    3\n  else #:newline, :eof\n    1 if 2\n    return 3\n  end\n"
+  formats "...\n2"
  formats "...\n2"
+  formats "select   \n when  foo \n 2 \n when bar \n 3 \n end"
  formats "select   \n when  foo \n 2 \n when bar \n 3 \n end"
+  formats "class Actor\n  macro inherited\n\nend\nend\n"
  formats "class Actor\n  macro inherited\n\nend\nend\n"
+  formats "foo &.[]"
  formats "foo &.[]"
+  formats "->() do x end"
  formats "->() do x end"
+  formats "macro foo\n  {% if true %}if true{% end %}\n  {% if true %}end{% end %}\nend"
  formats "macro foo\n  {% if true %}if true{% end %}\n  {% if true %}end{% end %}\nend"
+  formats "if 1 &&\n   (2 || 3)\n  1\nelse\n  2\nend"
  formats "if 1 &&\n   (2 || 3)\n  1\nelse\n  2\nend"
+  formats "def foo( x , & block  : Int32->Float64)\nend"
  formats "def foo( x , & block  : Int32->Float64)\nend"
+  formats "foo do\n  bar do\n    foo <<-X\n    bar\n    X\n  end\nend"
  formats "foo do\n  bar do\n    foo <<-X\n    bar\n    X\n  end\nend"
+  formats "x 1, \\\n  2"
  formats "x 1, \\\n  2"
+  formats "1\n..2"
  formats "1\n..2"
+  formats "{\n         1 => 2,\n        10 => 30,\n        30 => 40,\n  \"foobar\" => 50,\n  \"coco\"   => 60,\n}"
  formats "{\n         1 => 2,\n        10 => 30,\n        30 => 40,\n  \"foobar\" => 50,\n  \"coco\"   => 60,\n}"
+  formats "foo.[1, 2] = 3"
  formats "foo.[1, 2] = 3"
+  formats "b &.[c]?.d"
  formats "b &.[c]?.d"
+  formats "x : {\"foo bar\": Int32}"
  formats "x : {\"foo bar\": Int32}"
+  formats " Array( {x:  Int32,   y:  String } )"
  formats " Array( {x:  Int32,   y:  String } )"
+  formats "class X; annotation  FooAnnotation  ;  end ; end"
  formats "class X; annotation  FooAnnotation  ;  end ; end"
+  formats "foo\n  .bar(\n    1\n  )"
  formats "foo\n  .bar(\n    1\n  )"
+  formats "case foo\nwhen 1\n  # A\nelse\n# B\nend\n"
  formats "case foo\nwhen 1\n  # A\nelse\n# B\nend\n"
+  formats "abstract  def   foo  \n  1"
  formats "abstract  def   foo  \n  1"
+  formats "def foo(\n  &block\n)\nend"
  formats "def foo(\n  &block\n)\nend"
+  formats "foo(a: //, b: //)"
  formats "foo(a: //, b: //)"
+  formats "foo((1..3))"
  formats "foo((1..3))"
+  formats "foo : (   A  |  B   )"
  formats "foo : (   A  |  B   )"
+  formats "foo do\n  {% foo <<-X\n  bar\n  X\n  %}\nend"
  formats "foo do\n  {% foo <<-X\n  bar\n  X\n  %}\nend"
+  formats "lib Foo\nfun foo ()  :  Int32\nend"
  formats "lib Foo\nfun foo ()  :  Int32\nend"
+  formats "macro foo\n  {{ 1 + 2 }}\nend"
  formats "macro foo\n  {{ 1 + 2 }}\nend"
+  formats "1\n..\n2"
  formats "1\n..\n2"
+  formats "foo(\n  1, 2,\n&block)"
  formats "foo(\n  1, 2,\n&block)"
+  formats "module Foo  # foo\nend"
  formats "module Foo  # foo\nend"
+  formats "if / /\nend"
  formats "if / /\nend"
+  formats "lib Foo\n  fun Foo = Bar\nend"
  formats "lib Foo\n  fun Foo = Bar\nend"
+  formats "{% if true %}\n  # x\n  # y\n{% end %}"
  formats "{% if true %}\n  # x\n  # y\n{% end %}"
+  formats "macro foo(\n  a,\n  **b,\n)\nend"
  formats "macro foo(\n  a,\n  **b,\n)\nend"
+  formats "{ 1   =>   2 ,\n   3  =>  4 }"
  formats "{ 1   =>   2 ,\n   3  =>  4 }"
+  formats "case  1 \n in Int32 \n 3 \n end"
  formats "case  1 \n in Int32 \n 3 \n end"
+  formats "alias X = ((Y, Z) ->)"
  formats "alias X = ((Y, Z) ->)"
+  formats "foo &.is_a?(T).bar"
  formats "foo &.is_a?(T).bar"
+  formats "-> { 1 }"
  formats "-> { 1 }"
+  formats "def foo(x) forall T # bar\n  # baz\nend"
  formats "def foo(x) forall T # bar\n  # baz\nend"
+  formats "1   # foo"
  formats "1   # foo"
+  formats "1\n.as?(Int32)"
  formats "1\n.as?(Int32)"
+  formats "a = case 1\nwhen 2\n3\nend"
  formats "a = case 1\nwhen 2\n3\nend"
+  formats "\"foo\" \\\n \"bar\""
  formats "\"foo\" \\\n \"bar\""
+  formats "a = while 1\n2\nend"
  formats "a = while 1\n2\nend"
+  formats "lib Foo\n  fun foo = \"bar\"(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo = \"bar\"(Int32) : Int32\nend"
+  formats "{  } of  A   =>   B"
  formats "{  } of  A   =>   B"
+  formats "foo . bar( x , y )"
  formats "foo . bar( x , y )"
+  formats "case 1\nend"
  formats "case 1\nend"
+  formats "def func # comment\n  (1 + 2) / 3\nend"
  formats "def func # comment\n  (1 + 2) / 3\nend"
+  formats "foo.[ 1 , 2 ]"
  formats "foo.[ 1 , 2 ]"
+  formats "foo(\n  1,\n) do\n  2\nend"
  formats "foo(\n  1,\n) do\n  2\nend"
+  formats "a-1"
  formats "a-1"
+  formats "break( *1  , *2 )"
  formats "break( *1  , *2 )"
+  formats "\"\#{ # foo\n  foo = 1\n}\""
  formats "\"\#{ # foo\n  foo = 1\n}\""
+  formats "def foo( x , & block  : Int32 )\nend"
  formats "def foo( x , & block  : Int32 )\nend"
+  formats "unless a\n2; 3\nelse\n3\nend"
  formats "unless a\n2; 3\nelse\n3\nend"
+  formats "foo.\nbar"
  formats "foo.\nbar"
+  formats "p = Foo[1, 2, 3,\n        4, 5, 6,\n       ]"
  formats "p = Foo[1, 2, 3,\n        4, 5, 6,\n       ]"
+  formats "case  1 \n when 2 ,\n 3 \n 4 \n end"
  formats "case  1 \n when 2 ,\n 3 \n 4 \n end"
+  formats "macro bar\n  1\nend\n\ncase 1\nwhen  2 then 3\nwhen 45 then 6\nend"
  formats "macro bar\n  1\nend\n\ncase 1\nwhen  2 then 3\nwhen 45 then 6\nend"
+  formats "enum Foo; A = 1; end"
  formats "enum Foo; A = 1; end"
+  formats "[1, 2, 3]"
  formats "[1, 2, 3]"
+  formats "case\nelse\n  1\nend"
  formats "case\nelse\n  1\nend"
+  formats "def foo( & \n )\nend"
  formats "def foo( & \n )\nend"
+  formats "return  *1"
  formats "return  *1"
+  formats ":/"
  formats ":/"
+  formats "if 1\nfoo do  | x , y | \n x \n end\nend"
  formats "if 1\nfoo do  | x , y | \n x \n end\nend"
+  formats "def foo(\n   @[MyAnn]\n bar\n); end"
  formats "def foo(\n   @[MyAnn]\n bar\n); end"
+  formats "1\n2\n# foo"
  formats "1\n2\n# foo"
+  formats "a = 1;;; b = 2"
  formats "a = 1;;; b = 2"
+  formats "alias A = (   A  |  B   )"
  formats "alias A = (   A  |  B   )"
+  formats "foo = 1\n->foo.[](Int32)"
  formats "foo = 1\n->foo.[](Int32)"
+  formats "foo.[ 1 , 2 ]   =3"
  formats "foo.[ 1 , 2 ]   =3"
+  formats "Set { 1 , 2 }"
  formats "Set { 1 , 2 }"
+  formats "  {% for x in y %} 2 {% end %}"
  formats "  {% for x in y %} 2 {% end %}"
+  formats "# Hello\n#\n# ```crystal\n#   1\n# ```\n# Bye"
  formats "# Hello\n#\n# ```crystal\n#   1\n# ```\n# Bye"
+  formats "NamedTuple(\n  a: Int32,\n)"
  formats "NamedTuple(\n  a: Int32,\n)"
+  formats "foo   &.bar"
  formats "foo   &.bar"
+  formats "1 +  # foo\n2"
  formats "1 +  # foo\n2"
+  formats "->{ x }"
  formats "->{ x }"
+  formats "def foo( x , & : Int32 )\nend"
  formats "def foo( x , & : Int32 )\nend"
+  formats "10 ** a"
  formats "10 ** a"
+  formats "# foo\ndef foo\nend\n# bar\ndef bar\nend"
  formats "# foo\ndef foo\nend\n# bar\ndef bar\nend"
+  formats "FOO = 2 + 3\nA = 1 - 10"
  formats "FOO = 2 + 3\nA = 1 - 10"
+  formats "foo.as?   Int32*"
  formats "foo.as?   Int32*"
+  formats "->(x : Int32) {}"
  formats "->(x : Int32) {}"
+  formats "class Foo\n macro foo\n    1  +  2 \n    end\n end"
  formats "class Foo\n macro foo\n    1  +  2 \n    end\n end"
+  formats "args.any? &.name.baz"
  formats "args.any? &.name.baz"
+  formats "1.==() { 3 }"
  formats "1.==() { 3 }"
+  formats "1 + \\\n2"
  formats "1 + \\\n2"
+  formats "1.!= { 3 }"
  formats "1.!= { 3 }"
+  formats "   1"
  formats "   1"
+  formats "<<-HEREDOC\n  \#{foo}\n  H\#{bar}\n  HEREDOC"
  formats "<<-HEREDOC\n  \#{foo}\n  H\#{bar}\n  HEREDOC"
+  formats "{ 1   =>   2 ,   3  =>  4 }"
  formats "{ 1   =>   2 ,   3  =>  4 }"
+  formats "macro foo\n  {{ 1 + 2 }}\\\nend"
  formats "macro foo\n  {{ 1 + 2 }}\\\nend"
+  formats "if 1\nelse\n2  # foo\nend"
  formats "if 1\nelse\n2  # foo\nend"
+  formats "unless a\n2\n3\nend"
  formats "unless a\n2\n3\nend"
+  formats "def foo\n  case x\n  # z\n  when 1\n  end\nend"
  formats "def foo\n  case x\n  # z\n  when 1\n  end\nend"
+  formats "Foo::Bar?"
  formats "Foo::Bar?"
+  formats "foo \\\n  foo: 1,\n  bar: 2"
  formats "foo \\\n  foo: 1,\n  bar: 2"
+  formats "{\n  query     => <<-HEREDOC,\n    foo\n  HEREDOC\n}"
  formats "{\n  query     => <<-HEREDOC,\n    foo\n  HEREDOC\n}"
+  formats "def foo(x =  __FILE__ )\nend"
  formats "def foo(x =  __FILE__ )\nend"
+  formats "10**a"
  formats "10**a"
+  formats "join io, &.inspect"
  formats "join io, &.inspect"
+  formats "def   foo  \n  end"
  formats "def   foo  \n  end"
+  formats "while true\n1\n\n# foo\nend"
  formats "while true\n1\n\n# foo\nend"
+  formats "fun foo(\n  x : Int32,\n  ...\n) : Int32\n  1\nend"
  formats "fun foo(\n  x : Int32,\n  ...\n) : Int32\n  1\nend"
+  formats "{\n1   =>   2 ,\n   3  =>  4 }"
  formats "{\n1   =>   2 ,\n   3  =>  4 }"
+  formats "begin 0[1] rescue 2 end"
  formats "begin 0[1] rescue 2 end"
+  formats "enum Foo\n  A;   B;   C\nend\n"
  formats "enum Foo\n  A;   B;   C\nend\n"
+  formats "Foo( x:  Int32  )"
  formats "Foo( x:  Int32  )"
+  formats "enum Foo;end"
  formats "enum Foo;end"
+  formats "foo &.nil?()"
  formats "foo &.nil?()"
+  formats "a = foo(bar([\n  1,\n]))"
  formats "a = foo(bar([\n  1,\n]))"
+  formats "def foo( x , & block )\nend"
  formats "def foo( x , & block )\nend"
+  formats "def foo(\n  @[MyAnn] bar\n); end"
  formats "def foo(\n  @[MyAnn] bar\n); end"
+  formats "-> : Int32 { }"
  formats "-> : Int32 { }"
+  formats "Foo"
  formats "Foo"
+  formats "as Foo"
  formats "as Foo"
+  formats "&+ 1"
  formats "&+ 1"
+  formats "$~ = 1"
  formats "$~ = 1"
+  formats "@[Foo()]"
  formats "@[Foo()]"
+  formats "a &.b.c.as(C)"
  formats "a &.b.c.as(C)"
+  formats "1 +\n  # foo\n  2"
  formats "1 +\n  # foo\n  2"
+  formats "a &.b.c.as C"
  formats "a &.b.c.as C"
+  formats "if 1\n2\nend\nif 3\nend"
  formats "if 1\n2\nend\nif 3\nend"
+  formats "1.>= { 3 }"
  formats "1.>= { 3 }"
+  formats "asm(\"nop\" ::: \"eax\" ,  \"ebx\" :   \"volatile\"  ,  \"alignstack\" )"
  formats "asm(\"nop\" ::: \"eax\" ,  \"ebx\" :   \"volatile\"  ,  \"alignstack\" )"
+  formats "foo : (String -> Array(String)?) | (String -> Array(String)) | Nil"
  formats "foo : (String -> Array(String)?) | (String -> Array(String)) | Nil"
+  formats "a = # foo\n  bar(1)"
  formats "a = # foo\n  bar(1)"
+  formats "\n# hello\n\n\n1"
  formats "\n# hello\n\n\n1"
+  formats "enum Foo\n  A      =   10\n  FOO    =  123\n  BARBAZ = 1234\nend\n"
  formats "enum Foo\n  A      =   10\n  FOO    =  123\n  BARBAZ = 1234\nend\n"
+  formats "a = \nif 1\n2\nend"
  formats "a = \nif 1\n2\nend"
+  formats "lib Bar\n  enum Foo\n    A = 1\n  end\nend"
  formats "lib Bar\n  enum Foo\n    A = 1\n  end\nend"
+  formats "-> : Int32 {}"
  formats "-> : Int32 {}"
+  formats "break  *1  , *2"
  formats "break  *1  , *2"
+  formats "def   foo (  @x, @y)  \n  end"
  formats "def   foo (  @x, @y)  \n  end"
+  formats "{% verbatim do %}\n  <<-FOO\n    hello  \n  FOO\n{% end %}"
  formats "{% verbatim do %}\n  <<-FOO\n    hello  \n  FOO\n{% end %}"
+  formats "-> :: foo="
  formats "-> :: foo="
+  formats "10//a"
  formats "10//a"
+  formats "\"\" + <<-END\n  bar\n  END"
  formats "\"\" + <<-END\n  bar\n  END"
+  formats "foo a: 1\nb"
  formats "foo a: 1\nb"
+  formats "def foo(@[MyAnn] v); end"
  formats "def foo(@[MyAnn] v); end"
+  formats "def foo(a : T) forall T\n  #\n\n\nend"
  formats "def foo(a : T) forall T\n  #\n\n\nend"
+  formats "def foo   (   )   \n1\nend"
  formats "def foo   (   )   \n1\nend"
+  formats "def a\n  b(\n    1, # x\n    # y\n    2\n  )\nend"
  formats "def a\n  b(\n    1, # x\n    # y\n    2\n  )\nend"
+  formats "foo . bar  =  1"
  formats "foo . bar  =  1"
+  formats "lib Foo\n  $foo = hello  :  Int32 \nend"
  formats "lib Foo\n  $foo = hello  :  Int32 \nend"
+  formats "macro foo()\nend"
  formats "macro foo()\nend"
+  formats "foo.%(bar)"
  formats "foo.%(bar)"
+  formats "1.== { 3 }"
  formats "1.== { 3 }"
+  formats "if 1\n  foo(\n    bar\n    # comment\n  )\nend"
  formats "if 1\n  foo(\n    bar\n    # comment\n  )\nend"
+  formats "$0.bar"
  formats "$0.bar"
+  formats "{%\n  unless true\n    1\n  else\n    2\n  end\n%}"
  formats "{%\n  unless true\n    1\n  else\n    2\n  end\n%}"
+  formats "foo . is_a? ( Bar )"
  formats "foo . is_a? ( Bar )"
+  formats "as? Foo"
  formats "as? Foo"
+  formats "{\n  foo:    1,\n  b:      2,\n  barbaz: 3,\n}"
  formats "{\n  foo:    1,\n  b:      2,\n  barbaz: 3,\n}"
+  formats "A = 1\nFOO = 2\n\nEX = 3"
  formats "A = 1\nFOO = 2\n\nEX = 3"
+  formats "foo   &.>=(2)"
  formats "foo   &.>=(2)"
+  formats "enum E\n  A # hello\n  B # hello;  C # hello\nend"
  formats "enum E\n  A # hello\n  B # hello;  C # hello\nend"
+  formats "foo = [1, [2,\n           3],\n       4]"
  formats "foo = [1, [2,\n           3],\n       4]"
+  formats "[] of (Array(T))"
  formats "[] of (Array(T))"
+  formats "return"
  formats "return"
+  formats "asm(\"nop\" :::: \"volatile\" )"
  formats "asm(\"nop\" :::: \"volatile\" )"
+  formats "\"foo\#{\"bar\"} Baz \#{\"qux\"} \""
  formats "\"foo\#{\"bar\"} Baz \#{\"qux\"} \""
+  formats "Tuple()"
  formats "Tuple()"
+  formats "foo { | a, ( b , (c, d) ) | a + b + c }"
  formats "foo { | a, ( b , (c, d) ) | a + b + c }"
+  formats "x.is_a? T\n3\n"
  formats "x.is_a? T\n3\n"
+  formats "1  &&  2"
  formats "1  &&  2"
+  formats "-> :: Foo . foo?"
  formats "-> :: Foo . foo?"
+  formats "b &.[c].d"
  formats "b &.[c].d"
+  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n  @[MyAnn] @[MyAnn] baz,\n  @[MyAnn]\n  @[MyAnn]\n  biz\n); end"
  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n  @[MyAnn] @[MyAnn] baz,\n  @[MyAnn]\n  @[MyAnn]\n  biz\n); end"
+  formats "foo(\n # foo\n1,\n\n # bar\n2,  \n)"
  formats "foo(\n # foo\n1,\n\n # bar\n2,  \n)"
+  formats "foo { | a, ( b , c, ), | a + b + c }"
  formats "foo { | a, ( b , c, ), | a + b + c }"
+  formats "next  *1  , *2"
  formats "next  *1  , *2"
+  formats "  <<-EOF\n   1\n EOF"
  formats "  <<-EOF\n   1\n EOF"
+  formats "begin\n  array[\n    0 # Zero\n  ]\nend"
  formats "begin\n  array[\n    0 # Zero\n  ]\nend"
+  formats "{/ / => / /, / / => / /}"
  formats "{/ / => / /, / / => / /}"
+  formats "def foo(x @y)\nend"
  formats "def foo(x @y)\nend"
+  formats "Foo:: Bar"
  formats "Foo:: Bar"
+  formats "foo(baz(x, y) do\n  1 + 2\nend)"
  formats "foo(baz(x, y) do\n  1 + 2\nend)"
+  formats "+ a + d"
  formats "+ a + d"
+  formats "class Foo\n  NamedTuple(\n    a: Int32,\n  )\nend"
  formats "class Foo\n  NamedTuple(\n    a: Int32,\n  )\nend"
+  formats "@[Foo(\n  foo: 1,\n)]\ndef foo\nend"
  formats "@[Foo(\n  foo: 1,\n)]\ndef foo\nend"
+  formats "case 1\nwhen 2\n\n#comment\nend"
  formats "case 1\nwhen 2\n\n#comment\nend"
+  formats "foo : (String -> String?) | (String)"
  formats "foo : (String -> String?) | (String)"
+  formats "def a\n  [\n    1, # x\n    # y\n  ]\nend"
  formats "def a\n  [\n    1, # x\n    # y\n  ]\nend"
+  formats "def foo\n  1\n  #\n\n\nrescue\nend"
  formats "def foo\n  1\n  #\n\n\nrescue\nend"
+  formats "[\n1, # a\n2, # b\n 3 # c\n]"
  formats "[\n1, # a\n2, # b\n 3 # c\n]"
+  formats "def self . foo\nend"
  formats "def self . foo\nend"
+  formats "{{ foo <<-X\nbar\nX\n}}"
  formats "{{ foo <<-X\nbar\nX\n}}"
+  formats "next( *1  , *2 )"
  formats "next( *1  , *2 )"
+  formats "def foo\n  ((((((((((((((((0_u64\n    ) | ptr[0]) << 8\n    ) | ptr[1]) << 8\n    ) | ptr[2]) << 8\n    ) | ptr[3]) << 8\n    ) | ptr[4]) << 8\n    ) | ptr[5]) << 8\n    ) | ptr[6]) << 8\n    ) | ptr[7])\nend"
  formats "def foo\n  ((((((((((((((((0_u64\n    ) | ptr[0]) << 8\n    ) | ptr[1]) << 8\n    ) | ptr[2]) << 8\n    ) | ptr[3]) << 8\n    ) | ptr[4]) << 8\n    ) | ptr[5]) << 8\n    ) | ptr[6]) << 8\n    ) | ptr[7])\nend"
+  formats "a , b  = 1  ,  2"
  formats "a , b  = 1  ,  2"
+  formats "1.[]= { 3 }"
  formats "1.[]= { 3 }"
+  formats "def execute\n  begin\n    1\n  ensure\n    2\n  end\n  3\nend"
  formats "def execute\n  begin\n    1\n  ensure\n    2\n  end\n  3\nend"
+  formats "foo.bar.baz\n.qux"
  formats "foo.bar.baz\n.qux"
+  formats "foo &.as(T)"
  formats "foo &.as(T)"
+  formats "@x[ 1 ]   ||=   2"
  formats "@x[ 1 ]   ||=   2"
+  formats "foo(a: //)"
  formats "foo(a: //)"
+  formats "foo(1, 2,\n)"
  formats "foo(1, 2,\n)"
+  formats "1 if 2\n# foo"
  formats "1 if 2\n# foo"
+  formats "case 1\nwhen 2 # a\n  # b\nend"
  formats "case 1\nwhen 2 # a\n  # b\nend"
+  formats "begin\n  begin\n    a\n    # b\n  end\nend"
  formats "begin\n  begin\n    a\n    # b\n  end\nend"
+  formats "foo.bar\n  .baz(\n    1\n  )"
  formats "foo.bar\n  .baz(\n    1\n  )"
+  formats "  {% if 1 %} 2 {% end %}"
  formats "  {% if 1 %} 2 {% end %}"
+  formats "1 + \\\n2 + \\\n3"
  formats "1 + \\\n2 + \\\n3"
+  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n\n  @[MyAnn]  @[MyAnn]  baz,\n\n  @[MyAnn]\n\n  @[MyAnn]\n\n  biz\n); end"
  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n\n  @[MyAnn]  @[MyAnn]  baz,\n\n  @[MyAnn]\n\n  @[MyAnn]\n\n  biz\n); end"
+  formats "foo = 1\n->foo.foo"
  formats "foo = 1\n->foo.foo"
+  formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\\v\\f\\e\""
  formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\\v\\f\\e\""
+  formats "~ 1"
  formats "~ 1"
+  formats "1#foo"
  formats "1#foo"
+  formats "foo(bar(\n  1,\n  2,\n))"
  formats "foo(bar(\n  1,\n  2,\n))"
+  formats "macro foo\n  %foo{x,y}\nend"
  formats "macro foo\n  %foo{x,y}\nend"
+  formats "alias Foo::Bar =Baz"
  formats "alias Foo::Bar =Baz"
+  formats "$1.bar"
  formats "$1.bar"
+  formats "  {% if 1 %} {% if 2 %} 2 {% end %} {% end %}"
  formats "  {% if 1 %} {% if 2 %} 2 {% end %} {% end %}"
+  formats "[1,\n2,\n3]"
  formats "[1,\n2,\n3]"
+  formats "case 1\nwhen 1 then\n2\nwhen 3\n4\nend"
  formats "case 1\nwhen 1 then\n2\nwhen 3\n4\nend"
+  formats "macro flags\n  {% if 1 %}\\\n 1 {% else %}\\\n {% end %}\\\nend"
  formats "macro flags\n  {% if 1 %}\\\n 1 {% else %}\\\n {% end %}\\\nend"
+  formats "{ {% begin %}1{% end %}, nil }"
  formats "{ {% begin %}1{% end %}, nil }"
+  formats "1 ... 2"
  formats "1 ... 2"
+  formats "(1 .. )"
  formats "(1 .. )"
+  formats "foo()"
  formats "foo()"
+  formats "case 1\nwhen \"foo\"      then 3\nwhen \"lalalala\" then 4\nelse                 5\nend"
  formats "case 1\nwhen \"foo\"      then 3\nwhen \"lalalala\" then 4\nelse                 5\nend"
+  formats "def foo\nend\ndef bar\nend"
  formats "def foo\nend\ndef bar\nend"
+  formats "a.!"
  formats "a.!"
+  formats "lib Foo\nfun foo\nend"
  formats "lib Foo\nfun foo\nend"
+  formats ""
  formats ""
+  formats "def   foo  :  Int32 \n  end"
  formats "def   foo  :  Int32 \n  end"
+  formats "page= <<-HTML\n  \#{1}foo\nHTML"
  formats "page= <<-HTML\n  \#{1}foo\nHTML"
+  formats "[1,\n2,\n3\n]"
  formats "[1,\n2,\n3\n]"
+  formats "<<-FOO\nfoobar\nFOO"
  formats "<<-FOO\nfoobar\nFOO"
+  formats "class Foo  # foo\nend"
  formats "class Foo  # foo\nend"
+  formats "def   foo (  @@select)  \n  end"
  formats "def   foo (  @@select)  \n  end"
+  formats "->@@foo.foo!"
  formats "->@@foo.foo!"
+  formats "foo.responds_to? :bar\n1"
  formats "foo.responds_to? :bar\n1"
+  formats "class Foo\n@x  :  Int32\nend"
  formats "class Foo\n@x  :  Int32\nend"
+  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar\n); end"
  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar\n); end"
+  formats "alias Foo=Bar"
  formats "alias Foo=Bar"
+  formats "lib Bar\n  enum Foo\n  end\nend"
  formats "lib Bar\n  enum Foo\n  end\nend"
+  formats "foo{|x|\n x}"
  formats "foo{|x|\n x}"
+  formats "a&-1"
  formats "a&-1"
+  formats "alias Foo::Bar= Baz"
  formats "alias Foo::Bar= Baz"
+  formats "lib Foo\nfun foo(x : Int32,\ny : Float64) : Int32\nend"
  formats "lib Foo\nfun foo(x : Int32,\ny : Float64) : Int32\nend"
+  formats "begin\n  call\n  # comment\nrescue\n  call\n  # comment\nelse\n  call\n  # comment\nensure\n  call\n  # comment\nend"
  formats "begin\n  call\n  # comment\nrescue\n  call\n  # comment\nelse\n  call\n  # comment\nensure\n  call\n  # comment\nend"
+  formats "   {%\na = 1 %}"
  formats "   {%\na = 1 %}"
+  formats "1.=== { 3 }"
  formats "1.=== { 3 }"
+  formats "lib Foo\n  fun foo =\n    bar(Int32,\n    Int32) : Int32\nend"
  formats "lib Foo\n  fun foo =\n    bar(Int32,\n    Int32) : Int32\nend"
+  formats "yield  1"
  formats "yield  1"
+  formats "def   foo (  x )  \n  end"
  formats "def   foo (  x )  \n  end"
+  formats "def foo\n  {% if flag?(:foo) %}\n    foo  +  bar\n  {% else %}\n    baz  +  qux\n  {% end %}\nend"
  formats "def foo\n  {% if flag?(:foo) %}\n    foo  +  bar\n  {% else %}\n    baz  +  qux\n  {% end %}\nend"
+  formats "[foo <<-X\nbar\nX\n]"
  formats "[foo <<-X\nbar\nX\n]"
+  formats "{% for a in %w() %}\n  <<-FOO\n    hello  \n  FOO\n{% end %}"
  formats "{% for a in %w() %}\n  <<-FOO\n    hello  \n  FOO\n{% end %}"
+  formats "case 1\nelse # foo\n  # bar\nend"
  formats "case 1\nelse # foo\n  # bar\nend"
+  formats " _ , *_ ,\na.foo  ,a.bar  =  1  ,  2,3"
  formats " _ , *_ ,\na.foo  ,a.bar  =  1  ,  2,3"
+  formats "break { 1 ,  2 }"
  formats "break { 1 ,  2 }"
+  formats "lib Foo\n  $foo  :  Int32 \nend"
  formats "lib Foo\n  $foo  :  Int32 \nend"
+  formats "asm(\"nop\" : \"a\"(0) )"
  formats "asm(\"nop\" : \"a\"(0) )"
+  formats "x = <<-FOO\n  hello\n  FOO\n\ndef bar\nend"
  formats "x = <<-FOO\n  hello\n  FOO\n\ndef bar\nend"
+  formats "def foo(a,\n        &block)\nend"
  formats "def foo(a,\n        &block)\nend"
+  formats "foo\n  .bar\n  .baz(\n    1\n  )"
  formats "foo\n  .bar\n  .baz(\n    1\n  )"
+  formats "alias A = ((B(C | D) | E) | F)"
  formats "alias A = ((B(C | D) | E) | F)"
+  formats "a = 1 +  #    foo\n2"
  formats "a = 1 +  #    foo\n2"
+  formats "    [   1,   \n   2   ,   \n   3   ]   "
  formats "    [   1,   \n   2   ,   \n   3   ]   "
+  formats "class Foo\n  macro foo\n    1\n  end\nend"
  formats "class Foo\n  macro foo\n    1\n  end\nend"
+  formats "$1"
  formats "$1"
+  formats "bla.select(&.all?{ |x| x } )"
  formats "bla.select(&.all?{ |x| x } )"
+  formats ":&-"
  formats ":&-"
+  formats "case  1 \n when 2 ;\n 3 \n end"
  formats "case  1 \n when 2 ;\n 3 \n end"
+  formats "$~"
  formats "$~"
+  formats "Foo(\"bar\": Int32, \"baz qux\": Float64)"
  formats "Foo(\"bar\": Int32, \"baz qux\": Float64)"
+  formats "def   foo (  x , y , )  \n  end"
  formats "def   foo (  x , y , )  \n  end"
+  formats "foo(bar(baz3 do\nend))"
  formats "foo(bar(baz3 do\nend))"
+  formats "<<-HTML\n  \#{\"foo\"}\n  HTML"
  formats "<<-HTML\n  \#{\"foo\"}\n  HTML"
+  formats "def foo(a,\n        **b)\nend"
  formats "def foo(a,\n        **b)\nend"
+  formats "if 1\nelse\n# nothing\nend"
  formats "if 1\nelse\n# nothing\nend"
+  formats "[1, 2, 3,  ]"
  formats "[1, 2, 3,  ]"
+  formats "Hash{\n  foo => <<-EOF,\n  foo\n  EOF\n}"
  formats "Hash{\n  foo => <<-EOF,\n  foo\n  EOF\n}"
+  formats "macro foo\n  {{1 + 2}}\nend"
  formats "macro foo\n  {{1 + 2}}\nend"
+  formats "[\n  <<-EOF,\n  foo\n  EOF\n]"
  formats "[\n  <<-EOF,\n  foo\n  EOF\n]"
+  formats "foo { |x, *y| }"
  formats "foo { |x, *y| }"
+  formats "lib Foo\n  fun foo =\n    bar : Void\nend"
  formats "lib Foo\n  fun foo =\n    bar : Void\nend"
+  formats "struct Foo(T)\n# bar\n1\nend"
  formats "struct Foo(T)\n# bar\n1\nend"
+  formats "def foo\n  a = 1; # foo\n  a = 2; # bar\nend\n"
  formats "def foo\n  a = 1; # foo\n  a = 2; # bar\nend\n"
+  formats "lib Foo\n  fun Bar\nend"
  formats "lib Foo\n  fun Bar\nend"
+  formats "foo do # a\n  # b\n  bar\nend"
  formats "foo do # a\n  # b\n  bar\nend"
+  formats "foo do  \n x \n end"
  formats "foo do  \n x \n end"
+  formats "next { {1, 2}, {3, 4} }"
  formats "next { {1, 2}, {3, 4} }"
+  formats "'\\n'"
  formats "'\\n'"
+  formats "alias A = ({A, (B)})"
  formats "alias A = ({A, (B)})"
+  formats "offsetof( String, @length )"
  formats "offsetof( String, @length )"
+  formats "foo(1 ||\n    # foo\n    2)"
  formats "foo(1 ||\n    # foo\n    2)"
+  formats "asm(\"nop\" :: \"r\"(0))"
  formats "asm(\"nop\" :: \"r\"(0))"
+  formats "begin\n  1\nend\n\n1\n"
  formats "begin\n  1\nend\n\n1\n"
+  formats "alias Foo =Bar"
  formats "alias Foo =Bar"
+  formats "class X\n annotation  FooAnnotation  \n  end \n end"
  formats "class X\n annotation  FooAnnotation  \n  end \n end"
+  formats "foo self // 1"
  formats "foo self // 1"
+  formats "long_variable_name = [1, 2, 3, # foo\n                      4, 5, 6]"
  formats "long_variable_name = [1, 2, 3, # foo\n                      4, 5, 6]"
+  formats "NamedTuple()"
  formats "NamedTuple()"
+  formats "alias  Foo::Bar  =   Baz"
  formats "alias  Foo::Bar  =   Baz"
+  formats "return { {1, 2}, {3, 4} }"
  formats "return { {1, 2}, {3, 4} }"
+  formats "\"\#{foo = 1\n}\""
  formats "\"\#{foo = 1\n}\""
+  formats "case  1 \n when 2 , 3 \n 4 \n end"
  formats "case  1 \n when 2 , 3 \n 4 \n end"
+  formats "@[Foo( 1, 2, foo: 3 )]"
  formats "@[Foo( 1, 2, foo: 3 )]"
+  formats "def foo(a : T) forall T \n  #\nend"
  formats "def foo(a : T) forall T \n  #\nend"
+  formats ":&"
  formats ":&"
+  formats "def foo(&block: Int32)\nend"
  formats "def foo(&block: Int32)\nend"
+  formats "if 1\n2\nelsif\n3\n4\nelse\n6\nend"
  formats "if 1\n2\nelsif\n3\n4\nelse\n6\nend"
+  formats "lib Foo\nstruct Foo\nend\nend"
  formats "lib Foo\nstruct Foo\nend\nend"
+  formats "1 + \n2"
  formats "1 + \n2"
+  formats "if 1  # foo\nend"
  formats "if 1  # foo\nend"
+  formats "asm(\"a\" : : : : \"volatile\")"
  formats "asm(\"a\" : : : : \"volatile\")"
+  formats "foo(out x)"
  formats "foo(out x)"
+  formats "{% if z %}\n  1\n{% end %}\n\ndef foo\n  z =\n    123 + # foo\n      4   # bar\n\n  1\nend"
  formats "{% if z %}\n  1\n{% end %}\n\ndef foo\n  z =\n    123 + # foo\n      4   # bar\n\n  1\nend"
+  formats "select\nwhen foo # foo\n  # bar\nelse # foo\n  # bar\nend"
  formats "select\nwhen foo # foo\n  # bar\nelse # foo\n  # bar\nend"
+  formats "foo . bar()"
  formats "foo . bar()"
+  formats "a = 1\na ||= begin\n  1\nend"
  formats "a = 1\na ||= begin\n  1\nend"
+  formats "1"
  formats "1"
+  formats "x = 1\nx    +=   1"
  formats "x = 1\nx    +=   1"
+  formats "class Foo\n1\n\n# foo\nend"
  formats "class Foo\n1\n\n# foo\nend"
+  formats "foo (1; 2)"
  formats "foo (1; 2)"
+  formats "{ %w() }"
  formats "{ %w() }"
+  formats "lib Foo\n  fun foo =\n\n\n    bar(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo =\n\n\n    bar(Int32) : Int32\nend"
+  formats "1&+2&*3"
  formats "1&+2&*3"
+  formats "-> :: foo!"
  formats "-> :: foo!"
+  formats "while 1 # foo\n  # bar\n  2\nend"
  formats "while 1 # foo\n  # bar\n  2\nend"
+  formats "foo = 1\n->foo.foo="
  formats "foo = 1\n->foo.foo="
+  formats "/ /"
  formats "/ /"
+  formats "foo = {1, {2,\n           3},\n       4}"
  formats "foo = {1, {2,\n           3},\n       4}"
+  formats "def foo(a : T) forall T\n  #\n\nend"
  formats "def foo(a : T) forall T\n  #\n\nend"
+  formats "macro foo\n  def bar\n    {{\n      1 + 2\n    }}\n  end\nend"
  formats "macro foo\n  def bar\n    {{\n      1 + 2\n    }}\n  end\nend"
+  formats "begin\n  begin\n\n  end\nend"
  formats "begin\n  begin\n\n  end\nend"
+  formats "%{hello}"
  formats "%{hello}"
+  formats "1 #=>2"
  formats "1 #=>2"
+  formats "foo . responds_to?( :bar )"
  formats "foo . responds_to?( :bar )"
+  formats "loop do\n  1\nrescue\n  2\nend"
  formats "loop do\n  1\nrescue\n  2\nend"
+  formats "asm(\"a\" : \"b\"(1), \"c\"(2) : \"d\"(3) : : \"volatile\")"
  formats "asm(\"a\" : \"b\"(1), \"c\"(2) : \"d\"(3) : : \"volatile\")"
+  formats "case 1        # foo\nwhen 2 then 3 # bar\nwhen 4 then 5 # baz\nelse        6 # zzz\nend"
  formats "case 1        # foo\nwhen 2 then 3 # bar\nwhen 4 then 5 # baz\nelse        6 # zzz\nend"
+  formats "case  1 \n when 2 \n 3 \n end"
  formats "case  1 \n when 2 \n 3 \n end"
+  formats "begin\n1\nensure\n2\nend"
  formats "begin\n1\nensure\n2\nend"
+  formats "foo(1 &- 2)"
  formats "foo(1 &- 2)"
+  formats "break  *1"
  formats "break  *1"
+  formats "until 1\n2\nend"
  formats "until 1\n2\nend"
+  formats "foo(1, ) do\nend"
  formats "foo(1, ) do\nend"
+  formats "foo = 1\n->foo.bar(Int32*)"
  formats "foo = 1\n->foo.bar(Int32*)"
+  formats "foo[x: 1, &.bar] ||= 1"
  formats "foo[x: 1, &.bar] ||= 1"
+  formats "-> :: Foo . foo="
  formats "-> :: Foo . foo="
+  formats "->@@foo.foo?"
  formats "->@@foo.foo?"
+  formats "foo . responds_to? :bar"
  formats "foo . responds_to? :bar"
+  formats "foo(bar([\n  1,\n]))"
  formats "foo(bar([\n  1,\n]))"
+  formats "foo do   # hello\nend"
  formats "foo do   # hello\nend"
+  formats "class Foo\nx = 1\nend"
  formats "class Foo\nx = 1\nend"
+  formats "Foo::Bar(T, U?)?"
  formats "Foo::Bar(T, U?)?"
+  formats "alias A = (B)"
  formats "alias A = (B)"
+  formats "1.>= do\nend"
  formats "1.>= do\nend"
 Crystal::Repl::Interpreter
   types
-    interprets crystal_type_id for virtual metaclass type (#12228)
    interprets crystal_type_id for virtual metaclass type (#12228)
     does class method on virtual metaclass casted to generic metaclass (#12302)
    does class method on virtual metaclass casted to generic metaclass (#12302)
+    discards .class
    discards .class
+    discards Path
    discards Path
     interprets path to type
    interprets path to type
+    interprets class for virtual_type type (struct)
    interprets class for virtual_type type (struct)
+    discards typeof
    discards typeof
     interprets class_crystal_instance_type_id
    interprets class_crystal_instance_type_id
-    interprets class for non-union type
    interprets class for non-union type
     discards class for virtual_type type
    discards class for virtual_type type
-    discards crystal_type_id
    discards crystal_type_id
-    interprets class for virtual_type type (struct)
    interprets class for virtual_type type (struct)
-    interprets crystal_type_id for nil
    interprets crystal_type_id for nil
     discards class for non-union type
    discards class for non-union type
-    discards .class
    discards .class
-    discards typeof
    discards typeof
-    discards Path
    discards Path
     discards generic
    discards generic
+    discards crystal_type_id
    discards crystal_type_id
+    interprets class for non-union type
    interprets class for non-union type
+    interprets crystal_type_id for nil
    interprets crystal_type_id for nil
     interprets crystal_type_id for non-nil
    interprets crystal_type_id for non-nil
     interprets class for module type (#12203)
    interprets class for module type (#12203)
+    interprets crystal_type_id for virtual metaclass type (#12228)
    interprets crystal_type_id for virtual metaclass type (#12228)
     interprets class for virtual_type type
    interprets class for virtual_type type
-Code gen: asm
-  codegens with two inputs
  codegens with two inputs
-  codegens with two outputs
  codegens with two outputs
-  codegens without inputs
  codegens without inputs
-  codegens with intel dialect
  codegens with intel dialect
-  codegens with one input
  codegens with one input
-  passes correct string length to LLVM
  passes correct string length to LLVM
-Semantic: c enum
-  types enum value with base type
  types enum value with base type
-  types enum value
  types enum value
-  errors if enum base type is not an integer
  errors if enum base type is not an integer
-  allows using an enum as a type in a struct
  allows using an enum as a type in a struct
-  errors if enum value is different from default (Int32) (#194)
  errors if enum value is different from default (Int32) (#194)
-  allows using an enum as a type in a fun
  allows using an enum as a type in a fun
-Semantic: new
-  evaluates initialize default value at the instance scope (4) (#731)
  evaluates initialize default value at the instance scope (4) (#731)
-  inherits initialize and new methods if doesn't define new (#3238)
  inherits initialize and new methods if doesn't define new (#3238)
-  errors if using self call in default argument (2)
  errors if using self call in default argument (2)
-  evaluates initialize default value at the instance scope (6) (#731)
  evaluates initialize default value at the instance scope (6) (#731)
-  errors if using self call in default argument (3)
  errors if using self call in default argument (3)
-  evaluates initialize default value at the instance scope (2) (#731)
  evaluates initialize default value at the instance scope (2) (#731)
-  errors if using self call in default argument (1)
  errors if using self call in default argument (1)
-  doesn't have default new for inherited class from generic type
  doesn't have default new for inherited class from generic type
-  uses correct receiver for `initialize` in namespaced generic classes (#4086)
  uses correct receiver for `initialize` in namespaced generic classes (#4086)
-  evaluates initialize default value at the instance scope (3) (#731)
  evaluates initialize default value at the instance scope (3) (#731)
-  doesn't incorrectly redefines new for generic class
  doesn't incorrectly redefines new for generic class
-  evaluates initialize default value at the instance scope (1) (#731)
  evaluates initialize default value at the instance scope (1) (#731)
-  evaluates initialize default value at the instance scope (5) (#731)
  evaluates initialize default value at the instance scope (5) (#731)
-Code gen: experimental
-  errors if missing link arguments
  errors if missing link arguments
-  errors if too many arguments
  errors if too many arguments
-  compiles with single string argument
  compiles with single string argument
-  errors if invalid argument type
  errors if invalid argument type
-  compiles with no argument
  compiles with no argument
-Semantic: offsetof
-  errors on undefined instance variable
  errors on undefined instance variable
-  can be used with generic types
  can be used with generic types
-  gives error if using offsetof on something that's neither a class, a struct nor a Tuple
  gives error if using offsetof on something that's neither a class, a struct nor a Tuple
-  gives error if using offsetof on non-Tuples with an index
  gives error if using offsetof on non-Tuples with an index
-  gives error if using offsetof on Tuples with indexes greater than tuple size
  gives error if using offsetof on Tuples with indexes greater than tuple size
-  gives error if using offsetof on Tuples with negative indexes
  gives error if using offsetof on Tuples with negative indexes
-  types offsetof
  types offsetof
-  errors on typeof inside offsetof expression
  errors on typeof inside offsetof expression
-  can be used with classes
  can be used with classes
-  gives error if using offsetof on Tuples with instance variables
  gives error if using offsetof on Tuples with instance variables
-  errors on offsetof element of uninstantiated generic type
  errors on offsetof element of uninstantiated generic type
-  gives error if using offsetof on something that can't have instance variables
  gives error if using offsetof on something that can't have instance variables
-Normalize: string interpolation
-  replaces through multiple levels
  replaces through multiple levels
-  replaces string constant
  replaces string constant
-  normalizes heredoc
  normalizes heredoc
-  normalizes string interpolation
  normalizes string interpolation
-  replaces string constant that results from macro expansion
  replaces string constant that results from macro expansion
-  normalizes string interpolation with multiple lines
  normalizes string interpolation with multiple lines
-Code gen: next
-  codegens next conditionally with int type (2)
  codegens next conditionally with int type (2)
-  codegens next
  codegens next
-  codegens next with while inside block
  codegens next with while inside block
-  codegens next with break (1)
  codegens next with break (1)
-  codegens next with break (2)
  codegens next with break (2)
-  codegens next without expressions
  codegens next without expressions
-  codegens next conditionally
  codegens next conditionally
-  codegens next with break (3)
  codegens next with break (3)
-Semantic: special vars
-  types $? when not defined as no return (2)
  types $? when not defined as no return (2)
-  types $~ when not defined as no return
  types $~ when not defined as no return
-  infers in block
  infers in block
-  types $~ when not defined as no return (2)
  types $~ when not defined as no return (2)
-  infers after block
  infers after block
-  infers in block with nested block
  infers in block with nested block
-  infers when assigning inside block
  infers when assigning inside block
-  errors if assigning $? at top level
  errors if assigning $? at top level
-  types $? when not defined as no return
  types $? when not defined as no return
-  errors if assigning $~ at top level
  errors if assigning $~ at top level
-  infers $~
  infers $~
-  infers $?
  infers $?
-Normalize: def
-  expands def with reserved external name (#6559)
  expands def with reserved external name (#6559)
-  expands a def on request with default arguments and type restrictions
  expands a def on request with default arguments and type restrictions
-  expands with magic constant specifying one when not all are magic
  expands with magic constant specifying one when not all are magic
-  expands with magic constant with named arg
  expands with magic constant with named arg
-  expands with two named argument and one not
  expands with two named argument and one not
-  expands with more named arg which come in the correct order
  expands with more named arg which come in the correct order
-  expands a def with external names (1)
  expands a def with external names (1)
-  expands a def on request with default arguments that yields (external names)
  expands a def on request with default arguments that yields (external names)
-  expands a def with splat and double splat
  expands a def with splat and double splat
-  expands a def with double splat and two named args and regular args
  expands a def with double splat and two named args and regular args
-  expands with magic constant specifying one when all are magic
  expands with magic constant specifying one when all are magic
-  expands with one named arg that is the only one (2)
  expands with one named arg that is the only one (2)
-  expands a def on request with default arguments that yields (2)
  expands a def on request with default arguments that yields (2)
-  expands a def on request with default arguments (2)
  expands a def on request with default arguments (2)
-  expands a def on request with default arguments and type restrictions (2)
  expands a def on request with default arguments and type restrictions (2)
-  expands a def on request with default arguments (external names)
  expands a def on request with default arguments (external names)
-  expands with splat and default argument
  expands with splat and default argument
-  expands a def with double splat and no args
  expands a def with double splat and no args
-  expands with splat and zero
  expands with splat and zero
-  expands arg with default value after splat
  expands arg with default value after splat
-  expands with one named arg that is the only one (1)
  expands with one named arg that is the only one (1)
-  expands a def with external names (2)
  expands a def with external names (2)
-  expands a def on request with default arguments
  expands a def on request with default arguments
-  expands with splat with one arg before
  expands with splat with one arg before
-  expands with named argument and yield
  expands with named argument and yield
-  expands a new def with double splat and two named args and regular args
  expands a new def with double splat and two named args and regular args
-  expands with magic constant
  expands with magic constant
-  expands a def on request with default arguments that yields
  expands a def on request with default arguments that yields
-  expands a def with double splat and two named args
  expands a def with double splat and two named args
-  expands with named argument
  expands with named argument
-  expands with splat
  expands with splat
-  expands with two named argument
  expands with two named argument
-  uses bare *
  uses bare *
-  gives correct body location with
-    block instance var arg, without body
    block instance var arg, without body
-    splat arg, with body
    splat arg, with body
-    default arg with restriction, without body
    default arg with restriction, without body
-    default arg, with body
    default arg, with body
-    block instance var arg, with body
    block instance var arg, with body
-    splat arg, without body
    splat arg, without body
-    default arg, without body
    default arg, without body
-    default arg with restriction, with body
    default arg with restriction, with body
-  expands with magic constant with named arg with yield
  expands with magic constant with named arg with yield
-  expands default value after splat index
  expands default value after splat index
-Semantic: while
-  types endless while with break with value
  types endless while with break with value
-  types endless while with multiple breaks with value
  types endless while with multiple breaks with value
-  finds all while cond assign targets in expressions (6)
  finds all while cond assign targets in expressions (6)
-  restricts type after `while` with `not` and `and` (#4242)
  restricts type after `while` with `not` and `and` (#4242)
-  types while with break without value
  types while with break without value
-  types while with assignment and &&
  types while with assignment and &&
-  uses var type inside while if endless loop
  uses var type inside while if endless loop
-  types while
  types while
-  finds while cond assign target in Not (#10345)
  finds while cond assign target in Not (#10345)
-  doesn't use type at end of endless while if variable is reassigned (2)
  doesn't use type at end of endless while if variable is reassigned (2)
-  types while with break with value
  types while with break with value
-  doesn't fail on Expressions condition (2)
  doesn't fail on Expressions condition (2)
-  doesn't use type at end of endless while if variable is reassigned (3)
  doesn't use type at end of endless while if variable is reassigned (3)
-  uses type at end of endless while if variable is reassigned, but not before first break
  uses type at end of endless while if variable is reassigned, but not before first break
-  types while with multiple breaks with value
  types while with multiple breaks with value
-  uses var type inside while if endless loop (2)
  uses var type inside while if endless loop (2)
-  types variable as nilable if raise before assign
  types variable as nilable if raise before assign
-  doesn't type var as nilable after break inside rescue
  doesn't type var as nilable after break inside rescue
-  restricts type after while (#4242)
  restricts type after while (#4242)
-  doesn't fail on nested conditionals inside typeof condition
  doesn't fail on nested conditionals inside typeof condition
-  reports next cannot be used outside a while
  reports next cannot be used outside a while
-  marks variable as nil if breaking before assigning to it in an endless loop
  marks variable as nil if breaking before assigning to it in an endless loop
-  doesn't fail on Expressions condition (1)
  doesn't fail on Expressions condition (1)
-  types while with && (#1425)
  types while with && (#1425)
-  finds all while cond assign targets in expressions (4)
  finds all while cond assign targets in expressions (4)
-  types endless while with break without value
  types endless while with break without value
-  restricts type after while with not (#4242)
  restricts type after while with not (#4242)
-  doesn't fail on new variables inside typeof condition
  doesn't fail on new variables inside typeof condition
-  doesn't modify var's type before while
  doesn't modify var's type before while
-  types while with assignment
  types while with assignment
-  marks variable as nil if breaking before assigning to it in an endless loop (2)
  marks variable as nil if breaking before assigning to it in an endless loop (2)
-  types while true as NoReturn
  types while true as NoReturn
-  types while (true) as NoReturn
  types while (true) as NoReturn
-  reports break cannot be used outside a while
  reports break cannot be used outside a while
-  finds all while cond assign targets in expressions (5)
  finds all while cond assign targets in expressions (5)
-  finds all while cond assign targets in expressions (3)
  finds all while cond assign targets in expressions (3)
-  types while with assignment and call
  types while with assignment and call
-  finds all while cond assign targets in expressions (#10350)
  finds all while cond assign targets in expressions (#10350)
-  finds all while cond assign targets in expressions (2)
  finds all while cond assign targets in expressions (2)
-  doesn't restrict type after while if there's a break (#4242)
  doesn't restrict type after while if there's a break (#4242)
-  doesn't use type at end of endless while if variable is reassigned
  doesn't use type at end of endless while if variable is reassigned
-  uses type at end of endless while if variable is reassigned, but not before first break (2)
  uses type at end of endless while if variable is reassigned, but not before first break (2)
-  rebinds condition variable after while body (#6158)
  rebinds condition variable after while body (#6158)
-  types while ((true)) as NoReturn
  types while ((true)) as NoReturn
-Crystal::Repl::Interpreter
-  calls
-    inlines call that returns self
    inlines call that returns self
-    mutates through pointer (1)
    mutates through pointer (1)
-    mutates through inlined instance var without receiver
    mutates through inlined instance var without receiver
-    does call on var that's a struct, takes a pointer to instance var, inside if
    does call on var that's a struct, takes a pointer to instance var, inside if
-    does call on constant that's a struct, takes a pointer to instance var, inside if
    does call on constant that's a struct, takes a pointer to instance var, inside if
-    calls a top-level method with two arguments
    calls a top-level method with two arguments
-    inlines method that just reads an instance var, but produces side effects of args
    inlines method that just reads an instance var, but produces side effects of args
-    does Assign class var with wants_struct_pointer
    does Assign class var with wants_struct_pointer
-    mutates call argument
    mutates call argument
-    does call on ivar that's a struct, takes a pointer to instance var, inside if
    does call on ivar that's a struct, takes a pointer to instance var, inside if
-    does call on constant that's a struct, takes a pointer to instance var
    does call on constant that's a struct, takes a pointer to instance var
-    does call on instance var that's a struct, from a class
    does call on instance var that's a struct, from a class
-    does ReadInstanceVar with wants_struct_pointer
    does ReadInstanceVar with wants_struct_pointer
-    calls a top-level method without arguments but with local vars
    calls a top-level method without arguments but with local vars
-    interprets implicit self call for pointer
    interprets implicit self call for pointer
-    mutates through pointer (3)
    mutates through pointer (3)
-    interprets explicit self call for primitive types
    interprets explicit self call for primitive types
-    discards call with struct as obj
    discards call with struct as obj
-    does call on instance var that's a struct, from a struct
    does call on instance var that's a struct, from a struct
-    calls a top-level method without arguments and no local vars
    calls a top-level method without arguments and no local vars
-    mutates through pointer (2)
    mutates through pointer (2)
-    does call on read instance var that's a struct, takes a pointer to instance var
    does call on read instance var that's a struct, takes a pointer to instance var
-    interprets call with if
    interprets call with if
-    does call with struct as obj
    does call with struct as obj
-    mutates through read instance var
    mutates through read instance var
-    interprets call with default values
    interprets call with default values
-    puts struct pointer after tuple indexer
    puts struct pointer after tuple indexer
-    does Assign var with wants_struct_pointer
    does Assign var with wants_struct_pointer
-    does call on self that's a struct, takes a pointer to instance var, inside if
    does call on self that's a struct, takes a pointer to instance var, inside if
-    does call with struct as obj (2)
    does call with struct as obj (2)
-    inlines call that returns self (2)
    inlines call that returns self (2)
-    inlines method that just reads an instance var (2)
    inlines method that just reads an instance var (2)
-    interprets self for primitive types
    interprets self for primitive types
-    inlines method that just reads an instance var
    inlines method that just reads an instance var
-    does Assign instance var with wants_struct_pointer
    does Assign instance var with wants_struct_pointer
-    does call on Pointer#value that's a struct, takes a pointer to instance var
    does call on Pointer#value that's a struct, takes a pointer to instance var
-    mutates through inlined instance var with receiver
    mutates through inlined instance var with receiver
-    interprets call with named arguments
    interprets call with named arguments
-Code gen: new
-  codegens instance method with allocate
  codegens instance method with allocate
-  evaluates initialize default value at the instance scope (3) (#731)
  evaluates initialize default value at the instance scope (3) (#731)
-  can create Reference
  can create Reference
-  codegens instance method with new and instance var
  codegens instance method with new and instance var
-  overloads new and initialize, 1 (#2489)
  overloads new and initialize, 1 (#2489)
-  can create Tuple with Tuple.new  can create Tuple with Tuple.new  can create Tuple with Tuple.new  can create Tuple with Tuple.new  can create Tuple with Tuple.new��  can create Tuple with Tuple.new����������  can create Tuple with Tuple.new  can create Tuple with Tuple.new����  can create Tuple with Tuple.new
  can create Tuple with Tuple.new
-  inherits initialize
  inherits initialize
-  evaluates initialize default value at the instance scope (4) (#731)
  evaluates initialize default value at the instance scope (4) (#731)
-  inherits initialize for generic type
  inherits initialize for generic type
-  evaluates initialize default value at the instance scope (1) (#731)
  evaluates initialize default value at the instance scope (1) (#731)
-  codegens instance method with new
  codegens instance method with new
-  finds new in superclass if no initialize is defined (2)
  finds new in superclass if no initialize is defined (2)
-  overloads new and initialize, 3 (#2489)
  overloads new and initialize, 3 (#2489)
-  finds super in deep hierarchy
  finds super in deep hierarchy
-  finds new in superclass if no initialize is defined (1)
  finds new in superclass if no initialize is defined (1)
-  evaluates initialize default value at the instance scope (2) (#731)
  evaluates initialize default value at the instance scope (2) (#731)
-  defines new for module
  defines new for module
-  overloads new and initialize, 2 (#2489)
  overloads new and initialize, 2 (#2489)
-  finds new in superclass for Enum
  finds new in superclass for Enum
-Normalize: multi assign
-  normalizes m to n, with *_ on left-hand side (3)
  normalizes m to n, with *_ on left-hand side (3)
-  normalizes n to splat on left-hand side
  normalizes n to splat on left-hand side
-  normalizes 1 to n, with *_ on left-hand side (3)
  normalizes 1 to n, with *_ on left-hand side (3)
-  normalizes m to n, with splat on left-hand side, splat is non-empty
  normalizes m to n, with splat on left-hand side, splat is non-empty
-  normalizes n to n
  normalizes n to n
-  normalizes m to n, with splat on left-hand side, splat is empty
  normalizes m to n, with splat on left-hand side, splat is empty
-  strict_multi_assign
-    normalizes 1 to n with []
    normalizes 1 to n with []
-    normalizes 1 to n with call
    normalizes 1 to n with call
-    normalizes 1 to n
    normalizes 1 to n
-  normalizes m to n, with *_ on left-hand side (2)
  normalizes m to n, with *_ on left-hand side (2)
-  normalizes 1 to n, with *_ on left-hand side (1)
  normalizes 1 to n, with *_ on left-hand side (1)
-  normalizes m to n, with *_ on left-hand side (1)
  normalizes m to n, with *_ on left-hand side (1)
-  normalizes n to n with []
  normalizes n to n with []
-  normalizes n to n with call
  normalizes n to n with call
-  without strict_multi_assign
-    normalizes 1 to n with []
    normalizes 1 to n with []
-    normalizes 1 to n
    normalizes 1 to n
-    normalizes 1 to n with call
    normalizes 1 to n with call
-  normalizes 1 to splat on left-hand side
  normalizes 1 to splat on left-hand side
-  normalizes 1 to *_ on left-hand side
  normalizes 1 to *_ on left-hand side
-  normalizes 1 to n, with splat on left-hand side, splat before other targets
  normalizes 1 to n, with splat on left-hand side, splat before other targets
-  normalizes 1 to n, with splat on left-hand side
  normalizes 1 to n, with splat on left-hand side
-  normalizes 1 to n, with splat on left-hand side, splat after other targets
  normalizes 1 to n, with splat on left-hand side, splat after other targets
-  normalizes 1 to n, with *_ on left-hand side (2)
  normalizes 1 to n, with *_ on left-hand side (2)
-  normalizes n to *_ on left-hand side
  normalizes n to *_ on left-hand side
-Semantic: primitives
-  types 1 + 2
  types 1 + 2
-  types @[Primitive] method
  types @[Primitive] method
-  Slice.literal
-    with element type
-      types empty literal
      types empty literal
-      errors if element type is not primitive int or float
      errors if element type is not primitive int or float
-      errors if element is not number literal
      errors if element is not number literal
-      types primitive int literal
      types primitive int literal
-      errors if element is out of range
      errors if element is out of range
-      types primitive float literal
      types primitive float literal
-  types a float32
  types a float32
-  errors if @[Primitive] has no args
  errors if @[Primitive] has no args
-  errors if using instance variable inside primitive type
  errors if using instance variable inside primitive type
-  extends from Number and doesn't find + method
  extends from Number and doesn't find + method
-  correctly types first hash from type vars (bug)
  correctly types first hash from type vars (bug)
-  allows @[Primitive] on method that has body
  allows @[Primitive] on method that has body
-  types nil
  types nil
-  types an int32
  types an int32
-  types an expression
  types an expression
-  types char ord
  types char ord
-  extends from Number and doesn't find >= method
  extends from Number and doesn't find >= method
-  computes correct hash value type if it's a function literal (#320)
  computes correct hash value type if it's a function literal (#320)
-  extends from Number and doesn't find to_i method
  extends from Number and doesn't find to_i method
-  types nop
  types nop
-  types a symbol
  types a symbol
-  can invoke binary on primitive typedef (2) (#614)
  can invoke binary on primitive typedef (2) (#614)
-  can invoke binary on primitive typedef (#614)
  can invoke binary on primitive typedef (#614)
-  types pointer of int
  types pointer of int
-  types a char
  types a char
-  types va_arg primitive
  types va_arg primitive
-  types a string
  types a string
-  Reference.pre_initialize
-    errors on abstract type
    errors on abstract type
-    types with virtual reference type
    types with virtual reference type
-    types with reference type
    types with reference type
-    errors on uninstantiated generic type
    errors on uninstantiated generic type
-  looks up return type in correct scope (#13652)
  looks up return type in correct scope (#13652)
-  errors when comparing void (#225)
  errors when comparing void (#225)
-  types a int128
  types a int128
-  types a uint128
  types a uint128
-  types a int64
  types a int64
-  can invoke cast on primitive typedef (#614)
  can invoke cast on primitive typedef (#614)
-  types a bool
  types a bool
-  errors if @[Primitive] has non-symbol arg
  errors if @[Primitive] has non-symbol arg
-  types a float64
  types a float64
+Code gen: c enum
+  codegens enum with 10 // 2 
  codegens enum with 10 // 2 
+  codegens enum with 3 &* 2 
  codegens enum with 3 &* 2 
+  codegens enum with ~1 
  codegens enum with ~1 
+  codegens enum that refers to another enum constant
  codegens enum that refers to another enum constant
+  codegens enum value
  codegens enum value
+  codegens enum with -1 
  codegens enum with -1 
+  codegens enum that refers to another constant
  codegens enum that refers to another constant
+  codegens enum with 10 ^ 3 
  codegens enum with 10 ^ 3 
+  codegens enum with +1 
  codegens enum with +1 
+  codegens enum value 3
  codegens enum value 3
+  codegens enum with (1 + 2) * 3 
  codegens enum with (1 + 2) * 3 
+  codegens enum with 3 &- 2 
  codegens enum with 3 &- 2 
+  codegens enum with 100 >> 3 
  codegens enum with 100 >> 3 
+  codegens enum with 10 | 3 
  codegens enum with 10 | 3 
+  codegens enum value 4
  codegens enum value 4
+  codegens enum with 3 - 2 
  codegens enum with 3 - 2 
+  codegens enum value 2
  codegens enum value 2
+  codegens enum with 3 * 2 
  codegens enum with 3 * 2 
+  codegens enum with 1 + 2 
  codegens enum with 1 + 2 
+  codegens enum with 1 &+ 2 
  codegens enum with 1 &+ 2 
+  codegens enum with 1 << 3 
  codegens enum with 1 << 3 
+  codegens enum with 10 & 3 
  codegens enum with 10 & 3 
+  codegens enum with 10 % 3 
  codegens enum with 10 % 3 
+Lexer macro
+  lexes macro with embedded string with %[
  lexes macro with embedded string with %[
+  lexes macro var
  lexes macro var
+  lexes macro with nested macro
  lexes macro with nested macro
+  lexes macro with nested embedded string with %(
  lexes macro with nested embedded string with %(
+  lexes macro with embedded char and sharp
  lexes macro with embedded char and sharp
+  lexes macro with semicolon before end
  lexes macro with semicolon before end
+  lexes macro with curly escape
  lexes macro with curly escape
+  lexes begin end
  lexes begin end
+  lexes macro with embedded string with %< ignores begin
  lexes macro with embedded string with %< ignores begin
+  lexes with for inside escaped macro (#1029)
  lexes with for inside escaped macro (#1029)
+  lexes macro with embedded string
  lexes macro with embedded string
+  lexes macro with string interpolation and double curly brace
  lexes macro with string interpolation and double curly brace
+  lexes macro with nested annotation
  lexes macro with nested annotation
+  lexes macro with nested struct
  lexes macro with nested struct
+  reaches end
  reaches end
+  lexes macro with comments
  lexes macro with comments
+  doesn't lex macro var if escaped
  doesn't lex macro var if escaped
+  lexes with if/end inside escaped macro (#1029)
  lexes with if/end inside escaped macro (#1029)
+  lexes macro with embedded string with %[ ignores begin
  lexes macro with embedded string with %[ ignores begin
+  lexes macro with nested def
  lexes macro with nested def
+  lexes bug #654
  lexes bug #654
+  lexes macro with nested class
  lexes macro with nested class
+  lexes macro with nested while
  lexes macro with nested while
+  lexes macro with curly escape in comment
  lexes macro with curly escape in comment
+  lexes macro with embedded string and expression
  lexes macro with embedded string and expression
+  lexes macro with if as suffix after return
  lexes macro with if as suffix after return
+  lexes macro with nested abstract struct
  lexes macro with nested abstract struct
+  lexes macro without nested if
  lexes macro without nested if
+  lexes macro with embedded string and backslash
  lexes macro with embedded string and backslash
+  keeps correct line number after lexes the part of keyword and newline (#4656)
  keeps correct line number after lexes the part of keyword and newline (#4656)
+  lexes macro with nested abstract class
  lexes macro with nested abstract class
+  lexes macro with nested begin
  lexes macro with nested begin
+  skips whitespace
  skips whitespace
+  lexes macro with slash not followed by curly
  lexes macro with slash not followed by curly
+  lexes macro with if as suffix
  lexes macro with if as suffix
+  lexes macro with expression
  lexes macro with expression
+  lexes macro with nested lib
  lexes macro with nested lib
+  lexes macro with nested case
  lexes macro with nested case
+  lexes macro with comments and expressions
  lexes macro with comments and expressions
+  lexes macro with nested abstract def
  lexes macro with nested abstract def
+  lexes macro with nested union
  lexes macro with nested union
+  lexes macro with embedded string with %( ignores begin
  lexes macro with embedded string with %( ignores begin
+  lexes macro with nested do
  lexes macro with nested do
+  lexes macro with embedded string with %<
  lexes macro with embedded string with %<
+  lexes macro with embedded string with %(
  lexes macro with embedded string with %(
+  lexes macro with nested module
  lexes macro with nested module
+  keeps correct column and line numbers
  keeps correct column and line numbers
+  lexes macro with nested select
  lexes macro with nested select
+  lexes macro with if after assign
  lexes macro with if after assign
+  lexes macro with nested enum
  lexes macro with nested enum
+  lexes macro with nested fun
  lexes macro with nested fun
+  lexes macro with control
  lexes macro with control
+  lexes with unless inside escaped macro (#5664)
  lexes with unless inside escaped macro (#5664)
+  lexes macro with nested if
  lexes macro with nested if
+  lexes simple macro
  lexes simple macro
+  lexes macro with nested until
  lexes macro with nested until
+  lexes macro with nested unless
  lexes macro with nested unless
+  lexes escaped quote inside string (#895)
  lexes escaped quote inside string (#895)
 Parser doc
-  includes doc for fun def
  includes doc for fun def
-  includes doc for abstract class
  includes doc for abstract class
-  includes doc for class
  includes doc for class
+  includes doc for macro
  includes doc for macro
+  disables doc parsing inside defs
  disables doc parsing inside defs
   includes doc for def
  includes doc for def
-  includes doc for constant assign
  includes doc for constant assign
-  includes doc for alias
  includes doc for alias
+  includes doc for class
  includes doc for class
   includes doc for call without obj
  includes doc for call without obj
-  disables doc parsing inside defs
  disables doc parsing inside defs
+  includes doc for struct
  includes doc for struct
+  includes doc for constant assign
  includes doc for constant assign
+  includes doc for abstract class
  includes doc for abstract class
+  includes doc for fun def
  includes doc for fun def
   includes doc for module
  includes doc for module
-  includes doc for abstract def
  includes doc for abstract def
-  includes doc for private def
  includes doc for private def
+  includes doc for alias
  includes doc for alias
   includes doc for enum def
  includes doc for enum def
-  includes doc for struct
  includes doc for struct
   includes doc for annotation
  includes doc for annotation
-  includes doc for macro
  includes doc for macro
-Semantic: class
-  allows using self in class scope
  allows using self in class scope
-  says wrong number of arguments for abstract class new
  says wrong number of arguments for abstract class new
-  uses number type var in class method
  uses number type var in class method
-  inherits self twice (#5495)
  inherits self twice (#5495)
-  errors if using underscore in generic class
  errors if using underscore in generic class
-  errors if declares class inside if
  errors if declares class inside if
-  doesn't mark instance variable as nilable if calling another initialize
  doesn't mark instance variable as nilable if calling another initialize
-  errors if reopening generic class with different splat index (2)
  errors if reopening generic class with different splat index (2)
-  doesn't error on new on abstract virtual type class
  doesn't error on new on abstract virtual type class
-  preserves order of instance vars (#3050)
  preserves order of instance vars (#3050)
-  allows defining classes inside modules or classes with ::
  allows defining classes inside modules or classes with ::
-  allows declaring a variable in an initialize and using it
  allows declaring a variable in an initialize and using it
-  errors if reopening generic class with different splat index (3)
  errors if reopening generic class with different splat index (3)
-  doesn't lookup new in supermetaclass
  doesn't lookup new in supermetaclass
-  can use short name for top-level type
  can use short name for top-level type
-  errors if inherits from metaclass
  errors if inherits from metaclass
-  types instance variable on getter
  types instance variable on getter
-  can invoke method on abstract generic type with subclasses but no instances
  can invoke method on abstract generic type with subclasses but no instances
-  can't reopen as module
  can't reopen as module
-  types recursive type
  types recursive type
-  errors if reopening non-generic class as generic
  errors if reopening non-generic class as generic
-  doesn't crash on instance variable assigned a proc, and never instantiated (#923)
  doesn't crash on instance variable assigned a proc, and never instantiated (#923)
-  reads an object instance var
  reads an object instance var
-  types type var union
  types type var union
-  types Const#new
  types Const#new
-  can mark initialize as private
  can mark initialize as private
-  does automatic type inference of new for generic types 2
  does automatic type inference of new for generic types 2
-  correctly types #680
  correctly types #680
-  infers generic type after instance was created with explicit type
  infers generic type after instance was created with explicit type
-  finds in global scope if includes module
  finds in global scope if includes module
-  can't use implicit initialize if defined in parent
  can't use implicit initialize if defined in parent
-  errors if reopening generic class with different type vars (2)
  errors if reopening generic class with different type vars (2)
-  can invoke method on abstract generic type without subclasses nor instances
  can invoke method on abstract generic type without subclasses nor instances
-  reads an object instance var from a union type
  reads an object instance var from a union type
-  types instance variable
  types instance variable
-  errors if reading ivar from non-ivar container
  errors if reading ivar from non-ivar container
-  types Const#new#method
  types Const#new#method
-  doesn't use initialize from base class
  doesn't use initialize from base class
-  errors if creating instance before typing instance variable
  errors if creating instance before typing instance variable
-  does automatic inference of new for generic types
  does automatic inference of new for generic types
-  errors when wrong arguments for new
  errors when wrong arguments for new
-  reports can't instantiate abstract class on allocate
  reports can't instantiate abstract class on allocate
-  errors when creating Value
  errors when creating Value
-  says wrong number of arguments for abstract class new (2)
  says wrong number of arguments for abstract class new (2)
-  can invoke method on abstract type without subclasses nor instances
  can invoke method on abstract type without subclasses nor instances
-  types as no return if calling method on abstract class with generic subclasses but no instances (#6996)
  types as no return if calling method on abstract class with generic subclasses but no instances (#6996)
-  types virtual method of generic class
  types virtual method of generic class
-  can't reopen as struct
  can't reopen as struct
-  errors on no method found on abstract class, class method (#2241)
  errors on no method found on abstract class, class method (#2241)
-  types Const#allocate
  types Const#allocate
-  types as no return if calling method on generic class with subclasses (#6996)
  types as no return if calling method on generic class with subclasses (#6996)
-  errors if reading non-existent ivar
  errors if reading non-existent ivar
-  does automatic type inference of new for nested generic type
  does automatic type inference of new for nested generic type
-  uses self as type var
  uses self as type var
-  allows instantiating generic class with number
  allows instantiating generic class with number
-  reports uninitialized constant
  reports uninitialized constant
-  reports undefined instance method
  reports undefined instance method
-  reads a virtual type instance var
  reads a virtual type instance var
-  errors if reopening generic class with different splat index
  errors if reopening generic class with different splat index
-  doesn't use initialize from base class with virtual type
  doesn't use initialize from base class with virtual type
-  says that instance vars are not allowed in metaclass
  says that instance vars are not allowed in metaclass
-  types as no return if calling method on abstract class with all abstract subclasses (#6996)
  types as no return if calling method on abstract class with all abstract subclasses (#6996)
-  types class and subclass as one type
  types class and subclass as one type
-  correctly types #680 (2)
  correctly types #680 (2)
-  types self inside method call without obj
  types self inside method call without obj
-  errors if reopening generic class with different type vars
  errors if reopening generic class with different type vars
-  types generic of generic type
  types generic of generic type
-  errors if inheriting Gen(self) and there's no self (#2890)
  errors if inheriting Gen(self) and there's no self (#2890)
-  doesn't mix classes on definition (#2352)
  doesn't mix classes on definition (#2352)
-  types class and subclass as one type
  types class and subclass as one type
-  types bug #168 (it inherits instance var even if not mentioned in initialize)
  types bug #168 (it inherits instance var even if not mentioned in initialize)
-  types as no return if calling method on abstract generic class (#6996)
  types as no return if calling method on abstract generic class (#6996)
-  doesn't crash with top-level initialize (#2601)
  doesn't crash with top-level initialize (#2601)
-  reports wrong number of arguments for initialize
  reports wrong number of arguments for initialize
-  types instance variable
  types instance variable
-  doesn't lookup type in parents' namespaces, and lookups and in program
  doesn't lookup type in parents' namespaces, and lookups and in program
-  types class and subclass as one type
  types class and subclass as one type
-  uses self as type var
  uses self as type var
-  errors if inherits from module
  errors if inherits from module
-  inherits self (#2890)
  inherits self (#2890)
-  inherits Gen(self) (#2890)
  inherits Gen(self) (#2890)
-  types class inside class
  types class inside class
-  reports undefined method when method inside a class
  reports undefined method when method inside a class
-  reports superclass mismatch
  reports superclass mismatch
-  reports can't instantiate abstract class on new
  reports can't instantiate abstract class on new
-  errors when creating Number
  errors when creating Number
-  says no overload matches for class new
  says no overload matches for class new
-  hoists instance variable initializer
  hoists instance variable initializer
-  errors if assigning superclass to declared instance var
  errors if assigning superclass to declared instance var
-  type def does not reopen type from parent namespace (#11181)
  type def does not reopen type from parent namespace (#11181)
-  errors if using read-instance-var with non-typed variable
  errors if using read-instance-var with non-typed variable
-  reports unknown class when extending
  reports unknown class when extending
+  includes doc for abstract def
  includes doc for abstract def
+  includes doc for private def
  includes doc for private def
+Semantic: splat
+  overloads with type restriction and splat (7)
  overloads with type restriction and splat (7)
+  uses splat restriction with concrete type
  uses splat restriction with concrete type
+  matches with type var splat inside explicit Union, when one splat fails entirely
  matches with type var splat inside explicit Union, when one splat fails entirely
+  matches with type var splat inside explicit Union, when all splat elements match
  matches with type var splat inside explicit Union, when all splat elements match
+  overloads with splat against method with two arguments (#986) (2)
  overloads with splat against method with two arguments (#986) (2)
+  matches type splat with splat in generic type (2)
  matches type splat with splat in generic type (2)
+  works if matches splat with type restriction
  works if matches splat with type restriction
+  overloads with type restriction and splat (3)
  overloads with type restriction and splat (3)
+  splats
  splats
+  gives correct error when forwarding splat (2)
  gives correct error when forwarding splat (2)
+  errors with too few non-splat type arguments (2)
  errors with too few non-splat type arguments (2)
+  overloads with type restriction and splat (2)
  overloads with type restriction and splat (2)
+  says missing argument because positional args don't match past splat
  says missing argument because positional args don't match past splat
+  errors with too few non-splat type arguments (1)
  errors with too few non-splat type arguments (1)
+  Crystal::Splat
+    with splat
    with splat
+    without splat
    without splat
+  accesses T when empty, via module
  accesses T when empty, via module
+  doesn't shift a call's location
  doesn't shift a call's location
+  matches with tuple splat inside explicit Union
  matches with tuple splat inside explicit Union
+  calls super with implicit splat arg (#1001)
  calls super with implicit splat arg (#1001)
+  matches with type var splat inside explicit Union (2)
  matches with type var splat inside explicit Union (2)
+  overloads with type restriction and splat (5)
  overloads with type restriction and splat (5)
+  method with splat and optional named argument matches zero args call (#2746)
  method with splat and optional named argument matches zero args call (#2746)
+  errors with too many non-splat type arguments
  errors with too many non-splat type arguments
+  uses splat restriction after non-splat arguments (#5037)
  uses splat restriction after non-splat arguments (#5037)
+  matches type splat with splat in generic type (1)
  matches type splat with splat in generic type (1)
+  forwards tuple with an extra argument
  forwards tuple with an extra argument
+  overloads with type restriction and splat (4)
  overloads with type restriction and splat (4)
+  uses bare *
  uses bare *
+  matches with type var and splat of itself inside explicit Union
  matches with type var and splat of itself inside explicit Union
+  errors if using two splat indices on restriction
  errors if using two splat indices on restriction
+  splats arg and splat against splat (1) (#1042)
  splats arg and splat against splat (1) (#1042)
+  matches with splat
  matches with splat
+  matches with type var and splat of itself inside explicit Union (2)
  matches with type var and splat of itself inside explicit Union (2)
+  uses splat restriction, matches empty
  uses splat restriction, matches empty
+  says no overload matches on type restrictions past the splat arg
  says no overload matches on type restrictions past the splat arg
+  uses bare *, doesn't let more args
  uses bare *, doesn't let more args
+  uses splat restriction
  uses splat restriction
+  errors if doesn't match splat with type restriction
  errors if doesn't match splat with type restriction
+  overloads with type restriction and splat (6)
  overloads with type restriction and splat (6)
+  redefines method with splat (bug #248)
  redefines method with splat (bug #248)
+  gives correct error when forwarding splat
  gives correct error when forwarding splat
+  matches with type var splat inside explicit Union
  matches with type var splat inside explicit Union
+  errors if splatting non-tuple type in return values
  errors if splatting non-tuple type in return values
+  errors on zero args with named arg and splat
  errors on zero args with named arg and splat
+  allows default value after splat index
  allows default value after splat index
+  forwards tuple in return statement
  forwards tuple in return statement
+  matches with type var splat inside explicit Union, when non-splat vars fail
  matches with type var splat inside explicit Union, when non-splat vars fail
+  doesn't match splat in generic type with unsplatted tuple (#10164)
  doesn't match splat in generic type with unsplatted tuple (#10164)
+  matches with type var and splat of itself inside explicit Union (3)
  matches with type var and splat of itself inside explicit Union (3)
+  overloads with type restriction and splat (1)
  overloads with type restriction and splat (1)
+  matches instantiated generic with splat in generic type
  matches instantiated generic with splat in generic type
+  errors if doesn't match splat with type restriction because of zero arguments
  errors if doesn't match splat with type restriction because of zero arguments
+  can splat after type filter left it as a tuple (#442)
  can splat after type filter left it as a tuple (#442)
+  doesn't crash on non-match (#2521)
  doesn't crash on non-match (#2521)
+  splats arg and splat against splat (2) (#1042)
  splats arg and splat against splat (2) (#1042)
+  errors if splatting union
  errors if splatting union
+  matches partially instantiated generic with splat in generic type
  matches partially instantiated generic with splat in generic type
+  doesn't match free var type splats inside explicit Union
  doesn't match free var type splats inside explicit Union
+  errors if splatting non-tuple type in call arguments
  errors if splatting non-tuple type in call arguments
+  overloads with splat against method with two arguments (#986) (1)
  overloads with splat against method with two arguments (#986) (1)
+  method with default arguments and splat matches call with one arg (#2766)
  method with default arguments and splat matches call with one arg (#2766)
+Semantic: yield with scope
+  infer type of block body
  infer type of block body
+  uses method of enclosing scope
  uses method of enclosing scope
+  infer type of block body with yield scope and arguments
  infer type of block body with yield scope and arguments
+  finds macro
  finds macro
+  errors if using instance variable at top level
  errors if using instance variable at top level
+  mentions with yield scope and current scope in error
  mentions with yield scope and current scope in error
+  passes #229
  passes #229
+  infer type of empty block body
  infer type of empty block body
+  invokes nested calls
  invokes nested calls
+  uses instance variable of enclosing scope
  uses instance variable of enclosing scope
+  infer type of block body with yield scope
  infer type of block body with yield scope
+Crystal::Playground::Agent
+  should send json messages and return inspected value
  should send json messages and return inspected value
+Code gen: regex literal spec
+  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)  works in a class variable (#10951)
  works in a class variable (#10951)
+Semantic: double splat
+  double splats named argument into arguments (1)
  double splats named argument into arguments (1)
+  errors if duplicate keys on call side with double splat and named args
  errors if duplicate keys on call side with double splat and named args
+  uses double splat restriction, matches empty
  uses double splat restriction, matches empty
+  uses restriction on double splat, doesn't match with empty named tuple (2)
  uses restriction on double splat, doesn't match with empty named tuple (2)
+  matches double splat on method with named args and regular args
  matches double splat on method with named args and regular args
+  uses restriction on double splat, means all types must be that type
  uses restriction on double splat, means all types must be that type
+  matches named args producing an empty double splat (#2678)
  matches named args producing an empty double splat (#2678)
+  matches double splat on method (empty)
  matches double splat on method (empty)
+  matches double splat with regular splat
  matches double splat with regular splat
+  errors if duplicate keys on call side with two double splats
  errors if duplicate keys on call side with two double splats
+  uses double splat in new
  uses double splat in new
+  errors missing argument with double splat
  errors missing argument with double splat
+  uses double splat restriction
  uses double splat restriction
+  matches double splat on method with named args
  matches double splat on method with named args
+  double splats named argument into arguments (2)
  double splats named argument into arguments (2)
+  overloads based on double splat restriction
  overloads based on double splat restriction
+  uses restriction on double splat, doesn't match with empty named tuple
  uses restriction on double splat, doesn't match with empty named tuple
+  uses double splat restriction with concrete type
  uses double splat restriction with concrete type
+Crystal::Init::InitProject
+  correctly uses git config
  correctly uses git config
+  has proper contents
  has proper contents
+Crystal::Command
+  clear_cache
+    clears any cached compiler files
    clears any cached compiler files
+Code gen: void
+  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable  codegens void assignment in case with local variable
  codegens void assignment in case with local variable
+  codegens unreachable code
  codegens unreachable code
+  allows passing void as argument to method
  allows passing void as argument to method
+  codegens no return assignment
  codegens no return assignment
+  codegens void assignment
  codegens void assignment
+  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case  codegens void assignment in case
  codegens void assignment in case
+  returns void from nil functions, doesn't crash when passing value
  returns void from nil functions, doesn't crash when passing value
+Semantic: ReferenceStorage
+  errors if T is a value type
  errors if T is a value type
+  errors if T is a struct type
  errors if T is a struct type
+  errors if T is a nilable type
  errors if T is a nilable type
+  allows a different name
  allows a different name
+  errors if T is a union type
  errors if T is a union type
+Crystal::Repl::Interpreter
+  literals
+    interprets an UInt128
    interprets an UInt128
+    interprets a Float32
    interprets a Float32
+    interprets a bool (false)
    interprets a bool (false)
+    precomputes string literal length
    precomputes string literal length
+    interprets an UInt32
    interprets an UInt32
+    interprets an UInt64
    interprets an UInt64
+    interprets an Int16
    interprets an Int16
+    uses a string pool
    uses a string pool
+    interprets a Float64
    interprets a Float64
+    interprets an Int32
    interprets an Int32
+    interprets an Int64
    interprets an Int64
+    interprets a String literal
    interprets a String literal
+    interprets an Int8
    interprets an Int8
+    interprets an UInt16
    interprets an UInt16
+    interprets an Int128
    interprets an Int128
+    interprets an UInt8
    interprets an UInt8
+    interprets a char
    interprets a char
+    interprets a bool (true)
    interprets a bool (true)
+    interprets nil
    interprets nil
+  comparisons
+    interprets Int32 != UInt64 (true)
    interprets Int32 != UInt64 (true)
+    interprets UInt64 != Int32 (false)
    interprets UInt64 != Int32 (false)
+    interprets UInt8 < Int32 (false, right is less than zero)
    interprets UInt8 < Int32 (false, right is less than zero)
+    interprets Int32 == UInt64 (false)
    interprets Int32 == UInt64 (false)
+    interprets Int32 != UInt64 (false)
    interprets Int32 != UInt64 (false)
+    interprets UInt32 < Int32 (false)
    interprets UInt32 < Int32 (false)
+    interprets UInt64 > UInt32 (false)
    interprets UInt64 > UInt32 (false)
+    interprets Int32 != Int32 (true)
    interprets Int32 != Int32 (true)
+    interprets Int32 == UInt64 (true)
    interprets Int32 == UInt64 (true)
+    interprets UInt64 == Int32 (true when Int32 >= 0)
    interprets UInt64 == Int32 (true when Int32 >= 0)
+    interprets Bool != Bool (true)
    interprets Bool != Bool (true)
+    interprets Bool == Bool (false)
    interprets Bool == Bool (false)
+    interprets UInt8 < Int32 (false, right is greater than zero)
    interprets UInt8 < Int32 (false, right is greater than zero)
+    interprets UInt64 < Int32 (false, right is less than zero)
    interprets UInt64 < Int32 (false, right is less than zero)
+    interprets Char == Char (false)
    interprets Char == Char (false)
+    interprets Int32 == Int32 (true)
    interprets Int32 == Int32 (true)
+    interprets Int128 == Int128 (false)
    interprets Int128 == Int128 (false)
+    interprets UInt64.unsafe_mod(UInt64)
    interprets UInt64.unsafe_mod(UInt64)
+    discards comparison
    discards comparison
+    interprets Float64 < Float64
    interprets Float64 < Float64
+    interprets Int128 == Int128 (true)
    interprets Int128 == Int128 (true)
+    interprets UInt64 != Int32 (true)
    interprets UInt64 != Int32 (true)
+    interprets Float32 / Int32
    interprets Float32 / Int32
+    interprets UInt64 == Int32 (false when Int32 >= 0)
    interprets UInt64 == Int32 (false when Int32 >= 0)
+    interprets Int32 < Float64
    interprets Int32 < Float64
+    interprets UInt32 < Int32 (true)
    interprets UInt32 < Int32 (true)
+    interprets Float64 / Float64
    interprets Float64 / Float64
+    interprets Int32 < Int32
    interprets Int32 < Int32
+    interprets Float32 fdiv Float64
    interprets Float32 fdiv Float64
+    interprets UInt64 > UInt32 (true)
    interprets UInt64 > UInt32 (true)
+    interprets Float64 < Int32
    interprets Float64 < Int32
+    interprets Bool == Bool (true)
    interprets Bool == Bool (true)
+    interprets Bool != Bool (false)
    interprets Bool != Bool (false)
+    interprets Int32 > Float64 (true)
    interprets Int32 > Float64 (true)
+    interprets UInt64 < Int32 (false, right is greater than zero)
    interprets UInt64 < Int32 (false, right is greater than zero)
+    interprets Float64 fdiv Float32
    interprets Float64 fdiv Float32
+    interprets Int32 == Float64 (true)
    interprets Int32 == Float64 (true)
+    interprets UInt8 < Int32 (true, right is greater than zero)
    interprets UInt8 < Int32 (true, right is greater than zero)
+    interprets Int32 != Int32 (false)
    interprets Int32 != Int32 (false)
+    interprets UInt64 == Int32 (false when Int32 < 0)
    interprets UInt64 == Int32 (false when Int32 < 0)
+    interprets UInt64 < Int32 (true, right is greater than zero)
    interprets UInt64 < Int32 (true, right is greater than zero)
+    interprets Float32 / Float32
    interprets Float32 / Float32
+    interprets Int32 == Float64 (false)
    interprets Int32 == Float64 (false)
+    interprets Char == Char (true)
    interprets Char == Char (true)
+    interprets Int32 == Int32 (false)
    interprets Int32 == Int32 (false)
+    interprets Int32 > Float64 (false)
    interprets Int32 > Float64 (false)
+  local variables
+    interprets uninitialized
    interprets uninitialized
+    interprets variable set
    interprets variable set
+    doesn't declare variable with no type
    doesn't declare variable with no type
+    interprets variable set and get
    interprets variable set and get
+    assigns to underscore
    assigns to underscore
+    interprets variable set and get, second local var
    interprets variable set and get, second local var
+    interprets variable set with type restriction (#13023)
    interprets variable set with type restriction (#13023)
+    interprets at the class level
    interprets at the class level
+    doesn't declare variable with no type inside method
    doesn't declare variable with no type inside method
+    interprets local variable declaration (#12229)
    interprets local variable declaration (#12229)
+    interprets variable set and get with operations
    interprets variable set and get with operations
+    doesn't discard underscore right hand side
    doesn't discard underscore right hand side
+  conversion
+    interprets Int8::MIN#to_f32!
    interprets Int8::MIN#to_f32!
+    interprets Int8::MAX#to_f64!
    interprets Int8::MAX#to_f64!
+    interprets Int64::MIN#to_f64!
    interprets Int64::MIN#to_f64!
+    interprets Int64::MAX#to_i32!
    interprets Int64::MAX#to_i32!
+    interprets Int64::MAX#to_u64!
    interprets Int64::MAX#to_u64!
+    interprets Int32::MIN#to_i8!
    interprets Int32::MIN#to_i8!
+    interprets Int16::MAX#to_i!
    interprets Int16::MAX#to_i!
+    interprets Int32::MAX#to_u64!
    interprets Int32::MAX#to_u64!
+    interprets Int64::MAX#to_i8!
    interprets Int64::MAX#to_i8!
+    interprets Float64#to_i64! (negative)
    interprets Float64#to_i64! (negative)
+    interprets UInt8::MAX#to_f32!
    interprets UInt8::MAX#to_f32!
+    interprets UInt16::MAX#to_i!
    interprets UInt16::MAX#to_i!
+    interprets Int16::MAX#to_u32!
    interprets Int16::MAX#to_u32!
+    interprets Float64#to_i8! (negative)
    interprets Float64#to_i8! (negative)
+    interprets UInt16::MAX#to_u16!
    interprets UInt16::MAX#to_u16!
+    interprets UInt64::MAX#to_u64!
    interprets UInt64::MAX#to_u64!
+    interprets Int8::MIN#to_i16!
    interprets Int8::MIN#to_i16!
+    interprets Int64::MAX#to_u32!
    interprets Int64::MAX#to_u32!
+    interprets Int16::MAX#to_i64!
    interprets Int16::MAX#to_i64!
+    interprets Float64#to_i64! (positive)
    interprets Float64#to_i64! (positive)
+    interprets Int64::MIN#to_i16!
    interprets Int64::MIN#to_i16!
+    interprets Int64::MIN#to_u16!
    interprets Int64::MIN#to_u16!
+    interprets Int16::MIN#to_u64!
    interprets Int16::MIN#to_u64!
+    interprets Float32#to_f32! (negative)
    interprets Float32#to_f32! (negative)
+    interprets UInt64::MAX#to_f64!
    interprets UInt64::MAX#to_f64!
+    discards conversion
    discards conversion
+    interprets UInt8::MAX#to_i32!
    interprets UInt8::MAX#to_i32!
+    interprets UInt8::MAX#to_f64!
    interprets UInt8::MAX#to_f64!
+    interprets UInt32::MAX#to_i8!
    interprets UInt32::MAX#to_i8!
+    interprets Int32::MIN#to_u!
    interprets Int32::MIN#to_u!
+    interprets Int8::MAX#to_u16!
    interprets Int8::MAX#to_u16!
+    interprets UInt64::MAX#to_i64!
    interprets UInt64::MAX#to_i64!
+    interprets Int32::MAX#to_i16!
    interprets Int32::MAX#to_i16!
+    interprets Int16::MAX#to_i16!
    interprets Int16::MAX#to_i16!
+    interprets Float32#to_i32! (positive)
    interprets Float32#to_i32! (positive)
+    interprets Float32#to_i8! (positive)
    interprets Float32#to_i8! (positive)
+    interprets Float32#to_i16! (positive)
    interprets Float32#to_i16! (positive)
+    interprets Int32::MAX#to_u16!
    interprets Int32::MAX#to_u16!
+    interprets Int32::MIN#to_i!
    interprets Int32::MIN#to_i!
+    interprets Int16::MAX#to_i32!
    interprets Int16::MAX#to_i32!
+    interprets UInt32::MAX#to_u64!
    interprets UInt32::MAX#to_u64!
+    discards conversion with local var
    discards conversion with local var
+    interprets Int16::MIN#to_u8!
    interprets Int16::MIN#to_u8!
+    interprets UInt8::MAX#to_i8!
    interprets UInt8::MAX#to_i8!
+    interprets Int64::MIN#to_f32!
    interprets Int64::MIN#to_f32!
+    interprets Int64::MIN#to_u32!
    interprets Int64::MIN#to_u32!
+    interprets UInt8::MAX#to_i16!
    interprets UInt8::MAX#to_i16!
+    interprets Int64::MAX#to_i64!
    interprets Int64::MAX#to_i64!
+    interprets Float32#to_i! (negative)
    interprets Float32#to_i! (negative)
+    interprets Float32#to_u32! (positive)
    interprets Float32#to_u32! (positive)
+    interprets Float64#to_f64! (negative)
    interprets Float64#to_f64! (negative)
+    interprets Int32::MIN#to_u64!
    interprets Int32::MIN#to_u64!
+    interprets UInt8::MAX#to_u8!
    interprets UInt8::MAX#to_u8!
+    interprets Float32#to_f64! (positive)
    interprets Float32#to_f64! (positive)
+    interprets Int32::MIN#to_f64!
    interprets Int32::MIN#to_f64!
+    interprets Float64#to_u! (positive)
    interprets Float64#to_u! (positive)
+    interprets Float64#to_f32! (negative)
    interprets Float64#to_f32! (negative)
+    interprets Int64::MIN#to_u64!
    interprets Int64::MIN#to_u64!
+    interprets Int64::MIN#to_u!
    interprets Int64::MIN#to_u!
+    interprets Int8::MAX#to_i64!
    interprets Int8::MAX#to_i64!
+    interprets Float64#to_i32! (positive)
    interprets Float64#to_i32! (positive)
+    interprets UInt8::MAX#to_u64!
    interprets UInt8::MAX#to_u64!
+    interprets UInt16::MAX#to_i16!
    interprets UInt16::MAX#to_i16!
+    interprets Int8::MIN#to_u32!
    interprets Int8::MIN#to_u32!
+    interprets UInt32::MAX#to_u!
    interprets UInt32::MAX#to_u!
+    interprets Int32::MAX#to_i32!
    interprets Int32::MAX#to_i32!
+    interprets UInt64::MAX#to_i32!
    interprets UInt64::MAX#to_i32!
+    interprets UInt16::MAX#to_f64!
    interprets UInt16::MAX#to_f64!
+    interprets Int32::MIN#to_i64!
    interprets Int32::MIN#to_i64!
+    interprets UInt8::MAX#to_u16!
    interprets UInt8::MAX#to_u16!
+    interprets UInt16::MAX#to_u32!
    interprets UInt16::MAX#to_u32!
+    interprets UInt64::MAX#to_u8!
    interprets UInt64::MAX#to_u8!
+    interprets Float32#to_i32! (negative)
    interprets Float32#to_i32! (negative)
+    interprets UInt32::MAX#to_i16!
    interprets UInt32::MAX#to_i16!
+    interprets Int32::MIN#to_i16!
    interprets Int32::MIN#to_i16!
+    interprets Int16::MIN#to_u32!
    interprets Int16::MIN#to_u32!
+    interprets UInt64::MAX#to_i!
    interprets UInt64::MAX#to_i!
+    interprets UInt16::MAX#to_u64!
    interprets UInt16::MAX#to_u64!
+    Int32#unsafe_chr
    Int32#unsafe_chr
+    interprets UInt64::MAX#to_i8!
    interprets UInt64::MAX#to_i8!
+    interprets Int16::MIN#to_i64!
    interprets Int16::MIN#to_i64!
+    interprets Int64::MIN#to_u8!
    interprets Int64::MIN#to_u8!
+    interprets Int32::MIN#to_u8!
    interprets Int32::MIN#to_u8!
+    interprets Float32#to_i64! (negative)
    interprets Float32#to_i64! (negative)
+    interprets Float32#to_i64! (positive)
    interprets Float32#to_i64! (positive)
+    interprets UInt32::MAX#to_i!
    interprets UInt32::MAX#to_i!
+    interprets Int64::MAX#to_i!
    interprets Int64::MAX#to_i!
+    interprets Int64::MIN#to_i32!
    interprets Int64::MIN#to_i32!
+    interprets Int16::MAX#to_f32!
    interprets Int16::MAX#to_f32!
+    interprets Int64::MAX#to_u16!
    interprets Int64::MAX#to_u16!
+    interprets Int8::MAX#to_i32!
    interprets Int8::MAX#to_i32!
+    interprets Float32#to_i! (positive)
    interprets Float32#to_i! (positive)
+    interprets UInt32::MAX#to_u8!
    interprets UInt32::MAX#to_u8!
+    interprets Int32::MIN#to_i32!
    interprets Int32::MIN#to_i32!
+    interprets Int64::MAX#to_u!
    interprets Int64::MAX#to_u!
+    interprets Float64#to_f64! (positive)
    interprets Float64#to_f64! (positive)
+    interprets Int8::MIN#to_u8!
    interprets Int8::MIN#to_u8!
+    interprets UInt64::MAX#to_u32!
    interprets UInt64::MAX#to_u32!
+    interprets Float64#to_u64! (positive)
    interprets Float64#to_u64! (positive)
+    interprets Int16::MAX#to_i8!
    interprets Int16::MAX#to_i8!
+    interprets Int32::MIN#to_f32!
    interprets Int32::MIN#to_f32!
+    interprets Float32#to_f32! (positive)
    interprets Float32#to_f32! (positive)
+    interprets Int64::MIN#to_i!
    interprets Int64::MIN#to_i!
+    interprets Float64#to_u8! (positive)
    interprets Float64#to_u8! (positive)
+    interprets UInt32::MAX#to_u16!
    interprets UInt32::MAX#to_u16!
+    interprets Int64::MIN#to_i8!
    interprets Int64::MIN#to_i8!
+    interprets Float64#to_u32! (positive)
    interprets Float64#to_u32! (positive)
+    interprets Int64::MAX#to_u8!
    interprets Int64::MAX#to_u8!
+    interprets Int16::MAX#to_u8!
    interprets Int16::MAX#to_u8!
+    interprets Int8::MAX#to_u32!
    interprets Int8::MAX#to_u32!
+    interprets Int32::MAX#to_u32!
    interprets Int32::MAX#to_u32!
+    interprets Int8::MAX#to_u8!
    interprets Int8::MAX#to_u8!
+    interprets UInt16::MAX#to_u8!
    interprets UInt16::MAX#to_u8!
+    interprets Float64#to_f32! (positive)
    interprets Float64#to_f32! (positive)
+    interprets Int8::MAX#to_u64!
    interprets Int8::MAX#to_u64!
+    interprets Int8::MIN#to_i64!
    interprets Int8::MIN#to_i64!
+    interprets UInt16::MAX#to_u!
    interprets UInt16::MAX#to_u!
+    interprets Float32#to_u16! (positive)
    interprets Float32#to_u16! (positive)
+    interprets Float64#to_i! (negative)
    interprets Float64#to_i! (negative)
+    interprets Int8::MAX#to_u!
    interprets Int8::MAX#to_u!
+    interprets Int16::MIN#to_u!
    interprets Int16::MIN#to_u!
+    interprets Float32#to_u64! (positive)
    interprets Float32#to_u64! (positive)
+    interprets UInt64::MAX#to_i16!
    interprets UInt64::MAX#to_i16!
+    interprets Int32::MAX#to_u!
    interprets Int32::MAX#to_u!
+    interprets UInt8::MAX#to_u!
    interprets UInt8::MAX#to_u!
+    interprets Int8::MIN#to_u64!
    interprets Int8::MIN#to_u64!
+    interprets Int16::MAX#to_f64!
    interprets Int16::MAX#to_f64!
+    interprets Float64#to_i8! (positive)
    interprets Float64#to_i8! (positive)
+    interprets Int16::MIN#to_i32!
    interprets Int16::MIN#to_i32!
+    interprets Float32#to_i16! (negative)
    interprets Float32#to_i16! (negative)
+    interprets Int32::MAX#to_i64!
    interprets Int32::MAX#to_i64!
+    interprets Int16::MIN#to_f64!
    interprets Int16::MIN#to_f64!
+    interprets Int8::MAX#to_i16!
    interprets Int8::MAX#to_i16!
+    interprets Int16::MIN#to_f32!
    interprets Int16::MIN#to_f32!
+    interprets Int8::MIN#to_u16!
    interprets Int8::MIN#to_u16!
+    interprets UInt64::MAX#to_u16!
    interprets UInt64::MAX#to_u16!
+    interprets Float32#to_i8! (negative)
    interprets Float32#to_i8! (negative)
+    interprets Int64::MIN#to_i64!
    interprets Int64::MIN#to_i64!
+    interprets Int16::MAX#to_u64!
    interprets Int16::MAX#to_u64!
+    interprets UInt16::MAX#to_f32!
    interprets UInt16::MAX#to_f32!
+    interprets Int32::MIN#to_u16!
    interprets Int32::MIN#to_u16!
+    interprets UInt8::MAX#to_i64!
    interprets UInt8::MAX#to_i64!
+    interprets UInt16::MAX#to_i8!
    interprets UInt16::MAX#to_i8!
+    interprets UInt8::MAX#to_i!
    interprets UInt8::MAX#to_i!
+    interprets Int32::MIN#to_u32!
    interprets Int32::MIN#to_u32!
+    interprets UInt32::MAX#to_f32!
    interprets UInt32::MAX#to_f32!
+    interprets Int64::MAX#to_i16!
    interprets Int64::MAX#to_i16!
+    interprets UInt32::MAX#to_f64!
    interprets UInt32::MAX#to_f64!
+    interprets UInt32::MAX#to_i64!
    interprets UInt32::MAX#to_i64!
+    interprets Int32::MAX#to_i!
    interprets Int32::MAX#to_i!
+    interprets Int8::MIN#to_i!
    interprets Int8::MIN#to_i!
+    interprets UInt32::MAX#to_u32!
    interprets UInt32::MAX#to_u32!
+    interprets UInt8::MAX#to_u32!
    interprets UInt8::MAX#to_u32!
+    interprets Float32#to_f64! (negative)
    interprets Float32#to_f64! (negative)
+    interprets Int16::MIN#to_u16!
    interprets Int16::MIN#to_u16!
+    interprets UInt32::MAX#to_i32!
    interprets UInt32::MAX#to_i32!
+    interprets Int8::MAX#to_i8!
    interprets Int8::MAX#to_i8!
+    interprets Float64#to_i16! (negative)
    interprets Float64#to_i16! (negative)
+    interprets Int32::MAX#to_f64!
    interprets Int32::MAX#to_f64!
+    interprets Int32::MAX#to_i8!
    interprets Int32::MAX#to_i8!
+    interprets Int8::MIN#to_f64!
    interprets Int8::MIN#to_f64!
+    interprets Float64#to_i32! (negative)
    interprets Float64#to_i32! (negative)
+    interprets Int8::MIN#to_u!
    interprets Int8::MIN#to_u!
+    interprets Int64::MAX#to_f64!
    interprets Int64::MAX#to_f64!
+    interprets Int32::MAX#to_u8!
    interprets Int32::MAX#to_u8!
+    interprets Int8::MIN#to_i32!
    interprets Int8::MIN#to_i32!
+    interprets UInt16::MAX#to_i64!
    interprets UInt16::MAX#to_i64!
+    interprets Float32#to_u! (positive)
    interprets Float32#to_u! (positive)
+    interprets Int32::MAX#to_f32!
    interprets Int32::MAX#to_f32!
+    interprets Float64#to_u16! (positive)
    interprets Float64#to_u16! (positive)
+    interprets UInt64::MAX#to_f32!
    interprets UInt64::MAX#to_f32!
+    interprets Char#ord
    interprets Char#ord
+    interprets Int16::MAX#to_u!
    interprets Int16::MAX#to_u!
+    UInt8#unsafe_chr
    UInt8#unsafe_chr
+    interprets Float32#to_u8! (positive)
    interprets Float32#to_u8! (positive)
+    interprets UInt64::MAX#to_u!
    interprets UInt64::MAX#to_u!
+    interprets Float64#to_i16! (positive)
    interprets Float64#to_i16! (positive)
+    interprets Int8::MIN#to_i8!
    interprets Int8::MIN#to_i8!
+    interprets Int8::MAX#to_f32!
    interprets Int8::MAX#to_f32!
+    interprets Int16::MAX#to_u16!
    interprets Int16::MAX#to_u16!
+    interprets Float64#to_i! (positive)
    interprets Float64#to_i! (positive)
+    interprets UInt16::MAX#to_i32!
    interprets UInt16::MAX#to_i32!
+    interprets Int16::MIN#to_i!
    interprets Int16::MIN#to_i!
+    interprets Int64::MAX#to_f32!
    interprets Int64::MAX#to_f32!
+    interprets Int16::MIN#to_i16!
    interprets Int16::MIN#to_i16!
+    interprets Int16::MIN#to_i8!
    interprets Int16::MIN#to_i8!
+    interprets Int8::MAX#to_i!
    interprets Int8::MAX#to_i!
+  overflow
+    *
+      overlows on 20 * 214748364
      overlows on 20 * 214748364
+      overlows on 10_u16 * 6600
      overlows on 10_u16 * 6600
+      overlows on 10_i8 * 14
      overlows on 10_i8 * 14
+      overlows on 10_i16 * 3300
      overlows on 10_i16 * 3300
+      overlows on 20_u64 * 1844674407370955161_i64
      overlows on 20_u64 * 1844674407370955161_i64
+      overlows on 20_i64 * 922337203685477580_i64
      overlows on 20_i64 * 922337203685477580_i64
+      overlows on 20_u32 * 429496729
      overlows on 20_u32 * 429496729
+      overlows on 10_u8 * 26
      overlows on 10_u8 * 26
+    -
+      overlows on 1_i64 - 9223372036854775810_u64
      overlows on 1_i64 - 9223372036854775810_u64
+      overlows on 1_u16 - 2
      overlows on 1_u16 - 2
+      overlows on 1_i16 - 32770
      overlows on 1_i16 - 32770
+      overlows on 1_u64 - 2
      overlows on 1_u64 - 2
+      overlows on 1_u8 - 2
      overlows on 1_u8 - 2
+      overlows on 1_u32 - 2
      overlows on 1_u32 - 2
+      overlows on 1 - 2147483650_i64
      overlows on 1 - 2147483650_i64
+      overlows on 1_i8 - 256
      overlows on 1_i8 - 256
+    conversion
+      overlows on -1_i16.to_u64
      overlows on -1_i16.to_u64
+      overlows on 32768_f64.to_i16
      overlows on 32768_f64.to_i16
+      overlows on 128_f64.to_i8
      overlows on 128_f64.to_i8
+      overlows on 128_u32.to_i8
      overlows on 128_u32.to_i8
+      overlows on 256_f64.to_u8
      overlows on 256_f64.to_u8
+      overlows on -1_i8.to_u64
      overlows on -1_i8.to_u64
+      overlows on 65536_f32.to_u16
      overlows on 65536_f32.to_u16
+      overlows on 256_f32.to_u8
      overlows on 256_f32.to_u8
+      overlows on 2147483648_u32.to_i32
      overlows on 2147483648_u32.to_i32
+      overlows on 32768_u32.to_i16
      overlows on 32768_u32.to_i16
+      overlows on -1_i64.to_u8
      overlows on -1_i64.to_u8
+      overlows on -1.to_u32
      overlows on -1.to_u32
+      overlows on -1_i16.to_u16
      overlows on -1_i16.to_u16
+      overlows on 128_f32.to_i8
      overlows on 128_f32.to_i8
+      overlows on -1_i8.to_u8
      overlows on -1_i8.to_u8
+      overlows on 1.7976931348623157e+308.to_f32
      overlows on 1.7976931348623157e+308.to_f32
+      overlows on -1_i64.to_u16
      overlows on -1_i64.to_u16
+      overlows on 65536_f64.to_u16
      overlows on 65536_f64.to_u16
+      overlows on 128_u64.to_i8
      overlows on 128_u64.to_i8
+      overlows on 2147483648_f64.to_i32
      overlows on 2147483648_f64.to_i32
+      overlows on -1_i64.to_u64
      overlows on -1_i64.to_u64
+      overlows on -1.to_u64
      overlows on -1.to_u64
+      overlows on 32768_u64.to_i16
      overlows on 32768_u64.to_i16
+      overlows on -1.to_u16
      overlows on -1.to_u16
+      overlows on -1_i16.to_u8
      overlows on -1_i16.to_u8
+      overlows on 128_u16.to_i8
      overlows on 128_u16.to_i8
+      overlows on 2147483648_u64.to_i32
      overlows on 2147483648_u64.to_i32
+      overlows on 128_u8.to_i8
      overlows on 128_u8.to_i8
+      overlows on -1.to_u8
      overlows on -1.to_u8
+      overlows on -1_i8.to_u32
      overlows on -1_i8.to_u32
+      overlows on -1_i64.to_u32
      overlows on -1_i64.to_u32
+      overlows on 32768_f32.to_i16
      overlows on 32768_f32.to_i16
+      overlows on 9223372036854775808_u64.to_i64
      overlows on 9223372036854775808_u64.to_i64
+      overlows on 32768_u16.to_i16
      overlows on 32768_u16.to_i16
+      overlows on 4294967296_f64.to_u32
      overlows on 4294967296_f64.to_u32
+      overlows on -1_i8.to_u16
      overlows on -1_i8.to_u16
+      overlows on -1_i16.to_u32
      overlows on -1_i16.to_u32
+    +
+      overlows on 1_u8 + 255
      overlows on 1_u8 + 255
+      overlows on 1_u32 + 4294967295_i64
      overlows on 1_u32 + 4294967295_i64
+      overlows on 1_i64 + 9223372036854775807_i64
      overlows on 1_i64 + 9223372036854775807_i64
+      overlows on 1_u16 + 65535
      overlows on 1_u16 + 65535
+      overlows on 1_u64 + 18446744073709551615_u64
      overlows on 1_u64 + 18446744073709551615_u64
+      overlows on 1 + 2147483647
      overlows on 1 + 2147483647
+      overlows on 1_i16 + 32767
      overlows on 1_i16 + 32767
+      overlows on 1_i8 + 128
      overlows on 1_i8 + 128
+  logical operations
+    does math primitive on union
    does math primitive on union
+    interprets not for generic class instance type
    interprets not for generic class instance type
+    interprets not for bool false
    interprets not for bool false
+    interprets not for nilable proc type (false)
    interprets not for nilable proc type (false)
+    interprets not for mixed union (false)
    interprets not for mixed union (false)
+    interprets not for mixed union (true)
    interprets not for mixed union (true)
+    interprets not for generic module
    interprets not for generic module
+    interprets not for nilable type (true)
    interprets not for nilable type (true)
+    does math convert on union
    does math convert on union
+    interprets not for bool true
    interprets not for bool true
+    interprets not for bool false
    interprets not for bool false
+    interprets not for nilable type (true)
    interprets not for nilable type (true)
+    interprets not for nil type
    interprets not for nil type
+    discards nil not
    discards nil not
+    interprets not for generic module metaclass
    interprets not for generic module metaclass
+    interprets not for nilable type (false)
    interprets not for nilable type (false)
+    discards bool not
    discards bool not
+    interprets not for nilable proc type (true)
    interprets not for nilable proc type (true)
+    interprets not for mixed union (nil)
    interprets not for mixed union (nil)
+    interprets not for module (#12918)
    interprets not for module (#12918)
+    interprets not for nilable type (false)
    interprets not for nilable type (false)
+    interprets not for generic class instance metaclass
    interprets not for generic class instance metaclass
+    interprets not for mixed union (other)
    interprets not for mixed union (other)
+    interprets not for nil
    interprets not for nil
+  math
+    interprets Float64 * Float64
    interprets Float64 * Float64
+    interprets UInt32 - Int32
    interprets UInt32 - Int32
+    interprets Float64 + Float64
    interprets Float64 + Float64
+    interprets Int32 + Float64
    interprets Int32 + Float64
+    interprets UInt64 & Int32
    interprets UInt64 & Int32
+    interprets Float32 + Float64
    interprets Float32 + Float64
+    interprets Float64 - Float64
    interprets Float64 - Float64
+    interprets Int32 * Int32
    interprets Int32 * Int32
+    interprets Int128 + Int32
    interprets Int128 + Int32
+    interprets Int8 + Int8
    interprets Int8 + Int8
+    interprets Int32 &+ Int32
    interprets Int32 &+ Int32
+    interprets Int32.unsafe_shl(Int32) with self
    interprets Int32.unsafe_shl(Int32) with self
+    interprets UInt64 | UInt32
    interprets UInt64 | UInt32
+    interprets Float64 + Int32
    interprets Float64 + Int32
+    interprets Int64 + Int64
    interprets Int64 + Int64
+    interprets UInt8 | Int32
    interprets UInt8 | Int32
+    interprets Int32 &* Int32
    interprets Int32 &* Int32
+    interprets Int32 - Int32
    interprets Int32 - Int32
+    interprets Int32 + Int32
    interprets Int32 + Int32
+    discards math
    discards math
+    interprets UInt64 * Int32
    interprets UInt64 * Int32
+    interprets Int32 &- Int32
    interprets Int32 &- Int32
+Semantic: NoReturn
+  computes NoReturn in a lazy way inside if then (#314) (4)
  computes NoReturn in a lazy way inside if then (#314) (4)
+  computes NoReturn in a lazy way inside if then (#314) (1)
  computes NoReturn in a lazy way inside if then (#314) (1)
+  computes NoReturn in a lazy way inside if then (#314) (3)
  computes NoReturn in a lazy way inside if then (#314) (3)
+  types union of NoReturn and something else
  types union of NoReturn and something else
+  computes NoReturn in a lazy way inside if else (#314) (4)
  computes NoReturn in a lazy way inside if else (#314) (4)
+  computes NoReturn in a lazy way inside if else (#314) (3)
  computes NoReturn in a lazy way inside if else (#314) (3)
+  computes NoReturn in a lazy way inside if then (#314) (5)
  computes NoReturn in a lazy way inside if then (#314) (5)
+  types as NoReturn even if Nil return type is forced (#3096)
  types as NoReturn even if Nil return type is forced (#3096)
+  computes NoReturn in a lazy way inside if else (#314) (1)
  computes NoReturn in a lazy way inside if else (#314) (1)
+  types as NoReturn if typeof(exp)'s exp is NoReturn
  types as NoReturn if typeof(exp)'s exp is NoReturn
+  assumes if condition's type filters when else is no return
  assumes if condition's type filters when else is no return
+  types call to LibC.exit as NoReturn
  types call to LibC.exit as NoReturn
+  types exception handler as NoReturn if ensure is NoReturn
  types exception handler as NoReturn if ensure is NoReturn
+  types with no return even if code follows
  types with no return even if code follows
+  types union of NoReturns
  types union of NoReturns
+  computes NoReturn in a lazy way inside if then (#314) (2)
  computes NoReturn in a lazy way inside if then (#314) (2)
+  computes NoReturn in a lazy way inside if else (#314) (5)
  computes NoReturn in a lazy way inside if else (#314) (5)
+  computes NoReturn in a lazy way inside if else (#314) (2)
  computes NoReturn in a lazy way inside if else (#314) (2)
+  types raise as NoReturn
  types raise as NoReturn
+Code gen: hash literal spec
+  creates custom generic hash via alias (1)
  creates custom generic hash via alias (1)
+  assignment in hash-like literal works  assignment in hash-like literal works  assignment in hash-like literal works  assignment in hash-like literal works  assignment in hash-like literal works  assignment in hash-like literal works  assignment in hash-like literal works  assignment in hash-like literal works  assignment in hash-like literal works
  assignment in hash-like literal works
+  creates custom generic hash in module (#5684)
  creates custom generic hash in module (#5684)
+  creates custom generic hash with type vars
  creates custom generic hash with type vars
+  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)  doesn't crash on hash literal with proc pointer (#646)
  doesn't crash on hash literal with proc pointer (#646)
+  creates custom non-generic hash
  creates custom non-generic hash
+  assignment in hash literal works  assignment in hash literal works  assignment in hash literal works  assignment in hash literal works  assignment in hash literal works  assignment in hash literal works  assignment in hash literal works  assignment in hash literal works  assignment in hash literal works
  assignment in hash literal works
+  creates custom generic hash
  creates custom generic hash
+  creates custom generic hash via alias (2)
  creates custom generic hash via alias (2)
+  creates custom non-generic hash in module
  creates custom non-generic hash in module
 unreachable
-  finds method called from proc
  finds method called from proc
-  finds methods with proc parameter
  finds methods with proc parameter
-  finds method called from block
  finds method called from block
-  finds method called from instance variable initializer
  finds method called from instance variable initializer
-  finds yielding methods
  finds yielding methods
-  finds abstract method
  finds abstract method
-  finds virtual method
  finds virtual method
-  finds method called from expanded macro expression
  finds method called from expanded macro expression
-  finds method with free variable
  finds method with free variable
-  finds methods in generic type
  finds methods in generic type
-  finds class methods
  finds class methods
   finds instance methods
  finds instance methods
-  tallies calls
  tallies calls
-  finds methods called from reachable code
  finds methods called from reachable code
+  finds method called from expanded macro
  finds method called from expanded macro
+  finds instance methods in nested types
  finds instance methods in nested types
+  finds method with `previous_def`
  finds method with `previous_def`
+  finds method called from expanded macro expression
  finds method called from expanded macro expression
+  finds top level methods
  finds top level methods
   finds initializer
  finds initializer
   ignores autogenerated enum predicates
  ignores autogenerated enum predicates
-  finds top level methods
  finds top level methods
+  finds method called from block
  finds method called from block
+  finds class methods
  finds class methods
   finds method with `super`
  finds method with `super`
-  finds method in abstract type
  finds method in abstract type
-  finds instance methods in nested types
  finds instance methods in nested types
-  finds method called from expanded macro
  finds method called from expanded macro
   handles circular hierarchy references (#14034)
  handles circular hierarchy references (#14034)
+  finds abstract method
  finds abstract method
+  finds virtual method
  finds virtual method
+  finds method called from proc
  finds method called from proc
+  tallies calls
  tallies calls
   finds shadowed method
  finds shadowed method
-  finds method with `previous_def`
  finds method with `previous_def`
-codegen: previous_def
-  correctly passes named arguments
  correctly passes named arguments
-  codegens previous def when inside fun and forwards args
  codegens previous def when inside fun and forwards args
-  codegens previous def
  codegens previous def
-  codegens previous def when inside fun with self
  codegens previous def when inside fun with self
-Crystal::Loader
-  .default_search_paths
-    LD_LIBRARY_PATH
    LD_LIBRARY_PATH
-    DYLD_LIBRARY_PATH
    DYLD_LIBRARY_PATH
-  .read_ld_conf
-    with include
    with include
-    basic
    basic
-  dynlib
-    does not find global symbols
    does not find global symbols
-    validate that lib handles are properly closed
    validate that lib handles are properly closed
-    #load_file?
-      finds function symbol
      finds function symbol
-    #load_library?
-      does not implicitly find dependencies
      does not implicitly find dependencies
-      full path
      full path
-      lookup in order
      lookup in order
-      library name
      library name
-  .parse
-    prepends directory paths before default search paths
    prepends directory paths before default search paths
-    parses library names
    parses library names
-    parses static
    parses static
-    parses file paths
    parses file paths
-    parses directory paths
    parses directory paths
-Parser warnings
-  warns on missing space before colon
-    in block param type restriction
    in block param type restriction
-    in anonymous block param type restriction
    in anonymous block param type restriction
-    in type declaration
    in type declaration
-    in return type restriction
    in return type restriction
-  warns on suffix-less UInt64 literals > Int64::MAX
  warns on suffix-less UInt64 literals > Int64::MAX
-Crystal::Repl::Interpreter
-  tuple
-    extends sign when doing to_i32
    extends sign when doing to_i32
-    interprets tuple literal and access by known index
    interprets tuple literal and access by known index
-    interprets tuple literal of different types (1)
    interprets tuple literal of different types (1)
-    interprets tuple metaclass indexer
    interprets tuple metaclass indexer
-    interprets tuple literal of different types (2)
    interprets tuple literal of different types (2)
-    discards tuple (#12383)
    discards tuple (#12383)
-    interprets tuple self
    interprets tuple self
-    discards tuple access
    discards tuple access
-    unpacks tuple in block arguments
    unpacks tuple in block arguments
-    interprets tuple metaclass range indexer
    interprets tuple metaclass range indexer
-    interprets tuple range indexer
    interprets tuple range indexer
-    interprets tuple range indexer (2)
    interprets tuple range indexer (2)
-    does tuple indexer on union
    does tuple indexer on union
-read_file?
-  with relative path
-    reads file (doesn't exist)
    reads file (doesn't exist)
-  with absolute path
-    reads file (doesn't exist)
    reads file (doesn't exist)
-Crystal::Repl::Interpreter
-  named tuple
-    discards named tuple (#12383)
    discards named tuple (#12383)
-    interprets named tuple literal and access by known index
    interprets named tuple literal and access by known index
-    interprets named tuple metaclass indexer
    interprets named tuple metaclass indexer
-Codegen: responds_to?
-  works with generic virtual module (2) (#8334)
  works with generic virtual module (2) (#8334)
-  codegens responds_to? with nilable gives false because other type 1
  codegens responds_to? with nilable gives false because other type 1
-  works with generic virtual module (1)
  works with generic virtual module (1)
-  codegens responds_to? with generic class (2)
  codegens responds_to? with generic class (2)
-  works with virtual type
  works with virtual type
-  codegens responds_to? false for simple type
  codegens responds_to? false for simple type
-  works with generic virtual superclass (2)
  works with generic virtual superclass (2)
-  codegens responds_to? true for simple type
  codegens responds_to? true for simple type
-  works with generic virtual superclass (1)
  works with generic virtual superclass (1)
-  codegens responds_to? with generic class (1)
  codegens responds_to? with generic class (1)
-  doesn't error if result is discarded (#14113)
  doesn't error if result is discarded (#14113)
-  codegens responds_to? with union gives false
  codegens responds_to? with union gives false
-  works with two virtual types
  works with two virtual types
-  does for generic instance type metaclass (#4353)
  does for generic instance type metaclass (#4353)
-  codegens responds_to? with nilable gives false because other type 2
  codegens responds_to? with nilable gives false because other type 2
-  works with virtual class type (2) (#1926)
  works with virtual class type (2) (#1926)
-  works with module
  works with module
-  codegens responds_to? with union gives true
  codegens responds_to? with union gives true
-  codegens responds_to? with nilable gives true
  codegens responds_to? with nilable gives true
-  works with virtual class type (1) (#1926)
  works with virtual class type (1) (#1926)
-Semantic: return
-  allows nilable return type to match subclasses (#1735)
  allows nilable return type to match subclasses (#1735)
-  can use type var as return type with an included generic module
  can use type var as return type with an included generic module
-  can use non-type free var in return type (2) (#6543)
  can use non-type free var in return type (2) (#6543)
-  forms a tuple from multiple return values
  forms a tuple from multiple return values
-  can use free var in return type (#2492)
  can use free var in return type (#2492)
-  errors on return in top level
  errors on return in top level
-  types bug (#1823)
  types bug (#1823)
-  allows returning NoReturn instead of the wanted type
  allows returning NoReturn instead of the wanted type
-  can use non-type free var in return type (#6543)
  can use non-type free var in return type (#6543)
-  can use type var as return type (#1226)
  can use type var as return type (#1226)
-  infers return type with many returns (1)
  infers return type with many returns (1)
-  infers return type
  infers return type
-  flattens splats inside multiple return values
  flattens splats inside multiple return values
-  errors if non-type free var cannot be inferred
  errors if non-type free var cannot be inferred
-  types return if true
  types return if true
-  doesn't confuse return type from base class
  doesn't confuse return type from base class
-  can use type var as return type with an inherited generic class
  can use type var as return type with an inherited generic class
-  infers return type with many returns (2)
  infers return type with many returns (2)
-Crystal::TablePrint
-  colspan a cell that fits the available size
  colspan a cell that fits the available size
-  aligns cell content
  aligns cell content
-  single cell
  single cell
-  aligns columns borders
  aligns columns borders
-  single row with separator
  single row with separator
-  multiple rows with separator
  multiple rows with separator
-  rows with horizontal separators
  rows with horizontal separators
-Crystal::Command::FlagsVisitor
-  different flags
  different flags
-  only macro
  only macro
-  unique flags
  unique flags
-Code gen: var
-  codegens bug with instance vars and ssa
  codegens bug with instance vars and ssa
-  codegens ivar assignment when not-nil type filter applies
  codegens ivar assignment when not-nil type filter applies
-  codegens var
  codegens var
-  works with typeof with assignment (#828)
  works with typeof with assignment (#828)
-  codegens bug with var, while, if, break and ssa
  codegens bug with var, while, if, break and ssa
-  assigns to underscore
  assigns to underscore
-  codegens assignment that can never be reached
  codegens assignment that can never be reached
-  codegens var with type declaration
  codegens var with type declaration
-  codegens bug with union of int, nil and string (1): assigning nil to union must fill all zeros
  codegens bug with union of int, nil and string (1): assigning nil to union must fill all zeros
-  codegens bug with union of int, nil and string (2): assigning nil to union must fill all zeros
  codegens bug with union of int, nil and string (2): assigning nil to union must fill all zeros
-.system
-  successful command with output
  successful command with output
-sh: 1: commanddoesnotexist: not found
-  command does not exist
  command does not exist
-  successful command
  successful command
-  failing command
  failing command
-Code gen: splat
-  splats with default value (3)
  splats with default value (3)
-  splats on call
  splats on call
-  does #2407
  does #2407
-  splats with default value
  splats with default value
-  splats in initialize
  splats in initialize
-  splats with another arg
  splats with another arg
-  splats
  splats
-  splats without args
  splats without args
-  splats with default value (2)
  splats with default value (2)
-  evaluates splat argument just once (#2677)
  evaluates splat argument just once (#2677)
-Init invocation
-  doesn't error if files will be overwritten by a generated file and --force is used
  doesn't error if files will be overwritten by a generated file and --force is used
-  prints error if a file is already present
  prints error if a file is already present
-  honors the custom set directory name
  honors the custom set directory name
-  produces valid yaml file
  produces valid yaml file
-  doesn't error when asked to skip existing files
  doesn't error when asked to skip existing files
-  errors if files will be overwritten by a generated file
  errors if files will be overwritten by a generated file
-Code gen: class
-  codegens method from another method without obj and accesses instance vars
  codegens method from another method without obj and accesses instance vars
-  doesn't crash on instance variable assigned a proc, and never instantiated (#923)
  doesn't crash on instance variable assigned a proc, and never instantiated (#923)
-  resolves type declaration when accessing instance var (#348)
  resolves type declaration when accessing instance var (#348)
-  uses number type var
  uses number type var
-  does to_s for class  does to_s for class  does to_s for class  does to_s for class  does to_s for class��������  does to_s for class����  does to_s for class  does to_s for class����  does to_s for class
  does to_s for class
-  doesn't crash on #1216 (reduced)
  doesn't crash on #1216 (reduced)
-  reads a virtual type instance var
  reads a virtual type instance var
-  transfers initializer from generic module to non-generic class
  transfers initializer from generic module to non-generic class
-  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)  does to_s for virtual metaclass type (2)��  does to_s for virtual metaclass type (2)������������  does to_s for virtual metaclass type (2)��  does to_s for virtual metaclass type (2)
  does to_s for virtual metaclass type (2)
-  reads a union type instance var (mixed union, first type)
  reads a union type instance var (mixed union, first type)
-  doesn't crash on abstract class never instantiated (#2840)
  doesn't crash on abstract class never instantiated (#2840)
-  runs with nil instance var when inheriting
  runs with nil instance var when inheriting
-  codegens virtual call that calls another method
  codegens virtual call that calls another method
-  reads a union type instance var (reference union, second type)
  reads a union type instance var (reference union, second type)
-  codegens singleton (#718)
  codegens singleton (#718)
-  codegens assignment of generic metaclasses (4) (#10394)
  codegens assignment of generic metaclasses (4) (#10394)
-  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)  does to_s for virtual metaclass type (3)��������������  does to_s for virtual metaclass type (3)��  does to_s for virtual metaclass type (3)
  does to_s for virtual metaclass type (3)
-  transfers initializer from generic module to generic class
  transfers initializer from generic module to generic class
-  changes instance variable in method (ssa bug)
  changes instance variable in method (ssa bug)
-  doesn't skip false initializers (#3272)
  doesn't skip false initializers (#3272)
-  never considers read instance var as closure (#12181)
  never considers read instance var as closure (#12181)
-  invokes class method inside instance method (#1119)
  invokes class method inside instance method (#1119)
-  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)  works with array in variable initializer in generic type (#855)��  works with array in variable initializer in generic type (#855)����  works with array in variable initializer in generic type (#855)����������  works with array in variable initializer in generic type (#855)
  works with array in variable initializer in generic type (#855)
-  codegens assignment of generic metaclasses, base is non-generic (2) (#10394)
  codegens assignment of generic metaclasses, base is non-generic (2) (#10394)
-  reads other instance var
  reads other instance var
-  calls class method without self
  calls class method without self
-  assigns type to reference union type
  assigns type to reference union type
-  makes .class always be a virtual type even if no subclasses
  makes .class always be a virtual type even if no subclasses
-  doesn't crash on #1216 with pointerof
  doesn't crash on #1216 with pointerof
-  codegens assignment of generic metaclasses, base is non-generic (1) (#10394)
  codegens assignment of generic metaclasses, base is non-generic (1) (#10394)
-  doesn't crash on #1216
  doesn't crash on #1216
-  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)  works with array in variable initializer in non-generic type (#855)������������  works with array in variable initializer in non-generic type (#855)��  works with array in variable initializer in non-generic type (#855)��  works with array in variable initializer in non-generic type (#855)
  works with array in variable initializer in non-generic type (#855)
-  codegens assignment of generic metaclasses (2) (#10394)
  codegens assignment of generic metaclasses (2) (#10394)
-  codegens assignment of generic metaclasses (1) (#10394)
  codegens assignment of generic metaclasses (1) (#10394)
-  allows using self in class scope  allows using self in class scope  allows using self in class scope  allows using self in class scope����  allows using self in class scope������  allows using self in class scope��  allows using self in class scope��  allows using self in class scope��  allows using self in class scope
  allows using self in class scope
-  codegens virtual class method
  codegens virtual class method
-  gets class of virtual type
  gets class of virtual type
-  builds generic class bug
  builds generic class bug
-  calls method on Class class
  calls method on Class class
-  can use a Main class (#1628)  can use a Main class (#1628)  can use a Main class (#1628)  can use a Main class (#1628)  can use a Main class (#1628)  can use a Main class (#1628)  can use a Main class (#1628)��������������  can use a Main class (#1628)��  can use a Main class (#1628)
  can use a Main class (#1628)
-  codegens method of class union including Int (#1476)
  codegens method of class union including Int (#1476)
-  codegens class with recursive tuple to class (#4520)
  codegens class with recursive tuple to class (#4520)
-  codegens virtual method of generic class
  codegens virtual method of generic class
-  codegens new which calls initialize
  codegens new which calls initialize
-  does to_s on class  does to_s on class  does to_s on class  does to_s on class  does to_s on class������  does to_s on class������  does to_s on class��  does to_s on class��  does to_s on class
  does to_s on class
-  codegens virtual generic class instance metaclass (#3819)
  codegens virtual generic class instance metaclass (#3819)
-  allows using self in class scope
  allows using self in class scope
-  codegens method call of instance var
  codegens method call of instance var
-  doesn't crash if not using undefined instance variable in superclass
  doesn't crash if not using undefined instance variable in superclass
-  codegens virtual metaclass union bug (#2597)
  codegens virtual metaclass union bug (#2597)
-  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)  does to_s for virtual metaclass type (1)��������������  does to_s for virtual metaclass type (1)��  does to_s for virtual metaclass type (1)
  does to_s for virtual metaclass type (1)
-  doesn't skip zero initializers (#3272)
  doesn't skip zero initializers (#3272)
-  runs with nilable instance var
  runs with nilable instance var
-  allows fixing an instance variable's type
  allows fixing an instance variable's type
-  codegens bug #168
  codegens bug #168
-  codegens class method
  codegens class method
-  reads a union type instance var (mixed union, second type)
  reads a union type instance var (mixed union, second type)
-  calls class method without self (2)
  calls class method without self (2)
-  allows initializing var with constant
  allows initializing var with constant
-  codegens instance var
  codegens instance var
-  can assign virtual metaclass to virtual metaclass (#3007)
  can assign virtual metaclass to virtual metaclass (#3007)
-  notifies superclass recursively on inheritance (#576)
  notifies superclass recursively on inheritance (#576)
-  codegens initialize with instance var
  codegens initialize with instance var
-  reads a union type instance var (reference union, first type)
  reads a union type instance var (reference union, first type)
-  codegens assignment of generic metaclasses (3) (#10394)
  codegens assignment of generic metaclasses (3) (#10394)
-  transfers initializer from module to generic class
  transfers initializer from module to generic class
-  runs instance variable initializer at the class level, for generic type
  runs instance variable initializer at the class level, for generic type
-  codegens call to same instance
  codegens call to same instance
-  codegens recursive type
  codegens recursive type
-  runs instance variable initializer at the class level
  runs instance variable initializer at the class level
-Crystal::Repl::Interpreter
-  symbol
-    symbol equality
    symbol equality
-    Symbol#to_i
    Symbol#to_i
-    Symbol#to_s
    Symbol#to_s
-Semantic: sizeof
-  gives error if using instance_sizeof on a struct
  gives error if using instance_sizeof on a struct
-  gives error if using instance_sizeof on a union type (#8349)
  gives error if using instance_sizeof on a union type (#8349)
-  types sizeof
  types sizeof
-  gives error if using instance_sizeof on something that's not a class
  gives error if using instance_sizeof on something that's not a class
-  gives error if using instance_sizeof on an abstract struct (#11855)
  gives error if using instance_sizeof on an abstract struct (#11855)
-  types alignof NoReturn (missing type) (#5717)
  types alignof NoReturn (missing type) (#5717)
-  types instance_sizeof
  types instance_sizeof
-  types instance_sizeof NoReturn (missing type) (#5717)
  types instance_sizeof NoReturn (missing type) (#5717)
-  gives error if using instance_sizeof on a module
  gives error if using instance_sizeof on a module
-  errors on sizeof uninstantiated generic type (#6415)
  errors on sizeof uninstantiated generic type (#6415)
-  types instance_alignof NoReturn (missing type) (#5717)
  types instance_alignof NoReturn (missing type) (#5717)
-  gives error if using instance_sizeof on an abstract struct with multiple subtypes (#11855)
  gives error if using instance_sizeof on an abstract struct with multiple subtypes (#11855)
-  types alignof
  types alignof
-  types instance_alignof
  types instance_alignof
-  gives error if using instance_sizeof on a generic type without type vars
  gives error if using instance_sizeof on a generic type without type vars
-  types sizeof NoReturn (missing type) (#5717)
  types sizeof NoReturn (missing type) (#5717)
-  gives error if using instance_sizeof on a metaclass
  gives error if using instance_sizeof on a metaclass
-Crystal::Doc::Macro
-  args_to_s
-    shows double splat arg
    shows double splat arg
-    shows external name of arg with quotes and escaping
    shows external name of arg with quotes and escaping
-    shows simple arg and splat arg
    shows simple arg and splat arg
-    shows simple args
    shows simple args
-    shows block arg
    shows block arg
-    shows simple arg and block arg
    shows simple arg and block arg
-    shows simple arg and double splat arg
    shows simple arg and double splat arg
-    shows double splat arg
    shows double splat arg
-    shows splat arg
    shows splat arg
-    shows default value with highlighting
    shows default value with highlighting
-    shows external name of arg
    shows external name of arg
-Semantic: method_missing
-  finds method_missing with 'with ... yield'
  finds method_missing with 'with ... yield'
-  errors if method_missing expands to an incorrect method
  errors if method_missing expands to an incorrect method
-  does method missing for generic type
  does method missing for generic type
-  does error in method_missing if wrong number of params
  does error in method_missing if wrong number of params
-  does error in method_missing macro with virtual type
  does error in method_missing macro with virtual type
-  errors if method_missing expands to multiple methods
  errors if method_missing expands to multiple methods
-  doesn't look up method_missing in with_yield_scope if call has a receiver (#12097)
  doesn't look up method_missing in with_yield_scope if call has a receiver (#12097)
-Normalize: chained comparisons
-  normalizes two comparisons with literal
  normalizes two comparisons with literal
-  normalizes one comparison with call
  normalizes one comparison with call
-  normalizes two comparisons with calls
  normalizes two comparisons with calls
-  normalizes one comparison with literal
  normalizes one comparison with literal
-  normalizes one comparison with var
  normalizes one comparison with var
-Semantic: module
-  calls super on included generic module and finds type var (2)
  calls super on included generic module and finds type var (2)
-  instantiates generic variadic module, accesses T from instance method through generic include, more args
  instantiates generic variadic module, accesses T from instance method through generic include, more args
-  errors when extending self and self defines instance vars (#9568)
  errors when extending self and self defines instance vars (#9568)
-  instantiates generic variadic module, accesses T from instance method
  instantiates generic variadic module, accesses T from instance method
-  includes generic module with self (check argument type, success)
  includes generic module with self (check argument type, success)
-  errors when recursively extending module that defines instance vars
  errors when recursively extending module that defines instance vars
-  types pointer of module
  types pointer of module
-  allows overloading with included generic module
  allows overloading with included generic module
-  can use generic module as instance variable type (2)
  can use generic module as instance variable type (2)
-  includes generic module with self (check argument superclass type, success)
  includes generic module with self (check argument superclass type, success)
-  finds inner class from inherited one (#476)
  finds inner class from inherited one (#476)
-  can use generic module as instance variable type
  can use generic module as instance variable type
-  errors when extending generic module that defines instance vars
  errors when extending generic module that defines instance vars
-  works ok in a case where a typed-def type has an underlying type that has an included generic module (bug)
  works ok in a case where a typed-def type has an underlying type that has an included generic module (bug)
-  gives error when including self
  gives error when including self
-  includes generic module with self (check return subclass type, success)
  includes generic module with self (check return subclass type, success)
-  gives helpful error message when generic type var is missing in block spec
  gives helpful error message when generic type var is missing in block spec
-  gives error with cyclic include between non-generic and generic module (2)
  gives error with cyclic include between non-generic and generic module (2)
-  initializes variable in module, recursive
  initializes variable in module, recursive
-  calls super on included generic module
  calls super on included generic module
-  types pointer of module with generic type
  types pointer of module with generic type
-  finds nested type inside method in block inside module
  finds nested type inside method in block inside module
-  can restrict module with module (#3029)
  can restrict module with module (#3029)
-  includes generic module with self (check argument superclass type, success)
  includes generic module with self (check argument superclass type, success)
-  finds in module when included
  finds in module when included
-  includes generic module and errors in call
  includes generic module and errors in call
-  includes generic module with self (check return type, success)
  includes generic module with self (check return type, success)
-  errors if declares module inside if
  errors if declares module inside if
-  correctly types type var in included module, with a restriction with a free var (bug)
  correctly types type var in included module, with a restriction with a free var (bug)
-  gives error when including self, generic module
  gives error when including self, generic module
-  finds class method in block
  finds class method in block
-  works with range and map
  works with range and map
-  errors when extending module that defines instance vars (2) (#4065)
  errors when extending module that defines instance vars (2) (#4065)
-  doesn't look up initialize past module that defines initialize (#7007)
  doesn't look up initialize past module that defines initialize (#7007)
-  calls super on included generic module and finds type var
  calls super on included generic module and finds type var
-  types pointer of module with method with two including types
  types pointer of module with method with two including types
-  errors if reopening generic module with different splat index
  errors if reopening generic module with different splat index
-  extends self
  extends self
-  includes generic module with self
  includes generic module with self
-  gives error with cyclic include, generic module
  gives error with cyclic include, generic module
-  finds types close to included module
  finds types close to included module
-  uses :Module name for modules in errors
  uses :Module name for modules in errors
-  gives error when trying to instantiate with new
  gives error when trying to instantiate with new
-  declares module automatically if not previously declared when declaring a module
  declares module automatically if not previously declared when declaring a module
-  inherits instance var type annotation from generic to concrete with T
  inherits instance var type annotation from generic to concrete with T
-  types proc of module with generic class
  types proc of module with generic class
-  errors when extending self and self defines instance vars (2) (#9568)
  errors when extending self and self defines instance vars (2) (#9568)
-  doesn't lookup type in ancestor when matches in current type (#2982)
  doesn't lookup type in ancestor when matches in current type (#2982)
-  types proc of module after type changes
  types proc of module after type changes
-  inherits instance var type annotation from generic to concrete
  inherits instance var type annotation from generic to concrete
-  errors if reopening generic module with different splat index (3)
  errors if reopening generic module with different splat index (3)
-  errors when recursively extending module that defines instance vars (2)
  errors when recursively extending module that defines instance vars (2)
-  includes generic module with self (check argument type, error)
  includes generic module with self (check argument type, error)
-  errors if reopening generic module with different type vars
  errors if reopening generic module with different type vars
-  includes generic module with type
  includes generic module with type
-  includes module with Union(T*)
  includes module with Union(T*)
-  includes module but not generic
  includes module but not generic
-  includes generic module with another generic type
  includes generic module with another generic type
-  type def does not reopen type from parent namespace (#11181)
  type def does not reopen type from parent namespace (#11181)
-  can't reopen as class
  can't reopen as class
-  can't pass module class to virtual metaclass (#6113)
  can't pass module class to virtual metaclass (#6113)
-  works with int including enumerable
  works with int including enumerable
-  gives helpful error message when generic type var is missing
  gives helpful error message when generic type var is missing
-  errors if including generic module and not specifying type vars
  errors if including generic module and not specifying type vars
-  errors when extending module that defines instance vars (#4065)
  errors when extending module that defines instance vars (#4065)
-  finds constant in generic module included in another module
  finds constant in generic module included in another module
-  gives error when including instantiation of self, generic module
  gives error when including instantiation of self, generic module
-  errors if reopening generic module with different type vars (2)
  errors if reopening generic module with different type vars (2)
-  instantiates generic variadic module, accesses T from instance method, more args
  instantiates generic variadic module, accesses T from instance method, more args
-  initializes variable in module
  initializes variable in module
-  includes generic module explicitly
  includes generic module explicitly
-  can instantiate generic module
  can instantiate generic module
-  extends module from generic class and calls class method (#7167)
  extends module from generic class and calls class method (#7167)
-  uses type declaration inside module and gives error
  uses type declaration inside module and gives error
-  types union of module and class that includes it
  types union of module and class that includes it
-  includes generic module with self (check return type, error)
  includes generic module with self (check return type, error)
-  types pointer of module with method
  types pointer of module with method
-  instantiates generic variadic module, accesses T from class method
  instantiates generic variadic module, accesses T from class method
-  errors when extending generic module that defines instance vars (2)
  errors when extending generic module that defines instance vars (2)
-  gives error with cyclic include
  gives error with cyclic include
-  errors if reopening generic module with different splat index (2)
  errors if reopening generic module with different splat index (2)
-  includes generic module explicitly and errors
  includes generic module explicitly and errors
-  extends generic module from generic class and calls class method (#7167)
  extends generic module from generic class and calls class method (#7167)
-  errors when extending self and self defines instance vars (3) (#9568)
  errors when extending self and self defines instance vars (3) (#9568)
-  uses type declaration inside module
  uses type declaration inside module
-  includes module in a class
  includes module in a class
-  types pointer of module with generic type
  types pointer of module with generic type
-  includes generic module with self, and inherits it
  includes generic module with self, and inherits it
-  extends generic module from generic module and calls class method (#7167)
  extends generic module from generic module and calls class method (#7167)
-  instantiates generic variadic module, accesses T from instance method through generic include
  instantiates generic variadic module, accesses T from instance method through generic include
-  gives error with cyclic include between non-generic and generic module
  gives error with cyclic include between non-generic and generic module
-  includes generic module with self (check return subclass type, error)
  includes generic module with self (check return subclass type, error)
-  can't reopen as struct
  can't reopen as struct
-  gives error when trying to instantiate with allocate
  gives error when trying to instantiate with allocate
-  includes but not a module
  includes but not a module
-  declares module automatically if not previously declared when declaring a class
  declares module automatically if not previously declared when declaring a class
-  errors if reopening non-generic module as generic
  errors if reopening non-generic module as generic
-  instantiates generic variadic module, accesses T from class method through generic extend
  instantiates generic variadic module, accesses T from class method through generic extend
-  extends a module
  extends a module
-  includes module in a module
  includes module in a module
-  uses type declaration inside module, recursive, and gives error
  uses type declaration inside module, recursive, and gives error
-  includes module but can't access metaclass methods
  includes module but can't access metaclass methods
-  includes module but wrong number of arguments
  includes module but wrong number of arguments
-  reports can't use instance variables inside module
  reports can't use instance variables inside module
-  inherits instance var type annotation from generic to generic to concrete
  inherits instance var type annotation from generic to generic to concrete
-Code gen: method_missing
-  does method_missing macro with block
  does method_missing macro with block
-  finds method_missing with 'with ... yield'
  finds method_missing with 'with ... yield'
-  does method_missing macro with virtual type (4)
  does method_missing macro with virtual type (4)
-  does method_missing macro without args (with call)
  does method_missing macro without args (with call)
-  does method_missing macro with args
  does method_missing macro with args
-  does method_missing macro with virtual type (5)
  does method_missing macro with virtual type (5)
-  does method_missing macro with virtual type (7)
  does method_missing macro with virtual type (7)
-  does method_missing macro with virtual type (6)
  does method_missing macro with virtual type (6)
-  does method_missing macro with top level method involved
  does method_missing macro with top level method involved
-  does method_missing macro with args (with call)
  does method_missing macro with args (with call)
-  does method_missing macro with virtual type (8)
  does method_missing macro with virtual type (8)
-  does method_missing macro with virtual type (3)
  does method_missing macro with virtual type (3)
-  does method_missing macro with included module
  does method_missing macro with included module
-  works with named arguments that aren't legal variable names (#10381)
  works with named arguments that aren't legal variable names (#10381)
-  does method_missing generating method
  does method_missing generating method
-  does method_missing with assignment (bug)
  does method_missing with assignment (bug)
-  does method_missing macro with module involved
  does method_missing macro with module involved
-  does method_missing macro without args
  does method_missing macro without args
-  works with named arguments (#3654)
  works with named arguments (#3654)
-  does method_missing macro with virtual type (1)
  does method_missing macro with virtual type (1)
-  forwards
  forwards
-  does method_missing macro with virtual type (2)
  does method_missing macro with virtual type (2)
-  does method_missing macro with block but not using it
  does method_missing macro with block but not using it
-  does method_missing with assignment (2) (bug)
  does method_missing with assignment (2) (bug)
-Crystal::Playground::AgentInstrumentorTransformer
-  instrument literals
  instrument literals
-  instrument ivar with obj
  instrument ivar with obj
-  instrument typeof
  instrument typeof
-  instrument single variables expressions
  instrument single variables expressions
-  instrument unless statement
  instrument unless statement
-  instrument is_a? expressions
  instrument is_a? expressions
-  instrument nested blocks unless in same line
  instrument nested blocks unless in same line
-  allow visibility modifiers
  allow visibility modifiers
-  instrument case statement
  instrument case statement
-  instrument multi statement def
  instrument multi statement def
-  do not instrument constants assignments
  do not instrument constants assignments
-  instrument assignments in the rhs
  instrument assignments in the rhs
-  instrument instance variable and class variables reads and writes
  instrument instance variable and class variables reads and writes
-  instrument puts with args
  instrument puts with args
-  instrument single statement def
  instrument single statement def
-  instrument not expressions
  instrument not expressions
-  instrument unary expressions
  instrument unary expressions
-  instrument exceptions
  instrument exceptions
-  do not instrument macro calls in class
  do not instrument macro calls in class
-  do not instrument class/module declared macro
  do not instrument class/module declared macro
-  instrument blocks and but non multi yields
  instrument blocks and but non multi yields
-  instrument nested class defs
  instrument nested class defs
-  do not instrument records class
  do not instrument records class
-  instrument single statement var def
  instrument single statement var def
-  do not instrument class initializing arguments
  do not instrument class initializing arguments
-  instrument chained comparisons (#4663)
  instrument chained comparisons (#4663)
-  instrument print with args
  instrument print with args
-  instrument if statement
  instrument if statement
-  instrument string interpolations
  instrument string interpolations
-  do not instrument top level macro calls
  do not instrument top level macro calls
-  instrument literals with expression names
  instrument literals with expression names
-  instrument while statement
  instrument while statement
-  instrument class defs
  instrument class defs
-  instrument inside modules
  instrument inside modules
-  instrument multi assignments in the rhs
  instrument multi assignments in the rhs
-  instrument returns inside def
  instrument returns inside def
-  instrument binary expressions
  instrument binary expressions
-  instrument blocks and single yields
  instrument blocks and single yields
-Semantic: lib
-  errors if assigning void lib call to var (#4414)
  errors if assigning void lib call to var (#4414)
-  raises on undefined fun
  raises on undefined fun
-  errors if missing arguments
  errors if missing arguments
-  errors if lib fun call is part of dispatch
  errors if lib fun call is part of dispatch
-  errors if parameter already specified
  errors if parameter already specified
-  error if passing non primitive type as varargs
  error if passing non primitive type as varargs
-  passes float as another integer type in variable
  passes float as another integer type in variable
-  passes int as another integer type with literal
  passes int as another integer type with literal
-  allows passing splat to LibC fun
  allows passing splat to LibC fun
-  defined fun with aliased type
  defined fun with aliased type
-  reports redefinition of fun with different signature
  reports redefinition of fun with different signature
-  error if passing type to LibC with to_unsafe but type doesn't match
  error if passing type to LibC with to_unsafe but type doesn't match
-  errors if fourth argument is not a bool
  errors if fourth argument is not a bool
-  overrides definition of fun
  overrides definition of fun
-  errors if second argument is not a string
  errors if second argument is not a string
-  reports error when changing instance var type and something breaks
  reports error when changing instance var type and something breaks
-  reports error on fun argument type not primitive like
  reports error on fun argument type not primitive like
-  allows passing double splat to LibC fun
  allows passing double splat to LibC fun
-  raises wrong number of arguments
  raises wrong number of arguments
-  reports error out can only be used with lib funs in named argument
  reports error out can only be used with lib funs in named argument
-  types fun returning nothing as nil
  types fun returning nothing as nil
-  allows invoking out with underscore 
  allows invoking out with underscore 
-  errors if invoking to_i32! and got error in that call
  errors if invoking to_i32! and got error in that call
-  errors if lib already specified with positional argument
  errors if lib already specified with positional argument
-  correctly attached link flags if there's a macro if
  correctly attached link flags if there's a macro if
-  types a varargs external
  types a varargs external
-  disallows passing nil or pointer to arg expecting pointer
  disallows passing nil or pointer to arg expecting pointer
-  errors if unknown named arg
  errors if unknown named arg
-  errors if using void as parameter (related to #508)
  errors if using void as parameter (related to #508)
-  gathers link annotations from macro expression
  gathers link annotations from macro expression
-  reopens lib and adds same link annotations
  reopens lib and adds same link annotations
-  allows dll argument
  allows dll argument
-  reopens lib and adds more link annotations
  reopens lib and adds more link annotations
-  specifies a call convention
  specifies a call convention
+  finds yielding methods
  finds yielding methods
+  finds methods called from reachable code
  finds methods called from reachable code
+  finds method called from instance variable initializer
  finds method called from instance variable initializer
+  finds method in abstract type
  finds method in abstract type
+  finds methods with proc parameter
  finds methods with proc parameter
+  finds method with free variable
  finds method with free variable
+  finds methods in generic type
  finds methods in generic type
+Code gen: experimental
+  errors if too many arguments
  errors if too many arguments
+  compiles with single string argument
  compiles with single string argument
   errors if missing link arguments
  errors if missing link arguments
-  errors if using out with non-pointer
  errors if using out with non-pointer
-  errors if CallConvention argument is not a string
  errors if CallConvention argument is not a string
-  errors if CallConvention argument is not a valid string
  errors if CallConvention argument is not a valid string
-  reports error on fun argument type not primitive like, Nil (#2994)
  reports error on fun argument type not primitive like, Nil (#2994)
-  errors if defining incompatible funs with the same name in the same lib (#3045)
  errors if defining incompatible funs with the same name in the same lib (#3045)
-  errors if missing argument
  errors if missing argument
-  passes int as another integer type in variable
  passes int as another integer type in variable
-  can use macros inside lib
  can use macros inside lib
-  error if passing non primitive type as varargs invoking to_unsafe
  error if passing non primitive type as varargs invoking to_unsafe
-  reports error if using out with an already declared variable
  reports error if using out with an already declared variable
-  raises wrong argument type
  raises wrong argument type
-  types lib var set
  types lib var set
-  types fun returning void as nil
  types fun returning void as nil
-  reports error out can only be used with lib funs
  reports error out can only be used with lib funs
-  warns if @[Link(static: true)] is specified
  warns if @[Link(static: true)] is specified
-  errors if too many link arguments
  errors if too many link arguments
-  errors if using out with void pointer (#2424)
  errors if using out with void pointer (#2424)
-  errors if redefining fun with different signature (#2468)
  errors if redefining fun with different signature (#2468)
-  clears annotations after lib
  clears annotations after lib
-  types fun returning nil as nil
  types fun returning nil as nil
-  warns if Link annotations use positional arguments
  warns if Link annotations use positional arguments
-  reports error on struct field type not primitive like
  reports error on struct field type not primitive like
-  errors if using void via typedef as parameter (related to #508)
  errors if using void via typedef as parameter (related to #508)
-  errors if defining incompatible funs with the same name in different libs (#3045)
  errors if defining incompatible funs with the same name in different libs (#3045)
-  supports forward references with struct inside struct (#399)
  supports forward references with struct inside struct (#399)
-  errors if defines def on lib
  errors if defines def on lib
-  types lib var get with forward declaration
  types lib var get with forward declaration
-  errors if using out with void pointer through type
  errors if using out with void pointer through type
-  can use out with named args
  can use out with named args
-  supports forward references (#399)
  supports forward references (#399)
-  reports error on fun return type not primitive like
  reports error on fun return type not primitive like
-  defines lib funs before funs with body
  defines lib funs before funs with body
-  errors if wrong number of arguments for CallConvention
  errors if wrong number of arguments for CallConvention
-  errors if dll argument does not end with '.dll'
  errors if dll argument does not end with '.dll'
-  errors if passing void lib call to call argument (#4414)
  errors if passing void lib call to call argument (#4414)
-  specifies a call convention to a lib
  specifies a call convention to a lib
-  types lib var get
  types lib var get
-  reports error on typedef type not primitive like
  reports error on typedef type not primitive like
-  reports error when changing var type and something breaks
  reports error when changing var type and something breaks
-  can use tuple as fun return
  can use tuple as fun return
-  can use macros inside struct
  can use macros inside struct
-  errors if first argument is not a string
  errors if first argument is not a string
-  errors if dll argument contains directory separators
  errors if dll argument contains directory separators
-  errors if using named args with variadic function
  errors if using named args with variadic function
-  can list lib functions at the top level (#12395)
  can list lib functions at the top level (#12395)
-  doesn't try to invoke unsafe for c struct/union (#1362)
  doesn't try to invoke unsafe for c struct/union (#1362)
-  errors if third argument is not a bool
  errors if third argument is not a bool
-  errors if using unknown named param
  errors if using unknown named param
-  errors if using out with varargs
  errors if using out with varargs
-  errors if invoking to_i32! and got wrong type
  errors if invoking to_i32! and got wrong type
-  errors if lib named arg is not a String
  errors if lib named arg is not a String
-  can use named args
  can use named args
-  allows invoking lib call without obj inside lib
  allows invoking lib call without obj inside lib
+  compiles with no argument
  compiles with no argument
+  errors if invalid argument type
  errors if invalid argument type
 Crystal::Repl::Interpreter
-  pointers
-    interprets pointer set and get (int)
    interprets pointer set and get (int)
-    pointerof instance var
    pointerof instance var
-    interprets pointerof, mutates var, read pointer
    interprets pointerof, mutates var, read pointer
-    pointerof class var
    pointerof class var
-    interprets nilable pointer truthiness
    interprets nilable pointer truthiness
-    discards pointer malloc
    discards pointer malloc
-    interprets pointerof and mutates memory (there are more variables)
    interprets pointerof and mutates memory (there are more variables)
-    interprets pointerof, mutates pointer, read var
    interprets pointerof, mutates pointer, read var
-    discards pointer add
    discards pointer add
-    interprets pointer diff, negative
    interprets pointer diff, negative
-    interprets pointer set and get (clear stack)
    interprets pointer set and get (clear stack)
-    pointerof read `StaticArray#@buffer` (2)
    pointerof read `StaticArray#@buffer` (2)
-    pointerof read `StaticArray#@buffer` (1)
    pointerof read `StaticArray#@buffer` (1)
-    interprets pointer add
    interprets pointer add
-    interprets pointer new and pointer address
    interprets pointer new and pointer address
-    interprets pointer set and get (union type, setter value)
    interprets pointer set and get (union type, setter value)
-    interprets pointer diff
    interprets pointer diff
-    interprets pointer set and get (bool)
    interprets pointer set and get (bool)
-    discards pointerof
    discards pointerof
-    pointerof read instance var
    pointerof read instance var
-    discards pointer diff
    discards pointer diff
-    discards pointer set
    discards pointer set
-    discards pointer get
    discards pointer get
-    interprets pointer set and get (union type)
    interprets pointer set and get (union type)
-    discards pointer new
    discards pointer new
-    interprets pointer realloc wrapper
    interprets pointer realloc wrapper
-    discards pointer realloc
    discards pointer realloc
-    interprets pointer realloc
    interprets pointer realloc
-Codegen: special vars
-  preserves special vars in macro expansion with call with default arguments (#824)
  preserves special vars in macro expansion with call with default arguments (#824)
-  codegens after block 2
  codegens after block 2
-  codegens after block  codegens after block  codegens after block  codegens after block  codegens after block  codegens after block������������  codegens after block��  codegens after block��  codegens after block
  codegens after block
-  codegens $~
  codegens $~
-  codegens $?
  codegens $?
-  codegens with default argument
  codegens with default argument
-  codegens $~ with nilable (1)  codegens $~ with nilable (1)  codegens $~ with nilable (1)  codegens $~ with nilable (1)  codegens $~ with nilable (1)����������  codegens $~ with nilable (1)  codegens $~ with nilable (1)����  codegens $~ with nilable (1)��  codegens $~ with nilable (1)
  codegens $~ with nilable (1)
-  codegens $? with nilable (1)  codegens $? with nilable (1)  codegens $? with nilable (1)  codegens $? with nilable (1)  codegens $? with nilable (1)����������  codegens $? with nilable (1)  codegens $? with nilable (1)����  codegens $? with nilable (1)��  codegens $? with nilable (1)
  codegens $? with nilable (1)
-  codegens $~ two levels
  codegens $~ two levels
-  allows with struct
  allows with struct
-  allows with primitive
  allows with primitive
-  preserves special vars if initialized inside block (#2194)
  preserves special vars if initialized inside block (#2194)
-  codegens $~ with nilable (2)  codegens $~ with nilable (2)  codegens $~ with nilable (2)  codegens $~ with nilable (2)  codegens $~ with nilable (2)����������  codegens $~ with nilable (2)  codegens $~ with nilable (2)����  codegens $~ with nilable (2)��  codegens $~ with nilable (2)
  codegens $~ with nilable (2)
-  codegens $? with nilable (2)  codegens $? with nilable (2)  codegens $? with nilable (2)  codegens $? with nilable (2)  codegens $? with nilable (2)����������  codegens $? with nilable (2)  codegens $? with nilable (2)����  codegens $? with nilable (2)��  codegens $? with nilable (2)
  codegens $? with nilable (2)
-  codegens in block with nested block  codegens in block with nested block  codegens in block with nested block  codegens in block with nested block  codegens in block with nested block����������  codegens in block with nested block  codegens in block with nested block����  codegens in block with nested block��  codegens in block with nested block
  codegens in block with nested block
-  codegens in block  codegens in block  codegens in block  codegens in block  codegens in block����������  codegens in block  codegens in block����  codegens in block��  codegens in block
  codegens in block
-  works lazily  works lazily����  works lazily  works lazily  works lazily  works lazily  works lazily  works lazily������������  works lazily
  works lazily
-semantic: case
-  checks exhaustiveness of union with bool
  checks exhaustiveness of union with bool
-  checks exhaustiveness of enum combined with another type
  checks exhaustiveness of enum combined with another type
-  can prove case is exhaustive for @[Flags] enum when matching type
  can prove case is exhaustive for @[Flags] enum when matching type
-  checks exhaustiveness of single type
  checks exhaustiveness of single type
-  checks exhaustiveness of bool type (missing false)
  checks exhaustiveness of bool type (missing false)
-  checks exhaustiveness of bool type with other types
  checks exhaustiveness of bool type with other types
-  checks exhaustiveness of enum through method (all cases covered)
  checks exhaustiveness of enum through method (all cases covered)
-  checks exhaustiveness for tuple literal of 3 elements, and warns
  checks exhaustiveness for tuple literal of 3 elements, and warns
-  checks exhaustiveness for tuple literal with bool and underscore at second position
  checks exhaustiveness for tuple literal with bool and underscore at second position
-  checks exhaustiveness for tuple literal with bool and underscore at second position
  checks exhaustiveness for tuple literal with bool and underscore at second position
-  covers all types
  covers all types
-  checks exhaustiveness of bool type (missing true)
  checks exhaustiveness of bool type (missing true)
-  checks exhaustiveness for tuple literal of 2 elements, first is enum
  checks exhaustiveness for tuple literal of 2 elements, first is enum
-  checks exhaustiveness for tuple literal with bool and underscore at first position
  checks exhaustiveness for tuple literal with bool and underscore at first position
-  checks exhaustiveness of union type with virtual type
  checks exhaustiveness of union type with virtual type
-  checks exhaustiveness for tuple literal with types and underscore at second position
  checks exhaustiveness for tuple literal with types and underscore at second position
-  doesn't check exhaustiveness when using 'when'
  doesn't check exhaustiveness when using 'when'
-  checks exhaustiveness, covers in base type covers
  checks exhaustiveness, covers in base type covers
-  can't prove case is exhaustive for @[Flags] enum
  can't prove case is exhaustive for @[Flags] enum
-  checks exhaustiveness of enum via question method
  checks exhaustiveness of enum via question method
-  checks exhaustiveness for tuple literal with bool and underscore at second position, with partial match
  checks exhaustiveness for tuple literal with bool and underscore at second position, with partial match
-  checks exhaustiveness of enum (all cases covered)
  checks exhaustiveness of enum (all cases covered)
-  can't prove case is exhaustive for @[Flags] enum, tuple case
  can't prove case is exhaustive for @[Flags] enum, tuple case
-  checks exhaustiveness of single type (T.class)
  checks exhaustiveness of single type (T.class)
-  checks exhaustiveness for tuple literal with bool and underscore at first position, partial match
  checks exhaustiveness for tuple literal with bool and underscore at first position, partial match
-  checks exhaustiveness for tuple literal with bool and underscore at first position, with partial match
  checks exhaustiveness for tuple literal with bool and underscore at first position, with partial match
-  checks exhaustiveness for tuple literal, and passes
  checks exhaustiveness for tuple literal, and passes
-  checks exhaustiveness of nilable type with nil literal
  checks exhaustiveness of nilable type with nil literal
-  checks exhaustiveness for tuple literal with bool and underscore at second position, partial match
  checks exhaustiveness for tuple literal with bool and underscore at second position, partial match
-  checks exhaustiveness, covers in base type covers (generic type)
  checks exhaustiveness, covers in base type covers (generic type)
-  checks exhaustiveness for tuple literal with types and underscore at first position
  checks exhaustiveness for tuple literal with types and underscore at first position
-  checks exhaustiveness for tuple literal, with call
  checks exhaustiveness for tuple literal, with call
-  checks exhaustiveness for tuple literal of 2 elements, and warns
  checks exhaustiveness for tuple literal of 2 elements, and warns
-  checks exhaustiveness for tuple literal of 2 elements, first is bool
  checks exhaustiveness for tuple literal of 2 elements, first is bool
-  checks exhaustiveness for tuple literal of 3 elements, all bool
  checks exhaustiveness for tuple literal of 3 elements, all bool
-  errors if casing against a constant
  errors if casing against a constant
-  checks exhaustiveness of enum via const
  checks exhaustiveness of enum via const
-  checks exhaustiveness for tuple literal with bool and underscore at first position
  checks exhaustiveness for tuple literal with bool and underscore at first position
-  checks exhaustiveness of single type (generic)
  checks exhaustiveness of single type (generic)
-  checks exhaustiveness for tuple literal of 3 elements, all enums
  checks exhaustiveness for tuple literal of 3 elements, all enums
-  checks exhaustiveness of single type (Foo(T).class)
  checks exhaustiveness of single type (Foo(T).class)
-  checks exhaustiveness of nil type with nil literal
  checks exhaustiveness of nil type with nil literal
-Crystal
-  normalize_path
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-implementations
-  find const implementation
  find const implementation
-  find class defined by macro
  find class defined by macro
-  find module implementation
  find module implementation
-  find method calls inside while cond
  find method calls inside while cond
-  find method calls inside rescue
  find method calls inside rescue
-  find struct implementation
  find struct implementation
-  find implementation from macro expansions
  find implementation from macro expansions
-  find implementation inside contained file private method
  find implementation inside contained file private method
-  find implementation in generic class methods
  find implementation in generic class methods
-  find top level method calls
  find top level method calls
-  find method calls inside if
  find method calls inside if
-  find full trace for macro expansions
  find full trace for macro expansions
-  find class inside method
  find class inside method
-  find implementors of different classes
  find implementors of different classes
-  can display text output
  can display text output
-  can display json output
  can display json output
-  find implementation inside contained class' class method
  find implementation inside contained class' class method
-  find implementation in class methods
  find implementation in class methods
-  find method calls inside trailing if
  find method calls inside trailing if
-  find enum value implementation
  find enum value implementation
-  find enum implementation
  find enum implementation
-  find implementation inside a module class
  find implementation inside a module class
-  find class implementation
  find class implementation
-  find implementation inside contained file private class' class method
  find implementation inside contained file private class' class method
-  find implementors of classes that are only used
  find implementors of classes that are only used
-  find open class implementation
  find open class implementation
-  find alias implementation
  find alias implementation
-  find implementation in generic class
  find implementation in generic class
-  find method calls inside while
  find method calls inside while
-.parse_args
-  DIR with path
  DIR with path
-  DIR (absolute)
  DIR (absolute)
-  DIR
  DIR
-  DIR (relative to home)
  DIR (relative to home)
-  NAME DIR
  NAME DIR
-  DIR = .
  DIR = .
-Semantic: var
-  types an assign
  types an assign
-  declares local variable and then assigns it
  declares local variable and then assigns it
-  types an assign with type declaration
  types an assign with type declaration
-  errors if declaring generic type without type vars (with local var)
  errors if declaring generic type without type vars (with local var)
-  errors if reads from underscore
  errors if reads from underscore
-  reports variable always nil
  reports variable always nil
-  declares local variable and assigns wrong type
  declares local variable and assigns wrong type
-  declares local variable but doesn't assign it in all branches
  declares local variable but doesn't assign it in all branches
-  lets type on else side of if with a Bool | Nil union
  lets type on else side of if with a Bool | Nil union
-  errors if variable already exists
  errors if variable already exists
-  declares local variable with value
  declares local variable with value
-  reports there's no self
  reports there's no self
-  declares local variable and assigns it with if
  declares local variable and assigns it with if
-  errors if declaring var that is already declared
  errors if declaring var that is already declared
-  reports undefined local variable or method
  reports undefined local variable or method
-  parse local variable as method call even if local variable is declared in call arguments
  parse local variable as method call even if local variable is declared in call arguments
-  declares local variable and immediately reads it
  declares local variable and immediately reads it
-  types a variable
  types a variable
-Codegen: super
-  codegens super inside closure forwarding args
  codegens super inside closure forwarding args
-  calls super in module method (#556)
  calls super in module method (#556)
-  calls super in metaclass (#1522)  calls super in metaclass (#1522)  calls super in metaclass (#1522)  calls super in metaclass (#1522)  calls super in metaclass (#1522)  calls super in metaclass (#1522)������������  calls super in metaclass (#1522)��  calls super in metaclass (#1522)��  calls super in metaclass (#1522)
  calls super in metaclass (#1522)
-  codegens super without arguments
  codegens super without arguments
-  codegens super inside closure
  codegens super inside closure
-  calls super from virtual metaclass type (#2841)
  calls super from virtual metaclass type (#2841)
-  codegens super that calls subclass method 3
  codegens super that calls subclass method 3
-  codegens super that calls subclass method
  codegens super that calls subclass method
-  codegens super that calls subclass method 5
  codegens super that calls subclass method 5
-  calls super in generic module method
  calls super in generic module method
-  codegens super that calls subclass method 6
  codegens super that calls subclass method 6
-  codegens super without arguments and instance variable
  codegens super without arguments and instance variable
-  doesn't invoke super twice in inherited generic types (#942)
  doesn't invoke super twice in inherited generic types (#942)
-  codegens super that calls subclass method 2
  codegens super that calls subclass method 2
-  calls super with dispatch (#2318)
  calls super with dispatch (#2318)
-  codegens super without arguments but parent has arguments
  codegens super without arguments but parent has arguments
-  calls super on an object (#10004)
  calls super on an object (#10004)
-  does super in virtual type including module
  does super in virtual type including module
-  build super on generic class (bug)
  build super on generic class (bug)
-  codegens super that calls subclass method 4
  codegens super that calls subclass method 4
-Semantic: is_a?
-  applies filter inside block
  applies filter inside block
-  restricts type inside if scope 2
  restricts type inside if scope 2
-  restricts type inside if else when used with module type
  restricts type inside if else when used with module type
-  restricts other types inside if else
  restricts other types inside if else
-  checks union with union
  checks union with union
-  types if is_a? preceded by return if (preserves nops)
  types if is_a? preceded by return if (preserves nops)
-  restricts type inside if scope 3
  restricts type inside if scope 3
-  restricts in assignment
  restricts in assignment
-  does is_a? from virtual metaclass to generic metaclass (#12302)
  does is_a? from virtual metaclass to generic metaclass (#12302)
-  doesn't fail on untyped is_a (#10317)
  doesn't fail on untyped is_a (#10317)
-  is bool
  is bool
-  applies negative condition filter if then is no return
  applies negative condition filter if then is no return
-  restricts type in else but lazily
  restricts type in else but lazily
-  restricts type inside if scope 1
  restricts type inside if scope 1
-  checks simple type with union
  checks simple type with union
-Semantic: exception
-  types a var after begin rescue as having all possible types in begin and rescue (2)
  types a var after begin rescue as having all possible types in begin and rescue (2)
-  can use break inside block inside ensure (#4470)
  can use break inside block inside ensure (#4470)
-  can't return from block inside ensure (#4470)
  can't return from block inside ensure (#4470)
-  marks fun as raises
  marks fun as raises
-  marks method calling method that raises as raises
  marks method calling method that raises as raises
-  can't return from while inside ensure (#4470)
  can't return from while inside ensure (#4470)
-  doesn't crash on break inside rescue, in while (#2441)
  doesn't crash on break inside rescue, in while (#2441)
-  errors if caught exception is a union but not all types are valid
  errors if caught exception is a union but not all types are valid
-  type is union of main and rescue blocks
  type is union of main and rescue blocks
-  types var as nilable inside ensure (1)
  types var as nilable inside ensure (1)
-  remains nilable after rescue
  remains nilable after rescue
-  doesn't consider vars as nilable inside else (#610)
  doesn't consider vars as nilable inside else (#610)
-  marks method that calls another method that raises as raises, recursively
  marks method that calls another method that raises as raises, recursively
-  types a var after begin rescue as having all possible types in begin and rescue
  types a var after begin rescue as having all possible types in begin and rescue
-  shadows local variable (1)
  shadows local variable (1)
-  doesn't type instance variable as nilable if assigned inside an exception handler after being assigned
  doesn't type instance variable as nilable if assigned inside an exception handler after being assigned
-  types a var after rescue as being nilable
  types a var after rescue as being nilable
-  can't use next inside block inside ensure (#4470)
  can't use next inside block inside ensure (#4470)
-  marks def as raises
  marks def as raises
-  can use next inside block inside ensure (#4470)
  can use next inside block inside ensure (#4470)
-  type union with empty rescue block
  type union with empty rescue block
-  can't use break inside block inside ensure (#4470)
  can't use break inside block inside ensure (#4470)
-  types a var after begin rescue as having all possible types and nil in begin if read (2)
  types a var after begin rescue as having all possible types and nil in begin if read (2)
-  marks proc literal as raises
  marks proc literal as raises
-  marks method calling lib fun that raises as raises
  marks method calling lib fun that raises as raises
-  transform nodes in else block
  transform nodes in else block
-  detects reading nil-if-read variable after exception handler (#4723)
  detects reading nil-if-read variable after exception handler (#4723)
-  types instance variable as nilable if assigned inside an exception handler (#1845)
  types instance variable as nilable if assigned inside an exception handler (#1845)
-  errors if caught exception is not a subclass of Exception without var
  errors if caught exception is not a subclass of Exception without var
-  types exception var with no types
  types exception var with no types
-  correctly types variable assigned inside nested exception handler (#9769)
  correctly types variable assigned inside nested exception handler (#9769)
-  types exception with type
  types exception with type
-  can't return from ensure (#4470)
  can't return from ensure (#4470)
-  marks instance variable as nilable if assigned inside rescue inside initialize
  marks instance variable as nilable if assigned inside rescue inside initialize
-  says syntax error on "begin; rescue ex; rescue ex : Foo; end; ex"
  says syntax error on "begin; rescue ex; rescue ex : Foo; end; ex"
-  can't use break inside while inside ensure (#4470)
  can't use break inside while inside ensure (#4470)
-  types var assignment inside block inside exception handler (#3324)
  types var assignment inside block inside exception handler (#3324)
-  assigns var inside ensure (1) (#3919)
  assigns var inside ensure (1) (#3919)
-  type for exception handler for explicit types
  type for exception handler for explicit types
-  errors if caught exception is a nested union but not all types are valid
  errors if caught exception is a nested union but not all types are valid
-  says syntax error on "begin; rescue ex; rescue; end; ex"
  says syntax error on "begin; rescue ex; rescue; end; ex"
-  doesn't infect type to variable before handler (#4002)
  doesn't infect type to variable before handler (#4002)
-  assigns var inside ensure (2) (#3919)
  assigns var inside ensure (2) (#3919)
-  types var as nilable inside ensure (2)
  types var as nilable inside ensure (2)
-  errors if caught exception is not a subclass of Exception
  errors if caught exception is not a subclass of Exception
-  types var as nilable if previously nilable (2)
  types var as nilable if previously nilable (2)
-  can use break inside while inside ensure (#4470)
  can use break inside while inside ensure (#4470)
-  says syntax error on "begin; else; 1; end"
  says syntax error on "begin; else; 1; end"
-  types a var after begin rescue with no-return in rescue
  types a var after begin rescue with no-return in rescue
-  types code with abstract exception that delegates method
  types code with abstract exception that delegates method
-  types var as nilable if previously nilable (1)
  types var as nilable if previously nilable (1)
-  can use next inside while inside ensure (#4470)
  can use next inside while inside ensure (#4470)
-  type union with empty main block
  type union with empty main block
-  correctly types variables inside conditional inside exception handler with no-return rescue (#8012)
  correctly types variables inside conditional inside exception handler with no-return rescue (#8012)
-  can't use next inside while inside ensure (#4470)
  can't use next inside while inside ensure (#4470)
-  correctly types #1988
  correctly types #1988
-  gets a non-nilable type if all rescue are unreachable (#8751)
  gets a non-nilable type if all rescue are unreachable (#8751)
-  types var as not nil if defined inside begin and defined inside rescue
  types var as not nil if defined inside begin and defined inside rescue
-Code gen: offsetof
-  returns offset allowing manual access of first struct field
  returns offset allowing manual access of first struct field
-  returns offset of extern union
  returns offset of extern union
-  returns offset allowing manual access of tuple items
  returns offset allowing manual access of tuple items
-  returns offset allowing manual access of first class field
  returns offset allowing manual access of first class field
-  returns offset of `StaticArray#@buffer`
  returns offset of `StaticArray#@buffer`
-  returns offset allowing manual access of struct field that isn't first
  returns offset allowing manual access of struct field that isn't first
-  returns offset allowing manual access of class field that isn't first
  returns offset allowing manual access of class field that isn't first
-Code gen: virtual type
-  lookup instance variables in parent types
  lookup instance variables in parent types
-  can belong to union
  can belong to union
-  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated  initializes ivars to nil even if object never instantiated��������������  initializes ivars to nil even if object never instantiated��  initializes ivars to nil even if object never instantiated
  initializes ivars to nil even if object never instantiated
-  codegens new for virtual class with one type  codegens new for virtual class with one type  codegens new for virtual class with one type  codegens new for virtual class with one type  codegens new for virtual class with one type  codegens new for virtual class with one type������  codegens new for virtual class with one type��������  codegens new for virtual class with one type��  codegens new for virtual class with one type
  codegens new for virtual class with one type
-  assign instance variable in virtual type
  assign instance variable in virtual type
-  dispatches on virtual metaclass (1)
  dispatches on virtual metaclass (1)
-  call base method
  call base method
-  codegens new for virtual class with two types  codegens new for virtual class with two types  codegens new for virtual class with two types  codegens new for virtual class with two types  codegens new for virtual class with two types  codegens new for virtual class with two types  codegens new for virtual class with two types��������������  codegens new for virtual class with two types��  codegens new for virtual class with two types
  codegens new for virtual class with two types
-  codegens new twice for virtual
  codegens new twice for virtual
-  casts union to virtual
  casts union to virtual
-  dispatch call with nilable virtual arg
  dispatch call with nilable virtual arg
-  codegens allocate for virtual type with custom new
  codegens allocate for virtual type with custom new
-  codegens virtual call with explicit self and nilable type
  codegens virtual call with explicit self and nilable type
-  casts virtual type to union
  casts virtual type to union
-  codegens non-virtual call that calls virtual call to another virtual call
  codegens non-virtual call that calls virtual call to another virtual call
-  calls class method 2
  calls class method 2
-  dispatches on virtual metaclass (2)
  dispatches on virtual metaclass (2)
-  codegens virtual call with explicit self
  codegens virtual call with explicit self
-  call overwritten method
  call overwritten method
-  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type������������  codegens call to Object#to_s from virtual type  codegens call to Object#to_s from virtual type����  codegens call to Object#to_s from virtual type
  codegens call to Object#to_s from virtual type
-  casts virtual type to base virtual type
  casts virtual type to base virtual type
-  doesn't lookup in Value+ when virtual type is Object+
  doesn't lookup in Value+ when virtual type is Object+
-  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)  codegens new for new on virtual abstract class (#3835)��������������  codegens new for new on virtual abstract class (#3835)��  codegens new for new on virtual abstract class (#3835)
  codegens new for new on virtual abstract class (#3835)
-  dispatch call with virtual type argument
  dispatch call with virtual type argument
-  call base overwritten method
  call base overwritten method
-  codegens virtual method of abstract metaclass
  codegens virtual method of abstract metaclass
-  calls class method 1
  calls class method 1
-  codegens new for simple type, then for virtual
  codegens new for simple type, then for virtual
-  casts metaclass union type to virtual metaclass type (#6298)
  casts metaclass union type to virtual metaclass type (#6298)
-  calls class method 3
  calls class method 3
-  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type  codegens call to Object#to_s from nilable type������������  codegens call to Object#to_s from nilable type��  codegens call to Object#to_s from nilable type��  codegens call to Object#to_s from nilable type
  codegens call to Object#to_s from nilable type
-  correctly dispatch call with block when the obj is a virtual type
  correctly dispatch call with block when the obj is a virtual type
-  returns type with virtual type def type
  returns type with virtual type def type
-  dispatches on virtual metaclass (3)
  dispatches on virtual metaclass (3)
-Crystal::Doc::Generator
-  .anchor_link
-    generates the correct anchor link
    generates the correct anchor link
-Crystal::Doc::Generator
-  crystal repo
-    inserts pseudo methods
    inserts pseudo methods
-  #collect_constants
-    returns empty array when constants are private
    returns empty array when constants are private
-  #formatted_doc
-    with a Experimental annotation, and docs
-      should generate both the docs and Experimental tag
      should generate both the docs and Experimental tag
-    with a Deprecated annotation, and no docs
-      should generate just the Deprecated tag
      should generate just the Deprecated tag
-    with no annotation, and no docs
-      should generate nothing
      should generate nothing
-    should generate the full document
    should generate the full document
-    with a Experimental annotation, and no docs
-      should generate just the Experimental tag
      should generate just the Experimental tag
-    should generate the full document
    should generate the full document
-    with a Deprecated annotation, and docs
-      should generate both the docs and Deprecated tag
      should generate both the docs and Deprecated tag
-  #formatted_summary
-    should generate the first line
    should generate the first line
-    with a Deprecated annotation, and no docs
-      should generate just the Deprecated tag
      should generate just the Deprecated tag
-    should generate the first sentence
    should generate the first sentence
-    with a Deprecated annotation, and docs
-      should generate both the docs and Deprecated tag
      should generate both the docs and Deprecated tag
-    should exclude whitespace before the summary line
    should exclude whitespace before the summary line
-    with a Experimental annotation, and no docs
-      should generate just the Experimental tag
      should generate just the Experimental tag
-    with no annotation, and no docs
-      should generate nothing
      should generate nothing
-    with a Experimental annotation, and docs
-      should generate both the docs and Experimental tag
      should generate both the docs and Experimental tag
-  generates sitemap
  generates sitemap
-  #must_include_toplevel?
-    returns false if program has constant which is defined in other place
    returns false if program has constant which is defined in other place
-    returns false if program has nothing
    returns false if program has nothing
-    returns false if program has macro which is defined in other place
    returns false if program has macro which is defined in other place
-    returns true if program has constant
    returns true if program has constant
-    returns true if program has macro
    returns true if program has macro
-    returns true if program has method
    returns true if program has method
-    returns false if program has method which is defined in other place
    returns false if program has method which is defined in other place
+  structs
+    does call receiver by value from VirtualType abstract struct to union
    does call receiver by value from VirtualType abstract struct to union
+    does constructor
    does constructor
+    discards allocate
    discards allocate
+    does allocate, set instance var and get instance var
    does allocate, set instance var and get instance var
+    mutates struct inside union
    mutates struct inside union
+    interprets read instance var of struct
    interprets read instance var of struct
+    inlines struct method that returns self (#12253)
    inlines struct method that returns self (#12253)
+    does complex class instance var initializer
    does complex class instance var initializer
+    does simple class instance var initializer
    does simple class instance var initializer
+    does class instance var initializer inheritance
    does class instance var initializer inheritance
+    does call receiver by value from VirtualType abstract struct to concrete struct (#12190)
    does call receiver by value from VirtualType abstract struct to concrete struct (#12190)
+    sets multiple instance vars in virtual abstract struct call (#12187)
    sets multiple instance vars in virtual abstract struct call (#12187)
+    does simple struct instance var initializer
    does simple struct instance var initializer
+    mutates struct stored in class var
    mutates struct stored in class var
+    casts def body to def type
    casts def body to def type
+Codegen: private
+  doesn't include filename for private types
  doesn't include filename for private types
+  codegens private def in same file
  codegens private def in same file
+  codegens class vars of private types with same name (#11620)
  codegens class vars of private types with same name (#11620)
+  codegens class var of private type with same name as public type (#11620)
  codegens class var of private type with same name as public type (#11620)
+  codegens overloaded private def in same file
  codegens overloaded private def in same file
 Semantic: const
-  errors if using const in var declaration
  errors if using const in var declaration
-  errors if using const in proc notation parameter type
  errors if using const in proc notation parameter type
-  can use constant defined later (#2906)
  can use constant defined later (#2906)
+  types a nested constant
  types a nested constant
+  finds current type only for first path item (2)
  finds current type only for first path item (2)
+  types a nested type with same name
  types a nested type with same name
+  doesn't error if using c enum
  doesn't error if using c enum
   doesn't errors if constant depends on another one defined later through method, but constant is simple (~ 2)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (~ 2)
-  doesn't count parent types as current type
  doesn't count parent types as current type
-  doesn't errors if constant depends on another one defined later through method, but constant is simple (true)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (true)
+  errors on dynamic constant assignment inside block
  errors on dynamic constant assignment inside block
+  doesn't errors if constant depends on another one defined later through method, but constant is simple (- 2)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (- 2)
+  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &- 1)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &- 1)
+  errors if using const in proc notation parameter type
  errors if using const in proc notation parameter type
+  types a constant using Path
  types a constant using Path
   errors if constant has NoReturn type (#6139)
  errors if constant has NoReturn type (#6139)
+  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED - 1)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED - 1)
+  doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + ZED)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + ZED)
+  errors if using const in restriction
  errors if using const in restriction
+  creates container module if not exist when using Path
  creates container module if not exist when using Path
+  finds current type before parents (#4086)
  finds current type before parents (#4086)
   finds current type first
  finds current type first
-  errors if using constant as generic type (#3240)
  errors if using constant as generic type (#3240)
+  types a nested constant using Path
  types a nested constant using Path
+  doesn't errors if constant depends on another one defined later through method, but constant is simple (+ 1)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (+ 1)
   errors if can't infer constant type (#3240, #3948)
  errors if can't infer constant type (#3240, #3948)
+  doesn't crash with const used in initialize (bug)
  doesn't crash with const used in initialize (bug)
+  doesn't count parent types as current type
  doesn't count parent types as current type
+  finds nearest constant first
  finds nearest constant first
+  doesn't errors if constant depends on another one defined later through method, but constant is simple (true)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (true)
+  doesn't errors if constant depends on another one defined later through method, but constant is simple (1)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (1)
+  errors if using const in type declaration
  errors if using const in type declaration
   types a constant reference
  types a constant reference
-  errors on dynamic constant assignment inside if
  errors on dynamic constant assignment inside if
-  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &* 2)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &* 2)
-  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED - 1)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED - 1)
   errors if using const in uninitialized
  errors if using const in uninitialized
+  doesn't errors if constant depends on another one defined later through method, but constant is simple (1 &+ ZED)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (1 &+ ZED)
+  finds constant in module that includes module (#205)
  finds constant in module that includes module (#205)
   doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + 2)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + 2)
-  doesn't errors if constant depends on another one defined later through method, but constant is simple ('a')
  doesn't errors if constant depends on another one defined later through method, but constant is simple ('a')
-  finds current type only for first path item (2)
  finds current type only for first path item (2)
-  finds constant in class that extends class (#205)
  finds constant in class that extends class (#205)
-  errors if using return inside constant value (#5391)
  errors if using return inside constant value (#5391)
-  doesn't errors if constant depends on another one defined later through method, but constant is simple (1)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (1)
-  finds nearest constant first
  finds nearest constant first
-  types a constant
  types a constant
-  keeps type of container when using Path
  keeps type of container when using Path
-  doesn't errors if constant depends on another one defined later through method, but constant is simple (- 2)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (- 2)
-  doesn't crash with const used in initialize (bug)
  doesn't crash with const used in initialize (bug)
-  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED // 2)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED // 2)
-  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &- 1)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &- 1)
-  errors if using const in restriction
  errors if using const in restriction
-  types a nested type with same name
  types a nested type with same name
-  types a nested constant using Path
  types a nested constant using Path
-  types a constant using Path
  types a constant using Path
-  doesn't errors if constant depends on another one defined later through method, but constant is simple (nil)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (nil)
-  doesn't errors if constant depends on another one defined later through method, but constant is simple (+ 1)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (+ 1)
-  finds current type only for first path item (1)
  finds current type only for first path item (1)
-  types a nested constant
  types a nested constant
-  finds const from restriction
  finds const from restriction
+  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &* 2)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &* 2)
   doesn't errors if constant depends on another one defined later through method, but constant is simple ("foo")
  doesn't errors if constant depends on another one defined later through method, but constant is simple ("foo")
-  creates container module if not exist when using Path
  creates container module if not exist when using Path
-  doesn't error if using c enum
  doesn't error if using c enum
+  doesn't errors if constant depends on another one defined later through method, but constant is simple (nil)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (nil)
+  doesn't errors if constant depends on another one defined later through method, but constant is simple ('a')
  doesn't errors if constant depends on another one defined later through method, but constant is simple ('a')
   doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED * 2)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED * 2)
-  doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + ZED)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + ZED)
-  doesn't share variables with global scope
  doesn't share variables with global scope
-  errors on dynamic constant assignment inside block
  errors on dynamic constant assignment inside block
   types a global constant reference in method
  types a global constant reference in method
+  can use constant defined later (#2906)
  can use constant defined later (#2906)
   types a global constant reference in static method
  types a global constant reference in static method
-  errors if using const in proc notation return type
  errors if using const in proc notation return type
-  doesn't errors if constant depends on another one defined later through method, but constant is simple (1 &+ ZED)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (1 &+ ZED)
-  errors if using const in type declaration
  errors if using const in type declaration
-  finds current type before parents (#4086)
  finds current type before parents (#4086)
-  finds constant in module that includes module (#205)
  finds constant in module that includes module (#205)
   types a constant inside a def
  types a constant inside a def
-error reporting
-  reports wrong number of arguments
  reports wrong number of arguments
-  reports wrong number of arguments, with optional parameters
  reports wrong number of arguments, with optional parameters
-  reports missing block
  reports missing block
-  reports unexpected named argument (2)
  reports unexpected named argument (2)
-  reports unexpected block
  reports unexpected block
-  reports unexpected named argument
  reports unexpected named argument
-  uses correct name for top-level macro methods
  uses correct name for top-level macro methods
-Code gen: cast
-  allows casting nil to Void*
  allows casting nil to Void*
-  codegens class method when type id is available but not a virtual type (#3490)
  codegens class method when type id is available but not a virtual type (#3490)
-  downcasts from union to union with different alignment  downcasts from union to union with different alignment  downcasts from union to union with different alignment  downcasts from union to union with different alignment  downcasts from union to union with different alignment  downcasts from union to union with different alignment������������  downcasts from union to union with different alignment  downcasts from union to union with different alignment����  downcasts from union to union with different alignment
  downcasts from union to union with different alignment
-  casts between union types, where union has a tuple type (#3377)
  casts between union types, where union has a tuple type (#3377)
-  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)  casts from nilable type to virtual type (#3512)����������  casts from nilable type to virtual type (#3512)����  casts from nilable type to virtual type (#3512)��  casts from nilable type to virtual type (#3512)
  casts from nilable type to virtual type (#3512)
-  casts with block var that changes type (#3341)
  casts with block var that changes type (#3341)
-  doesn't corrupt stack when downcasting union to union with different alignment (#14285)
  doesn't corrupt stack when downcasting union to union with different alignment (#14285)
-  casts from nilable to nil  casts from nilable to nil  casts from nilable to nil  casts from nilable to nil  casts from nilable to nil  casts from nilable to nil������������  casts from nilable to nil��  casts from nilable to nil��  casts from nilable to nil
  casts from nilable to nil
-  casts (bug)  casts (bug)  casts (bug)  casts (bug)  casts (bug)  casts (bug)������������  casts (bug)  casts (bug)����  casts (bug)
  casts (bug)
-  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError  casts from union to another union raises TypeCastError��������������  casts from union to another union raises TypeCastError��  casts from union to another union raises TypeCastError
  casts from union to another union raises TypeCastError
-  casts from union to another union  casts from union to another union  casts from union to another union  casts from union to another union  casts from union to another union  casts from union to another union����  casts from union to another union����������  casts from union to another union��  casts from union to another union
  casts from union to another union
-  casts from virtual to single type  casts from virtual to single type  casts from virtual to single type  casts from virtual to single type  casts from virtual to single type  casts from virtual to single type������������  casts from virtual to single type��  casts from virtual to single type��  casts from virtual to single type
  casts from virtual to single type
-  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment������������  sidecasts from union to union with different alignment  sidecasts from union to union with different alignment����  sidecasts from union to union with different alignment
  sidecasts from union to union with different alignment
-  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError  casts from virtual to single type raises TypeCastError������  casts from virtual to single type raises TypeCastError��������  casts from virtual to single type raises TypeCastError��  casts from virtual to single type raises TypeCastError
  casts from virtual to single type raises TypeCastError
-  can cast from Void* to virtual type (#3014)
  can cast from Void* to virtual type (#3014)
-  casts to module  casts to module  casts to module  casts to module  casts to module  casts to module������������  casts to module  casts to module����  casts to module
  casts to module
-  allows casting nilable type to Void* (3)
  allows casting nilable type to Void* (3)
-  casts from int to int  casts from int to int  casts from int to int  casts from int to int  casts from int to int  casts from int to int��������  casts from int to int������  casts from int to int��  casts from int to int
  casts from int to int
-  upcasts from union to union with different alignment  upcasts from union to union with different alignment  upcasts from union to union with different alignment  upcasts from union to union with different alignment  upcasts from union to union with different alignment  upcasts from union to union with different alignment������������  upcasts from union to union with different alignment��  upcasts from union to union with different alignment��  upcasts from union to union with different alignment
  upcasts from union to union with different alignment
-  casts from union to single type  casts from union to single type  casts from union to single type  casts from union to single type  casts from union to single type  casts from union to single type������������  casts from union to single type��  casts from union to single type��  casts from union to single type
  casts from union to single type
-  allows casting object to pointer and back
  allows casting object to pointer and back
-  allows casting nilable type to Void* (2)
  allows casting nilable type to Void* (2)
-  cast virtual metaclass type to nilable virtual instance type (#12628)
  cast virtual metaclass type to nilable virtual instance type (#12628)
-  casts from nilable to nil raises TypeCastError  casts from nilable to nil raises TypeCastError  casts from nilable to nil raises TypeCastError  casts from nilable to nil raises TypeCastError  casts from nilable to nil raises TypeCastError����  casts from nilable to nil raises TypeCastError����  casts from nilable to nil raises TypeCastError������  casts from nilable to nil raises TypeCastError��  casts from nilable to nil raises TypeCastError
  casts from nilable to nil raises TypeCastError
-  casts from pointer to pointer  casts from pointer to pointer  casts from pointer to pointer  casts from pointer to pointer  casts from pointer to pointer  casts from pointer to pointer������������  casts from pointer to pointer��  casts from pointer to pointer��  casts from pointer to pointer
  casts from pointer to pointer
-  allows casting nilable type to Void* (1)
  allows casting nilable type to Void* (1)
-  upcasts type to virtual (#3304)
  upcasts type to virtual (#3304)
-  upcasts from non-generic to generic
  upcasts from non-generic to generic
-  casts to base class making it virtual
  casts to base class making it virtual
-  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError  casts from union to single type raises TypeCastError������������  casts from union to single type raises TypeCastError��  casts from union to single type raises TypeCastError��  casts from union to single type raises TypeCastError
  casts from union to single type raises TypeCastError
-  can cast to metaclass (#11121)
  can cast to metaclass (#11121)
-  upcasts type to virtual (2) (#3304)
  upcasts type to virtual (2) (#3304)
-  casts to bigger union
  casts to bigger union
-Crystal::Codegen::Target
-  normalizes triples
  normalizes triples
-  parses incomplete triples
  parses incomplete triples
-  parses freebsd version
  parses freebsd version
-Code gen: not
-  doesn't crash
  doesn't crash
-  codegens not pointer (false)
  codegens not pointer (false)
-  codegens not number
  codegens not number
-  codegens not pointer (true)
  codegens not pointer (true)
-  codegens not nilable type (true)
  codegens not nilable type (true)
-  codegens not with inlinable value (#6451)
  codegens not with inlinable value (#6451)
-  codegens not true
  codegens not true
-  codegens not nilable type (false)
  codegens not nilable type (false)
-  codegens not nil
  codegens not nil
-  codegens not false
  codegens not false
-Code gen: named tuple
-  codegens tuple index
  codegens tuple index
-  does to_s for NamedTuple class  does to_s for NamedTuple class  does to_s for NamedTuple class  does to_s for NamedTuple class  does to_s for NamedTuple class����  does to_s for NamedTuple class��������  does to_s for NamedTuple class��  does to_s for NamedTuple class��  does to_s for NamedTuple class
  does to_s for NamedTuple class
-  upcasts named tuple union to compatible named tuple
  upcasts named tuple union to compatible named tuple
-  codegens tuple nilable index (3)
  codegens tuple nilable index (3)
-  provides T as a named tuple literal
  provides T as a named tuple literal
-  assigns named tuple union to compatible named tuple
  assigns named tuple union to compatible named tuple
-  merges two named tuple types with same keys but different types (2)
  merges two named tuple types with same keys but different types (2)
-  downcasts union inside tuple to value (#3907)
  downcasts union inside tuple to value (#3907)
-  upcasts named tuple inside union to union with compatible named tuple
  upcasts named tuple inside union to union with compatible named tuple
-  assigns two same-size named tuple types to a same var (#3132)
  assigns two same-size named tuple types to a same var (#3132)
-  gets keys at compile time (1)
  gets keys at compile time (1)
-  codegens union of tuple of float with tuple of tuple of float
  codegens union of tuple of float with tuple of tuple of float
-  codegens tuple nilable index (1)
  codegens tuple nilable index (1)
-  assigns named tuple to compatible named tuple
  assigns named tuple to compatible named tuple
-  codegens tuple nilable index (2)
  codegens tuple nilable index (2)
-  doesn't error if NamedTuple includes a non-generic module (#10380)
  doesn't error if NamedTuple includes a non-generic module (#10380)
-  gets keys at compile time (2)
  gets keys at compile time (2)
-  allows named tuple covariance
  allows named tuple covariance
-  assigns named tuple inside union to union with compatible named tuple
  assigns named tuple inside union to union with compatible named tuple
-  accesses T and creates instance from it
  accesses T and creates instance from it
-  upcasts named tuple inside compatible named tuple
  upcasts named tuple inside compatible named tuple
-  codegens tuple index another order
  codegens tuple index another order
-  passes named tuple to def
  passes named tuple to def
-  gets size at compile time
  gets size at compile time
-  merges two named tuple types with same keys but different types (1)
  merges two named tuple types with same keys but different types (1)
-  doesn't crash when overload doesn't match
  doesn't crash when overload doesn't match
-Semantic: struct
-  doesn't make virtual for Struct
  doesn't make virtual for Struct
-  allows struct to participate in virtual
  allows struct to participate in virtual
-  can't reopen as class
  can't reopen as class
-  unifies type to virtual type
  unifies type to virtual type
-  errors if defining finalize for struct (#3840)
  errors if defining finalize for struct (#3840)
-  doesn't make virtual for Float
  doesn't make virtual for Float
-  passes subtype check with generic module type on virtual type
  passes subtype check with generic module type on virtual type
-  passes subtype check with generic module type on virtual type (3)
  passes subtype check with generic module type on virtual type (3)
-  types struct declaration
  types struct declaration
-  can't reopen as module
  can't reopen as module
-  types generic struct declaration
  types generic struct declaration
-  can't extend struct from class
  can't extend struct from class
-  can't be nilable
  can't be nilable
-  doesn't make virtual for Value
  doesn't make virtual for Value
-  passes subtype check with generic module type on virtual type (2) (#10302)
  passes subtype check with generic module type on virtual type (2) (#10302)
-  doesn't error if method is not found in abstract type
  doesn't error if method is not found in abstract type
-  doesn't make virtual for Int
  doesn't make virtual for Int
-  can't extend struct from non-abstract struct
  can't extend struct from non-abstract struct
-  can't extend class from struct
  can't extend class from struct
-  can cast to base abstract struct
  can cast to base abstract struct
-Crystal::Macro
-  macro id methods
-    forwards methods to string
    forwards methods to string
-    compares with string
    compares with string
-    compares with symbol
    compares with symbol
-  proc notation methods
-    gets multiple inputs
    gets multiple inputs
-    gets empty output
    gets empty output
-    gets single input
    gets single input
-    executes resolve
    executes resolve
-    gets single output
    gets single output
-    executes resolve?
    executes resolve?
-  type declaration methods
-    executes type
    executes type
-    executes var when instance var
    executes var when instance var
-    executes var
    executes var
-    executes value
    executes value
-  responds_to methods
-    executes receiver
    executes receiver
-    executes name
    executes name
-  Crystal::ArrayLiteral
-    executes any? (false)
    executes any? (false)
-    executes find (finds)
    executes find (finds)
-    #+
-      with TupleLiteral argument
-        concatenates the literals into an ArrayLiteral
        concatenates the literals into an ArrayLiteral
-      with ArrayLiteral argument
-        concatenates the literals into an ArrayLiteral
        concatenates the literals into an ArrayLiteral
-    executes empty?
    executes empty?
-    #each
    #each
-    executes splat with symbols and strings
    executes splat with symbols and strings
-    executes sort with strings
    executes sort with strings
-    executes last
    executes last
-    executes sort with ids
    executes sort with ids
-    executes sort with ids and strings
    executes sort with ids and strings
-    executes all? (false)
    executes all? (false)
-    executes join
    executes join
-    executes push
    executes push
-    executes identify
    executes identify
-    executes any? (true)
    executes any? (true)
-    executes map with constants
    executes map with constants
-    executes []=
    executes []=
-    executes uniq
    executes uniq
-    #map_with_index
-      without either argument
-        returns the resulting array
        returns the resulting array
-      with both arguments
-        returns the resulting array
        returns the resulting array
-      without the index argument
-        returns the resulting array
        returns the resulting array
-      without the element argument
-        returns the resulting array
        returns the resulting array
-    executes [] with two numbers
    executes [] with two numbers
-    executes type
    executes type
-    executes sort_by
    executes sort_by
-    executes find (doesn't find)
    executes find (doesn't find)
-    executes join with strings
    executes join with strings
-    #each_with_index
-      with both arguments
-        builds the correct array
        builds the correct array
-      without the element argument
-        builds the correct array
        builds the correct array
-      without the index argument
-        builds the correct array
        builds the correct array
-      without either argument
-        builds the correct array
        builds the correct array
-    executes includes?
    executes includes?
-    executes map with arg
    executes map with arg
-    executes sort with numbers
    executes sort with numbers
-    executes [] with incomplete range
    executes [] with incomplete range
-    executes splat with splat
    executes splat with splat
-    executes of
    executes of
-    executes of (nop)
    executes of (nop)
-    executes splat
    executes splat
-    executes select
    executes select
-    executes reject
    executes reject
-    executes map
    executes map
-    calls block exactly once for each element in #sort_by
    calls block exactly once for each element in #sort_by
-    executes index 0
    executes index 0
-    executes reduce with no initial value
    executes reduce with no initial value
-    executes type (nop)
    executes type (nop)
-    executes [] with computed range
    executes [] with computed range
-    #-
-      with ArrayLiteral argument
-        removes the elements in RHS from LHS into an ArrayLiteral
        removes the elements in RHS from LHS into an ArrayLiteral
-      with TupleLiteral argument
-        removes the elements in RHS from LHS into an ArrayLiteral
        removes the elements in RHS from LHS into an ArrayLiteral
-    executes all? (true)
    executes all? (true)
-    executes [] with range
    executes [] with range
-    executes size
    executes size
-    executes index 1
    executes index 1
-    executes is_a?
    executes is_a?
-    executes reduce with initial value
    executes reduce with initial value
-    executes first
    executes first
-    executes index out of bounds
    executes index out of bounds
-    creates an array literal with a var
    creates an array literal with a var
-    executes unshift
    executes unshift
-  Crystal::TypeOf
-    executes args
    executes args
-  and methods
-    executes right
    executes right
-    executes left
    executes left
-  Crystal::External
-    executes is_a?
    executes is_a?
-  instancevar methods
-    executes name
    executes name
-  symbol methods
-    executes symbol != symbol
    executes symbol != symbol
-    forwards methods to string
    forwards methods to string
-    executes symbol == symbol
    executes symbol == symbol
-  Crystal::TupleLiteral
-    executes splat with symbols and strings
    executes splat with symbols and strings
-    executes includes?
    executes includes?
-    executes map with constants
    executes map with constants
-    executes sort with ids and strings
    executes sort with ids and strings
-    executes splat
    executes splat
-    executes splat with splat
    executes splat with splat
-    executes [] with range
    executes [] with range
-    executes sort with numbers
    executes sort with numbers
-    executes first
    executes first
-    executes size
    executes size
-    executes [] with computed range
    executes [] with computed range
-    #-
-      with ArrayLiteral argument
-        removes the elements in RHS from LHS into a TupleLiteral
        removes the elements in RHS from LHS into a TupleLiteral
-      with TupleLiteral argument
-        removes the elements in RHS from LHS into a TupleLiteral
        removes the elements in RHS from LHS into a TupleLiteral
-    executes push
    executes push
-    executes join with strings
    executes join with strings
-    executes select
    executes select
-    #each_with_index
-      without the element argument
-        builds the correct array
        builds the correct array
-      without the index argument
-        builds the correct array
        builds the correct array
-      with both arguments
-        builds the correct array
        builds the correct array
-      without either argument
-        builds the correct array
        builds the correct array
-    #each
    #each
-    executes any? (false)
    executes any? (false)
-    executes uniq
    executes uniq
-    creates a tuple literal with a var
    creates a tuple literal with a var
-    executes [] with incomplete range
    executes [] with incomplete range
-    executes last
    executes last
-    executes reject
    executes reject
-    executes is_a?
    executes is_a?
-    executes [] with 0
    executes [] with 0
-    executes [] out of bounds
    executes [] out of bounds
-    executes sort with ids
    executes sort with ids
-    executes all? (true)
    executes all? (true)
-    executes map
    executes map
-    executes empty?
    executes empty?
-    #map_with_index
-      without the element argument
-        returns the resulting tuple
        returns the resulting tuple
-      without the index argument
-        returns the resulting tuple
        returns the resulting tuple
-      without either argument
-        returns the resulting tuple
        returns the resulting tuple
-      with both arguments
-        returns the resulting tuple
        returns the resulting tuple
-    executes splat with arg
    executes splat with arg
-    executes map with arg
    executes map with arg
-    executes sort with strings
    executes sort with strings
-    executes any? (true)
    executes any? (true)
-    executes find (doesn't find)
    executes find (doesn't find)
-    executes unshift
    executes unshift
-    #+
-      with TupleLiteral argument
-        concatenates the literals into a TupleLiteral
        concatenates the literals into a TupleLiteral
-      with ArrayLiteral argument
-        concatenates the literals into a TupleLiteral
        concatenates the literals into a TupleLiteral
-    executes all? (false)
    executes all? (false)
-    executes join
    executes join
-    executes find (finds)
    executes find (finds)
-    executes [] with 1
    executes [] with 1
-  compares versions
  compares versions
-  Crystal::MacroLiteral
-    executes value
    executes value
-  regex methods
-    executes source
    executes source
-    executes options
    executes options
-  classvar methods
-    executes name
    executes name
-  executes assign
  executes assign
-  Crystal::EnumDef
-    executes body
    executes body
-    executes base_type
    executes base_type
-    executes name
    executes name
-    executes kind
    executes kind
-  control expression methods
-    executes exp
    executes exp
-    executes exp (nop)
    executes exp (nop)
-  Crystal::TypeDef
-    executes name
    executes name
-    executes type
    executes type
-  node methods
-    #doc
-      returns the call's docs if present (wants_doc = true)
      returns the call's docs if present (wants_doc = true)
-      returns a multiline comment
      returns a multiline comment
-      returns an empty string if there are no docs on the node (wants_doc = false)
      returns an empty string if there are no docs on the node (wants_doc = false)
-    executes == on numbers (true)
    executes == on numbers (true)
-    executes == on symbols (true) (#240)
    executes == on symbols (true) (#240)
-    id
-      expands macro with id call on call
      expands macro with id call on call
-      expands macro with id call on char
      expands macro with id call on char
-      expands macro with id call on global path
      expands macro with id call on global path
-      expands macro with id call on string
      expands macro with id call on string
-      expands macro with id call on symbol
      expands macro with id call on symbol
-      expands macro with id call on number
      expands macro with id call on number
-      expands macro with id call on path
      expands macro with id call on path
-    executes == on numbers (false)
    executes == on numbers (false)
-    executes != on numbers (true)
    executes != on numbers (true)
-    location
-      line_number
      line_number
-      end line_number
      end line_number
-      end column number
      end column number
-      column number
      column number
-      filename
      filename
-    symbolize
-      expands macro with symbolize call on string
      expands macro with symbolize call on string
-      expands macro with symbolize call on symbol
      expands macro with symbolize call on symbol
-      expands macro with symbolize call on id
      expands macro with symbolize call on id
-    #nil?
-      Nop
      Nop
-      NilLiteral
      NilLiteral
-      NumberLiteral
      NumberLiteral
-    class_name
-      executes class_name
      executes class_name
-      executes class_name
      executes class_name
-      executes class_name
      executes class_name
-      executes class_name
      executes class_name
-      executes class_name
      executes class_name
-      executes class_name
      executes class_name
-    executes == on symbols (false) (#240)
    executes == on symbols (false) (#240)
-    stringify
-      expands macro with stringify call on number
      expands macro with stringify call on number
-      expands macro with stringify call on symbol
      expands macro with stringify call on symbol
-      expands macro with stringify call on call
      expands macro with stringify call on call
-      expands macro with stringify call on string
      expands macro with stringify call on string
-    #is_a?
-      union argument, contains NoReturn
      union argument, contains NoReturn
-      union argument, undefined types
      union argument, undefined types
-      union argument
      union argument
-      union argument, duplicate type
      union argument, duplicate type
-      union argument, mergeable
      union argument, mergeable
-      union argument, unimplemented types
      union argument, unimplemented types
-    executes != on numbers (false)
    executes != on numbers (false)
-    #doc_comment
-      returns an empty MacroId if there are no docs on the node (wants_doc = false)
      returns an empty MacroId if there are no docs on the node (wants_doc = false)
-      ensures each newline has a `#` prefix
      ensures each newline has a `#` prefix
-      returns the call's docs if present as a MacroId (wants_doc = true)
      returns the call's docs if present as a MacroId (wants_doc = true)
-  offsetof methods
-    executes offset
    executes offset
-    executes type
    executes type
-  executes assign without output
  executes assign without output
-  nilable cast methods
-    executes obj
    executes obj
-    executes to
    executes to
-  arg methods
-    executes default_value
    executes default_value
-    executes name
    executes name
-    executes internal_name
    executes internal_name
-    executes restriction
    executes restriction
-  unary expression methods
-    executes exp
    executes exp
-    executes is_a?
    executes is_a?
-  require methods
-    executes path
    executes path
-  yield methods
-    executes scope (nop)
    executes scope (nop)
-    executes expressions
    executes expressions
-    executes scope
    executes scope
-  Crystal::MacroExpression
-    executes output?
    executes output?
-    executes exp
    executes exp
-  macro if methods
-    executes cond
    executes cond
-    executes then
    executes then
-    executes else
    executes else
-  or methods
-    executes left
    executes left
-    executes right
    executes right
-  while methods
-    executes cond
    executes cond
-    executes body
    executes body
-  Crystal::Primitive
-    executes name
    executes name
-  readinstancevar methods
-    executes obj
    executes obj
-    executes name
    executes name
-  Crystal::CStructOrUnionDef
-    executes name
    executes name
-    executes body
    executes body
-    executes kind
    executes kind
-    executes union?
    executes union?
-  Crystal::MacroVar
-    executes name
    executes name
-    executes expressions
    executes expressions
-  Crystal::AsmOperand
-    executes constraint
    executes constraint
-    executes exp
    executes exp
-  macro methods
-    executes name
    executes name
-    executes double_splat
    executes double_splat
-    executes args
    executes args
-    executes splat_index
    executes splat_index
-    executes block_arg
    executes block_arg
-    executes visibility
    executes visibility
-    executes body
    executes body
-  macro for methods
-    executes exp
    executes exp
-    executes vars
    executes vars
-    executes body
    executes body
-  Crystal::FunDef
-    executes real_name
    executes real_name
-    executes has_body?
    executes has_body?
-    executes args
    executes args
-    executes name
    executes name
-    executes body
    executes body
-    executes variadic?
    executes variadic?
-    executes return_type
    executes return_type
-  union methods
-    executes resolve
    executes resolve
-    executes resolve?
    executes resolve?
-    executes types
    executes types
-  string methods
-    executes camelcase with invalid lower arg type
    executes camelcase with invalid lower arg type
-    executes string != string
    executes string != string
-    executes to_i
    executes to_i
-    executes gsub
    executes gsub
-    executes string > macroid
    executes string > macroid
-    executes [] with inclusive range
    executes [] with inclusive range
-    executes camelcase
    executes camelcase
-    executes string starts_with? string (true)
    executes string starts_with? string (true)
-    executes string == string
    executes string == string
-    executes split with argument
    executes split with argument
-    executes string starts_with? string (false)
    executes string starts_with? string (false)
-    executes string includes? string (true)
    executes string includes? string (true)
-    executes [] with incomplete range
    executes [] with incomplete range
-    executes chars
    executes chars
-    executes to_utf16
    executes to_utf16
-    executes size
    executes size
-    executes string > string
    executes string > string
-    executes string + char
    executes string + char
-    executes upcase
    executes upcase
-    executes strip
    executes strip
-    executes string includes? char (false)
    executes string includes? char (false)
-    executes underscore
    executes underscore
-    executes string < string
    executes string < string
-    executes camelcase with lower
    executes camelcase with lower
-    executes string + string
    executes string + string
-    executes string < macroid
    executes string < macroid
-    executes string includes? string (false)
    executes string includes? string (false)
-    executes string chomp
    executes string chomp
-    executes [] with computed range
    executes [] with computed range
-    executes string ends_with? string (true)
    executes string ends_with? string (true)
-    executes count
    executes count
-    executes downcase
    executes downcase
-    executes lines
    executes lines
-    executes string starts_with? char (true)
    executes string starts_with? char (true)
-    executes empty
    executes empty
-    executes string includes? char (true)
    executes string includes? char (true)
-    executes split with char argument
    executes split with char argument
-    executes string =~ (true)
    executes string =~ (true)
-    executes string =~ (false)
    executes string =~ (false)
-    executes string ends_with? string (false)
    executes string ends_with? string (false)
-    executes [] with exclusive range
    executes [] with exclusive range
-    executes split without arguments
    executes split without arguments
-    executes string ends_with? char (true)
    executes string ends_with? char (true)
-    executes capitalize
    executes capitalize
-    executes string starts_with? char (false)
    executes string starts_with? char (false)
-    executes titleize
    executes titleize
-    executes to_i(base)
    executes to_i(base)
-    executes tr
    executes tr
-    executes string ends_with? char (false)
    executes string ends_with? char (false)
-  visibility modifier methods
-    executes exp
    executes exp
-    executes visibility
    executes visibility
-  if methods
-    executes then
    executes then
-    executes cond
    executes cond
-    executes else
    executes else
-    executes else (nop)
    executes else (nop)
-  annotation methods
-    executes [] with other ASTNode, but raises an error
    executes [] with other ASTNode, but raises an error
-    executes [] with SymbolLiteral
    executes [] with SymbolLiteral
-    executes name
    executes name
-    executes [] with MacroId
    executes [] with MacroId
-    executes [] with NumberLiteral
    executes [] with NumberLiteral
-    executes [] with StringLiteral
    executes [] with StringLiteral
-  splat methods
-    executes exp
    executes exp
-  uninitialized var methods
-    executes var
    executes var
-    executes type
    executes type
-  Crystal::Asm
-    executes inputs
    executes inputs
-    executes alignstack?
    executes alignstack?
-    executes can_throw?
    executes can_throw?
-    executes clobbers
    executes clobbers
-    executes intel?
    executes intel?
-    executes text
    executes text
-    executes outputs
    executes outputs
-    executes volatile?
    executes volatile?
-  printing
-    print
    print
-    p!
    p!
-    pp!
    pp!
-    puts
    puts
-    pp
    pp
-    p
    p
-  proc pointer methods
-    executes args when empty
    executes args when empty
-    executes args when not empty
    executes args when not empty
-    executes obj when present
    executes obj when present
-    executes global?
    executes global?
-    executes obj when absent
    executes obj when absent
-    executes name
    executes name
-  Crystal::ExternalVar
-    executes type
    executes type
-    executes name
    executes name
-    executes real_name
    executes real_name
-  assign methods
-    executes target
    executes target
-    executes value
    executes value
-  #parse_type
-    raises on extra unparsed tokens after the type
    raises on extra unparsed tokens after the type
-    generic
    generic
-    exposes syntax warnings
    exposes syntax warnings
-    path
    path
-    raises on extra unparsed tokens before the type
    raises on extra unparsed tokens before the type
-    union - |
    union - |
-    union - in generic
    union - in generic
-    metaclass
    metaclass
-    raises on non StringLiteral arguments
    raises on non StringLiteral arguments
-    proc
    proc
-    union - Union
    union - Union
-    raises on empty string
    raises on empty string
-  generic methods
-    executes resolve
    executes resolve
-    executes type_vars
    executes type_vars
-    executes types
    executes types
-    executes name
    executes name
-    executes named_args
    executes named_args
-    executes resolve?
    executes resolve?
-  cast methods
-    executes to
    executes to
-    executes obj
    executes obj
-  Crystal::TypeNode
-    executes instance
    executes instance
-    executes class_vars on symbol type
    executes class_vars on symbol type
-    #union?
-      false
      false
-      true
      true
-    executes >=
    executes >=
-    executes instance_vars
    executes instance_vars
-    #nilable?
-      true
      true
-      false
      false
-    executes ==
    executes ==
-    #name
-      simple type
-        returns the name of the type
        returns the name of the type
-      generic instance
-        does not print extra commas for empty splat type var (2)
        does not print extra commas for empty splat type var (2)
-        prints generic type arguments
        prints generic type arguments
-        prints empty splat type var
        prints empty splat type var
-        does not print extra commas for empty splat type var (3)
        does not print extra commas for empty splat type var (3)
-        prints multiple arguments for splat type var
        prints multiple arguments for splat type var
-        does not print extra commas for empty splat type var (1)
        does not print extra commas for empty splat type var (1)
-      namespaced type
-        should return the FQN of the type
        should return the FQN of the type
-      generic type
-        includes the generic_args of the instantiated type by default
        includes the generic_args of the instantiated type by default
-        includes the generic_args of the type by default
        includes the generic_args of the type by default
-      generic_args
-        true
-          includes the generic_args of the instantiated type
          includes the generic_args of the instantiated type
-          includes the generic_args of the type
          includes the generic_args of the type
-        false
-          does not include the generic_args of the type
          does not include the generic_args of the type
-          does not include the generic_args of the instantiated type
          does not include the generic_args of the instantiated type
-        with an invalid type argument
-          should raise the proper exception
          should raise the proper exception
-    executes methods
    executes methods
-    public?
-      false
      false
-      true
      true
-    executes resolve
    executes resolve
-    executes class vars (with inheritance)
    executes class vars (with inheritance)
-    visibility
-      public
      public
-      private
      private
-    #warning
-      emits a warning at a specific node
      emits a warning at a specific node
-    executes ancestors
    executes ancestors
-    #abstract?
-      Crystal::GenericClassType
-        struct
-          non-abstract
          non-abstract
-          abstract
          abstract
-        class
-          non-abstract
          non-abstract
-          abstract
          abstract
-      Crystal::NonGenericClassType
-        class
-          abstract
          abstract
-          non-abstract
          non-abstract
-        struct
-          abstract
          abstract
-          non-abstract
          non-abstract
-      Crystal::GenericModuleType
      Crystal::GenericModuleType
-      Crystal::NonGenericModuleType
      Crystal::NonGenericModuleType
-    #id
-      does not include trailing + for virtual type
      does not include trailing + for virtual type
-    executes instance_vars on symbol type
    executes instance_vars on symbol type
-    executes union_types (union)
    executes union_types (union)
-    executes superclass
    executes superclass
-    executes size of tuple
    executes size of tuple
-    executes <
    executes <
-    executes class vars
    executes class vars
-    #has_inner_pointers?
-      works on structs
      works on structs
-      works on primitive values
      works on primitive values
-      works on ReferenceStorage
      works on ReferenceStorage
-      works on references
      works on references
-    #struct?
-      Crystal::GenericModuleType
      Crystal::GenericModuleType
-      Crystal::GenericClassType
-        class
        class
-        struct
        struct
-      Crystal::NonGenericModuleType
      Crystal::NonGenericModuleType
-      Crystal::NonGenericClassType
-        struct
        struct
-        class
        class
-    executes class_vars on metaclass
    executes class_vars on metaclass
-    executes <=
    executes <=
-    executes resolve?
    executes resolve?
-    executes class methods
    executes class methods
-    executes >
    executes >
-    executes private?
-      false
      false
-      true
      true
-    executes class
    executes class
-    executes !=
    executes !=
-    executes size of tuple metaclass
    executes size of tuple metaclass
-    #class?
-      Crystal::NonGenericClassType
-        class
        class
-        struct
        struct
-      Crystal::GenericClassType
-        struct
        struct
-        class
        class
-      Crystal::GenericModuleType
      Crystal::GenericModuleType
-      Crystal::NonGenericModuleType
      Crystal::NonGenericModuleType
-    executes instance_vars on metaclass
    executes instance_vars on metaclass
-    executes type_vars
    executes type_vars
-    #module?
-      Crystal::NonGenericModuleType
      Crystal::NonGenericModuleType
-      Crystal::GenericClassType
-        struct
        struct
-        class
        class
-      Crystal::GenericModuleType
      Crystal::GenericModuleType
-      Crystal::NonGenericClassType
-        struct
        struct
-        class
        class
-    executes union_types (non-union)
    executes union_types (non-union)
-    #includers
-      returns an array of types `self` is directly included in
      returns an array of types `self` is directly included in
-    == and != devirtualize generic type arguments (#10730)
    == and != devirtualize generic type arguments (#10730)
-    executes ancestors (with generic)
    executes ancestors (with generic)
-  Crystal::LibDef
-    executes name
    executes name
-    executes body
    executes body
-    executes kind
    executes kind
-  proc literal methods
-    executes body
    executes body
-    executes args
    executes args
-    executes return_type
    executes return_type
-  path methods
-    executes names
    executes names
-    executes global?
    executes global?
-    executes resolve
    executes resolve
-    executes types
    executes types
-    executes global
    executes global
-    executes resolve?
    executes resolve?
-  Crystal::RangeLiteral
-    executes map
    executes map
-    executes to_a
    executes to_a
-    #each
    #each
-    executes begin
    executes begin
-    executes end
    executes end
-    executes excludes_end?
    executes excludes_end?
-  Crystal::ModuleDef
-    executes body
    executes body
-    executes splat_index
    executes splat_index
-    executes name
    executes name
-    executes kind
    executes kind
-    executes type_vars
    executes type_vars
-  metaclass methods
-    executes resolve
    executes resolve
-    executes resolve?
    executes resolve?
-    executes instance
    executes instance
-  block methods
-    executes body
    executes body
-    executes splat_index
    executes splat_index
-    executes args
    executes args
-  exception handler methods
-    executes else
    executes else
-    executes rescues
    executes rescues
-    executes ensure
    executes ensure
-    executes ensure (nop)
    executes ensure (nop)
-    executes rescue body
    executes rescue body
-    executes rescue name
    executes rescue name
-    executes rescue types
    executes rescue types
-    executes else (nop)
    executes else (nop)
-    executes body
    executes body
-  Crystal::NamedTupleLiteral
-    executes map
    executes map
-    executes size
    executes size
-    executes values
    executes values
-    executes double splat
    executes double splat
-    executes empty?
    executes empty?
-    executes to_a
    executes to_a
-    executes [] not found
    executes [] not found
-    executes keys
    executes keys
-    executes double splat
    executes double splat
-    executes has_key?
    executes has_key?
-    creates a named tuple literal with a var
    creates a named tuple literal with a var
-    executes double splat with arg
    executes double splat with arg
-    executes []=
    executes []=
-    executes []
    executes []
-    #each
-      without the key argument
-        builds the correct array
        builds the correct array
-      without the value argument
-        builds the correct array
        builds the correct array
-      with both arguments
-        builds the correct array
        builds the correct array
-      without either argument
-        builds the correct array
        builds the correct array
-    executes [] with invalid key type
    executes [] with invalid key type
-    executes is_a?
    executes is_a?
-  flag?
-    has flag
    has flag
-    doesn't have flag
    doesn't have flag
-  expressions methods
-    executes expressions
    executes expressions
-  metavar methods
-    executes name
    executes name
-    executes id
    executes id
-    executes nothing
    executes nothing
-    executes is_a?
    executes is_a?
-  call methods
-    executes block
    executes block
-    executes block arg (nop)
    executes block arg (nop)
-    executes global?
    executes global?
-    executes receiver
    executes receiver
-    executes name
    executes name
-    executes block arg
    executes block arg
-    executes args
    executes args
-    executes named args name
    executes named args name
-    executes named args
    executes named args
-    executes named args value
    executes named args value
-  env
-    has key
    has key
-    doesn't have key
    doesn't have key
-  Crystal::Include
-    executes name
    executes name
-  char methods
-    executes ord
    executes ord
-  #warning
-    emits a top level warning
    emits a top level warning
-  global methods
-    executes name
    executes name
-  Crystal::ClassDef
-    executes body
    executes body
-    executes splat_index
    executes splat_index
-    executes struct?
    executes struct?
-    executes superclass
    executes superclass
-    executes type_vars
    executes type_vars
-    executes abstract?
    executes abstract?
-    executes kind
    executes kind
-    executes name
    executes name
-  Crystal::Extend
-    executes name
    executes name
-  number methods
-    executes > (false)
    executes > (false)
-    executes //
    executes //
-    executes ^
    executes ^
-    executes > (true)
    executes > (true)
-    executes unary -
    executes unary -
-    executes >>
    executes >>
-    executes <=>
    executes <=>
-    executes kind
    executes kind
-    executes < (true)
    executes < (true)
-    executes **
    executes **
-    executes <<
    executes <<
-    preserves integer size (#10713)
    preserves integer size (#10713)
-    executes +
    executes +
-    executes %
    executes %
-    executes < (false)
    executes < (false)
-    executes unary ~
    executes unary ~
-    executes -
    executes -
-    executes unary +
    executes unary +
-    executes >= (true)
    executes >= (true)
-    executes <= (true)
    executes <= (true)
-    executes math operations using U/Int128
    executes math operations using U/Int128
-    executes <= (false)
    executes <= (false)
-    executes <=> (returns nil)
    executes <=> (returns nil)
-    executes |
    executes |
-    executes + and preserves type
    executes + and preserves type
-    executes *
    executes *
-    #to_number
    #to_number
-    executes + with float
    executes + with float
-    executes >= (false)
    executes >= (false)
-    executes &
    executes &
-  multi_assign methods
-    executes values
    executes values
-    executes targets
    executes targets
-  Crystal::Alias
-    executes type
    executes type
-    executes name
    executes name
-  is_a methods
-    executes arg
    executes arg
-    executes receiver
    executes receiver
-  Crystal::Select
-    executes whens
    executes whens
-    executes else
    executes else
-  Crystal::AnnotationDef
-    executes kind
    executes kind
-    executes body
    executes body
-    executes name
    executes name
-  instancevar methods
-    executes name
    executes name
-  def methods
-    executes abstract?
    executes abstract?
-    executes receiver
    executes receiver
-    executes return_type
    executes return_type
-    executes accepts_block?
    executes accepts_block?
-    executes splat_index
    executes splat_index
-    executes visibility
    executes visibility
-    executes block_arg
    executes block_arg
-    executes body
    executes body
-    executes args
    executes args
-    executes name
    executes name
-    executes double_splat
    executes double_splat
-    executes free_vars
    executes free_vars
-  Crystal::HashLiteral
-    executes has_key?
    executes has_key?
-    executes to_a
    executes to_a
-    executes of_value (nop)
    executes of_value (nop)
-    executes type
    executes type
-    executes values
    executes values
-    executes keys
    executes keys
-    creates a hash literal with a var
    creates a hash literal with a var
-    executes [] not found
    executes [] not found
-    executes of_key (nop)
    executes of_key (nop)
-    executes type (nop)
    executes type (nop)
-    executes of_key
    executes of_key
-    executes double splat with arg
    executes double splat with arg
-    #each
-      without the key argument
-        builds the correct array
        builds the correct array
-      without either argument
-        builds the correct array
        builds the correct array
-      with both arguments
-        builds the correct array
        builds the correct array
-      without the value argument
-        builds the correct array
        builds the correct array
-    executes is_a?
    executes is_a?
-    executes []
    executes []
-    executes size
    executes size
-    executes map
    executes map
-    executes []=
    executes []=
-    executes of_value
    executes of_value
-    executes empty?
    executes empty?
-    executes double splat
    executes double splat
-    executes double splat
    executes double splat
-  case methods
-    when
-      executes when exhaustive?
      executes when exhaustive?
-      executes cond
      executes cond
-      executes exhaustive?
      executes exhaustive?
-      executes whens
      executes whens
-      executes when conds
      executes when conds
-      executes when body
      executes when body
-      executes else
      executes else
-    in
-      executes when exhaustive?
      executes when exhaustive?
-      executes exhaustive?
      executes exhaustive?
-      executes whens
      executes whens
-Code gen: or
-  codegens or with bool false and true
  codegens or with bool false and true
-  codegens or with bool union as left node 3
  codegens or with bool union as left node 3
-  codegens or with nilable as left node 1
  codegens or with nilable as left node 1
-  codegens or with bool false and false
  codegens or with bool false and false
-  codegens or with non-false union as left node
  codegens or with non-false union as left node
-  codegens or with bool union as left node 1
  codegens or with bool union as left node 1
-  codegens or with bool union as left node 1
  codegens or with bool union as left node 1
-  codegens or with primitive type other than bool with union
  codegens or with primitive type other than bool with union
-  codegens or with bool union as left node 2
  codegens or with bool union as left node 2
-  codegens or with nilable as left node 2
  codegens or with nilable as left node 2
-  codegens or with primitive type other than bool
  codegens or with primitive type other than bool
-  codegens or with bool union as left node 4
  codegens or with bool union as left node 4
-  codegens or with bool true and true
  codegens or with bool true and true
-  codegens or with bool true and false
  codegens or with bool true and false
-  codegens or with bool union as left node 2
  codegens or with bool union as left node 2
-  codegens or with primitive type other than bool
  codegens or with primitive type other than bool
-  codegens or with bool and int 2
  codegens or with bool and int 2
-  codegens or with bool union as left node 3
  codegens or with bool union as left node 3
-  codegens or with nil union as left node 2
  codegens or with nil union as left node 2
-  codegens or with bool and int 1
  codegens or with bool and int 1
-  codegens or with nil union as left node 1
  codegens or with nil union as left node 1
-Semantic: nilable instance var
-  says self was used before instance var was initialized (3)
  says self was used before instance var was initialized (3)
-  says self was used before instance var was initialized (2)
  says self was used before instance var was initialized (2)
-  says instance var was not initialized in all of the initialize methods (2)
  says instance var was not initialized in all of the initialize methods (2)
-  says instance var was not initialized in all of the initialize methods, with var declaration
  says instance var was not initialized in all of the initialize methods, with var declaration
-  marks instance var as nilable if assigned inside proc literal
  marks instance var as nilable if assigned inside proc literal
-  doesn't consider as nil if initialized with catch-all
  doesn't consider as nil if initialized with catch-all
-  says instance var was used before initialized
  says instance var was used before initialized
-  says instance var was used before initialized (2)
  says instance var was used before initialized (2)
-  finds type that doesn't initialize instance var (#1222)
  finds type that doesn't initialize instance var (#1222)
-  marks instance var as nilable if assigned inside captured block (#1696)
  marks instance var as nilable if assigned inside captured block (#1696)
-  says instance var was not initialized in all of the initialize methods
  says instance var was not initialized in all of the initialize methods
-  says self was used before instance var was initialized
  says self was used before instance var was initialized
-Code gen: and
-  codegens assign in right node, after if must be nilable
  codegens assign in right node, after if must be nilable
-  codegens and with primitive type other than bool with union
  codegens and with primitive type other than bool with union
-  codegens and with bool union as left node 1
  codegens and with bool union as left node 1
-  codegens assign in right node, inside if must not be nil
  codegens assign in right node, inside if must not be nil
-  codegens and with bool union as left node 3
  codegens and with bool union as left node 3
-  codegens and with bool true and true
  codegens and with bool true and true
-  codegens and with bool false and false
  codegens and with bool false and false
-  codegens and with nil union as left node 1
  codegens and with nil union as left node 1
-  codegens and with bool union as left node 3
  codegens and with bool union as left node 3
-  codegens and with primitive type other than bool
  codegens and with primitive type other than bool
-  codegens assign in right node, after must be nilable
  codegens assign in right node, after must be nilable
-  codegens and with bool union as left node 2
  codegens and with bool union as left node 2
-  codegens and with bool and int 2
  codegens and with bool and int 2
-  codegens and with bool false and true
  codegens and with bool false and true
-  codegens and with bool union as left node 2
  codegens and with bool union as left node 2
-  codegens and with nil union as left node 2
  codegens and with nil union as left node 2
-  codegens and with bool union as left node 1
  codegens and with bool union as left node 1
-  codegens and with nilable as left node 2
  codegens and with nilable as left node 2
-  codegens and with bool true and false
  codegens and with bool true and false
-  codegens and with bool and int 1
  codegens and with bool and int 1
-  codegens and with non-false union as left node
  codegens and with non-false union as left node
-  codegens and with nilable as left node 1
  codegens and with nilable as left node 1
-  codegens and with primitive type other than bool
  codegens and with primitive type other than bool
-  codegens and with bool union as left node 4
  codegens and with bool union as left node 4
-Crystal::Doc::MarkdDocRenderer
-  renders code spans
-    renders "`<style>`"
    renders "`<style>`"
-  renders headline
-    renders "## Foo Bar"
    renders "## Foo Bar"
-    renders "## Foo Bar\n### Sub\n## Bar Baz\n### Sub"
    renders "## Foo Bar\n### Sub\n## Bar Baz\n### Sub"
-  renders code blocks
-    renders "```cr\nHello\nWorld\n```"
    renders "```cr\nHello\nWorld\n```"
-    renders "```\nHello\nWorld\n```"
    renders "```\nHello\nWorld\n```"
-    renders "```crystal\nHello\nWorld\n```"
    renders "```crystal\nHello\nWorld\n```"
-  renders html
-    renders "<h1 align=\"center\">Foo</h1>"
    renders "<h1 align=\"center\">Foo</h1>"
-  renders links
-    renders "[`Foo`](http://example.com/foo)"
    renders "[`Foo`](http://example.com/foo)"
-    renders "[foo](http://example.com/foo)"
    renders "[foo](http://example.com/foo)"
-    renders "[filter](https://docs.celestine.dev/Celestine/Meta/Context.html#filter(&block:Celestine::Filter-%3ECelestine::Filter)-instance-method)"
    renders "[filter](https://docs.celestine.dev/Celestine/Meta/Context.html#filter(&block:Celestine::Filter-%3ECelestine::Filter)-instance-method)"
-  expand_code_links
-    finds method with unspecified args
    finds method with unspecified args
-    finds method of an absolute type
    finds method of an absolute type
-    finds operator method with unspecified args
    finds operator method with unspecified args
-    finds sibling methods
    finds sibling methods
-    finds multiple kinds of things
    finds multiple kinds of things
-    finds absolute type
    finds absolute type
-    finds sibling methods with self receiver
    finds sibling methods with self receiver
-    does not break when referencing lib type (#9928)
    does not break when referencing lib type (#9928)
-    finds operator method
    finds operator method
-    matches methods on single-character class names
    matches methods on single-character class names
-    finds method with question mark
    finds method with question mark
-    finds nested type
    finds nested type
-    doesn't find method with wrong number of args
    doesn't find method with wrong number of args
-    doesn't find sibling methods of wrong type
    doesn't find sibling methods of wrong type
-    finds types from nested
    finds types from nested
-    finds method with exclamation mark
    finds method with exclamation mark
-    finds types from base
    finds types from base
-    finds method with args even with empty brackets
    finds method with args even with empty brackets
-    doesn't find parents' methods
    doesn't find parents' methods
-    doesn't find wrong absolute type
    doesn't find wrong absolute type
-    finds multiple methods with brackets
    finds multiple methods with brackets
-    doesn't find substrings for methods
    doesn't find substrings for methods
-    doesn't find parents' methods
    doesn't find parents' methods
-    finds methods of a type
    finds methods of a type
-    finds method with args
    finds method with args
-    doesn't find type not at word boundary
    doesn't find type not at word boundary
-    doesn't find wrong kind of methods
    doesn't find wrong kind of methods
-    doesn't match with different separator
    doesn't match with different separator
-    finds method with zero args
    finds method with zero args
-    doesn't find sibling methods with fake receiver
    doesn't find sibling methods with fake receiver
-    doesn't find method with wrong number of args
    doesn't find method with wrong number of args
-    finds constant
    finds constant
-    finds sibling methods
    finds sibling methods
-    doesn't find wrong kind of sibling methods
    doesn't find wrong kind of sibling methods
-    doesn't spuriously match range literals
    doesn't spuriously match range literals
-Semantic: nilable cast
-  types as? with union
  types as? with union
-  types as?
  types as?
-  does upcast
  does upcast
-  doesn't introduce type filter for nilable cast object (#12661)
  doesn't introduce type filter for nilable cast object (#12661)
-  casts to module
  casts to module
-  types as? with nil
  types as? with nil
-  doesn't crash with typeof no-type (#7441)
  doesn't crash with typeof no-type (#7441)
-  types as? with NoReturn
  types as? with NoReturn
-Semantic: def
-  allows recursion with arg
  allows recursion with arg
-  says can only defined def on types and self
  says can only defined def on types and self
-  reports no overload matches 2
  reports no overload matches 2
-  uses free variable and doesn't conflict with top-level type
  uses free variable and doesn't conflict with top-level type
-  errors when calling two functions with nil type
  errors when calling two functions with nil type
-  types call with global scope
  types call with global scope
-  reports no overload matches
  reports no overload matches
-  types putchar with Char
  types putchar with Char
-  shows free variables if no overload matches
  shows free variables if no overload matches
-  can't use self in toplevel method
  can't use self in toplevel method
-  uses free variable as block return type
  uses free variable as block return type
-  gives correct error for wrong number of arguments for program call inside type (#1024)
  gives correct error for wrong number of arguments for program call inside type (#1024)
-  points error at name (#6937)
  points error at name (#6937)
-  errors when default value is incompatible with type restriction
  errors when default value is incompatible with type restriction
-  types a call with an argument uses a new scope
  types a call with an argument uses a new scope
-  do not use body for the def type
  do not use body for the def type
-  defines class method
  defines class method
-  lookups methods in super modules
  lookups methods in super modules
-  says compile-time type on error
  says compile-time type on error
-  gives correct error for methods in Class (2)
  gives correct error for methods in Class (2)
-  types a call with an argument
  types a call with an argument
-  assigns def owner
  assigns def owner
-  defines class method with self
  defines class method with self
-  errors if return type doesn't match
  errors if return type doesn't match
-  types simple recursion 2
  types simple recursion 2
-  types a call with an int
  types a call with an int
-  gives correct error for methods in Class
  gives correct error for methods in Class
-  reports no block given
  reports no block given
-  is ok if returns Int32? with explicit return
  is ok if returns Int32? with explicit return
-  errors when default value is incompatible with non-type restriction
  errors when default value is incompatible with non-type restriction
-  types mutual infinite recursion
  types mutual infinite recursion
-  errors if return type doesn't match on instance method
  errors if return type doesn't match on instance method
-  types a call with a float
  types a call with a float
-  types getchar with Char
  types getchar with Char
-  uses free variable
  uses free variable
-  types simple recursion
  types simple recursion
-  types empty body def
  types empty body def
-  errors if declares def inside if
  errors if declares def inside if
-  allows recursion
  allows recursion
-  doesn't find type in namespace through free var
  doesn't find type in namespace through free var
-  errors if trying to declare method on generic class instance
  errors if trying to declare method on generic class instance
-  types call with union argument
  types call with union argument
-  types a call with a double
  types a call with a double
-  accesses free var of default argument (#1101)
  accesses free var of default argument (#1101)
-  clones regex literal value (#2384)
  clones regex literal value (#2384)
-  fixes bug #165
  fixes bug #165
-  reports block given
  reports block given
-  uses free variable with metaclass
  uses free variable with metaclass
-  errors if return type doesn't match on class method
  errors if return type doesn't match on class method
-  gives correct error for wrong number of arguments for program call inside type (2) (#1024)
  gives correct error for wrong number of arguments for program call inside type (2) (#1024)
-  types a call with an argument
  types a call with an argument
-  types mutual recursion
  types mutual recursion
-  uses free variable with metaclass and default value
  uses free variable with metaclass and default value
-  calls with default argument
  calls with default argument
-  reports undefined method
  reports undefined method
-cleanup
-  strip named-tuple elements after unreachable element
  strip named-tuple elements after unreachable element
-  errors if assigning instance var to itself
  errors if assigning instance var to itself
-  strip tuple elements after unreachable element
  strip tuple elements after unreachable element
-  errors if assigning var to itself
  errors if assigning var to itself
-Crystal::Repl::Interpreter
-  classes
-    does allocate, set instance var and get instance var
    does allocate, set instance var and get instance var
-    calls implicit struct self method
    calls implicit struct self method
-    does constructor
    does constructor
-    calls explicit struct self method
    calls explicit struct self method
-    discards allocate
    discards allocate
-    does object_id
    does object_id
-    calls implicit class self method
    calls implicit class self method
-    interprets read instance var
    interprets read instance var
-  downcasts virtual type to its only type (#12351)
  downcasts virtual type to its only type (#12351)
-  inlines instance var access from virtual type with a single type (#39520)
  inlines instance var access from virtual type with a single type (#39520)
-Semantic: yield with scope
-  uses method of enclosing scope
  uses method of enclosing scope
-  yields virtual type (#2171) (2)
  yields virtual type (#2171) (2)
-  uses instance variable of enclosing scope
  uses instance variable of enclosing scope
-  generate right code when yielding struct as scope
  generate right code when yielding struct as scope
-  uses scope in instance method  uses scope in instance method  uses scope in instance method  uses scope in instance method  uses scope in instance method  uses scope in instance method������������  uses scope in instance method��  uses scope in instance method��  uses scope in instance method
  uses scope in instance method
-  yields with dispatch (#2171) (1)
  yields with dispatch (#2171) (1)
-  doesn't explode if specifying &block but never using it (#181)
  doesn't explode if specifying &block but never using it (#181)
-  it uses self for instance method  it uses self for instance method  it uses self for instance method  it uses self for instance method  it uses self for instance method  it uses self for instance method  it uses self for instance method��������������  it uses self for instance method��  it uses self for instance method
  it uses self for instance method
-  uses scope in global method  uses scope in global method  uses scope in global method  uses scope in global method  uses scope in global method  uses scope in global method  uses scope in global method������������  uses scope in global method����  uses scope in global method
  uses scope in global method
-  uses method of with object
  uses method of with object
-  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope  it invokes global method inside block of yield scope��������������  it invokes global method inside block of yield scope��  it invokes global method inside block of yield scope
  it invokes global method inside block of yield scope
-Semantic: did you mean
-  says did you mean finds most similar in type
  says did you mean finds most similar in type
-  says did you mean for instance var
  says did you mean for instance var
-  says did you mean for named argument
  says did you mean for named argument
-  doesn't suggest for operator
  doesn't suggest for operator
-  doesn't suggest when declaring var inside macro (#466)
  doesn't suggest when declaring var inside macro (#466)
-  suggest that there might be a typo for an initialize method
  suggest that there might be a typo for an initialize method
-  suggests a better alternative to logical operators (#2715)
  suggests a better alternative to logical operators (#2715)
-  says did you mean for one mistake in short word in instance method
  says did you mean for one mistake in short word in instance method
-  says did you mean for global method without parenthesis
  says did you mean for global method without parenthesis
-  says did you mean for class
  says did you mean for class
-  says did you mean finds most similar in def
  says did you mean finds most similar in def
-  says did you mean for global method with parenthesis
  says did you mean for global method with parenthesis
-  suggest that there might be a typo for an initialize method with overload
  suggest that there might be a typo for an initialize method with overload
-  says did you mean in instance var declaration
  says did you mean in instance var declaration
-  suggest that there might be a typo for an initialize method in inherited class
  suggest that there might be a typo for an initialize method in inherited class
-  doesn't suggest when declaring var with suffix if and using it (#946)
  doesn't suggest when declaring var with suffix if and using it (#946)
-  says did you mean for variable
  says did you mean for variable
-  says did you mean for two mistakes in long word in instance method
  says did you mean for two mistakes in long word in instance method
-  says did you mean for instance var in subclass
  says did you mean for instance var in subclass
-  suggests for class variable
  suggests for class variable
-  says did you mean for nested class
  says did you mean for nested class
-Block inference
-  ignores void return type (3) (#427)
  ignores void return type (3) (#427)
-  reports mismatch with generic argument type in input type
  reports mismatch with generic argument type in input type
-  allows yielding multiple types when a union is expected
  allows yielding multiple types when a union is expected
-  errors if using (Object ->) as block return type (#2358)
  errors if using (Object ->) as block return type (#2358)
-  errors if proc is not instantiated
  errors if proc is not instantiated
-  error with self output type doesn't match
  error with self output type doesn't match
-  errors if splat parameter becomes a union
  errors if splat parameter becomes a union
-  allows initialize with yield (#224)
  allows initialize with yield (#224)
-  ignores block parameter if not used
  ignores block parameter if not used
-  infers type of block before call
  infers type of block before call
-  types empty block
  types empty block
-  errors if declares module inside block
  errors if declares module inside block
-  correctly types unpacked tuple block arg after block (#3339)
  correctly types unpacked tuple block arg after block (#3339)
-  reports error on method instantiate (#4543)
  reports error on method instantiate (#4543)
-  reports error if yields a type that's not that one in the block specification
  reports error if yields a type that's not that one in the block specification
-  break without value has nil type
  break without value has nil type
-  does next from block without value
  does next from block without value
-  doesn't crash on #2531
  doesn't crash on #2531
-  passes &->f
  passes &->f
-  errors when using local variable with block parameter name
  errors when using local variable with block parameter name
-  yields in overload, matches type
  yields in overload, matches type
-  binds to proc, not only to its body (#1796)
  binds to proc, not only to its body (#1796)
-  maps block of union types to union types
  maps block of union types to union types
-  types bug with yield not_nil! that is never not nil
  types bug with yield not_nil! that is never not nil
-  errors if declares alias inside block
  errors if declares alias inside block
-  doesn't auto-unpack tuple, more args
  doesn't auto-unpack tuple, more args
-  infer type of local variable
  infer type of local variable
-  error with self input type doesn't match
  error with self input type doesn't match
-  ignores void return type (#427)
  ignores void return type (#427)
-  infer type with self block arg
  infer type with self block arg
-  yields splat
  yields splat
-  returns from proc literal
  returns from proc literal
-  auto-unpacks tuple, captured block
  auto-unpacks tuple, captured block
-  reports error if yields a type that later changes and that's not that one in the block specification
  reports error if yields a type that later changes and that's not that one in the block specification
-  does next from block with value
  does next from block with value
-  errors if declares lib inside block
  errors if declares lib inside block
-  sets captured block type to that of restriction with alias
  sets captured block type to that of restriction with alias
-  uses splat in block parameter, but not enough yield expressions
  uses splat in block parameter, but not enough yield expressions
-  infer type of block body
  infer type of block body
-  auto-unpacks tuple, too many args
  auto-unpacks tuple, too many args
-  uses splat in block parameter, many args
  uses splat in block parameter, many args
-  recalculates call that uses block arg output as free var
  recalculates call that uses block arg output as free var
-  checks block type with virtual type
  checks block type with virtual type
-  errors on recursive yield with non ProcNotation restriction (#6896)
  errors on recursive yield with non ProcNotation restriction (#6896)
-  uses block var with same name as local var
  uses block var with same name as local var
-  errors if declares macro inside block
  errors if declares macro inside block
-  errors if alias is not a fun type
  errors if alias is not a fun type
-  yields splat and non splat
  yields splat and non splat
-  uses block arg, too many parameters
  uses block arg, too many parameters
-  doesn't mix local var with block var, using break (#2314)
  doesn't mix local var with block var, using break (#2314)
-  uses free var in return type in captured block
  uses free var in return type in captured block
-  can infer block type given that the method has a return type (#7160)
  can infer block type given that the method has a return type (#7160)
-  preserves type filters in block
  preserves type filters in block
-  errors if declares def inside block
  errors if declares def inside block
-  reports error if missing arguments to yield
  reports error if missing arguments to yield
-  allows invoking method on a object of a captured block with a type that was never instantiated
  allows invoking method on a object of a captured block with a type that was never instantiated
-  finds type inside module in block
  finds type inside module in block
-  allows alias as block fun type
  allows alias as block fun type
-  ignores void return type (4)
  ignores void return type (4)
-  infer type of yield
  infer type of yield
-  respects block arg restriction when block has a splat parameter (#6473)
  respects block arg restriction when block has a splat parameter (#6473)
-  auto-unpacks tuple, too many args, captured block
  auto-unpacks tuple, too many args, captured block
-  errors if declares class inside block
  errors if declares class inside block
-  errors if declares extend inside block
  errors if declares extend inside block
-  renders expected block return type of a free variable on mismatch
  renders expected block return type of a free variable on mismatch
-  passes #233: block with initialize with default args
  passes #233: block with initialize with default args
-  reports mismatch with generic argument type in output type
  reports mismatch with generic argument type in output type
-  errors if using Object as block return type (#2358)
  errors if using Object as block return type (#2358)
-  uses splat in block parameter
  uses splat in block parameter
-  auto-unpacks tuple, less than max
  auto-unpacks tuple, less than max
-  does next from captured block
  does next from captured block
-  passes #262
  passes #262
-  errors if declares fun inside block
  errors if declares fun inside block
-  infers type of block before call taking other args free vars into account
  infers type of block before call taking other args free vars into account
-  reports error if block didn't return expected type
  reports error if block didn't return expected type
-  errors if using ( -> Object) as block return type (#2358)
  errors if using ( -> Object) as block return type (#2358)
-  errors if declares include inside block
  errors if declares include inside block
-  errors if yields from top level
  errors if yields from top level
-  doesn't crash on cleaning up typeof node without dependencies (#8669)
  doesn't crash on cleaning up typeof node without dependencies (#8669)
-  matches block arg return type
  matches block arg return type
-  yields with different types
  yields with different types
-  auto-unpacks tuple
  auto-unpacks tuple
-  types recursive hash assignment
  types recursive hash assignment
-  auto-unpacks tuple, captured block with multiple statements
  auto-unpacks tuple, captured block with multiple statements
-  sets captured block type to that of restriction
  sets captured block type to that of restriction
-  reports error if block type doesn't match
  reports error if block type doesn't match
-  auto-unpacks with block arg type
  auto-unpacks with block arg type
-  doesn't mix local var with block var, using next (#2314)
  doesn't mix local var with block var, using next (#2314)
-  uses block return type as return type, even if can't infer block type
  uses block return type as return type, even if can't infer block type
-  errors if declares class inside captured block
  errors if declares class inside captured block
-  doesn't fail with 'already had enclosing call' (#11200)
  doesn't fail with 'already had enclosing call' (#11200)
-  reports error if block changes type
  reports error if block changes type
-  errors if breaks from captured block
  errors if breaks from captured block
-  errors if doing next in proc literal
  errors if doing next in proc literal
-  break from block without value
  break from block without value
-  matches block with generic type and free var
  matches block with generic type and free var
-  uses free var in return type with tuple type
  uses free var in return type with tuple type
-  infer type with union
  infer type with union
-  binds block return type free variable even if there are no block parameters (#1797)
  binds block return type free variable even if there are no block parameters (#1797)
-  errors if returns from captured block
  errors if returns from captured block
-  does next from block with value 2
  does next from block with value 2
-  errors if using Bar | Object as block return type (#2358)
  errors if using Bar | Object as block return type (#2358)
-  doesn't assign block variable type to last value (#694)
  doesn't assign block variable type to last value (#694)
-  errors on recursive yield
  errors on recursive yield
-  respects block arg restriction when block has a splat parameter (2) (#9524)
  respects block arg restriction when block has a splat parameter (2) (#9524)
-  errors if declares enum inside block
  errors if declares enum inside block
-  infer type of empty block body
  infer type of empty block body
-  auto-unpacks tuple, captured empty block
  auto-unpacks tuple, captured empty block
-  ignores void return type (2) (#427)
  ignores void return type (2) (#427)
-  errors on recursive yield with ProcNotation restriction
  errors on recursive yield with ProcNotation restriction
-  reports error if yields a type that's not that one in the block specification
  reports error if yields a type that's not that one in the block specification
-  auto-unpacks tuple, less than max, captured block
  auto-unpacks tuple, less than max, captured block
-  unpacks block argument
  unpacks block argument
-  infer type of block parameter
  infer type of block parameter
-  infers type of block with generic type
  infers type of block with generic type
-  allows underscore in block return type even if the return type can't be computed
  allows underscore in block return type even if the return type can't be computed
-  errors if invoking new with block when no initialize is defined
  errors if invoking new with block when no initialize is defined
-Crystal::TextHierarchyPrinter
-  shows correct total size of generic class if known
  shows correct total size of generic class if known
-  shows correct size for Proc inside extern struct
  shows correct size for Proc inside extern struct
-  shows correct size for Bool member
  shows correct size for Bool member
-  shows correct size for members with bound types
  shows correct size for members with bound types
-  works
  works
+  errors if using return inside constant value (#5391)
  errors if using return inside constant value (#5391)
+  errors on dynamic constant assignment inside if
  errors on dynamic constant assignment inside if
+  keeps type of container when using Path
  keeps type of container when using Path
+  errors if using const in proc notation return type
  errors if using const in proc notation return type
+  finds const from restriction
  finds const from restriction
+  finds constant in class that extends class (#205)
  finds constant in class that extends class (#205)
+  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED // 2)
  doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED // 2)
+  errors if using const in var declaration
  errors if using const in var declaration
+  errors if using constant as generic type (#3240)
  errors if using constant as generic type (#3240)
+  doesn't share variables with global scope
  doesn't share variables with global scope
+  types a constant
  types a constant
+  finds current type only for first path item (1)
  finds current type only for first path item (1)
+Semantic: def overload
+  matches a generic module argument with free var
  matches a generic module argument with free var
+  filter union type with virtual
  filter union type with virtual
+  matches on partial union
  matches on partial union
+  does not consider global paths as free variables (2)
  does not consider global paths as free variables (2)
+  treats single splats with same restriction as equivalent (2) (#12579)
  treats single splats with same restriction as equivalent (2) (#12579)
+  types a call with overload self in included module other type
  types a call with overload self in included module other type
+  types a call with overload Object type first overload
  types a call with overload Object type first overload
+  matches a union argument with free var
  matches a union argument with free var
+  compare self type with others
  compare self type with others
+  says `no overload matches` instead of `can't instantiate abstract class` on wrong argument in new method
  says `no overload matches` instead of `can't instantiate abstract class` on wrong argument in new method
+  lookup matches in virtual type inside union
  lookup matches in virtual type inside union
+  uses long name when no overload matches and name is the same (#1030)
  uses long name when no overload matches and name is the same (#1030)
+  types a call with overload self
  types a call with overload self
+  types a call with overload with yield the other way
  types a call with overload with yield the other way
+  errors when binding free variable to different types (2)
  errors when binding free variable to different types (2)
+  types a call with overload type first overload
  types a call with overload type first overload
+  doesn't match tuples of different sizes
  doesn't match tuples of different sizes
+  matches types with free variables
  matches types with free variables
+  accepts overload with nilable type restriction
  accepts overload with nilable type restriction
+  can call overload with generic restriction
  can call overload with generic restriction
+  errors if union restriction has multiple free vars
  errors if union restriction has multiple free vars
+  prefers more specific overload than one with free variables
  prefers more specific overload than one with free variables
+  dispatches with named arg
  dispatches with named arg
+  gets free variable from union restriction without a union
  gets free variable from union restriction without a union
+  matches a generic module argument
  matches a generic module argument
+  restrict matches to minimum necessary 1
  restrict matches to minimum necessary 1
+  compare_strictness
+    subsumption conflicts
+      named vs named
      named vs named
+      single splat vs named
      single splat vs named
+      single splat vs double splat
      single splat vs double splat
+      positional vs positional
      positional vs positional
+      named vs double splat
      named vs double splat
+      positional vs named
      positional vs named
+      positional vs single splat
      positional vs single splat
+      positional vs double splat
      positional vs double splat
+    specificity conflicts, named vs named
+      (required > optional) vs (required > optional)
      (required > optional) vs (required > optional)
+      (required > splat) vs (optional > splat)
      (required > splat) vs (optional > splat)
+      (required > splat) vs (required > splat)
      (required > splat) vs (required > splat)
+      (optional > splat) vs (optional > splat)
      (optional > splat) vs (optional > splat)
+      (required > optional) vs (optional > splat)
      (required > optional) vs (optional > splat)
+      (required > optional) vs (required > splat)
      (required > optional) vs (required > splat)
+    specificity conflicts, positional vs named
+      (required > splat) vs (required > optional)
      (required > splat) vs (required > optional)
+      (optional > splat) vs (optional > splat)
      (optional > splat) vs (optional > splat)
+      (required > optional) vs (optional > splat)
      (required > optional) vs (optional > splat)
+      (required > splat) vs (required > splat)
      (required > splat) vs (required > splat)
+      (required > optional) vs (required > splat)
      (required > optional) vs (required > splat)
+      (required > splat) vs (optional > splat)
      (required > splat) vs (optional > splat)
+      (required > optional) vs (required > optional)
      (required > optional) vs (required > optional)
+      (optional > splat) vs (required > optional)
      (optional > splat) vs (required > optional)
+      (optional > splat) vs (required > splat)
      (optional > splat) vs (required > splat)
+    named parameters
+      named parameter with restriction vs double splat with stricter restriction
      named parameter with restriction vs double splat with stricter restriction
+      named parameter with stricter restriction vs double splat with restriction
      named parameter with stricter restriction vs double splat with restriction
+      named parameter vs double splat with restriction
      named parameter vs double splat with restriction
+      named parameter with restriction vs double splat (#5328)
      named parameter with restriction vs double splat (#5328)
+      double splat restriction vs double splat with stricter restriction
      double splat restriction vs double splat with stricter restriction
+      double splat vs double splat with restriction
      double splat vs double splat with restriction
+      specificity
      specificity
+    positional parameters
+      positional parameter vs single splat with restriction
      positional parameter vs single splat with restriction
+      specificity
      specificity
+      single splat restriction vs single splat with stricter restriction
      single splat restriction vs single splat with stricter restriction
+      positional parameter with restriction vs single splat with stricter restriction
      positional parameter with restriction vs single splat with stricter restriction
+      positional parameter with stricter restriction vs single splat with restriction
      positional parameter with stricter restriction vs single splat with restriction
+      positional parameter with restriction vs single splat
      positional parameter with restriction vs single splat
+      single splat vs single splat with restriction (#3134)
      single splat vs single splat with restriction (#3134)
+    subsumption has higher precedence over specificity
+      same positional parameter, optional > single splat
      same positional parameter, optional > single splat
+      named vs (required positional > optional positional)
      named vs (required positional > optional positional)
+      named vs (optional named > double splat)
      named vs (optional named > double splat)
+      single splat vs (optional named > double splat)
      single splat vs (optional named > double splat)
+      positional vs (optional named > double splat)
      positional vs (optional named > double splat)
+      positional vs (optional positional > single splat)
      positional vs (optional positional > single splat)
+      same positional parameter, required > single splat
      same positional parameter, required > single splat
+      same named parameter, required > double splat
      same named parameter, required > double splat
+      positional vs (required positional > optional positional)
      positional vs (required positional > optional positional)
+      single splat vs (required named > double splat)
      single splat vs (required named > double splat)
+      double splat vs (required positional > single splat)
      double splat vs (required positional > single splat)
+      double splat vs (required positional > optional positional)
      double splat vs (required positional > optional positional)
+      single splat vs (required named > optional named)
      single splat vs (required named > optional named)
+      positional vs (required positional > single splat)
      positional vs (required positional > single splat)
+      positional vs (required named > optional named)
      positional vs (required named > optional named)
+      double splat vs (optional positional > single splat)
      double splat vs (optional positional > single splat)
+      same named parameter, optional > double splat
      same named parameter, optional > double splat
+      named vs (required positional > single splat)
      named vs (required positional > single splat)
+      named vs (required named > optional named)
      named vs (required named > optional named)
+      positional vs (required named > double splat)
      positional vs (required named > double splat)
+      named vs (optional positional > single splat)
      named vs (optional positional > single splat)
+      named vs (required named > double splat)
      named vs (required named > double splat)
+      same positional parameter, required > optional
      same positional parameter, required > optional
+      same named parameter, required > optional
      same named parameter, required > optional
+  types a call with overload self in included module
  types a call with overload self in included module
+  includes splat symbol in error message
  includes splat symbol in error message
+  resets free vars after a partial match is rejected (#10270)
  resets free vars after a partial match is rejected (#10270)
+  restrict virtual type with virtual type
  restrict virtual type with virtual type
+  types a call with overload
  types a call with overload
+  types a call with overload selecting the most restrictive
  types a call with overload selecting the most restrictive
+  uses method defined in base class if the restriction doesn't match
  uses method defined in base class if the restriction doesn't match
+  overloads on metaclass (#2916)
  overloads on metaclass (#2916)
+  matches a union argument with free var, more types (1)
  matches a union argument with free var, more types (1)
+  matches tuples and uses free var
  matches tuples and uses free var
+  types a call with overload selecting the most restrictive 2
  types a call with overload selecting the most restrictive 2
+  matches virtual type to union
  matches virtual type to union
+  types a call with overload matches virtual 2
  types a call with overload matches virtual 2
+  does not consider global paths as free variables (1)
  does not consider global paths as free variables (1)
+  matches tuples of different sizes
  matches tuples of different sizes
+  can call overload with aliased generic restriction
  can call overload with aliased generic restriction
+  gets free variable from union restriction
  gets free variable from union restriction
+  matches a generic module argument with free var (2)
  matches a generic module argument with free var (2)
+  gives correct error message, looking up parent defs, when no overload matches
  gives correct error message, looking up parent defs, when no overload matches
+  types a call with overload self with inherited type
  types a call with overload self with inherited type
+  overloads with named argument (#4465)
  overloads with named argument (#4465)
+  restricts union to generic class
  restricts union to generic class
+  overloads union against non-union (#2904)
  overloads union against non-union (#2904)
+  types a call with overload with yield after typing another call without yield
  types a call with overload with yield after typing another call without yield
+  types a call with overload matches virtual 3
  types a call with overload matches virtual 3
+  restricts on generic type without type arg
  restricts on generic type without type arg
+  gets free variable from union restriction (2)
  gets free variable from union restriction (2)
+  resets free vars after a partial match is rejected (2) (#10185)
  resets free vars after a partial match is rejected (2) (#10185)
+  doesn't match with wrong number of type arguments (#313)
  doesn't match with wrong number of type arguments (#313)
+  types a call with overload type second overload
  types a call with overload type second overload
+  errors if no overload matches on union against named arg with external param name (#10516)
  errors if no overload matches on union against named arg with external param name (#10516)
+  finds method after including module in generic module (#1201)
  finds method after including module in generic module (#1201)
+  treats single splats with same restriction as equivalent (#12579)
  treats single splats with same restriction as equivalent (#12579)
+  errors when binding free variable to different types
  errors when binding free variable to different types
+  gives better error message with consecutive arguments sizes
  gives better error message with consecutive arguments sizes
+  doesn't crash on unknown metaclass
  doesn't crash on unknown metaclass
+  dispatch call to def with restrictions
  dispatch call to def with restrictions
+  considers NamedTuple in a module's including types (#10380)
  considers NamedTuple in a module's including types (#10380)
+  overloads on metaclass (2) (#2916)
  overloads on metaclass (2) (#2916)
+  types a call with overload matches virtual
  types a call with overload matches virtual
+  matches a union metaclass argument with free var (#8071)
  matches a union metaclass argument with free var (#8071)
+  single type restriction wins over union
  single type restriction wins over union
+  types a call with overload with yield
  types a call with overload with yield
+  matches tuple with underscore
  matches tuple with underscore
+  matches a union argument with free var, more types (2)
  matches a union argument with free var, more types (2)
+  types a call with overload self other match
  types a call with overload self other match
+  errors if generic type doesn't match
  errors if generic type doesn't match
+  reports no overload matches with correct method owner (#2083)
  reports no overload matches with correct method owner (#2083)
+  errors if union restriction has multiple free vars (2)
  errors if union restriction has multiple free vars (2)
+  dispatch call to def with restrictions
  dispatch call to def with restrictions
+  errors if no overload matches on union against named arg (#2640)
  errors if no overload matches on union against named arg (#2640)
+  overloads on metaclass (3) (#2916)
  overloads on metaclass (3) (#2916)
+  matches generic class instance type with another one
  matches generic class instance type with another one
+  restricts on generic type with free type arg
  restricts on generic type with free type arg
+Parser
+  parses "foo.responds_to? :foo"
  parses "foo.responds_to? :foo"
+  parses ":foo"
  parses ":foo"
+  parses "x = 1; foo x { }"
  parses "x = 1; foo x { }"
+  parses "foo &.[0] = 1"
  parses "foo &.[0] = 1"
+  parses "a : Foo()*"
  parses "a : Foo()*"
+  parses "def self.===; end;"
  parses "def self.===; end;"
+  parses "-@foo"
  parses "-@foo"
+  parses "case :foo; when :bar; 2; end"
  parses "case :foo; when :bar; 2; end"
+  parses "Set() {1, 2, 3}"
  parses "Set() {1, 2, 3}"
+  says syntax error on "def foo\nabstract\nend"
  says syntax error on "def foo\nabstract\nend"
+  parses "{% begin %}%i{ %s }{% end %}"
  parses "{% begin %}%i{ %s }{% end %}"
+  parses "a = 1\ncase 1\nwhen a then 1\nend"
  parses "a = 1\ncase 1\nwhen a then 1\nend"
+  parses "property lib : Int32"
  parses "property lib : Int32"
+  parses "a, *b = 1"
  parses "a, *b = 1"
+  parses "foo.==(1, 2)"
  parses "foo.==(1, 2)"
+  parses "def foo(@@var); 1; end"
  parses "def foo(@@var); 1; end"
+  parses "break 1 if true"
  parses "break 1 if true"
+  parses "foo.<(1, 2)"
  parses "foo.<(1, 2)"
+  parses "foo(&.as(T))"
  parses "foo(&.as(T))"
+  parses ":\"\\\"foo\""
  parses ":\"\\\"foo\""
+  parses ":&**"
  parses ":&**"
+  sets correct location of global path in annotation
  sets correct location of global path in annotation
+  says syntax error on "def foo(self); end"
  says syntax error on "def foo(self); end"
+  parses "Int[8, 4,]"
  parses "Int[8, 4,]"
+  says syntax error on "break ? 1 : 2"
  says syntax error on "break ? 1 : 2"
+  says syntax error on "def foo(foo private); end"
  says syntax error on "def foo(foo private); end"
+  parses "\"hello \\\n     world\""
  parses "\"hello \\\n     world\""
+  parses ":>"
  parses ":>"
+  parses "if (\ntrue\n)\n1\nend"
  parses "if (\ntrue\n)\n1\nend"
+  parses "def self./; end;"
  parses "def self./; end;"
+  parses "{% begin %}%Q< %s >{% end %}"
  parses "{% begin %}%Q< %s >{% end %}"
+  parses "/foo/imximx"
  parses "/foo/imximx"
+  parses "foo[\n1\n]"
  parses "foo[\n1\n]"
+  says syntax error on "foo { |(false)| }"
  says syntax error on "foo { |(false)| }"
+  parses "{\"foo\": 1, \"bar\": 2}"
  parses "{\"foo\": 1, \"bar\": 2}"
+  parses "Foo(T, 1, U)"
  parses "Foo(T, 1, U)"
+  says syntax error on "pointerof(self)"
  says syntax error on "pointerof(self)"
+  parses "1 <= 2"
  parses "1 <= 2"
+  parses "foo(z: 0, a: n &** 2)"
  parses "foo(z: 0, a: n &** 2)"
+  parses "def !=; end;"
  parses "def !=; end;"
+  parses "def foo(x @@end); end"
  parses "def foo(x @@end); end"
+  says syntax error on "*a, b, c, d, e = 1, 2"
  says syntax error on "*a, b, c, d, e = 1, 2"
+  says syntax error on "macro foo(x y z); end"
  says syntax error on "macro foo(x y z); end"
+  parses "foo 1;"
  parses "foo 1;"
+  parses "+ 1"
  parses "+ 1"
+  says syntax error on "def foo(unless); end"
  says syntax error on "def foo(unless); end"
+  parses "{% begin %}%w[ %s ]{% end %}"
  parses "{% begin %}%w[ %s ]{% end %}"
+  parses "x[0] ? 1 : 0"
  parses "x[0] ? 1 : 0"
+  parses "macro foo; 1 + 2; end"
  parses "macro foo; 1 + 2; end"
+  parses "def foo(\nvar\n); end"
  parses "def foo(\nvar\n); end"
+  parses "foo(z: 0, a: n >> 2)"
  parses "foo(z: 0, a: n >> 2)"
+  parses "def foo(x @@lib); end"
  parses "def foo(x @@lib); end"
+  parses "@[Foo(\n1, foo: 2\n)]"
  parses "@[Foo(\n1, foo: 2\n)]"
+  says syntax error on "def foo(**a foo); end"
  says syntax error on "def foo(**a foo); end"
+  parses "foo.=== do end"
  parses "foo.=== do end"
+  parses "{% begin %}%i[ %s ]{% end %}"
  parses "{% begin %}%i[ %s ]{% end %}"
+  parses "foo { |(_, c)| c }"
  parses "foo { |(_, c)| c }"
+  parses "foo.< do end"
  parses "foo.< do end"
+  parses "foo = 1; ->foo.>(Int32)"
  parses "foo = 1; ->foo.>(Int32)"
+  parses "foo.^(1, 2) { 3 }"
  parses "foo.^(1, 2) { 3 }"
+  parses "macro foo;unless %var;true;end;end"
  parses "macro foo;unless %var;true;end;end"
+  parses "foo.- do end"
  parses "foo.- do end"
+  parses "foo &.each {\n}"
  parses "foo &.each {\n}"
+  parses "/fo\\so/"
  parses "/fo\\so/"
+  parses "def self.&(); end;"
  parses "def self.&(); end;"
+  says syntax error on "def foo(macro); end"
  says syntax error on "def foo(macro); end"
+  says syntax error on "foo { |(require)| }"
  says syntax error on "foo { |(require)| }"
+  says syntax error on "1 while 3"
  says syntax error on "1 while 3"
+  parses "{{ foo.nil? }}"
  parses "{{ foo.nil? }}"
+  parses "nil : Int32"
  parses "nil : Int32"
+  parses "def foo(x @if); end"
  parses "def foo(x @if); end"
+  parses "1.foo do; 1; end"
  parses "1.foo do; 1; end"
+  parses "*a = 1"
  parses "*a = 1"
+  parses "def foo(x = 1, *y); 1; end"
  parses "def foo(x = 1, *y); 1; end"
+  parses "def =~; end"
  parses "def =~; end"
+  says syntax error on "<<-HERE\n   One\n wrong\n  Zero\n  HERE"
  says syntax error on "<<-HERE\n   One\n wrong\n  Zero\n  HERE"
+  parses "class Foo(T1); end"
  parses "class Foo(T1); end"
+  parses "def foo;{{@type}};end"
  parses "def foo;{{@type}};end"
+  parses "foo.+(1, 2)"
  parses "foo.+(1, 2)"
+  parses "fun foo : Int32; 1; end; 2"
  parses "fun foo : Int32; 1; end; 2"
+  parses "macro foo\n'\\''\nend"
  parses "macro foo\n'\\''\nend"
+  parses "when : Int32"
  parses "when : Int32"
+  parses "-1"
  parses "-1"
+  parses "{%\na = 1\n%}"
  parses "{%\na = 1\n%}"
+  parses "macro &;end"
  parses "macro &;end"
+  parses "Foo({x: X, typeof: Y})"
  parses "Foo({x: X, typeof: Y})"
+  parses "lib LibC; {{ 1 }}; end"
  parses "lib LibC; {{ 1 }}; end"
+  says syntax error on "macro foo(**x, y)"
  says syntax error on "macro foo(**x, y)"
+  parses "as(Bar)"
  parses "as(Bar)"
+  parses "macro foo(a, @[Foo] var);end"
  parses "macro foo(a, @[Foo] var);end"
+  says syntax error on "case 1 == 1; when 2 a; end"
  says syntax error on "case 1 == 1; when 2 a; end"
+  parses "{% x if 1 %}"
  parses "{% x if 1 %}"
+  parses "1;-2"
  parses "1;-2"
+  parses "def foo(x @until); end"
  parses "def foo(x @until); end"
+  parses "enum Foo; @[Bar]; end"
  parses "enum Foo; @[Bar]; end"
+  parses "lib LibC\nfun SomeFun\nend"
  parses "lib LibC\nfun SomeFun\nend"
+  says syntax error on "foo { |yield| }"
  says syntax error on "foo { |yield| }"
+  parses "1 ^ 2"
  parses "1 ^ 2"
+  says syntax error on "Hash {foo: 1} of Int32 => Int32"
  says syntax error on "Hash {foo: 1} of Int32 => Int32"
+  says syntax error on "return[0]"
  says syntax error on "return[0]"
+  sets correct location of annotation in lib
  sets correct location of annotation in lib
+  parses "->Foo.foo?"
  parses "->Foo.foo?"
+  parses "macro : Int32"
  parses "macro : Int32"
+  parses "begin; 1; rescue ::Foo; 2; end"
  parses "begin; 1; rescue ::Foo; 2; end"
+  parses "extend self"
  parses "extend self"
+  parses "foo.>"
  parses "foo.>"
+  parses "macro foo(x, *y);end"
  parses "macro foo(x, *y);end"
+  parses "1.as Bar"
  parses "1.as Bar"
+  says syntax error on "class Foo(T U)"
  says syntax error on "class Foo(T U)"
+  parses "sizeof(X)"
  parses "sizeof(X)"
+  says syntax error on "a, b, c, d, *e = 1, 2, 3"
  says syntax error on "a, b, c, d, *e = 1, 2, 3"
+  parses "1 +2.0"
  parses "1 +2.0"
+  parses "def foo(@end); end"
  parses "def foo(@end); end"
+  parses "macro foo;bar{% if x %}body{% end %}baz;end"
  parses "macro foo;bar{% if x %}body{% end %}baz;end"
+  parses "<<-HERE\n   \#{1}One\n  \#{2}Zero\n  HERE"
  parses "<<-HERE\n   \#{1}One\n  \#{2}Zero\n  HERE"
+  parses "def self.=~; end;"
  parses "def self.=~; end;"
+  parses "def foo(x, *, y); 1; end"
  parses "def foo(x, *, y); 1; end"
+  parses "&+ 1"
  parses "&+ 1"
+  parses "abstract def foo : Int32"
  parses "abstract def foo : Int32"
+  says syntax error on "macro is_a?; end"
  says syntax error on "macro is_a?; end"
+  parses "def foo(a, &block : Int, Float -> Double); end"
  parses "def foo(a, &block : Int, Float -> Double); end"
+  parses "@foo/2"
  parses "@foo/2"
+  parses "property require : Int32"
  parses "property require : Int32"
+  says syntax error on "return << 1"
  says syntax error on "return << 1"
+  parses "->Foo.===(Int32)"
  parses "->Foo.===(Int32)"
+  parses "lib LibC; struct Foo; {% if 1 %}2{% end %}; end; end"
  parses "lib LibC; struct Foo; {% if 1 %}2{% end %}; end; end"
+  says syntax error on "macro foo.bar;end"
  says syntax error on "macro foo.bar;end"
+  parses "property macro : Int32"
  parses "property macro : Int32"
+  parses "1 !~ 2"
  parses "1 !~ 2"
+  says syntax error on "foo { |select| }"
  says syntax error on "foo { |select| }"
+  parses "alias : Int32"
  parses "alias : Int32"
+  parses "a = 1; a &+= 1"
  parses "a = 1; a &+= 1"
+  parses "[] of ->\n1"
  parses "[] of ->\n1"
+  parses "macro %;end"
  parses "macro %;end"
+  parses ":[]?"
  parses ":[]?"
+  parses "def foo(@@true); end"
  parses "def foo(@@true); end"
+  says syntax error on "break when true"
  says syntax error on "break when true"
+  says syntax error on "A = foo { B = 1 }"
  says syntax error on "A = foo { B = 1 }"
+  parses "begin\n1\nend\nif true; end"
  parses "begin\n1\nend\nif true; end"
+  parses "foo.=~ 1, 2"
  parses "foo.=~ 1, 2"
+  parses "foo %i"
  parses "foo %i"
+  says syntax error on "return - 1"
  says syntax error on "return - 1"
+  says syntax error on "def as; end"
  says syntax error on "def as; end"
+  parses "foo = 1; ->foo.foo="
  parses "foo = 1; ->foo.foo="
+  parses "<<-HERE\r\n   One\r\n  Zero\r\n  HERE"
  parses "<<-HERE\r\n   One\r\n  Zero\r\n  HERE"
+  parses "foo./(1, 2) { 3 }"
  parses "foo./(1, 2) { 3 }"
+  parses "foo +1.0"
  parses "foo +1.0"
+  parses "def &(); end"
  parses "def &(); end"
+  says syntax error on "foo { |(case)| }"
  says syntax error on "foo { |(case)| }"
+  parses "def &; end;"
  parses "def &; end;"
+  parses "-> do; 1; rescue; 2; end"
  parses "-> do; 1; rescue; 2; end"
+  parses "def ^(); end;"
  parses "def ^(); end;"
+  says syntax error on "foo { |pointerof| }"
  says syntax error on "foo { |pointerof| }"
+  parses "select\nwhen foo\n2\nwhen bar\n4\nend"
  parses "select\nwhen foo\n2\nwhen bar\n4\nend"
+  parses "foo = 1; ->foo.-(Int32)"
  parses "foo = 1; ->foo.-(Int32)"
+  parses "case : Int32"
  parses "case : Int32"
+  parses "lib LibC; struct Foo; end end"
  parses "lib LibC; struct Foo; end end"
+  parses "def foo(def foo); end"
  parses "def foo(def foo); end"
+  parses "def foo(select foo); end"
  parses "def foo(select foo); end"
+  says syntax error on "def foo(instance_sizeof); end"
  says syntax error on "def foo(instance_sizeof); end"
+  parses "::A::B"
  parses "::A::B"
+  parses "case\nend"
  parses "case\nend"
+  parses "1 || 2"
  parses "1 || 2"
+  says syntax error on "def foo(x y, x z); end"
  says syntax error on "def foo(x y, x z); end"
+  parses "foo.<="
  parses "foo.<="
+  parses "foo.*(1, 2)"
  parses "foo.*(1, 2)"
+  parses "{1 =>\n2, 3 =>\n4}"
  parses "{1 =>\n2, 3 =>\n4}"
+  parses ":<=>"
  parses ":<=>"
+  parses "def : Int32"
  parses "def : Int32"
+  parses "def foo(@private); end"
  parses "def foo(@private); end"
+  parses "def foo(@lib); end"
  parses "def foo(@lib); end"
+  parses "`foo\#{1}bar`"
  parses "`foo\#{1}bar`"
+  says syntax error on "foo(&block) {}"
  says syntax error on "foo(&block) {}"
+  says syntax error on "foo { |class| }"
  says syntax error on "foo { |class| }"
+  parses "a = 1; a[2] ||= 3"
  parses "a = 1; a[2] ||= 3"
+  parses "yield : Int32"
  parses "yield : Int32"
+  says syntax error on "a = 1; b = 2; a, b += 1, 2"
  says syntax error on "a = 1; b = 2; a, b += 1, 2"
+  parses "def ~(); end;"
  parses "def ~(); end;"
+  says syntax error on "def foo(foo abstract); end"
  says syntax error on "def foo(foo abstract); end"
+  says syntax error on "foo { |lib| }"
  says syntax error on "foo { |lib| }"
+  says syntax error on "foo { |offsetof| }"
  says syntax error on "foo { |offsetof| }"
+  parses "a ? 1 : b ? 2 : c ? 3 : 0"
  parses "a ? 1 : b ? 2 : c ? 3 : 0"
+  parses "macro !=;end"
  parses "macro !=;end"
+  parses "property return : Int32"
  parses "property return : Int32"
+  parses "case 1\nelse\n2\nend"
  parses "case 1\nelse\n2\nend"
+  parses "begin; 1; rescue ex; 2; end"
  parses "begin; 1; rescue ex; 2; end"
+  parses "module Foo(T); end"
  parses "module Foo(T); end"
+  parses "def foo(lib foo); end"
  parses "def foo(lib foo); end"
+  parses "1 > 2"
  parses "1 > 2"
+  says syntax error on "<<-HERE\n   One\nwrong\n  Zero\n  HERE"
  says syntax error on "<<-HERE\n   One\nwrong\n  Zero\n  HERE"
+  sets correct location of tuple type
  sets correct location of tuple type
+  parses "def foo(@instance_sizeof); end"
  parses "def foo(@instance_sizeof); end"
+  parses "begin; / /; end"
  parses "begin; / /; end"
+  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\" : \"volatile\", \"alignstack\", \"intel\")"
  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\" : \"volatile\", \"alignstack\", \"intel\")"
+  parses "def foo(abstract foo); end"
  parses "def foo(abstract foo); end"
+  parses "enum Foo : UInt16; end"
  parses "enum Foo : UInt16; end"
+  says syntax error on "def foo(foo break); end"
  says syntax error on "def foo(foo break); end"
+  parses "def self.~; end;"
  parses "def self.~; end;"
+  says syntax error on "a.b() = 1"
  says syntax error on "a.b() = 1"
+  parses "foo.+ 1, 2"
  parses "foo.+ 1, 2"
+  parses "def foo; yield(1); end"
  parses "def foo; yield(1); end"
+  parses "1 / -2"
  parses "1 / -2"
+  parses "foo a, / /"
  parses "foo a, / /"
+  parses "1 +2_i64"
  parses "1 +2_i64"
+  parses "foo %q()"
  parses "foo %q()"
+  says syntax error on "<<-FOO\n1\nFOO + 2"
  says syntax error on "<<-FOO\n1\nFOO + 2"
+  parses "n >= 2"
  parses "n >= 2"
+  parses "`foo`"
  parses "`foo`"
+  parses "foo.!~ 1, 2"
  parses "foo.!~ 1, 2"
+  parses "def []=(*args, **opts, &); end"
  parses "def []=(*args, **opts, &); end"
+  parses "call(foo : A, end : B)"
  parses "call(foo : A, end : B)"
+  says syntax error on "case 1\nin 1; 2"
  says syntax error on "case 1\nin 1; 2"
+  says syntax error on "case 1\nin Int32; 2; when 2"
  says syntax error on "case 1\nin Int32; 2; when 2"
+  says syntax error on "@@foo :: Foo"
  says syntax error on "@@foo :: Foo"
+  parses "def foo(@nil); end"
  parses "def foo(@nil); end"
+  parses "a : Foo"
  parses "a : Foo"
+  parses "def foo(return foo); end"
  parses "def foo(return foo); end"
+  parses "def foo(@return); end"
  parses "def foo(@return); end"
+  parses "def self.^(); end;"
  parses "def self.^(); end;"
+  parses "[1, 2] of Int"
  parses "[1, 2] of Int"
+  says syntax error on "Foo(T, x: U)"
  says syntax error on "Foo(T, x: U)"
+  parses "def foo(fun foo); end"
  parses "def foo(fun foo); end"
+  parses "puts %w{one two}"
  parses "puts %w{one two}"
+  parses "a = 1; a >>=\n1"
  parses "a = 1; a >>=\n1"
+  parses "class Foo\ndef foo; end; end"
  parses "class Foo\ndef foo; end; end"
+  parses "macro foo(a, @[Foo] &block);end"
  parses "macro foo(a, @[Foo] &block);end"
+  parses "def self.&; end;"
  parses "def self.&; end;"
+  parses "def foo(x @@offsetof); end"
  parses "def foo(x @@offsetof); end"
+  says syntax error on "a {} = 1"
  says syntax error on "a {} = 1"
+  says syntax error on "def foo(fun); end"
  says syntax error on "def foo(fun); end"
+  says syntax error on "next + 1"
  says syntax error on "next + 1"
+  parses "asm(\"nop\" ::)"
  parses "asm(\"nop\" ::)"
+  parses "->(x : Int32) : Int32 { }"
  parses "->(x : Int32) : Int32 { }"
+  parses "def <(); end;"
  parses "def <(); end;"
+  parses "asm(\"nop\" ::::)"
  parses "asm(\"nop\" ::::)"
+  parses "x, y, z = <<-FOO, <<-BAR, <<-BAZ\nhello\nFOO\nworld\nBAR\n!\nBAZ"
  parses "x, y, z = <<-FOO, <<-BAR, <<-BAZ\nhello\nFOO\nworld\nBAR\n!\nBAZ"
+  says syntax error on "def foo(x : U) forall U,; end"
  says syntax error on "def foo(x : U) forall U,; end"
+  parses "foo.> 1, 2"
  parses "foo.> 1, 2"
+  says syntax error on "a.[]() += 1"
  says syntax error on "a.[]() += 1"
+  parses "nil"
  parses "nil"
+  parses "foo % i()"
  parses "foo % i()"
+  parses "foo[0] = 1"
  parses "foo[0] = 1"
+  parses "a.foo(&block)"
  parses "a.foo(&block)"
+  parses "property sizeof : Int32"
  parses "property sizeof : Int32"
+  parses "foo(n > 2)"
  parses "foo(n > 2)"
+  parses "property fun : Int32"
  parses "property fun : Int32"
+  parses "foo(a: n &** 2)"
  parses "foo(a: n &** 2)"
+  parses "def []?; end"
  parses "def []?; end"
+  parses "def foo(@@protected); end"
  parses "def foo(@@protected); end"
+  parses "def foo(x @@abstract); end"
  parses "def foo(x @@abstract); end"
+  parses "def foo(@def); end"
  parses "def foo(@def); end"
+  parses "foo { |(a, *b, c)| }"
  parses "foo { |(a, *b, c)| }"
+  parses "def foo(x @yield); end"
  parses "def foo(x @yield); end"
+  parses "def -; end;"
  parses "def -; end;"
+  parses "foo(0, n == 2)"
  parses "foo(0, n == 2)"
+  parses "protected def foo; end"
  parses "protected def foo; end"
+  parses "foo { |(a, (b, (c, d)))| }"
  parses "foo { |(a, (b, (c, d)))| }"
+  parses "def foo(@@next); end"
  parses "def foo(@@next); end"
+  parses "x.foo(a: 1, b: 2)"
  parses "x.foo(a: 1, b: 2)"
+  parses "foo.==(1, 2) { 3 }"
  parses "foo.==(1, 2) { 3 }"
+  parses "%q{hello \#{foo} world}"
  parses "%q{hello \#{foo} world}"
+  says syntax error on "foo(foo(&.block)"
  says syntax error on "foo(foo(&.block)"
+  parses "Foo(X, instance_sizeof(Int32))"
  parses "Foo(X, instance_sizeof(Int32))"
+  parses "A = 1"
  parses "A = 1"
+  parses "fun : Int32"
  parses "fun : Int32"
+  says syntax error on "next === 1"
  says syntax error on "next === 1"
+  parses "def |; end;"
  parses "def |; end;"
+  parses "foo(0, n > 2)"
  parses "foo(0, n > 2)"
+  parses "def foo(@@def); end"
  parses "def foo(@@def); end"
+  parses "yield if true"
  parses "yield if true"
+  parses "foo.=~(1, 2)"
  parses "foo.=~(1, 2)"
+  parses "Foo(T?)"
  parses "Foo(T?)"
+  parses "n ** 2"
  parses "n ** 2"
+  parses "Foo(_)"
  parses "Foo(_)"
+  parses "begin\n1\nensure\n2\nend"
  parses "begin\n1\nensure\n2\nend"
+  says syntax error on "{a: 1, \"\": 2}"
  says syntax error on "{a: 1, \"\": 2}"
+  parses "@[Foo(1, foo: 2)]"
  parses "@[Foo(1, foo: 2)]"
+  says syntax error on "def foo(class); end"
  says syntax error on "def foo(class); end"
+  says syntax error on "alias Foo?"
  says syntax error on "alias Foo?"
+  parses "foo.>= do end"
  parses "foo.>= do end"
+  parses "foo 1, **bar"
  parses "foo 1, **bar"
+  parses "1 &* 2"
  parses "1 &* 2"
+  parses "foo(0, n ^ 2)"
  parses "foo(0, n ^ 2)"
+  parses "a = 1\nfoo -a"
  parses "a = 1\nfoo -a"
+  parses "Set(Int32) {1, 2, 3}"
  parses "Set(Int32) {1, 2, 3}"
+  parses "[\n1\n]"
  parses "[\n1\n]"
+  parses "foo(a: n >> 2)"
  parses "foo(a: n >> 2)"
+  parses "def foo; a; end"
  parses "def foo; a; end"
+  parses "def foo(macro foo); end"
  parses "def foo(macro foo); end"
+  says syntax error on "def foo(foo next); end"
  says syntax error on "def foo(foo next); end"
+  parses "->@foo.foo"
  parses "->@foo.foo"
+  parses "T/1"
  parses "T/1"
+  parses ":==="
  parses ":==="
+  parses "+1.0"
  parses "+1.0"
+  parses "->foo!"
  parses "->foo!"
+  parses "<<-'EOF'.x\n  foo\nEOF"
  parses "<<-'EOF'.x\n  foo\nEOF"
+  parses "@[Foo()]"
  parses "@[Foo()]"
+  parses "extend Foo"
  parses "extend Foo"
+  says syntax error on "def foo(**args = 1); end"
  says syntax error on "def foo(**args = 1); end"
+  parses "->@@foo.foo"
  parses "->@@foo.foo"
+  parses "def foo(a, &block : -> Double); end"
  parses "def foo(a, &block : -> Double); end"
+  parses "def foo(@@select); end"
  parses "def foo(@@select); end"
+  parses "begin; 1; rescue; 2; else; 3; end"
  parses "begin; 1; rescue; 2; else; 3; end"
+  parses "foo x do\n//\nend"
  parses "foo x do\n//\nend"
+  says syntax error on "def foo(foo include); end"
  says syntax error on "def foo(foo include); end"
+  parses "def foo(x @end); end"
  parses "def foo(x @end); end"
+  parses "foo.!="
  parses "foo.!="
+  parses "select\nwhen foo\n2\nelse\n3\nend"
  parses "select\nwhen foo\n2\nelse\n3\nend"
+  says syntax error on "foo[1] = break"
  says syntax error on "foo[1] = break"
+  parses "def foo(protected foo); end"
  parses "def foo(protected foo); end"
+  parses "@[Foo(1, foo: 2\n)]"
  parses "@[Foo(1, foo: 2\n)]"
+  parses "def &*(); end"
  parses "def &*(); end"
+  says syntax error on "if next; end"
  says syntax error on "if next; end"
+  parses "next 1, *2"
  parses "next 1, *2"
+  sets correct location of named tuple type
  sets correct location of named tuple type
+  says syntax error on "-> :Int32 { }"
  says syntax error on "-> :Int32 { }"
+  says syntax error on "foo { |case| }"
  says syntax error on "foo { |case| }"
+  parses "macro foo;bar{% for x in y %}body{% end %}baz;end"
  parses "macro foo;bar{% for x in y %}body{% end %}baz;end"
+  parses "def !~; end;"
  parses "def !~; end;"
+  parses "macro *;end"
  parses "macro *;end"
+  parses "def -(); end"
  parses "def -(); end"
+  parses "Foo(\nx:\nT,\ny:\nU,\n)"
  parses "Foo(\nx:\nT,\ny:\nU,\n)"
+  sets correct location of annotation in enum
  sets correct location of annotation in enum
+  parses "foo(z: 0, a: n < 2)"
  parses "foo(z: 0, a: n < 2)"
+  says syntax error on "[\n\"foo\"\n\"bar\"\n]"
  says syntax error on "[\n\"foo\"\n\"bar\"\n]"
+  parses "{\"foo\": 1}"
  parses "{\"foo\": 1}"
+  says syntax error on "return // 1"
  says syntax error on "return // 1"
+  parses "next if true"
  parses "next if true"
+  parses "foo = 1; ->foo.>=(Int32)"
  parses "foo = 1; ->foo.>=(Int32)"
+  parses "next 1, 2"
  parses "next 1, 2"
+  parses "def ==; end;"
  parses "def ==; end;"
+  parses "->Foo.^(Int32)"
  parses "->Foo.^(Int32)"
+  says syntax error on "class Foo(); end"
  says syntax error on "class Foo(); end"
+  parses "f.x //= 2"
  parses "f.x //= 2"
+  parses "def foo(x @@self); end"
  parses "def foo(x @@self); end"
+  says syntax error on "def foo(foo lib); end"
  says syntax error on "def foo(foo lib); end"
+  parses "property false : Int32"
  parses "property false : Int32"
+  parses "foo { |a, (b, c), (d, e)| a; b; c; d; e }"
  parses "foo { |a, (b, c), (d, e)| a; b; c; d; e }"
+  says syntax error on "offsetof(X, 1.0)"
  says syntax error on "offsetof(X, 1.0)"
+  parses "def ~; end;"
  parses "def ~; end;"
+  parses "foo.bar"
  parses "foo.bar"
+  says syntax error on "x[1:-2]"
  says syntax error on "x[1:-2]"
+  parses "def self./(); end;"
  parses "def self./(); end;"
+  says syntax error on "macro nil?; end"
  says syntax error on "macro nil?; end"
+  says syntax error on "$foo :: Foo"
  says syntax error on "$foo :: Foo"
+  parses "a.b &*=\n1"
  parses "a.b &*=\n1"
+  parses "def /(); end;"
  parses "def /(); end;"
+  says syntax error on "next ^ 1"
  says syntax error on "next ^ 1"
+  parses ":>>"
  parses ":>>"
+  parses "def foo(x @@macro); end"
  parses "def foo(x @@macro); end"
+  parses "foo(0, n !~ 2)"
  parses "foo(0, n !~ 2)"
+  says syntax error on "[1 1]"
  says syntax error on "[1 1]"
+  parses "break if true"
  parses "break if true"
+  parses "foo ensure 2"
  parses "foo ensure 2"
+  parses "def foo(x); end; x"
  parses "def foo(x); end; x"
+  parses "foo(n >= 2)"
  parses "foo(n >= 2)"
+  parses "{% begin %}%x< %s >{% end %}"
  parses "{% begin %}%x< %s >{% end %}"
+  parses "foo(\n1)"
  parses "foo(\n1)"
+  parses "<<-HERE\n   One\n \n  Zero\n  HERE"
  parses "<<-HERE\n   One\n \n  Zero\n  HERE"
+  says syntax error on "def foo\nfun\nend"
  says syntax error on "def foo\nfun\nend"
+  parses "next;"
  parses "next;"
+  parses "def foo(x @@protected); end"
  parses "def foo(x @@protected); end"
+  parses "foo(n == 2)"
  parses "foo(n == 2)"
+  parses "typeof(\n  1\n)"
  parses "typeof(\n  1\n)"
+  parses "\"hello \" \\\r\n \"world\""
  parses "\"hello \" \\\r\n \"world\""
+  says syntax error on "macro foo(**x, **y)"
  says syntax error on "macro foo(**x, **y)"
+  parses "lib LibC\n$errno : B, C -> D\nend"
  parses "lib LibC\n$errno : B, C -> D\nend"
+  says syntax error on "break >= 1"
  says syntax error on "break >= 1"
+  parses "Foo({\"foo\": X, \"bar\": Y})"
  parses "Foo({\"foo\": X, \"bar\": Y})"
+  parses "->foo?"
  parses "->foo?"
+  says syntax error on "def self.nil?; end"
  says syntax error on "def self.nil?; end"
+  parses "foo(\"foo bar\": 1, \"baz\": 2)"
  parses "foo(\"foo bar\": 1, \"baz\": 2)"
+  says syntax error on " (1, 2, 3 end"
  says syntax error on " (1, 2, 3 end"
+  says syntax error on "a = a"
  says syntax error on "a = a"
+  parses "def foo(@in); end"
  parses "def foo(@in); end"
+  parses "a.b <<=\n1"
  parses "a.b <<=\n1"
+  parses "foo[0] = 1 if 2"
  parses "foo[0] = 1 if 2"
+  parses "foo.=="
  parses "foo.=="
+  parses "next"
  parses "next"
+  parses "foo.==="
  parses "foo.==="
+  parses "def foo(@false); end"
  parses "def foo(@false); end"
+  parses "%r(foo(bar))"
  parses "%r(foo(bar))"
+  parses "lib LibC; struct Foo; x, y, z : Int; end end"
  parses "lib LibC; struct Foo; x, y, z : Int; end end"
+  parses "def %(); end;"
  parses "def %(); end;"
+  says syntax error on "foo { |(break)| }"
  says syntax error on "foo { |(break)| }"
+  parses "1 rescue 2"
  parses "1 rescue 2"
+  parses "1 ensure 2"
  parses "1 ensure 2"
+  parses "def foo(next foo); end"
  parses "def foo(next foo); end"
+  says syntax error on "while 1 == 1 a; end"
  says syntax error on "while 1 == 1 a; end"
+  parses "lib LibC; type A = B*; end"
  parses "lib LibC; type A = B*; end"
+  parses "def foo(x = 1, **args)\n1\nend"
  parses "def foo(x = 1, **args)\n1\nend"
+  parses "->Foo.-(Int32)"
  parses "->Foo.-(Int32)"
+  parses "case \nwhen 1\n2\nend"
  parses "case \nwhen 1\n2\nend"
+  parses "def foo(include foo); end"
  parses "def foo(include foo); end"
+  says syntax error on "break[]"
  says syntax error on "break[]"
+  parses "a.foo &block"
  parses "a.foo &block"
+  parses "-1.0"
  parses "-1.0"
+  parses "foo(&.is_a?(T))"
  parses "foo(&.is_a?(T))"
+  says syntax error on "x { |*a, *b| }"
  says syntax error on "x { |*a, *b| }"
+  parses "{% x unless 1 %}"
  parses "{% x unless 1 %}"
+  parses "def self.**(); end;"
  parses "def self.**(); end;"
+  parses "foo % r()"
  parses "foo % r()"
+  parses "->Foo.*(Int32)"
  parses "->Foo.*(Int32)"
+  parses "(1 .. )"
  parses "(1 .. )"
+  parses "[] of {String, ->}"
  parses "[] of {String, ->}"
+  parses "typeof(1)"
  parses "typeof(1)"
+  says syntax error on "->::@foo.foo"
  says syntax error on "->::@foo.foo"
+  parses "a/b"
  parses "a/b"
+  parses "def foo(private foo); end"
  parses "def foo(private foo); end"
+  parses "->::foo"
  parses "->::foo"
+  says syntax error on "{1 => 2, 3 => 4 5 => 6}"
  says syntax error on "{1 => 2, 3 => 4 5 => 6}"
+  says syntax error on "return == 1"
  says syntax error on "return == 1"
+  says syntax error on "{a: 1, a: 2}"
  says syntax error on "{a: 1, a: 2}"
+  parses "if : Int32"
  parses "if : Int32"
+  says syntax error on "foo { |x, x| }"
  says syntax error on "foo { |x, x| }"
+  parses "def <=(*args, **opts); end"
  parses "def <=(*args, **opts); end"
+  parses "def foo(var : (Int, Float -> Double)); end"
  parses "def foo(var : (Int, Float -> Double)); end"
+  parses "1 if 3"
  parses "1 if 3"
+  parses "foo(/ /, / /)"
  parses "foo(/ /, / /)"
+  parses "def /(); end"
  parses "def /(); end"
+  parses "->Foo.**(Int32)"
  parses "->Foo.**(Int32)"
+  parses "def foo(x : *T -> R); end"
  parses "def foo(x : *T -> R); end"
+  parses "def foo(@@self); end"
  parses "def foo(@@self); end"
+  parses "return *1"
  parses "return *1"
+  parses "foo.=~(1, 2) { 3 }"
  parses "foo.=~(1, 2) { 3 }"
+  parses "foo.-(1, 2)"
  parses "foo.-(1, 2)"
+  parses "foo(a: n > 2)"
  parses "foo(a: n > 2)"
+  parses "a ? 1\n              : b ? 2\n              : c ? 3\n              : 0"
  parses "a ? 1\n              : b ? 2\n              : c ? 3\n              : 0"
+  says syntax error on "break <= 1"
  says syntax error on "break <= 1"
+  parses "f.x <<= 2"
  parses "f.x <<= 2"
+  parses "a { |x| x } / b"
  parses "a { |x| x } / b"
+  parses "foo &.block[0]"
  parses "foo &.block[0]"
+  parses "def *(); end"
  parses "def *(); end"
+  sets correct location of argument in named tuple type
  sets correct location of argument in named tuple type
+  parses "def foo(x @out); end"
  parses "def foo(x @out); end"
+  parses "def foo(x @@struct); end"
  parses "def foo(x @@struct); end"
+  parses "foo(a: n + 2)"
  parses "foo(a: n + 2)"
+  parses "case {1}\nin {nil}; 2; end"
  parses "case {1}\nin {nil}; 2; end"
+  parses "foo.** do end"
  parses "foo.** do end"
+  parses "property offsetof : Int32"
  parses "property offsetof : Int32"
+  parses "foo(x: result : Int32); result"
  parses "foo(x: result : Int32); result"
+  parses "def foo(var = 1); end"
  parses "def foo(var = 1); end"
+  parses "foo = 1; foo &x"
  parses "foo = 1; foo &x"
+  parses "foo(\n1\n)"
  parses "foo(\n1\n)"
+  parses "def foo(x @private); end"
  parses "def foo(x @private); end"
+  parses "foo x do\nend"
  parses "foo x do\nend"
+  parses "\"hello \"\\\r\n\"world\""
  parses "\"hello \"\\\r\n\"world\""
+  parses "(1 ... )"
  parses "(1 ... )"
+  says syntax error on "case 1; when return; end; end"
  says syntax error on "case 1; when return; end; end"
+  parses "foo { a = 1 }; a"
  parses "foo { a = 1 }; a"
+  parses "1.[]=(2, 3)"
  parses "1.[]=(2, 3)"
+  parses "call \"foo\""
  parses "call \"foo\""
+  says syntax error on "def foo(foo instance_sizeof); end"
  says syntax error on "def foo(foo instance_sizeof); end"
+  says syntax error on "foo { |unless| }"
  says syntax error on "foo { |unless| }"
+  parses "foo.+ do end"
  parses "foo.+ do end"
+  parses "if foo; 1; end"
  parses "if foo; 1; end"
+  says syntax error on "def self.is_a?; end"
  says syntax error on "def self.is_a?; end"
+  parses "foo%w"
  parses "foo%w"
+  parses "def [](x); end"
  parses "def [](x); end"
+  parses "def foo(@@yield); end"
  parses "def foo(@@yield); end"
+  says syntax error on "foo { |(fun)| }"
  says syntax error on "foo { |(fun)| }"
+  parses "macro foo\n{%\nif 1\n2\nelse\n3\nend\n%}end"
  parses "macro foo\n{%\nif 1\n2\nelse\n3\nend\n%}end"
+  says syntax error on "def foo(foo pointerof); end"
  says syntax error on "def foo(foo pointerof); end"
+  parses "break 1, 2"
  parses "break 1, 2"
+  parses "1.x; foo do\nend"
  parses "1.x; foo do\nend"
+  says syntax error on "self, x = 1, 2"
  says syntax error on "self, x = 1, 2"
+  parses "def foo(x @@private); end"
  parses "def foo(x @@private); end"
+  parses "case;end"
  parses "case;end"
+  says syntax error on "x : String, a = 4"
  says syntax error on "x : String, a = 4"
+  parses ":-"
  parses ":-"
+  says syntax error on "->(x : Int32, x : Int32) {}"
  says syntax error on "->(x : Int32, x : Int32) {}"
+  parses "a.b /2/"
  parses "a.b /2/"
+  says syntax error on "{a: 1, b: 2 c: 3}"
  says syntax error on "{a: 1, b: 2 c: 3}"
+  says syntax error on "macro foo;{%end};end"
  says syntax error on "macro foo;{%end};end"
+  parses "->Foo.==(Int32)"
  parses "->Foo.==(Int32)"
+  parses "a = 1; b = 2; c = 3; a-b -c"
  parses "a = 1; b = 2; c = 3; a-b -c"
+  parses "property do : Int32"
  parses "property do : Int32"
+  parses ":!"
  parses ":!"
+  parses "@foo = 1"
  parses "@foo = 1"
+  parses "a = 1; a %=\n1"
  parses "a = 1; a %=\n1"
+  parses "{% begin %}%w< %s >{% end %}"
  parses "{% begin %}%w< %s >{% end %}"
+  parses "begin; 1; rescue Foo | Bar; 2; end"
  parses "begin; 1; rescue Foo | Bar; 2; end"
+  parses "def foo; 1; 2; end"
  parses "def foo; 1; 2; end"
+  says syntax error on "def !; end"
  says syntax error on "def !; end"
+  says syntax error on "next - 1"
  says syntax error on "next - 1"
+  parses "def foo(@@out); end"
  parses "def foo(@@out); end"
+  parses "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2))"
  parses "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2))"
+  parses "property module : Int32"
  parses "property module : Int32"
+  parses "->() : Int32 do end"
  parses "->() : Int32 do end"
+  parses "foo 1.bar do\nend"
  parses "foo 1.bar do\nend"
+  parses "def foo(@out); end"
  parses "def foo(@out); end"
+  says syntax error on "def foo\nmacro\nend"
  says syntax error on "def foo\nmacro\nend"
+  parses "macro -;end"
  parses "macro -;end"
+  parses "def foo(@require); end"
  parses "def foo(@require); end"
+  parses "&- 1"
  parses "&- 1"
+  parses ":+"
  parses ":+"
+  parses "_, _ = 1, 2"
  parses "_, _ = 1, 2"
+  parses "foo(n &* 2)"
  parses "foo(n &* 2)"
+  parses "def foo(a, & : Int -> Double); end"
  parses "def foo(a, & : Int -> Double); end"
+  parses ":foo"
  parses ":foo"
+  says syntax error on "A = foo(B = 1)"
  says syntax error on "A = foo(B = 1)"
+  parses "1.as?(Bar)"
  parses "1.as?(Bar)"
+  parses "->foo(Void*)"
  parses "->foo(Void*)"
+  parses "a.b **=\n1"
  parses "a.b **=\n1"
+  parses "puts ~1"
  parses "puts ~1"
+  parses "def foo(@macro); end"
  parses "def foo(@macro); end"
+  parses "with : Int32"
  parses "with : Int32"
+  parses "n >> 2"
  parses "n >> 2"
+  parses "a, b = 1, 2 if 3"
  parses "a, b = 1, 2 if 3"
+  says syntax error on "def foo 1; end"
  says syntax error on "def foo 1; end"
+  parses "{% a = 1 if 2 %}"
  parses "{% a = 1 if 2 %}"
+  parses "->foo(Int32, Float64)"
  parses "->foo(Int32, Float64)"
+  parses "- 1"
  parses "- 1"
+  parses "foo.[]=(1, 2)"
  parses "foo.[]=(1, 2)"
+  sets correct location of annotation on method parameter
  sets correct location of annotation on method parameter
+  parses "->::Foo.foo"
  parses "->::Foo.foo"
+  parses "foo % x()"
  parses "foo % x()"
+  says syntax error on "def foo!=; end"
  says syntax error on "def foo!=; end"
+  parses "foo.[]= 1, 2"
  parses "foo.[]= 1, 2"
+  parses "1 + /foo/"
  parses "1 + /foo/"
+  parses "def foo(begin foo); end"
  parses "def foo(begin foo); end"
+  parses "def foo(@@abstract); end"
  parses "def foo(@@abstract); end"
+  says syntax error on "def foo(foo require); end"
  says syntax error on "def foo(foo require); end"
+  calls with blocks within index operator (#12818)
+    parses "foo[bar { 1 }]"
    parses "foo[bar { 1 }]"
+    parses "foo.[](bar do; 1; end)"
    parses "foo.[](bar do; 1; end)"
+    parses "foo.[bar { 1 }]"
    parses "foo.[bar { 1 }]"
+    parses "foo.[bar do; 1; end]"
    parses "foo.[bar do; 1; end]"
+    parses "foo.[](bar { 1 })"
    parses "foo.[](bar { 1 })"
+    parses "foo[bar do; 1; end]"
    parses "foo[bar do; 1; end]"
+  parses "foo(a: n <= 2)"
  parses "foo(a: n <= 2)"
+  parses "foo.!~(1, 2) { 3 }"
  parses "foo.!~(1, 2) { 3 }"
+  parses "def foo(&@block); end"
  parses "def foo(&@block); end"
+  parses "foo(n << 2)"
  parses "foo(n << 2)"
+  parses "foo(Bar { 1 })"
  parses "foo(Bar { 1 })"
+  says syntax error on "foo[1] = return"
  says syntax error on "foo[1] = return"
+  says syntax error on "break &* 1"
  says syntax error on "break &* 1"
+  says syntax error on "foo { |(protected)| }"
  says syntax error on "foo { |(protected)| }"
+  parses "1 * 2"
  parses "1 * 2"
+  parses "->Foo.>>(Int32)"
  parses "->Foo.>>(Int32)"
+  parses "*_ = 1, 2"
  parses "*_ = 1, 2"
+  parses "while true; end\nif true; end"
  parses "while true; end\nif true; end"
+  parses "foo = 1; ->foo.|(Int32)"
  parses "foo = 1; ->foo.|(Int32)"
+  parses "foo %Q"
  parses "foo %Q"
+  parses "foo.&(1, 2) { 3 }"
  parses "foo.&(1, 2) { 3 }"
+  parses "foo(a: n // 2)"
  parses "foo(a: n // 2)"
+  parses "def foo(x @macro); end"
  parses "def foo(x @macro); end"
+  parses "def self.|; end;"
  parses "def self.|; end;"
+  parses "a.b ^=\n1"
  parses "a.b ^=\n1"
+  parses "foo(bar:\"a\", baz:\"b\")"
  parses "foo(bar:\"a\", baz:\"b\")"
+  says syntax error on ":bar foo"
  says syntax error on ":bar foo"
+  says syntax error on "1 ? : 2 : 3"
  says syntax error on "1 ? : 2 : 3"
+  says syntax error on "enum Foo < UInt16; end"
  says syntax error on "enum Foo < UInt16; end"
+  says syntax error on "def foo(include); end"
  says syntax error on "def foo(include); end"
+  parses "foo do; 1; end"
  parses "foo do; 1; end"
+  parses "macro foo; 1 + 2 {{ foo }} 3 + 4; end"
  parses "macro foo; 1 + 2 {{ foo }} 3 + 4; end"
+  parses "foo.<= 1, 2"
  parses "foo.<= 1, 2"
+  parses "def foo(x @in); end"
  parses "def foo(x @in); end"
+  parses "abstract struct Foo; end"
  parses "abstract struct Foo; end"
+  parses "lib LibC\nfun getchar(...)\nend"
  parses "lib LibC\nfun getchar(...)\nend"
+  says syntax error on "a.[]() = 1"
  says syntax error on "a.[]() = 1"
+  parses "def foo : Int32\n1\nend"
  parses "def foo : Int32\n1\nend"
+  parses "@@foo = 1"
  parses "@@foo = 1"
+  says syntax error on "foo { |(a b)| }"
  says syntax error on "foo { |(a b)| }"
+  parses "x.y=(1).to_s"
  parses "x.y=(1).to_s"
+  parses "foo.is_a?(Foo | Bar)"
  parses "foo.is_a?(Foo | Bar)"
+  parses "->Foo.foo!"
  parses "->Foo.foo!"
+  parses "Foo.bar x.y do\nend"
  parses "Foo.bar x.y do\nend"
+  says syntax error on "Foo(T U)"
  says syntax error on "Foo(T U)"
+  parses ":!="
  parses ":!="
+  says syntax error on "next % 1"
  says syntax error on "next % 1"
+  parses "lib LibC\n$errno : Int32\n$errno2 : Int32\nend"
  parses "lib LibC\n$errno : Int32\n$errno2 : Int32\nend"
+  parses "abstract def foo(x) : Int32"
  parses "abstract def foo(x) : Int32"
+  says syntax error on "foo(**bar, out x)"
  says syntax error on "foo(**bar, out x)"
+  parses "macro foo;var unless true;end"
  parses "macro foo;var unless true;end"
+  says syntax error on "1 unless break"
  says syntax error on "1 unless break"
+  parses "foo(n - 2)"
  parses "foo(n - 2)"
+  says syntax error on "<<-HERE\n   One\n  \#{1}\n wrong\n  HERE"
  says syntax error on "<<-HERE\n   One\n  \#{1}\n wrong\n  HERE"
+  says syntax error on "{1, ->do\n|x| x\end }"
  says syntax error on "{1, ->do\n|x| x\end }"
+  parses "f.x ^= 2"
  parses "f.x ^= 2"
+  parses "foo./ 1, 2"
  parses "foo./ 1, 2"
+  parses "1.tap do; 1; rescue; 2; end"
  parses "1.tap do; 1; rescue; 2; end"
+  parses "asm(\"nop\" \n)"
  parses "asm(\"nop\" \n)"
+  parses "foo { |a, b| 1 }"
  parses "foo { |a, b| 1 }"
+  parses "def foo(x @@next); end"
  parses "def foo(x @@next); end"
+  parses "def foo(@@struct); end"
  parses "def foo(@@struct); end"
+  parses "yield;"
  parses "yield;"
+  says syntax error on "1 2"
  says syntax error on "1 2"
+  parses "lib LibC\nfun getchar : (->)?\nend"
  parses "lib LibC\nfun getchar : (->)?\nend"
+  says syntax error on "foo { |(out)| }"
  says syntax error on "foo { |(out)| }"
+  parses "1 \\\n + 2"
  parses "1 \\\n + 2"
+  parses "{\n1\n}"
  parses "{\n1\n}"
+  parses "foo = 1; ->foo.&*(Int32)"
  parses "foo = 1; ->foo.&*(Int32)"
+  parses "a.b -=\n1"
  parses "a.b -=\n1"
+  parses "1.=~(2)"
  parses "1.=~(2)"
+  says syntax error on "def foo(**x, &x); end"
  says syntax error on "def foo(**x, &x); end"
+  says syntax error on "foo **bar, 1"
  says syntax error on "foo **bar, 1"
+  parses "foo\n\n  .bar"
  parses "foo\n\n  .bar"
+  parses "~ 1"
  parses "~ 1"
+  parses "foo &.!"
  parses "foo &.!"
+  says syntax error on "a = 1; a += return"
  says syntax error on "a = 1; a += return"
+  parses "foo(n ^ 2)"
  parses "foo(n ^ 2)"
+  parses "{} of Int32 -> Int32 => Int32"
  parses "{} of Int32 -> Int32 => Int32"
+  says syntax error on "macro foo&&;end"
  says syntax error on "macro foo&&;end"
+  parses "-> do end"
  parses "-> do end"
+  says syntax error on "def foo @@var, &block; end"
  says syntax error on "def foo @@var, &block; end"
+  parses "f.x = - 1"
  parses "f.x = - 1"
+  parses "foo(0, n * 2)"
  parses "foo(0, n * 2)"
+  parses "Foo::Bar"
  parses "Foo::Bar"
+  parses "def >; end;"
  parses "def >; end;"
+  parses "foo(regex: //)"
  parses "foo(regex: //)"
+  says syntax error on "next.foo"
  says syntax error on "next.foo"
+  says syntax error on "def foo var\n end"
  says syntax error on "def foo var\n end"
+  says syntax error on "foo { |nil| }"
  says syntax error on "foo { |nil| }"
+  parses "macro foo;bar{% unless x %}body{% end %}baz;end"
  parses "macro foo;bar{% unless x %}body{% end %}baz;end"
+  parses "instance_alignof(\n  Int32\n)"
  parses "instance_alignof(\n  Int32\n)"
+  parses "def foo(x @asm); end"
  parses "def foo(x @asm); end"
+  parses "->::foo!"
  parses "->::foo!"
+  parses "asm : Int32"
  parses "asm : Int32"
+  says syntax error on "def foo\nstruct\nend"
  says syntax error on "def foo\nstruct\nend"
+  says syntax error on "foo { |(macro)| }"
  says syntax error on "foo { |(macro)| }"
+  parses "foo.<(1, 2) { 3 }"
  parses "foo.<(1, 2) { 3 }"
+  says syntax error on "self += 1"
  says syntax error on "self += 1"
+  parses "lib LibC; Foo = 1; end"
  parses "lib LibC; Foo = 1; end"
+  parses "def foo(@@asm); end"
  parses "def foo(@@asm); end"
+  parses "foo(z: 0, a: n ** 2)"
  parses "foo(z: 0, a: n ** 2)"
+  parses "def -(); end;"
  parses "def -(); end;"
+  says syntax error on "foo { |(unless)| }"
  says syntax error on "foo { |(unless)| }"
+  says syntax error on "Foo(x: T y: U)"
  says syntax error on "Foo(x: T y: U)"
+  parses "as?(Bar)"
  parses "as?(Bar)"
+  parses "property else : Int32"
  parses "property else : Int32"
+  parses "@a : Foo"
  parses "@a : Foo"
+  parses "def +; end;"
  parses "def +; end;"
+  parses "a = 1; class Foo; @x = a; end"
  parses "a = 1; class Foo; @x = a; end"
+  says syntax error on "def foo &block ; end"
  says syntax error on "def foo &block ; end"
+  says syntax error on "return ** 1"
  says syntax error on "return ** 1"
+  parses "responds_to?(:foo)"
  parses "responds_to?(:foo)"
+  parses "def foo(var : self?); end"
  parses "def foo(var : self?); end"
+  parses "{A::B => 1, C::D => 2}"
  parses "{A::B => 1, C::D => 2}"
+  parses "/foo/m"
  parses "/foo/m"
+  parses "{a: 1}"
  parses "{a: 1}"
+  parses "<<-HERE\n  \#{1} \#{2}\n  HERE"
  parses "<<-HERE\n  \#{1} \#{2}\n  HERE"
+  parses "enum Foo; A = 1\ndef foo; 1; end\ndef bar; 2; end\nend"
  parses "enum Foo; A = 1\ndef foo; 1; end\ndef bar; 2; end\nend"
+  says syntax error on "foo { |(def)| }"
  says syntax error on "foo { |(def)| }"
+  parses "foo do |a|; 1; end"
  parses "foo do |a|; 1; end"
+  says syntax error on "@:Foo"
  says syntax error on "@:Foo"
+  parses "foo &./(1)"
  parses "foo &./(1)"
+  parses "def foo(@@offsetof); end"
  parses "def foo(@@offsetof); end"
+  parses "def foo(var : self); end"
  parses "def foo(var : self); end"
+  parses "call ->foo"
  parses "call ->foo"
+  parses "def =~(); end"
  parses "def =~(); end"
+  parses "def foo(@[Foo] *args); end"
  parses "def foo(@[Foo] *args); end"
+  parses "foo(z: 0, a: n ^ 2)"
  parses "foo(z: 0, a: n ^ 2)"
+  parses "case 1\nin nil; 2; end"
  parses "case 1\nin nil; 2; end"
+  parses "def foo(@pointerof); end"
  parses "def foo(@pointerof); end"
+  parses "def foo(bar = 1\n); 2; end"
  parses "def foo(bar = 1\n); 2; end"
+  parses "foo.*"
  parses "foo.*"
+  parses "'a'"
  parses "'a'"
+  parses "def foo(@select); end"
  parses "def foo(@select); end"
+  parses "property with : Int32"
  parses "property with : Int32"
+  parses "def self.~(); end;"
  parses "def self.~(); end;"
+  says syntax error on "def foo?=(x); end"
  says syntax error on "def foo?=(x); end"
+  says syntax error on "if 1\n  foo 1,\nend"
  says syntax error on "if 1\n  foo 1,\nend"
+  parses "f.x **= 2"
  parses "f.x **= 2"
+  parses "<<-HERE\nHERE"
  parses "<<-HERE\nHERE"
+  parses "break 1"
  parses "break 1"
+  parses "macro foo(\na = 0\n)\nend"
  parses "macro foo(\na = 0\n)\nend"
+  says syntax error on "break << 1"
  says syntax error on "break << 1"
+  parses "case {1}\nin {_}; 2; end"
  parses "case {1}\nin {_}; 2; end"
+  parses "lib LibC\nfun getchar(a : Int, b : Float) : Int\nend"
  parses "lib LibC\nfun getchar(a : Int, b : Float) : Int\nend"
+  says syntax error on "case 1 == 1 a; when 2; end"
  says syntax error on "case 1 == 1 a; when 2; end"
+  parses "  macro foo(\n    @[Foo]\n    id,\n    @[Bar] name\n  );end"
  parses "  macro foo(\n    @[Foo]\n    id,\n    @[Bar] name\n  );end"
+  says syntax error on "return[0]= 1"
  says syntax error on "return[0]= 1"
+  parses "def foo(@until); end"
  parses "def foo(@until); end"
+  parses "macro foo(x)\n 1 + 2; end"
  parses "macro foo(x)\n 1 + 2; end"
+  parses "def self.>(); end;"
  parses "def self.>(); end;"
+  parses "lib LibC\nfun getchar\nend"
  parses "lib LibC\nfun getchar\nend"
+  parses "a = 1; a +=\n1"
  parses "a = 1; a +=\n1"
+  parses "a = 1; a ||= 1"
  parses "a = 1; a ||= 1"
+  parses "foo.[]=(1, 2) { 3 }"
  parses "foo.[]=(1, 2) { 3 }"
+  parses "x = 0; a, b = x += 1"
  parses "x = 0; a, b = x += 1"
+  says syntax error on "require 1"
  says syntax error on "require 1"
+  parses "foo &.as(T)"
  parses "foo &.as(T)"
+  parses "  def foo(\n    @[Foo]\n    id : Int32,\n    @[Bar] name : String\n  ); end"
  parses "  def foo(\n    @[Foo]\n    id : Int32,\n    @[Bar] name : String\n  ); end"
+  parses "{% begin %}%x[ %s ]{% end %}"
  parses "{% begin %}%x[ %s ]{% end %}"
+  parses "1 ensure 2 if 3"
  parses "1 ensure 2 if 3"
+  parses "{{ foo.nil?(foo) }}"
  parses "{{ foo.nil?(foo) }}"
+  parses "def >=(*args, **opts); end"
  parses "def >=(*args, **opts); end"
+  parses "foo(z: 0, a: n << 2)"
  parses "foo(z: 0, a: n << 2)"
+  says syntax error on "{a: 1 b: 2}"
  says syntax error on "{a: 1 b: 2}"
+  parses "(a;\nb)"
  parses "(a;\nb)"
+  parses "def foo(require foo); end"
  parses "def foo(require foo); end"
+  parses "foo (1 + 2), 3"
  parses "foo (1 + 2), 3"
+  parses "Foo(\"foo bar\": U)"
  parses "Foo(\"foo bar\": U)"
+  parses "foo(a: 1, &block)"
  parses "foo(a: 1, &block)"
+  parses "a = 1; a |=\n1"
  parses "a = 1; a |=\n1"
+  says syntax error on "def foo(private); end"
  says syntax error on "def foo(private); end"
+  parses "def <=(*args, **opts, &); end"
  parses "def <=(*args, **opts, &); end"
+  parses "f.x %= 2"
  parses "f.x %= 2"
+  parses "Foo({->})"
  parses "Foo({->})"
+  parses "break;"
  parses "break;"
+  parses "def foo; x { |_| 1 }; end"
  parses "def foo; x { |_| 1 }; end"
+  parses "class Foo; end"
  parses "class Foo; end"
+  parses "case 1\nwhen .as(T)\n2\nend"
  parses "case 1\nwhen .as(T)\n2\nend"
+  parses "foo.<= do end"
  parses "foo.<= do end"
+  parses "foo &.nil?"
  parses "foo &.nil?"
+  parses "def self.=~(); end;"
  parses "def self.=~(); end;"
+  parses "foo(z: 0, a: n - 2)"
  parses "foo(z: 0, a: n - 2)"
+  says syntax error on "<<-'HERE\n"
  says syntax error on "<<-'HERE\n"
+  parses "macro <<;end"
  parses "macro <<;end"
+  parses "a = 1; a ^= 1"
  parses "a = 1; a ^= 1"
+  parses "instance_sizeof : Int32"
  parses "instance_sizeof : Int32"
+  says syntax error on "{one: :two, three: :four} of Symbol => Symbol"
  says syntax error on "{one: :two, three: :four} of Symbol => Symbol"
+  parses "foo(z: 0, a: n &* 2)"
  parses "foo(z: 0, a: n &* 2)"
+  parses "typeof(a = 1); a"
  parses "typeof(a = 1); a"
+  parses "def foo(a, &block : Int -> ); end"
  parses "def foo(a, &block : Int -> ); end"
+  says syntax error on "foo **bar, out x"
  says syntax error on "foo **bar, out x"
+  parses "def foo(nil foo); end"
  parses "def foo(nil foo); end"
+  parses ":&"
  parses ":&"
+  says syntax error on "foo { |x, (x)| }"
  says syntax error on "foo { |x, (x)| }"
+  parses "foo[\nfoo[\n1\n]\n]"
  parses "foo[\nfoo[\n1\n]\n]"
+  says syntax error on "until break; end"
  says syntax error on "until break; end"
+  parses "macro foo(x); 1 + 2; end"
  parses "macro foo(x); 1 + 2; end"
+  parses "def self.<=; end;"
  parses "def self.<=; end;"
+  parses "lib LibC; fun foo : Int**; end"
  parses "lib LibC; fun foo : Int**; end"
+  parses "foo.[0]"
  parses "foo.[0]"
+  says syntax error on "*a, *b = 1"
  says syntax error on "*a, *b = 1"
+  parses "{\n{1}\n}"
  parses "{\n{1}\n}"
+  parses "foo(&.bar.baz)"
  parses "foo(&.bar.baz)"
+  parses "1 &+ 2"
  parses "1 &+ 2"
+  parses "<<-'HERE COMES HEREDOC'\n  hello \\n world\n  \#{1}\n  HERE COMES HEREDOC"
  parses "<<-'HERE COMES HEREDOC'\n  hello \\n world\n  \#{1}\n  HERE COMES HEREDOC"
+  says syntax error on "next &** 1"
  says syntax error on "next &** 1"
+  says syntax error on "+break"
  says syntax error on "+break"
+  says syntax error on "def foo(foo offsetof); end"
  says syntax error on "def foo(foo offsetof); end"
+  parses "-1.0_f32"
  parses "-1.0_f32"
+  parses "/=/"
  parses "/=/"
+  says syntax error on "break.foo"
  says syntax error on "break.foo"
+  parses "foo..2"
  parses "foo..2"
+  parses "foo &.block = 0"
  parses "foo &.block = 0"
+  parses "qux \"foo\#{bar do end}baz\""
  parses "qux \"foo\#{bar do end}baz\""
+  parses "a = 1; a //= 1"
  parses "a = 1; a //= 1"
+  parses "*a.foo, a.bar = 1"
  parses "*a.foo, a.bar = 1"
+  parses "def self.foo=()\n1\nend"
  parses "def self.foo=()\n1\nend"
+  parses "Foo(typeof(1))"
  parses "Foo(typeof(1))"
+  says syntax error on "return < 1"
  says syntax error on "return < 1"
+  parses "foo[*baz]"
  parses "foo[*baz]"
+  says syntax error on "{% unless 1 %} 2 {% elsif 3 %} 3 {% end %}"
  says syntax error on "{% unless 1 %} 2 {% elsif 3 %} 3 {% end %}"
+  parses "@[Foo(\"hello\")]"
  parses "@[Foo(\"hello\")]"
+  parses "def self.+(); end;"
  parses "def self.+(); end;"
+  parses "def foo(x @@return); end"
  parses "def foo(x @@return); end"
+  parses "foo\n  #comment\n  .bar"
  parses "foo\n  #comment\n  .bar"
+  parses "a = 1; a -= 1"
  parses "a = 1; a -= 1"
+  parses "puts {{1}}"
  parses "puts {{1}}"
+  parses "1.as(\n  Int32\n)"
  parses "1.as(\n  Int32\n)"
+  parses "foo &.block(1)"
  parses "foo &.block(1)"
+  parses "macro foo\n\"\\\\\"\nend"
  parses "macro foo\n\"\\\\\"\nend"
+  parses "puts ::foo"
  parses "puts ::foo"
+  parses "a : Foo()[12]"
  parses "a : Foo()[12]"
+  parses "{{ 1 // 2 }}"
  parses "{{ 1 // 2 }}"
+  parses "enum Foo; macro foo;end; end"
  parses "enum Foo; macro foo;end; end"
+  parses "def >>(); end"
  parses "def >>(); end"
+  parses "def foo(@self); end"
  parses "def foo(@self); end"
+  parses "{% begin %}%q< %s >{% end %}"
  parses "{% begin %}%q< %s >{% end %}"
+  parses "next *{1, 2}"
  parses "next *{1, 2}"
+  parses "foo /;/"
  parses "foo /;/"
+  parses "{% begin %}{% if true %}if true{% end %}\n{% if true %}end{% end %}{% end %}"
  parses "{% begin %}{% if true %}if true{% end %}\n{% if true %}end{% end %}{% end %}"
+  says syntax error on "*a"
  says syntax error on "*a"
+  parses "def foo(x @nil); end"
  parses "def foo(x @nil); end"
+  parses "def foo(\n&block\n); end"
  parses "def foo(\n&block\n); end"
+  parses "def foo(var : self*); end"
  parses "def foo(var : self*); end"
+  parses "foo &.block=(0)"
  parses "foo &.block=(0)"
+  parses "->::Foo.foo="
  parses "->::Foo.foo="
+  parses "foo(1, **bar, &block)"
  parses "foo(1, **bar, &block)"
+  parses "f.x -= 2"
  parses "f.x -= 2"
+  parses "->Foo.>=(Int32)"
  parses "->Foo.>=(Int32)"
+  parses "foo.responds_to?(:foo)"
  parses "foo.responds_to?(:foo)"
+  parses "macro <;end"
  parses "macro <;end"
+  parses "property case : Int32"
  parses "property case : Int32"
+  parses "macro &**;end"
  parses "macro &**;end"
+  parses "a = 1; a **= 1"
  parses "a = 1; a **= 1"
+  parses "def foo(@alias); end"
  parses "def foo(@alias); end"
+  says syntax error on "def foo\nalias\nend"
  says syntax error on "def foo\nalias\nend"
+  parses "def foo(yield foo); end"
  parses "def foo(yield foo); end"
+  parses "{% begin %}%( %s ){% end %}"
  parses "{% begin %}%( %s ){% end %}"
+  parses "foo%q"
  parses "foo%q"
+  parses "def foo(@include); end"
  parses "def foo(@include); end"
+  parses "asm(\"nop\" : : )"
  parses "asm(\"nop\" : : )"
+  says syntax error on "def foo(foo end); end"
  says syntax error on "def foo(foo end); end"
+  parses "{% begin %}%q{ %s }{% end %}"
  parses "{% begin %}%q{ %s }{% end %}"
+  parses "property begin : Int32"
  parses "property begin : Int32"
+  parses "x = 1; foo x {\n}"
  parses "x = 1; foo x {\n}"
+  parses "foo(0, n / 2)"
  parses "foo(0, n / 2)"
+  parses "<<-HERE\nHello, mom! I am HERE.\nHER dress is beautiful.\nHE is OK.\n  HERESY\nHERE"
  parses "<<-HERE\nHello, mom! I am HERE.\nHER dress is beautiful.\nHE is OK.\n  HERESY\nHERE"
+  says syntax error on "1 until 3"
  says syntax error on "1 until 3"
+  parses "foo 1\n"
  parses "foo 1\n"
+  parses "class Foo(T, *U); end"
  parses "class Foo(T, *U); end"
+  parses "lib LibC; {% if 1 %}2{% end %}; end"
  parses "lib LibC; {% if 1 %}2{% end %}; end"
+  says syntax error on "{{ {% begin %} }}"
  says syntax error on "{{ {% begin %} }}"
+  parses "def foo\n1\nend\nif 1\nend"
  parses "def foo\n1\nend\nif 1\nend"
+  parses "/foo/i"
  parses "/foo/i"
+  parses "\"hello \" \\\n \"world\""
  parses "\"hello \" \\\n \"world\""
+  parses "1 / 2"
  parses "1 / 2"
+  parses "{[] of Foo, ::foo}"
  parses "{[] of Foo, ::foo}"
+  says syntax error on "def foo(offsetof); end"
  says syntax error on "def foo(offsetof); end"
+  parses "a.b /=\n1"
  parses "a.b /=\n1"
+  parses "foo(0, n >= 2)"
  parses "foo(0, n >= 2)"
+  says syntax error on "def foo(x = 1, y); end"
  says syntax error on "def foo(x = 1, y); end"
+  says syntax error on "return 1 foo"
  says syntax error on "return 1 foo"
+  parses "1 - 2"
  parses "1 - 2"
+  parses "abstract def foo"
  parses "abstract def foo"
+  parses "a = 1; a %= 1"
  parses "a = 1; a %= 1"
+  says syntax error on "break ** 1"
  says syntax error on "break ** 1"
+  parses "asm(\"nop\" :: : :)"
  parses "asm(\"nop\" :: : :)"
+  says syntax error on "next[0]= 1"
  says syntax error on "next[0]= 1"
+  parses "foo.bar(1).baz"
  parses "foo.bar(1).baz"
+  parses "foo %x"
  parses "foo %x"
+  parses "false : Int32"
  parses "false : Int32"
+  says syntax error on "foo { |(return)| }"
  says syntax error on "foo { |(return)| }"
+  parses "foo(0, n & 2)"
  parses "foo(0, n & 2)"
+  parses "require \"foo\""
  parses "require \"foo\""
+  parses "foo(0, n &- 2)"
  parses "foo(0, n &- 2)"
+  parses "(bar do\nend)"
  parses "(bar do\nend)"
+  parses "lib LibC\nfun getchar(Int, Float)\nend"
  parses "lib LibC\nfun getchar(Int, Float)\nend"
+  says syntax error on "self = 1"
  says syntax error on "self = 1"
+  says syntax error on "1 as? Bar"
  says syntax error on "1 as? Bar"
+  parses "[1] /2"
  parses "[1] /2"
+  says syntax error on "{1, ->{ |x| x } }"
  says syntax error on "{1, ->{ |x| x } }"
+  parses "property break : Int32"
  parses "property break : Int32"
+  parses "__DIR__"
  parses "__DIR__"
+  parses "foo out x; x"
  parses "foo out x; x"
+  parses "foo &.as?(T)"
  parses "foo &.as?(T)"
+  parses "yield 1"
  parses "yield 1"
+  parses "property true : Int32"
  parses "property true : Int32"
+  says syntax error on "1 if return"
  says syntax error on "1 if return"
+  parses "foo -1.0, -2.0"
  parses "foo -1.0, -2.0"
+  says syntax error on "<<-FOO\n1\nFOO.bar"
  says syntax error on "<<-FOO\n1\nFOO.bar"
+  parses "foo.Bar"
  parses "foo.Bar"
+  says syntax error on "next | 1"
  says syntax error on "next | 1"
+  parses "x = 1; foo x do\nend"
  parses "x = 1; foo x do\nend"
+  parses ":!~"
  parses ":!~"
+  parses "x : *T -> R"
  parses "x : *T -> R"
+  says syntax error on "return <= 1"
  says syntax error on "return <= 1"
+  parses "def foo(@@instance_sizeof); end"
  parses "def foo(@@instance_sizeof); end"
+  parses "1\n-2"
  parses "1\n-2"
+  says syntax error on "def foo(foo nil); end"
  says syntax error on "def foo(foo nil); end"
+  parses "def self.!~; end;"
  parses "def self.!~; end;"
+  parses "{% begin %}%Q[ %s ]{% end %}"
  parses "{% begin %}%Q[ %s ]{% end %}"
+  says syntax error on "return[]"
  says syntax error on "return[]"
+  parses "x = 2; foo do bar x end"
  parses "x = 2; foo do bar x end"
+  parses "foo *bar"
  parses "foo *bar"
+  parses "enum Foo; A = 1\ndef foo; 1; end; end"
  parses "enum Foo; A = 1\ndef foo; 1; end; end"
+  parses "->::Foo.foo?"
  parses "->::Foo.foo?"
+  parses "foo &.bar.baz"
  parses "foo &.bar.baz"
+  parses "foo(a: n / 2)"
  parses "foo(a: n / 2)"
+  parses "f.x *= 2"
  parses "f.x *= 2"
+  parses "foo = 1; ->foo.&+(Int32)"
  parses "foo = 1; ->foo.&+(Int32)"
+  parses "{% begin %}%q| %s |{% end %}"
  parses "{% begin %}%q| %s |{% end %}"
+  says syntax error on "def is_a?; end"
  says syntax error on "def is_a?; end"
+  parses "<<-SOME\n  Sa\n  Se\n  SOME"
  parses "<<-SOME\n  Sa\n  Se\n  SOME"
+  says syntax error on "select\nwhen 1\n2\nend"
  says syntax error on "select\nwhen 1\n2\nend"
+  parses "asm(\"nop\" : \"a\"(0), \"b\"(1) : \"c\"(2), \"d\"(3))"
  parses "asm(\"nop\" : \"a\"(0), \"b\"(1) : \"c\"(2), \"d\"(3))"
+  parses "alias Foo::Bar = Baz"
  parses "alias Foo::Bar = Baz"
+  parses "{% a = 1 %}"
  parses "{% a = 1 %}"
+  parses "case / /\nwhen / /\n/ /\nelse\n/ /\nend"
  parses "case / /\nwhen / /\n/ /\nelse\n/ /\nend"
+  parses "def >=(other, file = 1); end"
  parses "def >=(other, file = 1); end"
+  parses "def self.<; end;"
  parses "def self.<; end;"
+  parses "def foo(@@if); end"
  parses "def foo(@@if); end"
+  says syntax error on "foo { |(begin)| }"
  says syntax error on "foo { |(begin)| }"
+  parses "macro foo\n'\\\\'\nend"
  parses "macro foo\n'\\\\'\nend"
+  parses "next : Int32"
  parses "next : Int32"
+  says syntax error on "Set {1, 2, 3} of Int32"
  says syntax error on "Set {1, 2, 3} of Int32"
+  says syntax error on "return % 1"
  says syntax error on "return % 1"
+  says syntax error on "def foo(foo protected); end"
  says syntax error on "def foo(foo protected); end"
+  parses "foo(a: n * 2)"
  parses "foo(a: n * 2)"
+  parses "def foo(x @module); end"
  parses "def foo(x @module); end"
+  parses "macro foo;%var{1, x} = hello;end"
  parses "macro foo;%var{1, x} = hello;end"
+  parses "1 +\n2"
  parses "1 +\n2"
+  parses "call foo : A, end : B"
  parses "call foo : A, end : B"
+  parses "require \"foo\"; [1]"
  parses "require \"foo\"; [1]"
+  says syntax error on "{a[]: 1}"
  says syntax error on "{a[]: 1}"
+  parses "Foo(typeof(1), typeof(2))"
  parses "Foo(typeof(1), typeof(2))"
+  says syntax error on "def foo(typeof); end"
  says syntax error on "def foo(typeof); end"
+  parses "1..;"
  parses "1..;"
+  says syntax error on "def foo x y; end"
  says syntax error on "def foo x y; end"
+  parses "->@foo.foo?"
  parses "->@foo.foo?"
+  parses "2 * 3 + 4 * 5"
  parses "2 * 3 + 4 * 5"
+  parses "case 1; when 1 then 2; else; 3; end"
  parses "case 1; when 1 then 2; else; 3; end"
+  parses "foo 1"
  parses "foo 1"
+  parses "foo(n + 2)"
  parses "foo(n + 2)"
+  parses "n &+ 2"
  parses "n &+ 2"
+  parses "macro foo;%var if true;end"
  parses "macro foo;%var if true;end"
+  parses "[] of ->\n"
  parses "[] of ->\n"
+  parses "def foo(@protected); end"
  parses "def foo(@protected); end"
+  parses "a.b() /3"
  parses "a.b() /3"
+  parses "[1, 2]"
  parses "[1, 2]"
+  parses "1/2"
  parses "1/2"
+  parses "[..2]"
  parses "[..2]"
+  says syntax error on "next ** 1"
  says syntax error on "next ** 1"
+  parses "def foo(while foo); end"
  parses "def foo(while foo); end"
+  parses "foo(bar:a, baz:b)"
  parses "foo(bar:a, baz:b)"
+  parses "def foo(@fun); end"
  parses "def foo(@fun); end"
+  parses "->::foo="
  parses "->::foo="
+  says syntax error on "macro def foo : String; 1; end"
  says syntax error on "macro def foo : String; 1; end"
+  parses "macro >;end"
  parses "macro >;end"
+  parses "foo.|"
  parses "foo.|"
+  parses "begin; 1; rescue ex : Foo | Bar; 2; end"
  parses "begin; 1; rescue ex : Foo | Bar; 2; end"
+  parses "case {1, 2}\nwhen {.foo, .bar}\n5\nend"
  parses "case {1, 2}\nwhen {.foo, .bar}\n5\nend"
+  parses "def foo; yield 1; end"
  parses "def foo; yield 1; end"
+  says syntax error on "def foo(foo true); end"
  says syntax error on "def foo(foo true); end"
+  parses "n - 2"
  parses "n - 2"
+  parses "@[Foo::Bar]"
  parses "@[Foo::Bar]"
+  says syntax error on "def foo(in); end"
  says syntax error on "def foo(in); end"
+  parses "macro foo;unless var;true;end;end"
  parses "macro foo;unless var;true;end;end"
+  parses "macro foo;bar{% for x, y in z %}body{% end %}baz;end"
  parses "macro foo;bar{% for x, y in z %}body{% end %}baz;end"
+  parses "n ^ 2"
  parses "n ^ 2"
+  parses "<<-HERE1; <<-HERE2\nHERE1\nHERE2"
  parses "<<-HERE1; <<-HERE2\nHERE1\nHERE2"
+  says syntax error on "foo { |protected| }"
  says syntax error on "foo { |protected| }"
+  parses "foo.** 1, 2"
  parses "foo.** 1, 2"
+  says syntax error on "def foo &block : Int -> Double ; end"
  says syntax error on "def foo &block : Int -> Double ; end"
+  parses "def foo(x) : Int32\n1\nend"
  parses "def foo(x) : Int32\n1\nend"
+  parses "foo.**(1, 2) { 3 }"
  parses "foo.**(1, 2) { 3 }"
+  parses "def foo(x @var); end"
  parses "def foo(x @var); end"
+  parses "until : Int32"
  parses "until : Int32"
+  parses "1 % 2"
  parses "1 % 2"
+  says syntax error on "*a, 1 = 2"
  says syntax error on "*a, 1 = 2"
+  parses "a = 1; a <<= 1"
  parses "a = 1; a <<= 1"
+  parses "1 -2.0"
  parses "1 -2.0"
+  says syntax error on "until next; end"
  says syntax error on "until next; end"
+  parses "{% if true %}\n{% end %}\n{% if true %}\n{% end %}"
  parses "{% if true %}\n{% end %}\n{% if true %}\n{% end %}"
+  parses "return {1 => 2}"
  parses "return {1 => 2}"
+  parses "foo.is_a?(Const)"
  parses "foo.is_a?(Const)"
+  parses "def foo(a, &block : Foo); end"
  parses "def foo(a, &block : Foo); end"
+  says syntax error on "offsetof(X, 'c')"
  says syntax error on "offsetof(X, 'c')"
+  parses "macro |;end"
  parses "macro |;end"
+  parses "property next : Int32"
  parses "property next : Int32"
+  parses "->@@foo.foo?"
  parses "->@@foo.foo?"
+  says syntax error on "foo(next)"
  says syntax error on "foo(next)"
+  parses "<<-'HERE'\n  hello \\n world\n  \#{1}\n  HERE"
  parses "<<-'HERE'\n  hello \\n world\n  \#{1}\n  HERE"
+  parses "def foo(x @select); end"
  parses "def foo(x @select); end"
+  parses "def !=(*args, **opts, &); end"
  parses "def !=(*args, **opts, &); end"
+  parses "lib LibC; fun foo(a : Int**); end"
  parses "lib LibC; fun foo(a : Int**); end"
+  says syntax error on "def foo(foo yield); end"
  says syntax error on "def foo(foo yield); end"
+  parses "case\nwhen true\n1\nend"
  parses "case\nwhen true\n1\nend"
+  parses "->::Foo.foo!"
  parses "->::Foo.foo!"
+  says syntax error on "->::@@foo.foo"
  says syntax error on "->::@@foo.foo"
+  says syntax error on "foo **bar, *x"
  says syntax error on "foo **bar, *x"
+  parses "macro foo;bar{% if x %}body{% else %}body2{%end%}baz;end"
  parses "macro foo;bar{% if x %}body{% else %}body2{%end%}baz;end"
+  parses "def foo(x @@instance_sizeof); end"
  parses "def foo(x @@instance_sizeof); end"
+  says syntax error on "A = B = 1"
  says syntax error on "A = B = 1"
+  parses "def foo(x @def); end"
  parses "def foo(x @def); end"
+  parses "instance_alignof(X)"
  parses "instance_alignof(X)"
+  parses "{1}"
  parses "{1}"
+  parses "self"
  parses "self"
+  says syntax error on "enum Foo; A B; end"
  says syntax error on "enum Foo; A B; end"
+  parses "[\n1,2\n]"
  parses "[\n1,2\n]"
+  parses "/foo/"
  parses "/foo/"
+  says syntax error on "break &** 1"
  says syntax error on "break &** 1"
+  parses "foo %x()"
  parses "foo %x()"
+  says syntax error on "def f end"
  says syntax error on "def f end"
+  sets correct location of private method in enum
  sets correct location of private method in enum
+  parses "1 & 2"
  parses "1 & 2"
+  parses "def foo(@case); end"
  parses "def foo(@case); end"
+  parses "property if : Int32"
  parses "property if : Int32"
+  says syntax error on "def self.responds_to?; end"
  says syntax error on "def self.responds_to?; end"
+  parses "foo(0, n | 2)"
  parses "foo(0, n | 2)"
+  parses "def foo(@@include); end"
  parses "def foo(@@include); end"
+  parses "{% begin %}%q[ %s ]{% end %}"
  parses "{% begin %}%q[ %s ]{% end %}"
+  parses "property end : Int32"
  parses "property end : Int32"
+  parses "n &** 2"
  parses "n &** 2"
+  parses "break 1, *2"
  parses "break 1, *2"
+  parses "b.c &&= 1"
  parses "b.c &&= 1"
+  parses "abstract : Int32"
  parses "abstract : Int32"
+  parses "->Foo.[](Int32)"
  parses "->Foo.[](Int32)"
+  parses "a : Foo | Int32"
  parses "a : Foo | Int32"
+  parses "1 ? a : b ? c : 3"
  parses "1 ? a : b ? c : 3"
+  says syntax error on "{\n1 => 2\n3 => 4\n}"
  says syntax error on "{\n1 => 2\n3 => 4\n}"
+  says syntax error on "a() += 1"
  says syntax error on "a() += 1"
+  parses "foo.as(Bar)"
  parses "foo.as(Bar)"
+  parses "{% if x %}body{% end %}"
  parses "{% if x %}body{% end %}"
+  parses "def foo(var1, var2); end"
  parses "def foo(var1, var2); end"
+  says syntax error on "foo { |(typeof)| }"
  says syntax error on "foo { |(typeof)| }"
+  parses "foo &->bar"
  parses "foo &->bar"
+  says syntax error on "def self.as?; end"
  says syntax error on "def self.as?; end"
+  says syntax error on "foo { |out| }"
  says syntax error on "foo { |out| }"
+  parses "->Foo.foo="
  parses "->Foo.foo="
+  parses "def ^(); end"
  parses "def ^(); end"
+  parses ":\"foo\""
  parses ":\"foo\""
+  says syntax error on "{\n}"
  says syntax error on "{\n}"
+  parses "def !=(other, file = 1); end"
  parses "def !=(other, file = 1); end"
+  single splats inside container literals
+    parses "{*1, 2}"
    parses "{*1, 2}"
+    parses "{*1 * 2}"
    parses "{*1 * 2}"
+    parses "[*1]"
    parses "[*1]"
+    parses "[*1, *2]"
    parses "[*1, *2]"
+    parses "[1, *2]"
    parses "[1, *2]"
+    parses "x = {*1}"
    parses "x = {*1}"
+    parses "{*1, *2}"
    parses "{*1, *2}"
+    parses "{1, *2, 3, *4, 5}"
    parses "{1, *2, 3, *4, 5}"
+    says syntax error on "{*a: 1}"
    says syntax error on "{*a: 1}"
+    says syntax error on "case {1}\nwhen {*2}; 3; end"
    says syntax error on "case {1}\nwhen {*2}; 3; end"
+    parses "[*1 ** 2]"
    parses "[*1 ** 2]"
+    parses "Set {*1, 2, *3}"
    parses "Set {*1, 2, *3}"
+    parses "Set {*{1} * 2}"
    parses "Set {*{1} * 2}"
+    says syntax error on "{*1 => 2}"
    says syntax error on "{*1 => 2}"
+    parses "[1, *2, 3, *4, 5]"
    parses "[1, *2, 3, *4, 5]"
+    parses "{1, *2}"
    parses "{1, *2}"
+    says syntax error on "{a: 1, *2}"
    says syntax error on "{a: 1, *2}"
+    parses "case 1\nwhen {*2}; 3; end"
    parses "case 1\nwhen {*2}; 3; end"
+    says syntax error on "{1 => 2, *3}"
    says syntax error on "{1 => 2, *3}"
+    parses "[*[*[1]], *[2]]"
    parses "[*[*[1]], *[2]]"
+    parses "{*1}"
    parses "{*1}"
+    says syntax error on "case {*1}\nwhen {2}; 3; end"
    says syntax error on "case {*1}\nwhen {2}; 3; end"
+    parses "[*1, 2]"
    parses "[*1, 2]"
+  says syntax error on "def foo(break); end"
  says syntax error on "def foo(break); end"
+  parses "a b() {}"
  parses "a b() {}"
+  parses "lib LibC\nalias Foo = Bar\nend"
  parses "lib LibC\nalias Foo = Bar\nend"
+  says syntax error on "unless next; end"
  says syntax error on "unless next; end"
+  parses "{% begin %}%Q| %s |{% end %}"
  parses "{% begin %}%Q| %s |{% end %}"
+  parses "def foo(x : U) forall U; end"
  parses "def foo(x : U) forall U; end"
+  parses "def foo(@@break); end"
  parses "def foo(@@break); end"
+  says syntax error on "def foo(foo fun); end"
  says syntax error on "def foo(foo fun); end"
+  parses "def foo(@[Foo] &@block); end"
  parses "def foo(@[Foo] &@block); end"
+  parses "foo(z: 0, a: n | 2)"
  parses "foo(z: 0, a: n | 2)"
+  parses "def foo(x @@fun); end"
  parses "def foo(x @@fun); end"
+  parses "def Foo.foo\n1\nend"
  parses "def Foo.foo\n1\nend"
+  parses "1.[](2)"
  parses "1.[](2)"
+  parses "/fo\#{1}o/"
  parses "/fo\#{1}o/"
+  parses "property yield : Int32"
  parses "property yield : Int32"
+  says syntax error on "def =\nend"
  says syntax error on "def =\nend"
+  parses "(baz; bar do\nend)"
  parses "(baz; bar do\nend)"
+  says syntax error on "*a, b, c, d = 1, 2"
  says syntax error on "*a, b, c, d = 1, 2"
+  parses "def []=(value); end"
  parses "def []=(value); end"
+  parses "{1 => 2 / 3}"
  parses "{1 => 2 / 3}"
+  parses "def foo; x { |a| a }; end"
  parses "def foo; x { |a| a }; end"
+  parses "foo = 1; foo a: 1"
  parses "foo = 1; foo a: 1"
+  parses ":[]="
  parses ":[]="
+  parses "macro =~;end"
  parses "macro =~;end"
+  says syntax error on "yield break"
  says syntax error on "yield break"
+  says syntax error on "def foo(module); end"
  says syntax error on "def foo(module); end"
+  says syntax error on "if return; end"
  says syntax error on "if return; end"
+  says syntax error on "+next"
  says syntax error on "+next"
+  parses "r = 1; r.x += 2"
  parses "r = 1; r.x += 2"
+  parses "def foo(x @enum); end"
  parses "def foo(x @enum); end"
+  says syntax error on "def foo(foo macro); end"
  says syntax error on "def foo(foo macro); end"
+  parses "foo.!~(1, 2)"
  parses "foo.!~(1, 2)"
+  parses "def self.%; end;"
  parses "def self.%; end;"
+  says syntax error on "case 1; when next; end; end"
  says syntax error on "case 1; when next; end; end"
+  parses "1 =~ 2"
  parses "1 =~ 2"
+  parses "def foo(x @self); end"
  parses "def foo(x @self); end"
+  parses "begin; 1; rescue Foo; 2; end"
  parses "begin; 1; rescue Foo; 2; end"
+  says syntax error on "def foo(x : U) forall U, U; end"
  says syntax error on "def foo(x : U) forall U, U; end"
+  says syntax error on "foo 1,"
  says syntax error on "foo 1,"
+  parses "...2"
  parses "...2"
+  parses "1 <=> 2"
  parses "1 <=> 2"
+  says syntax error on "foo { |fun| }"
  says syntax error on "foo { |fun| }"
+  parses "macro foo;end"
  parses "macro foo;end"
+  parses "def foo(x @alias); end"
  parses "def foo(x @alias); end"
+  parses "def |(); end;"
  parses "def |(); end;"
+  parses "def foo(var : Int**); end"
  parses "def foo(var : Int**); end"
+  parses "foo = 1; foo -1"
  parses "foo = 1; foo -1"
+  says syntax error on "def foo=(a = 1, b = 2); end"
  says syntax error on "def foo=(a = 1, b = 2); end"
+  parses "a = 1\nfoo - a"
  parses "a = 1\nfoo - a"
+  parses "(bar do\nend)"
  parses "(bar do\nend)"
+  parses "yield 1 if true"
  parses "yield 1 if true"
+  parses ":|"
  parses ":|"
+  parses "macro foo; bar class: 1; end"
  parses "macro foo; bar class: 1; end"
+  parses "protected : Int32"
  parses "protected : Int32"
+  parses "var.@foo"
  parses "var.@foo"
+  says syntax error on "class Foo; require \"bar\"; end"
  says syntax error on "class Foo; require \"bar\"; end"
+  parses "asm(\n\"nop\"\n:\n\"a\"(0)\n:\n\"b\"(1),\n\"c\"(2)\n)"
  parses "asm(\n\"nop\"\n:\n\"a\"(0)\n:\n\"b\"(1),\n\"c\"(2)\n)"
+  says syntax error on "foo {1, 2}"
  says syntax error on "foo {1, 2}"
+  parses "def <=(); end"
  parses "def <=(); end"
+  parses "case a\nwhen b\n1 / 2\nelse\n1 / 2\nend"
  parses "case a\nwhen b\n1 / 2\nelse\n1 / 2\nend"
+  says syntax error on "def foo @var, &block; end"
  says syntax error on "def foo @var, &block; end"
+  parses "macro foo=;end"
  parses "macro foo=;end"
+  parses "a = 1; pointerof(a)"
  parses "a = 1; pointerof(a)"
+  parses "foo(1, **bar)"
  parses "foo(1, **bar)"
+  parses "<<-FOO\n \t1\n \tFOO"
  parses "<<-FOO\n \t1\n \tFOO"
+  parses "1.responds_to?(\n  :foo\n)"
  parses "1.responds_to?(\n  :foo\n)"
+  parses "lib LibC; struct Foo; include Bar; end; end"
  parses "lib LibC; struct Foo; include Bar; end; end"
+  says syntax error on "a, b, *c, d = 1, 2"
  says syntax error on "a, b, *c, d = 1, 2"
+  parses "a = 1; a /b"
  parses "a = 1; a /b"
+  says syntax error on "def foo(\"\" y); y; end"
  says syntax error on "def foo(\"\" y); y; end"
+  parses "1 ... 2"
  parses "1 ... 2"
+  parses ":~"
  parses ":~"
+  parses "case {1, 2}\nwhen foo\n5\nend"
  parses "case {1, 2}\nwhen foo\n5\nend"
+  parses "def foo(if foo); end"
  parses "def foo(if foo); end"
+  parses "1 < 2"
  parses "1 < 2"
+  parses "foo(n <= 2)"
  parses "foo(n <= 2)"
+  parses "begin; 1; ensure; 2; end"
  parses "begin; 1; ensure; 2; end"
+  says syntax error on "->::foo.foo"
  says syntax error on "->::foo.foo"
+  parses "def ===(other, file = 1); end"
  parses "def ===(other, file = 1); end"
+  parses "def foo(var : Int, Float -> Double); end"
  parses "def foo(var : Int, Float -> Double); end"
+  parses "{% begin %}%r{\\A}{% end %}"
  parses "{% begin %}%r{\\A}{% end %}"
+  says syntax error on "break * 1"
  says syntax error on "break * 1"
+  parses "macro &*;end"
  parses "macro &*;end"
+  parses "def foo(x @@until); end"
  parses "def foo(x @@until); end"
+  says syntax error on "foo { |with| }"
  says syntax error on "foo { |with| }"
+  parses "def foo(x @next); end"
  parses "def foo(x @next); end"
+  parses "1 / 2"
  parses "1 / 2"
+  says syntax error on "foo { |instance_sizeof| }"
  says syntax error on "foo { |instance_sizeof| }"
+  parses "enum Foo; @@foo = 1\n A \n end"
  parses "enum Foo; @@foo = 1\n A \n end"
+  parses "<<-HERE\n   One\n  Zero\n  HERE"
  parses "<<-HERE\n   One\n  Zero\n  HERE"
+  parses "Foo??"
  parses "Foo??"
+  parses "lib LibC\n$errno = Foo : Int32\nend"
  parses "lib LibC\n$errno = Foo : Int32\nend"
+  says syntax error on "def foo() :String\nend"
  says syntax error on "def foo() :String\nend"
+  parses "->Foo.>(Int32)"
  parses "->Foo.>(Int32)"
+  parses "Foo(x: U)"
  parses "Foo(x: U)"
+  parses "foo %i()"
  parses "foo %i()"
+  parses "def foo(x @@begin); end"
  parses "def foo(x @@begin); end"
+  parses "break {1, 2}"
  parses "break {1, 2}"
+  says syntax error on "{\n1 => 2, 3 => 4\n5 => 6}"
  says syntax error on "{\n1 => 2, 3 => 4\n5 => 6}"
+  parses "foo = 1; foo {}"
  parses "foo = 1; foo {}"
+  parses "+1"
  parses "+1"
+  says syntax error on "foo { |in| }"
  says syntax error on "foo { |in| }"
+  parses "foo.>(1, 2) { 3 }"
  parses "foo.>(1, 2) { 3 }"
+  parses "foo(x) do\n//\nend"
  parses "foo(x) do\n//\nend"
+  parses "case 1; end"
  parses "case 1; end"
+  says syntax error on "next &- 1"
  says syntax error on "next &- 1"
+  says syntax error on "next.as(Int32)"
  says syntax error on "next.as(Int32)"
+  parses "foo(n &- 2)"
  parses "foo(n &- 2)"
+  parses "foo.bar= *baz"
  parses "foo.bar= *baz"
+  parses "foo(n | 2)"
  parses "foo(n | 2)"
+  parses "foo(n &** 2)"
  parses "foo(n &** 2)"
+  parses "def foo(&block : Int ->\n); end"
  parses "def foo(&block : Int ->\n); end"
+  parses "foo = 1; ->foo.*(Int32)"
  parses "foo = 1; ->foo.*(Int32)"
+  parses "a = 1; a *=\n1"
  parses "a = 1; a *=\n1"
+  says syntax error on "return === 1"
  says syntax error on "return === 1"
+  says syntax error on "*a if true"
  says syntax error on "*a if true"
+  parses "def foo(@true); end"
  parses "def foo(@true); end"
+  parses "a = 1; a <<=\n1"
  parses "a = 1; a <<=\n1"
+  parses "def self.>; end;"
  parses "def self.>; end;"
+  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\"\n: \"volatile\", \"alignstack\"\n,\n\"intel\"\n)"
  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\"\n: \"volatile\", \"alignstack\"\n,\n\"intel\"\n)"
+  says syntax error on "def foo\nmodule\nend"
  says syntax error on "def foo\nmodule\nend"
+  says syntax error on "def foo(foo false); end"
  says syntax error on "def foo(foo false); end"
+  says syntax error on "next > 1"
  says syntax error on "next > 1"
+  parses "foo(z: 0, a: n >= 2)"
  parses "foo(z: 0, a: n >= 2)"
+  parses "{% if 1; 2; end %}"
  parses "{% if 1; 2; end %}"
+  parses "def self.%(); end;"
  parses "def self.%(); end;"
+  parses "def foo(x @@in); end"
  parses "def foo(x @@in); end"
+  parses "->Foo.!~(Int32)"
  parses "->Foo.!~(Int32)"
+  says syntax error on "a.b(), c.d = 1"
  says syntax error on "a.b(), c.d = 1"
+  parses "property private : Int32"
  parses "property private : Int32"
+  parses "foo %w()"
  parses "foo %w()"
+  parses "a.foo, a.bar = 1, 2"
  parses "a.foo, a.bar = 1, 2"
+  says syntax error on "{foo: 1, bar: 2\nbaz: 3}"
  says syntax error on "{foo: 1, bar: 2\nbaz: 3}"
+  says syntax error on "def foo(*x, **x); end"
  says syntax error on "def foo(*x, **x); end"
+  parses "x = 1 ensure 2"
  parses "x = 1 ensure 2"
+  says syntax error on "a = return"
  says syntax error on "a = return"
+  parses "def foo(); 1; rescue; 2; end"
  parses "def foo(); 1; rescue; 2; end"
+  parses "end : Int32"
  parses "end : Int32"
+  parses "begin; 1; rescue ::Foo | ::Bar; 2; end"
  parses "begin; 1; rescue ::Foo | ::Bar; 2; end"
+  says syntax error on "macro foo *y;end"
  says syntax error on "macro foo *y;end"
+  parses "def foo; a = 1; a; end"
  parses "def foo; a = 1; a; end"
+  parses "case {1}\nin {Int32.class}; 2; end"
  parses "case {1}\nin {Int32.class}; 2; end"
+  parses "enum Foo; def foo; 1; end; end"
  parses "enum Foo; def foo; 1; end; end"
+  parses "def foo(x @@extend); end"
  parses "def foo(x @@extend); end"
+  parses "{/ /, / /}"
  parses "{/ /, / /}"
+  parses "def Foo::Bar.foo\n1\nend"
  parses "def Foo::Bar.foo\n1\nend"
+  parses "1.as?(\n  Int32\n)"
  parses "1.as?(\n  Int32\n)"
+  says syntax error on "foo { |(module)| }"
  says syntax error on "foo { |(module)| }"
+  says syntax error on "case next; when 1; end; end"
  says syntax error on "case next; when 1; end; end"
+  says syntax error on "1 .. break"
  says syntax error on "1 .. break"
+  parses "foo.bar=(*baz)"
  parses "foo.bar=(*baz)"
+  says syntax error on "fun foo\nFoo = 1"
  says syntax error on "fun foo\nFoo = 1"
+  parses "sizeof(\n  Int32\n)"
  parses "sizeof(\n  Int32\n)"
+  parses ":\"\\a\\b\\n\\r\\t\\v\\f\\e\""
  parses ":\"\\a\\b\\n\\r\\t\\v\\f\\e\""
+  parses "{% for x in y %}body{% end %}"
  parses "{% for x in y %}body{% end %}"
+  parses "def !=(); end;"
  parses "def !=(); end;"
+  parses "Foo({String, ->, ->})"
  parses "Foo({String, ->, ->})"
+  parses "foo result : Int32; result"
  parses "foo result : Int32; result"
+  parses "case a\nwhen b\n/ /\n\nelse\n/ /\nend"
  parses "case a\nwhen b\n/ /\n\nelse\n/ /\nend"
+  parses "def ===(); end;"
  parses "def ===(); end;"
+  parses "Foo?"
  parses "Foo?"
+  parses "->Foo.&(Int32)"
  parses "->Foo.&(Int32)"
+  parses "foo.!=(1, 2)"
  parses "foo.!=(1, 2)"
+  parses "a() /3"
  parses "a() /3"
+  says syntax error on "\"foo\" \"bar\""
  says syntax error on "\"foo\" \"bar\""
+  parses "x[1, ..2]"
  parses "x[1, ..2]"
+  parses "lib LibC; union Foo; end end"
  parses "lib LibC; union Foo; end end"
+  parses "Foo(T, 1)"
  parses "Foo(T, 1)"
+  parses "1.!(\n)"
  parses "1.!(\n)"
+  says syntax error on "def foo; A = 1; end"
  says syntax error on "def foo; A = 1; end"
+  parses "def foo(a, &block); end"
  parses "def foo(a, &block); end"
+  says syntax error on "foo { |while| }"
  says syntax error on "foo { |while| }"
+  parses "\"hello \"\\\n\"world\""
  parses "\"hello \"\\\n\"world\""
+  parses "property abstract : Int32"
  parses "property abstract : Int32"
+  parses "def foo(@[Foo] var : Int32); end"
  parses "def foo(@[Foo] var : Int32); end"
+  parses "foo(a: n & 2)"
  parses "foo(a: n & 2)"
+  parses "asm(\"nop\" : \"a\"(0) : \"b\"(1))"
  parses "asm(\"nop\" : \"a\"(0) : \"b\"(1))"
+  says syntax error on "def foo(foo out); end"
  says syntax error on "def foo(foo out); end"
+  parses "macro `;end"
  parses "macro `;end"
+  parses "def foo(x @pointerof); end"
  parses "def foo(x @pointerof); end"
+  parses "foo(1 + 2)"
  parses "foo(1 + 2)"
+  parses "foo(a: n < 2)"
  parses "foo(a: n < 2)"
+  parses "def **; end;"
  parses "def **; end;"
+  parses "a.b //=\n1"
  parses "a.b //=\n1"
+  parses "def foo(x, *, y, &); 1; end"
  parses "def foo(x, *, y, &); 1; end"
+  parses "1 if /x/"
  parses "1 if /x/"
+  parses "foo z: out x; x"
  parses "foo z: out x; x"
+  says syntax error on "def foo(begin); end"
  says syntax error on "def foo(begin); end"
+  parses "return 1.bar do\nend"
  parses "return 1.bar do\nend"
+  parses "def foo(@struct); end"
  parses "def foo(@struct); end"
+  parses "foo = 1; foo(+1)"
  parses "foo = 1; foo(+1)"
+  parses "def ==(); end;"
  parses "def ==(); end;"
+  parses "`foo\\``"
  parses "`foo\\``"
+  says syntax error on "foo { |(if)| }"
  says syntax error on "foo { |(if)| }"
+  says syntax error on "'''"
  says syntax error on "'''"
+  parses "f.x /= 2"
  parses "f.x /= 2"
+  says syntax error on "def foo(pointerof); end"
  says syntax error on "def foo(pointerof); end"
+  says syntax error on "next >= 1"
  says syntax error on "next >= 1"
+  says syntax error on "def foo=(&block); end"
  says syntax error on "def foo=(&block); end"
+  parses "foo.|(1, 2) { 3 }"
  parses "foo.|(1, 2) { 3 }"
+  parses "def foo(x @@module); end"
  parses "def foo(x @@module); end"
+  parses "foo.- 1, 2"
  parses "foo.- 1, 2"
+  parses "foo = 1; ->foo.[]=(Int32)"
  parses "foo = 1; ->foo.[]=(Int32)"
+  parses "def foo(@unless); end"
  parses "def foo(@unless); end"
+  parses "while : Int32"
  parses "while : Int32"
+  parses "puts %w(one two)"
  parses "puts %w(one two)"
+  parses "x[a: 1, b: 2,]"
  parses "x[a: 1, b: 2,]"
+  parses "def []=(other, file = 1); end"
  parses "def []=(other, file = 1); end"
+  parses "foo(a: n == 2)"
  parses "foo(a: n == 2)"
+  parses "foo(0, n >> 2)"
  parses "foo(0, n >> 2)"
+  says syntax error on "def foo(x @x); 1; end"
  says syntax error on "def foo(x @x); 1; end"
+  parses "foo.>=(1, 2)"
  parses "foo.>=(1, 2)"
+  parses "unless foo; 1; else; 2; end"
  parses "unless foo; 1; else; 2; end"
+  says syntax error on "def responds_to?; end"
  says syntax error on "def responds_to?; end"
+  says syntax error on "def foo var; end"
  says syntax error on "def foo var; end"
+  parses "->() : Int32 { }"
  parses "->() : Int32 { }"
+  parses "def foo; yield 1; yield; end"
  parses "def foo; yield 1; yield; end"
+  parses "foo.===(1, 2)"
  parses "foo.===(1, 2)"
+  parses "property asm : Int32"
  parses "property asm : Int32"
+  parses "f.x >>= 2"
  parses "f.x >>= 2"
+  parses "->@foo.foo!"
  parses "->@foo.foo!"
+  parses "def foo(offsetof foo); end"
  parses "def foo(offsetof foo); end"
+  parses "foo &.@bar"
  parses "foo &.@bar"
+  says syntax error on "def foo(foo unless); end"
  says syntax error on "def foo(foo unless); end"
+  global regex match data
+    says syntax error on "$0, a = {1, 2}"
    says syntax error on "$0, a = {1, 2}"
+    parses "$? = 1"
    parses "$? = 1"
+    parses "$~"
    parses "$~"
+    parses "$~ = 1"
    parses "$~ = 1"
+    parses "$?"
    parses "$?"
+    says syntax error on "$99999999999999999999999?"
    says syntax error on "$99999999999999999999999?"
+    parses "foo $?"
    parses "foo $?"
+    parses "foo $1"
    parses "foo $1"
+    parses "$1"
    parses "$1"
+    says syntax error on "$0, $1 = [1, 2]"
    says syntax error on "$0, $1 = [1, 2]"
+    says syntax error on "$2147483648"
    says syntax error on "$2147483648"
+    parses "$0"
    parses "$0"
+    says syntax error on "$0 = 1"
    says syntax error on "$0 = 1"
+    parses "$1?"
    parses "$1?"
+    parses "$?.foo"
    parses "$?.foo"
+    parses "$~.foo"
    parses "$~.foo"
+  parses "foo { |a, b, | 1 }"
  parses "foo { |a, b, | 1 }"
+  says syntax error on "def foo\nclass\nend"
  says syntax error on "def foo\nclass\nend"
+  parses "def <<(); end"
  parses "def <<(); end"
+  parses "foo.>(1, 2)"
  parses "foo.>(1, 2)"
+  parses "foo = 1; ->foo.bar(Int32)"
  parses "foo = 1; ->foo.bar(Int32)"
+  says syntax error on "asm(\"\" ::: \"\"(var))"
  says syntax error on "asm(\"\" ::: \"\"(var))"
+  parses "case {1}\nin {.bar?}; 2; end"
  parses "case {1}\nin {.bar?}; 2; end"
+  parses "foo a: b(1) do\nend"
  parses "foo a: b(1) do\nend"
+  says syntax error on "def foo(var = 1 : Int32); end"
  says syntax error on "def foo(var = 1 : Int32); end"
+  parses "def foo(a); a; end"
  parses "def foo(a); a; end"
+  parses "def foo(**args)\n1\nend"
  parses "def foo(**args)\n1\nend"
+  parses "{% begin %}%[ %s ]{% end %}"
  parses "{% begin %}%[ %s ]{% end %}"
+  parses "a.b/2"
  parses "a.b/2"
+  says syntax error on "foo { |self| }"
  says syntax error on "foo { |self| }"
+  parses "n =~ 2"
  parses "n =~ 2"
+  parses "property unless : Int32"
  parses "property unless : Int32"
+  parses ":*"
  parses ":*"
+  says syntax error on "break | 1"
  says syntax error on "break | 1"
+  parses "enum Foo; {% if 1 %}2{% end %}; end"
  parses "enum Foo; {% if 1 %}2{% end %}; end"
+  parses "/ /"
  parses "/ /"
+  parses "<<-FOO\n\t 1\n\t FOO"
  parses "<<-FOO\n\t 1\n\t FOO"
+  parses "{{ //.options }}"
  parses "{{ //.options }}"
+  says syntax error on "return & 1"
  says syntax error on "return & 1"
+  parses "def foo(@@alias); end"
  parses "def foo(@@alias); end"
+  parses "foo(n < 2)"
  parses "foo(n < 2)"
+  parses "foo + 1"
  parses "foo + 1"
+  parses "def foo(struct foo); end"
  parses "def foo(struct foo); end"
+  parses "def foo(x @@out); end"
  parses "def foo(x @@out); end"
+  parses "foo if 3"
  parses "foo if 3"
+  parses "def foo(**args : **Foo)\n1\nend"
  parses "def foo(**args : **Foo)\n1\nend"
+  parses "foo.=== 1, 2"
  parses "foo.=== 1, 2"
+  parses "foo(&.as?(T))"
  parses "foo(&.as?(T))"
+  parses "ensure : Int32"
  parses "ensure : Int32"
+  parses "%r(\\/)"
  parses "%r(\\/)"
+  parses "lib LibC; enum Foo; A\nB; C\nD = 1; end end"
  parses "lib LibC; enum Foo; A\nB; C\nD = 1; end end"
+  parses "{% unless 1; 2; end %}"
  parses "{% unless 1; 2; end %}"
+  parses "case 1\nwhen .as?(T)\n2\nend"
  parses "case 1\nwhen .as?(T)\n2\nend"
+  parses "foo.| 1, 2"
  parses "foo.| 1, 2"
+  parses "n // 2"
  parses "n // 2"
+  says syntax error on "foo x: 1, x: 1"
  says syntax error on "foo x: 1, x: 1"
+  parses "!1"
  parses "!1"
+  parses "{{ nil?(foo) }}"
  parses "{{ nil?(foo) }}"
+  says syntax error on "def foo(false); end"
  says syntax error on "def foo(false); end"
+  parses "struct : Int32"
  parses "struct : Int32"
+  parses "foo.& do end"
  parses "foo.& do end"
+  says syntax error on "foo { |struct| }"
  says syntax error on "foo { |struct| }"
+  parses "def !~(); end"
  parses "def !~(); end"
+  parses "a = 1; a &-= 1"
  parses "a = 1; a &-= 1"
+  parses "case when 1\n2\nend"
  parses "case when 1\n2\nend"
+  parses "def foo(@@class); end"
  parses "def foo(@@class); end"
+  parses "offsetof(\n  Foo,\n  @foo\n)"
  parses "offsetof(\n  Foo,\n  @foo\n)"
+  says syntax error on "Hash{\"foo\": 1}"
  says syntax error on "Hash{\"foo\": 1}"
+  parses "foo[] /2"
  parses "foo[] /2"
+  parses "def foo(@@lib); end"
  parses "def foo(@@lib); end"
+  says syntax error on "foo[next]"
  says syntax error on "foo[next]"
+  parses "foo out @x; @x"
  parses "foo out @x; @x"
+  says syntax error on "foo[1] = next"
  says syntax error on "foo[1] = next"
+  says syntax error on "def foo(foo extend); end"
  says syntax error on "def foo(foo extend); end"
+  says syntax error on "a() = 1"
  says syntax error on "a() = 1"
+  parses "until true; 1; end;"
  parses "until true; 1; end;"
+  parses "foo.bar(1, 2) { 3 }"
  parses "foo.bar(1, 2) { 3 }"
+  parses "@a : Foo | Int32"
  parses "@a : Foo | Int32"
+  says syntax error on "1 unless return"
  says syntax error on "1 unless return"
+  parses "->Foo.&**(Int32)"
  parses "->Foo.&**(Int32)"
+  parses "foo(0, n + 2)"
  parses "foo(0, n + 2)"
+  sets correct location of parameter in proc literal
  sets correct location of parameter in proc literal
+  parses "def foo(x @@require); end"
  parses "def foo(x @@require); end"
+  parses "def foo(@sizeof); end"
  parses "def foo(@sizeof); end"
+  says syntax error on "def foo(lib); end"
  says syntax error on "def foo(lib); end"
+  says syntax error on "case when .foo? then 1; end"
  says syntax error on "case when .foo? then 1; end"
+  parses "a.b |=\n1"
  parses "a.b |=\n1"
+  says syntax error on "def foo(foo with); end"
  says syntax error on "def foo(foo with); end"
+  says syntax error on "foo { |a b| }"
  says syntax error on "foo { |a b| }"
+  parses "n << 2"
  parses "n << 2"
+  parses "foo.-(1, 2) { 3 }"
  parses "foo.-(1, 2) { 3 }"
+  says syntax error on "1 unless next"
  says syntax error on "1 unless next"
+  says syntax error on "A = begin; 1; rescue; B = 1; end"
  says syntax error on "A = begin; 1; rescue; B = 1; end"
+  parses "a = 1; a &*= 1"
  parses "a = 1; a &*= 1"
+  says syntax error on "a = break"
  says syntax error on "a = break"
+  parses "sizeof : Int32"
  parses "sizeof : Int32"
+  parses "foo(0, n &+ 2)"
  parses "foo(0, n &+ 2)"
+  parses "x[+ 1]"
  parses "x[+ 1]"
+  parses "_, *_, _, _ = 1, 2, 3"
  parses "_, *_, _, _ = 1, 2, 3"
+  parses "def foo(@with); end"
  parses "def foo(@with); end"
+  parses "macro !~;end"
  parses "macro !~;end"
+  parses "f.x &*= 2"
  parses "f.x &*= 2"
+  parses "def foo(x @@alias); end"
  parses "def foo(x @@alias); end"
+  parses "a = 1; a /=\n1"
  parses "a = 1; a /=\n1"
+  parses "property nil : Int32"
  parses "property nil : Int32"
+  says syntax error on "foo { |if| }"
  says syntax error on "foo { |if| }"
+  parses "foo.* 1, 2"
  parses "foo.* 1, 2"
+  parses "a[0], a[1] = 1, 2"
  parses "a[0], a[1] = 1, 2"
+  parses "property alias : Int32"
  parses "property alias : Int32"
+  parses "def foo(@[Foo] var); end"
  parses "def foo(@[Foo] var); end"
+  parses "/ /\n/ /"
  parses "/ /\n/ /"
+  parses "macro foo;bar{% if x %}body{% elsif y %}body2{%end%}baz;end"
  parses "macro foo;bar{% if x %}body{% elsif y %}body2{%end%}baz;end"
+  says syntax error on "1 if next"
  says syntax error on "1 if next"
+  parses "[1,\n 2,]"
  parses "[1,\n 2,]"
+  sets correct location of instance variable in proc pointer
  sets correct location of instance variable in proc pointer
+  parses "def foo(x @@var); end"
  parses "def foo(x @@var); end"
+  parses "def foo(@class); end"
  parses "def foo(@class); end"
+  parses "a = 1; pointerof(a)"
  parses "a = 1; pointerof(a)"
+  parses "@a, b = 1, 2"
  parses "@a, b = 1, 2"
+  parses "def &-(); end"
  parses "def &-(); end"
+  parses "def foo(x, **args)\n1\nend"
  parses "def foo(x, **args)\n1\nend"
+  parses ":\"\\\"foo\\\"\""
  parses ":\"\\\"foo\\\"\""
+  says syntax error on "def foo(enum); end"
  says syntax error on "def foo(enum); end"
+  parses "def <=(); end;"
  parses "def <=(); end;"
+  parses "lib LibC; enum Foo; A = 1; B; end end"
  parses "lib LibC; enum Foo; A = 1; B; end end"
+  parses "<<-HERE\n   One \\n Two\n  Zero\n  HERE"
  parses "<<-HERE\n   One \\n Two\n  Zero\n  HERE"
+  says syntax error on "def foo(sizeof); end"
  says syntax error on "def foo(sizeof); end"
+  says syntax error on "foo { |(struct)| }"
  says syntax error on "foo { |(struct)| }"
+  parses "1.tap do |x|; 1; rescue; x; end"
  parses "1.tap do |x|; 1; rescue; x; end"
+  parses "1.as? Bar"
  parses "1.as? Bar"
+  parses "foo %q"
  parses "foo %q"
+  parses "1 - 2"
  parses "1 - 2"
+  parses "foo.>=(1, 2) { 3 }"
  parses "foo.>=(1, 2) { 3 }"
+  parses "::Foo{\"x\" => \"y\"}"
  parses "::Foo{\"x\" => \"y\"}"
+  says syntax error on "return | 1"
  says syntax error on "return | 1"
+  says syntax error on "foo { |(instance_sizeof)| }"
  says syntax error on "foo { |(instance_sizeof)| }"
+  parses "Foo({X: X, Y: Y})"
  parses "Foo({X: X, Y: Y})"
+  parses "def foo(@@return); end"
  parses "def foo(@@return); end"
+  parses "{1 => 2, 3 => 4}"
  parses "{1 => 2, 3 => 4}"
+  parses "if foo\n1\nend"
  parses "if foo\n1\nend"
+  parses "foo(a: n ** 2)"
  parses "foo(a: n ** 2)"
+  parses "def foo(@@sizeof); end"
  parses "def foo(@@sizeof); end"
+  parses "foo.**(1, 2)"
  parses "foo.**(1, 2)"
+  parses "def foo; x { |a, *b| b }; end"
  parses "def foo; x { |a, *b| b }; end"
+  parses "def foo(@begin); end"
  parses "def foo(@begin); end"
+  parses "def foo(@@with); end"
  parses "def foo(@@with); end"
+  parses "foo(n =~ 2)"
  parses "foo(n =~ 2)"
+  says syntax error on "foo { |(until)| }"
  says syntax error on "foo { |(until)| }"
+  parses "!a && b"
  parses "!a && b"
+  parses "def foo(@@nil); end"
  parses "def foo(@@nil); end"
+  parses "%x(`which(foo)`)"
  parses "%x(`which(foo)`)"
+  parses "a : Foo = 1"
  parses "a : Foo = 1"
+  parses "def foo(@extend); end"
  parses "def foo(@extend); end"
+  parses "return 1"
  parses "return 1"
+  says syntax error on "asm(\"nop\" ::: \"\#{foo}\")"
  says syntax error on "asm(\"nop\" ::: \"\#{foo}\")"
+  parses ":**"
  parses ":**"
+  parses "foo.**"
  parses "foo.**"
+  parses "def foo(a, @[Foo] var); end"
  parses "def foo(a, @[Foo] var); end"
+  parses "foo.>="
  parses "foo.>="
+  parses "<<-HERE\n  foo\#{1}bar\n   baz\n  HERE"
  parses "<<-HERE\n  foo\#{1}bar\n   baz\n  HERE"
+  parses "macro foo(@[Foo]  var);end"
  parses "macro foo(@[Foo]  var);end"
+  parses "foo = 1; ->foo.===(Int32)"
  parses "foo = 1; ->foo.===(Int32)"
+  parses "puts {{\n1\n}}"
  parses "puts {{\n1\n}}"
+  says syntax error on "foo { |(pointerof)| }"
  says syntax error on "foo { |(pointerof)| }"
+  parses "foo(z: 0, a: n !~ 2)"
  parses "foo(z: 0, a: n !~ 2)"
+  parses "a = 1; (a)/b"
  parses "a = 1; (a)/b"
+  parses "macro foo(@[Foo] var);end"
  parses "macro foo(@[Foo] var);end"
+  parses "def foo(x @struct); end"
  parses "def foo(x @struct); end"
+  says syntax error on "def foo(foo if); end"
  says syntax error on "def foo(foo if); end"
+  parses "\"hello \#{1}\" \\\r\n \"\#{2} world\""
  parses "\"hello \#{1}\" \\\r\n \"\#{2} world\""
+  parses "foo.nil?(  )"
  parses "foo.nil?(  )"
+  parses "break"
  parses "break"
+  says syntax error on "lib LibC\n$Errno : Int32\nend"
  says syntax error on "lib LibC\n$Errno : Int32\nend"
+  parses "a.b &+=\n1"
  parses "a.b &+=\n1"
+  parses "foo(0, n <= 2)"
  parses "foo(0, n <= 2)"
+  parses "Foo(X: U, Y: V)"
  parses "Foo(X: U, Y: V)"
+  parses "abstract class Foo; end"
  parses "abstract class Foo; end"
+  parses "def foo(x @require); end"
  parses "def foo(x @require); end"
+  parses "def foo(x @class); end"
  parses "def foo(x @class); end"
+  says syntax error on "a = 1, b = 2"
  says syntax error on "a = 1, b = 2"
+  parses ":<<"
  parses ":<<"
+  parses "case 1; when 2 then /foo/; end"
  parses "case 1; when 2 then /foo/; end"
+  parses "[/ /, / /]"
  parses "[/ /, / /]"
+  parses "1 ** 2"
  parses "1 ** 2"
+  says syntax error on "break > 1"
  says syntax error on "break > 1"
+  parses "def foo(x @@if); end"
  parses "def foo(x @@if); end"
+  parses "n / 2"
  parses "n / 2"
+  says syntax error on "next <= 1"
  says syntax error on "next <= 1"
+  parses "return *{1, 2}"
  parses "return *{1, 2}"
+  parses "{% begin %}%x( %s ){% end %}"
  parses "{% begin %}%x( %s ){% end %}"
+  parses ":foo!"
  parses ":foo!"
+  parses "next 1"
  parses "next 1"
+  says syntax error on "def foo(foo in); end"
  says syntax error on "def foo(foo in); end"
+  parses "def foo(enum foo); end"
  parses "def foo(enum foo); end"
+  says syntax error on "next < 1"
  says syntax error on "next < 1"
+  parses "def foo(\"bar qux\" y); y; end"
  parses "def foo(\"bar qux\" y); y; end"
+  parses "f.x &= 2"
  parses "f.x &= 2"
+  parses "def foo(pointerof foo); end"
  parses "def foo(pointerof foo); end"
+  parses "def foo(x @@include); end"
  parses "def foo(x @@include); end"
+  parses ":\u304B\u305F\u306A"
  parses ":\u304B\u305F\u306A"
+  parses "1 == 2 == 3 == 4"
  parses "1 == 2 == 3 == 4"
+  parses "def self.foo\n1\nend"
  parses "def self.foo\n1\nend"
+  parses ":\"\""
  parses ":\"\""
+  parses "lib LibC\nfun getchar(a : Int)\nend"
  parses "lib LibC\nfun getchar(a : Int)\nend"
+  says syntax error on "return + 1"
  says syntax error on "return + 1"
+  parses "<<-HERE\n  \#{1} \\n \#{2}\n  HERE"
  parses "<<-HERE\n  \#{1} \\n \#{2}\n  HERE"
+  says syntax error on "case 1\nwhen Int32; 2; in 2"
  says syntax error on "case 1\nwhen Int32; 2; in 2"
+  says syntax error on "return > 1"
  says syntax error on "return > 1"
+  parses "lib LibC; struct Foo; x : Int**; end end"
  parses "lib LibC; struct Foo; x : Int**; end end"
+  says syntax error on "<<-HERE\n One\n  \#{1}\n  HERE"
  says syntax error on "<<-HERE\n One\n  \#{1}\n  HERE"
+  parses "call @foo.bar"
  parses "call @foo.bar"
+  parses "1;+2"
  parses "1;+2"
+  says syntax error on "\"\#{<<-HERE}\"\nHERE"
  says syntax error on "\"\#{<<-HERE}\"\nHERE"
+  parses "lib LibC; fun foo : Int*; end"
  parses "lib LibC; fun foo : Int*; end"
+  says syntax error on "while next; end"
  says syntax error on "while next; end"
+  parses "1 .. 2"
  parses "1 .. 2"
+  parses "foo +1_i64"
  parses "foo +1_i64"
+  parses "lib LibC; struct Foo; x : Int*; end end"
  parses "lib LibC; struct Foo; x : Int*; end end"
+  parses "{[] of Foo, self.foo}"
  parses "{[] of Foo, self.foo}"
+  parses "foo rescue 2"
  parses "foo rescue 2"
+  parses "->::foo?"
  parses "->::foo?"
+  says syntax error on "case break; when 1; end; end"
  says syntax error on "case break; when 1; end; end"
+  parses "foo { 1 }"
  parses "foo { 1 }"
+  parses "a.b +=\n1"
  parses "a.b +=\n1"
+  says syntax error on "def foo; require \"bar\"; end"
  says syntax error on "def foo; require \"bar\"; end"
+  parses "<<-HERE\r\n   One\r\n  Zero\r\n  HERE\r\n"
  parses "<<-HERE\r\n   One\r\n  Zero\r\n  HERE\r\n"
+  parses "def **(); end;"
  parses "def **(); end;"
+  parses "foo.!"
  parses "foo.!"
+  says syntax error on "A = begin; B = 1; end"
  says syntax error on "A = begin; B = 1; end"
+  parses "n &- 2"
  parses "n &- 2"
+  parses "(bar {})"
  parses "(bar {})"
+  parses "macro foo(x = __LINE__);end"
  parses "macro foo(x = __LINE__);end"
+  parses "foo = 1; ->foo.%(Int32)"
  parses "foo = 1; ->foo.%(Int32)"
+  parses "extend : Int32"
  parses "extend : Int32"
+  says syntax error on "def foo(struct); end"
  says syntax error on "def foo(struct); end"
+  parses "{/ / => / /, / / => / /}"
  parses "{/ / => / /, / / => / /}"
+  parses "foo unless 3"
  parses "foo unless 3"
+  says syntax error on "{foo: 1\nbar: 2}"
  says syntax error on "{foo: 1\nbar: 2}"
+  parses "foo.=~ do end"
  parses "foo.=~ do end"
+  says syntax error on "foo &.&&()"
  says syntax error on "foo &.&&()"
+  says syntax error on "def foo():String\nend"
  says syntax error on "def foo():String\nend"
+  parses "foo(/ /)"
  parses "foo(/ /)"
+  parses "struct Foo; end"
  parses "struct Foo; end"
+  parses "next {1 => 2}"
  parses "next {1 => 2}"
+  says syntax error on "return .. 1"
  says syntax error on "return .. 1"
+  says syntax error on "def foo(foo class); end"
  says syntax error on "def foo(foo class); end"
+  parses "class Foo(Type); end"
  parses "class Foo(Type); end"
+  parses "macro foo\n\"\\'\"\nend"
  parses "macro foo\n\"\\'\"\nend"
+  parses "def foo; with a yield 1; end"
  parses "def foo; with a yield 1; end"
+  parses "-1_i64"
  parses "-1_i64"
+  parses "def ===(*args, **opts); end"
  parses "def ===(*args, **opts); end"
+  parses "/ hi /"
  parses "/ hi /"
+  parses "@@foo/2"
  parses "@@foo/2"
+  parses "def foo(until foo); end"
  parses "def foo(until foo); end"
+  parses "yield foo do\nend"
  parses "yield foo do\nend"
+  parses "def !=(*args, **opts); end"
  parses "def !=(*args, **opts); end"
+  says syntax error on "foo { |(enum)| }"
  says syntax error on "foo { |(enum)| }"
+  parses "class Foo\nend"
  parses "class Foo\nend"
+  parses "n + 2"
  parses "n + 2"
+  parses "Int[]"
  parses "Int[]"
+  parses "1 >> 2"
  parses "1 >> 2"
+  parses "f.x Foo.new"
  parses "f.x Foo.new"
+  parses "foo = 1; ->foo.foo!"
  parses "foo = 1; ->foo.foo!"
+  parses "def >(); end"
  parses "def >(); end"
+  parses "foo.> do end"
  parses "foo.> do end"
+  parses "def foo(x)\n x\nend; foo = 1; b = 2; foo +b"
  parses "def foo(x)\n x\nend; foo = 1; b = 2; foo +b"
+  says syntax error on "case {1, 2}; when {3}; 4; end"
  says syntax error on "case {1, 2}; when {3}; 4; end"
+  parses "n == 2"
  parses "n == 2"
+  parses "a[], a[] = 1, 2"
  parses "a[], a[] = 1, 2"
+  parses "\"foo\#{\"bar\"}baz\""
  parses "\"foo\#{\"bar\"}baz\""
+  parses "private def foo; end"
  parses "private def foo; end"
+  parses "foo(//)"
  parses "foo(//)"
+  parses "foo = 1; ->foo.**(Int32)"
  parses "foo = 1; ->foo.**(Int32)"
+  says syntax error on "case 1\nin .nil?; 2"
  says syntax error on "case 1\nin .nil?; 2"
+  says syntax error on "b, 1 == 2, a = 4"
  says syntax error on "b, 1 == 2, a = 4"
+  parses "return if true"
  parses "return if true"
+  parses "@a = uninitialized Foo"
  parses "@a = uninitialized Foo"
+  parses "property pointerof : Int32"
  parses "property pointerof : Int32"
+  says syntax error on "Hash{\"foo\": 1, \"bar\": 2}"
  says syntax error on "Hash{\"foo\": 1, \"bar\": 2}"
+  parses "foo[1] /2"
  parses "foo[1] /2"
+  parses "case 1\nwhen 1\n2\nelse\n3\nend"
  parses "case 1\nwhen 1\n2\nelse\n3\nend"
+  parses "def foo(with foo); end"
  parses "def foo(with foo); end"
+  parses "x([] of Foo, Bar.new)"
  parses "x([] of Foo, Bar.new)"
+  parses "foo %w"
  parses "foo %w"
+  parses "foo x, y do\nend"
  parses "foo x, y do\nend"
+  parses "a; if / /\n/ /\nelsif / /\n/ /\nend"
  parses "a; if / /\n/ /\nelsif / /\n/ /\nend"
+  parses "foo = 1; foo +1"
  parses "foo = 1; foo +1"
+  parses "foo(a: 1\n)"
  parses "foo(a: 1\n)"
+  parses "def foo(@[Foo]  var); end"
  parses "def foo(@[Foo]  var); end"
+  parses "macro foo;if var;true;end;end"
  parses "macro foo;if var;true;end;end"
+  says syntax error on "def foo(foo module); end"
  says syntax error on "def foo(foo module); end"
+  says syntax error on "break // 1"
  says syntax error on "break // 1"
+  parses "def foo(false foo); end"
  parses "def foo(false foo); end"
+  parses "lib LibC\nfun getchar : Int\nend"
  parses "lib LibC\nfun getchar : Int\nend"
+  parses "2 * (3 + 4)"
  parses "2 * (3 + 4)"
+  parses "foo(z: 0, a: n & 2)"
  parses "foo(z: 0, a: n & 2)"
+  says syntax error on "unless 1 == 1 a; end"
  says syntax error on "unless 1 == 1 a; end"
+  parses "def foo(asm foo); end"
  parses "def foo(asm foo); end"
+  says syntax error on "foo { |include| }"
  says syntax error on "foo { |include| }"
+  parses "def foo(*y : *T); 1; end"
  parses "def foo(*y : *T); 1; end"
+  parses "1 | 2"
  parses "1 | 2"
+  parses "foo = 1; ->foo.<(Int32)"
  parses "foo = 1; ->foo.<(Int32)"
+  parses "<<-FOO\n\t1\n\tFOO"
  parses "<<-FOO\n\t1\n\tFOO"
+  parses "property enum : Int32"
  parses "property enum : Int32"
+  says syntax error on "def foo(*a foo); end"
  says syntax error on "def foo(*a foo); end"
+  parses "foo(z: 0, a: n &+ 2)"
  parses "foo(z: 0, a: n &+ 2)"
+  parses "foo = 1; ->foo.[](Int32)"
  parses "foo = 1; ->foo.[](Int32)"
+  parses "def ^; end;"
  parses "def ^; end;"
+  parses ":<="
  parses ":<="
+  parses "2 / 3 + 4 / 5"
  parses "2 / 3 + 4 / 5"
+  parses "1.~"
  parses "1.~"
+  parses "macro /;end"
  parses "macro /;end"
+  says syntax error on "def foo(\"bar\");end"
  says syntax error on "def foo(\"bar\");end"
+  says syntax error on "a, B = 1, 2"
  says syntax error on "a, B = 1, 2"
+  parses "def foo ; 1 ; end"
  parses "def foo ; 1 ; end"
+  parses "def self.|(); end;"
  parses "def self.|(); end;"
+  says syntax error on "break / 1"
  says syntax error on "break / 1"
+  parses "b.c ||= 1"
  parses "b.c ||= 1"
+  parses "asm(\"nop\" ::: :)"
  parses "asm(\"nop\" ::: :)"
+  parses "T::U/1"
  parses "T::U/1"
+  says syntax error on "foo { |sizeof| }"
  says syntax error on "foo { |sizeof| }"
+  parses "Foo(\nT\n)"
  parses "Foo(\nT\n)"
+  says syntax error on "case return; when 1; end; end"
  says syntax error on "case return; when 1; end; end"
+  parses "def foo(x, *y : Int32); 1; end"
  parses "def foo(x, *y : Int32); 1; end"
+  says syntax error on "foo { |return| }"
  says syntax error on "foo { |return| }"
+  parses "{% begin %}%{ %s }{% end %}"
  parses "{% begin %}%{ %s }{% end %}"
+  parses "def =~(); end;"
  parses "def =~(); end;"
+  says syntax error on "foo(1 2)"
  says syntax error on "foo(1 2)"
+  parses "self / number"
  parses "self / number"
+  parses "foo ..2"
  parses "foo ..2"
+  parses "begin : Int32"
  parses "begin : Int32"
+  parses "foo(x, *bar, *baz, y)"
  parses "foo(x, *bar, *baz, y)"
+  parses "case 1\nwhen .foo\n2\nend"
  parses "case 1\nwhen .foo\n2\nend"
+  parses "lib LibC\nfun getch = \"get.char\" : Int32\nend"
  parses "lib LibC\nfun getch = \"get.char\" : Int32\nend"
+  parses "macro foo(**args)\n1\nend"
  parses "macro foo(**args)\n1\nend"
+  says syntax error on "def foo\nlib\nend"
  says syntax error on "def foo\nlib\nend"
+  says syntax error on "macro foo x\n 1 + 2; end"
  says syntax error on "macro foo x\n 1 + 2; end"
+  parses "foo x, *bar"
  parses "foo x, *bar"
+  says syntax error on "return.foo"
  says syntax error on "return.foo"
+  parses "lib LibC\nfun getch = GetChar\nend"
  parses "lib LibC\nfun getch = GetChar\nend"
+  says syntax error on "a {}, b = 1"
  says syntax error on "a {}, b = 1"
+  parses "{% for _, x, _ in y %}body{% end %}"
  parses "{% for _, x, _ in y %}body{% end %}"
+  parses "a : Foo[12]"
  parses "a : Foo[12]"
+  parses "def foo; with a yield; end"
  parses "def foo; with a yield; end"
+  parses "false"
  parses "false"
+  says syntax error on "$foo"
  says syntax error on "$foo"
+  parses "Foo(\n)"
  parses "Foo(\n)"
+  says syntax error on "return.as(Int32)"
  says syntax error on "return.as(Int32)"
+  parses "[] of ->;"
  parses "[] of ->;"
+  parses "foo%Q"
  parses "foo%Q"
+  parses "foo 1, **bar, &block"
  parses "foo 1, **bar, &block"
+  parses "foo = 1; ->foo.^(Int32)"
  parses "foo = 1; ->foo.^(Int32)"
+  parses "lib LibC\nfun getch = \"get.char\"\nend"
  parses "lib LibC\nfun getch = \"get.char\"\nend"
+  parses "foo \"foo bar\": 1, \"baz\": 2"
  parses "foo \"foo bar\": 1, \"baz\": 2"
+  parses "a.b *=\n1"
  parses "a.b *=\n1"
+  parses "a == / /"
  parses "a == / /"
+  parses "1_i64"
  parses "1_i64"
+  says syntax error on "foo { |typeof| }"
  says syntax error on "foo { |typeof| }"
+  parses "macro []=;end"
  parses "macro []=;end"
+  parses "foo Bar { 1 }"
  parses "foo Bar { 1 }"
+  parses "lib LibFoo\nend\nif true\nend"
  parses "lib LibFoo\nend\nif true\nend"
+  parses "def foo(@@unless); end"
  parses "def foo(@@unless); end"
+  says syntax error on "while break; end"
  says syntax error on "while break; end"
+  says syntax error on "{\"foo\" => 1, \"bar\": 2}"
  says syntax error on "{\"foo\" => 1, \"bar\": 2}"
+  parses "enum Foo::Bar; A = 1; end"
  parses "enum Foo::Bar; A = 1; end"
+  parses "macro foo;bar{% if x %}body{% elsif y %}body2{% else %}body3{%end%}baz;end"
  parses "macro foo;bar{% if x %}body{% elsif y %}body2{% else %}body3{%end%}baz;end"
+  parses "macro [];end"
  parses "macro [];end"
+  parses "foo.!= do end"
  parses "foo.!= do end"
+  parses "a = 1; yield a rescue a"
  parses "a = 1; yield a rescue a"
+  parses "enum Foo; A\nB; C\nD = 1; end"
  parses "enum Foo; A\nB; C\nD = 1; end"
+  parses "case;when true;1;end"
  parses "case;when true;1;end"
+  parses "{% if 1\n  x\nend %}"
  parses "{% if 1\n  x\nend %}"
+  says syntax error on "a.b {}, c = 1"
  says syntax error on "a.b {}, c = 1"
+  says syntax error on "def self.as; end"
  says syntax error on "def self.as; end"
+  parses "def foo; end"
  parses "def foo; end"
+  parses "foo.!(  )"
  parses "foo.!(  )"
+  parses "\"\""
  parses "\"\""
+  parses "%r(\\ )"
  parses "%r(\\ )"
+  parses "Int[8]"
  parses "Int[8]"
+  parses "foo.&(1, 2)"
  parses "foo.&(1, 2)"
+  parses "def foo(@@end); end"
  parses "def foo(@@end); end"
+  parses "::foo"
  parses "::foo"
+  parses "def foo(x @offsetof); end"
  parses "def foo(x @offsetof); end"
+  parses "def foo(@asm); end"
  parses "def foo(@asm); end"
+  parses "{{a = 1 if 2}}"
  parses "{{a = 1 if 2}}"
+  parses "foo.*(1, 2) { 3 }"
  parses "foo.*(1, 2) { 3 }"
+  parses "macro ===;end"
  parses "macro ===;end"
+  parses "foo.[]="
  parses "foo.[]="
+  parses "def &**(); end"
  parses "def &**(); end"
+  parses "def foo(var : Int32 = 1); end"
  parses "def foo(var : Int32 = 1); end"
+  parses "a = 1; yield a ensure a"
  parses "a = 1; yield a ensure a"
+  parses "x[a: 1, b: 2]"
  parses "x[a: 1, b: 2]"
+  says syntax error on "foo { |(offsetof)| }"
  says syntax error on "foo { |(offsetof)| }"
+  parses "foo.[]= do end"
  parses "foo.[]= do end"
+  parses "a.b >>=\n1"
  parses "a.b >>=\n1"
+  parses "x = 1; foo.bar x do\nend"
  parses "x = 1; foo.bar x do\nend"
+  says syntax error on "foo(**bar, *x)"
  says syntax error on "foo(**bar, *x)"
+  parses "instance_sizeof(X)"
  parses "instance_sizeof(X)"
+  says syntax error on "fun Foo : Int64\nend"
  says syntax error on "fun Foo : Int64\nend"
+  parses "def self.<(); end;"
  parses "def self.<(); end;"
+  parses "\"foo\#{bar}baz\""
  parses "\"foo\#{bar}baz\""
+  parses "x : Foo(A, *B, C)"
  parses "x : Foo(A, *B, C)"
+  parses "->Foo.|(Int32)"
  parses "->Foo.|(Int32)"
+  parses "{% begin %}%w{ %s }{% end %}"
  parses "{% begin %}%w{ %s }{% end %}"
+  parses "property typeof : Int32"
  parses "property typeof : Int32"
+  parses "break *1, 2"
  parses "break *1, 2"
+  parses "/ /; / /"
  parses "/ /; / /"
+  parses "case {1}\nin {false}; 2; end"
  parses "case {1}\nin {false}; 2; end"
+  says syntax error on "A = (B = 1)"
  says syntax error on "A = (B = 1)"
+  parses "foo(n / 2)"
  parses "foo(n / 2)"
+  parses "\u3042.\u3044, \u3046.\u3048.\u304A = 1, 2"
  parses "\u3042.\u3044, \u3046.\u3048.\u304A = 1, 2"
+  parses "<<-EOF.x\n  foo\nEOF"
  parses "<<-EOF.x\n  foo\nEOF"
+  parses "case {1}\nin {Int32}; 2; end"
  parses "case {1}\nin {Int32}; 2; end"
+  parses "->@@foo.foo="
  parses "->@@foo.foo="
+  parses "case 1\nwhen 1\n2\nend"
  parses "case 1\nwhen 1\n2\nend"
+  parses "Foo({*X, *{Y}})"
  parses "Foo({*X, *{Y}})"
+  parses "def foo(**args : Foo)\n1\nend"
  parses "def foo(**args : Foo)\n1\nend"
+  parses "def foo(@var); 1; end"
  parses "def foo(@var); 1; end"
+  parses "a = / /"
  parses "a = / /"
+  parses "+1_i64"
  parses "+1_i64"
+  parses "def foo(instance_sizeof foo); end"
  parses "def foo(instance_sizeof foo); end"
+  parses "foo.!.!"
  parses "foo.!.!"
+  parses ":\"\\u{61}\""
  parses ":\"\\u{61}\""
+  parses "foo.<"
  parses "foo.<"
+  says syntax error on "fun foo\nclass"
  says syntax error on "fun foo\nclass"
+  parses "@@a : Foo"
  parses "@@a : Foo"
+  says syntax error on "nil foo"
  says syntax error on "nil foo"
+  parses "__FILE__"
  parses "__FILE__"
+  parses "case\n1\nwhen 1\n2\nend\nif a\nend"
  parses "case\n1\nwhen 1\n2\nend\nif a\nend"
+  parses "foo(0, n &* 2)"
  parses "foo(0, n &* 2)"
+  parses "asm(\"nop\" : \"a\"(0))"
  parses "asm(\"nop\" : \"a\"(0))"
+  parses "def self.[]?; end"
  parses "def self.[]?; end"
+  parses "1 >= 2"
  parses "1 >= 2"
+  parses "2.3_f32"
  parses "2.3_f32"
+  says syntax error on "a {} += 1"
  says syntax error on "a {} += 1"
+  parses "foo % q()"
  parses "foo % q()"
+  parses "{% begin %}%< %s >{% end %}"
  parses "{% begin %}%< %s >{% end %}"
+  parses "foo(**bar)"
  parses "foo(**bar)"
+  parses "foo.bar = (1).abs"
  parses "foo.bar = (1).abs"
+  parses "Foo({X, Y,})"
  parses "Foo({X, Y,})"
+  parses "1_u128"
  parses "1_u128"
+  parses "def foo(@typeof); end"
  parses "def foo(@typeof); end"
+  says syntax error on "foo { |(select)| }"
  says syntax error on "foo { |(select)| }"
+  parses "{% begin %}%x| %s |{% end %}"
  parses "{% begin %}%x| %s |{% end %}"
+  says syntax error on "return ? 1 : 2"
  says syntax error on "return ? 1 : 2"
+  parses "def foo(x @@def); end"
  parses "def foo(x @@def); end"
+  parses "a = 1; a &*=\n1"
  parses "a = 1; a &*=\n1"
+  says syntax error on "def foo(end); end"
  says syntax error on "def foo(end); end"
+  says syntax error on "foo(\"bar\" \"baz\")"
  says syntax error on "foo(\"bar\" \"baz\")"
+  parses "x, y = <<-FOO, <<-BAR\nhello\nFOO\nworld\nBAR"
  parses "x, y = <<-FOO, <<-BAR\nhello\nFOO\nworld\nBAR"
+  parses "def %(); end"
  parses "def %(); end"
+  parses "{% begin %}%x{ %s }{% end %}"
  parses "{% begin %}%x{ %s }{% end %}"
+  parses "@foo"
  parses "@foo"
+  sets correct location of protected macro in enum
  sets correct location of protected macro in enum
+  parses "foo %Q()"
  parses "foo %Q()"
+  says syntax error on "{\"\": 1}"
  says syntax error on "{\"\": 1}"
+  parses "1\\\r\n + 2"
  parses "1\\\r\n + 2"
+  parses "macro foo; 1 + 2 {{foo}} 3 + 4; end"
  parses "macro foo; 1 + 2 {{foo}} 3 + 4; end"
+  parses "def foo(x @@pointerof); end"
  parses "def foo(x @@pointerof); end"
+  parses "case 1\nwhen 1\n2\nend\nif a\nend"
  parses "case 1\nwhen 1\n2\nend\nif a\nend"
+  parses "def ==(other, file = 1); end"
  parses "def ==(other, file = 1); end"
+  says syntax error on "1 ... return"
  says syntax error on "1 ... return"
+  says syntax error on "\"hello\" foo"
  says syntax error on "\"hello\" foo"
+  parses "def foo(out foo); end"
  parses "def foo(out foo); end"
+  says syntax error on "def foo(foo while); end"
  says syntax error on "def foo(foo while); end"
+  parses "def foo(@next); end"
  parses "def foo(@next); end"
+  parses "include Foo"
  parses "include Foo"
+  says syntax error on "def foo(foo case); end"
  says syntax error on "def foo(foo case); end"
+  parses "_ = 1"
  parses "_ = 1"
+  parses "1 + 2"
  parses "1 + 2"
+  parses "<<-HERE\n   One\n\n  Zero\n  HERE"
  parses "<<-HERE\n   One\n\n  Zero\n  HERE"
+  parses "->(x : Int32) { }"
  parses "->(x : Int32) { }"
+  says syntax error on "macro Foo.bar;end"
  says syntax error on "macro Foo.bar;end"
+  parses "foo &.block"
  parses "foo &.block"
+  parses "a.b &=\n1"
  parses "a.b &=\n1"
+  parses "class Foo < self; end"
  parses "class Foo < self; end"
+  says syntax error on "def foo\ndef\nend"
  says syntax error on "def foo\ndef\nend"
+  parses "def |(); end"
  parses "def |(); end"
+  parses "begin; 1; 2; 3; end;"
  parses "begin; 1; 2; 3; end;"
+  parses "@@a = uninitialized Foo"
  parses "@@a = uninitialized Foo"
+  parses "a.b %=\n1"
  parses "a.b %=\n1"
+  parses "Int[8]?"
  parses "Int[8]?"
+  parses "->Foo.=~(Int32)"
  parses "->Foo.=~(Int32)"
+  parses "1.[]?(2)"
  parses "1.[]?(2)"
+  parses "def foo(x @@typeof); end"
  parses "def foo(x @@typeof); end"
+  parses "a = 1; a &= 1"
  parses "a = 1; a &= 1"
+  parses "%q{hello \\n world}"
  parses "%q{hello \\n world}"
+  says syntax error on "while return; end"
  says syntax error on "while return; end"
+  parses "def foo(var : Int -> Double); end"
  parses "def foo(var : Int -> Double); end"
+  parses "1"
  parses "1"
+  says syntax error on "def foo(out); end"
  says syntax error on "def foo(out); end"
+  parses "{A: 1, B: 2}"
  parses "{A: 1, B: 2}"
+  says syntax error on " {1, 2, 3 end"
  says syntax error on " {1, 2, 3 end"
+  parses "->Foo.<=(Int32)"
  parses "->Foo.<=(Int32)"
+  parses "{a: 1, b: 2}"
  parses "{a: 1, b: 2}"
+  parses "return 1, *2"
  parses "return 1, *2"
+  parses "def /(); end;"
  parses "def /(); end;"
+  parses "def self.*(); end;"
  parses "def self.*(); end;"
+  parses "abstract def foo\n1"
  parses "abstract def foo\n1"
+  parses "asm(\"bl trap\" :::: \"unwind\")"
  parses "asm(\"bl trap\" :::: \"unwind\")"
+  parses "Foo({X, Y})"
  parses "Foo({X, Y})"
+  parses "foo = 1; ->foo.foo?"
  parses "foo = 1; ->foo.foo?"
+  parses "{1.. => 2};"
  parses "{1.. => 2};"
+  says syntax error on "{a[0]: 1}"
  says syntax error on "{a[0]: 1}"
+  parses "macro []?;end"
  parses "macro []?;end"
+  parses "foo(a: n =~ 2)"
  parses "foo(a: n =~ 2)"
+  parses "1 << 2"
  parses "1 << 2"
+  parses "+1.0_f32"
  parses "+1.0_f32"
+  parses "class Foo(T); end"
  parses "class Foo(T); end"
+  parses "is_a?(Const)"
  parses "is_a?(Const)"
+  parses "{%\nif 1; 2; end\n%}"
  parses "{%\nif 1; 2; end\n%}"
+  parses "1 // 2"
  parses "1 // 2"
+  says syntax error on "{1 2}"
  says syntax error on "{1 2}"
+  parses "macro foo\n  <<-FOO, <<-BAR + \"\"\n  FOO\n  BAR\nend"
  parses "macro foo\n  <<-FOO, <<-BAR + \"\"\n  FOO\n  BAR\nend"
+  parses "offsetof : Int32"
  parses "offsetof : Int32"
+  parses "foo = 1; ->foo.<=(Int32)"
  parses "foo = 1; ->foo.<=(Int32)"
+  parses "n <= 2"
  parses "n <= 2"
+  parses "macro //;end"
  parses "macro //;end"
+  parses "foo(&.as?(T).bar)"
  parses "foo(&.as?(T).bar)"
+  says syntax error on "def as?; end"
  says syntax error on "def as?; end"
+  says syntax error on "macro foo(x : Int32); end"
  says syntax error on "macro foo(x : Int32); end"
+  parses "def foo(x = __FILE__); end"
  parses "def foo(x = __FILE__); end"
+  says syntax error on "next &* 1"
  says syntax error on "next &* 1"
+  parses "foo.%(1, 2)"
  parses "foo.%(1, 2)"
+  parses "macro foo;%var;end"
  parses "macro foo;%var;end"
+  parses "a.b / 2"
  parses "a.b / 2"
+  says syntax error on "asm(\"\" : 1)"
  says syntax error on "asm(\"\" : 1)"
+  parses "foo = 1; ->foo.=~(Int32)"
  parses "foo = 1; ->foo.=~(Int32)"
+  parses "foo(0, n < 2)"
  parses "foo(0, n < 2)"
+  parses "1.is_a?(\n  Int32\n)"
  parses "1.is_a?(\n  Int32\n)"
+  parses "1 * -2"
  parses "1 * -2"
+  parses "def foo(x @@unless); end"
  parses "def foo(x @@unless); end"
+  says syntax error on "def foo(abstract); end"
  says syntax error on "def foo(abstract); end"
+  parses "foo out _"
  parses "foo out _"
+  parses "%r(/)"
  parses "%r(/)"
+  parses "return;"
  parses "return;"
+  says syntax error on "def foo=(a,b); end"
  says syntax error on "def foo=(a,b); end"
+  parses "foo(a: n ^ 2)"
  parses "foo(a: n ^ 2)"
+  says syntax error on "{\"x\": [] of Int32,\n}\n1.foo("
  says syntax error on "{\"x\": [] of Int32,\n}\n1.foo("
+  parses "while true; end;"
  parses "while true; end;"
+  parses "def foo(@if); end"
  parses "def foo(@if); end"
+  parses "%Q{hello \\n world}"
  parses "%Q{hello \\n world}"
+  says syntax error on "if break; end"
  says syntax error on "if break; end"
+  parses "property class : Int32"
  parses "property class : Int32"
+  says syntax error on "def foo(nil); end"
  says syntax error on "def foo(nil); end"
+  parses "def foo(@@pointerof); end"
  parses "def foo(@@pointerof); end"
+  says syntax error on "break % 1"
  says syntax error on "break % 1"
+  parses "a ?\n              b ? b1 : b2\n              : c ? 3\n              : 0"
  parses "a ?\n              b ? b1 : b2\n              : c ? 3\n              : 0"
+  parses "a = 1; a >>= 1"
  parses "a = 1; a >>= 1"
+  parses "->Foo.+(Int32)"
  parses "->Foo.+(Int32)"
+  parses "def foo\n1\nend"
  parses "def foo\n1\nend"
+  parses "macro <=>;end"
  parses "macro <=>;end"
+  says syntax error on "1 ... next"
  says syntax error on "1 ... next"
+  parses "/foo/x"
  parses "/foo/x"
+  parses "lib Foo::Bar\nend"
  parses "lib Foo::Bar\nend"
+  parses "n | 2"
  parses "n | 2"
+  parses "foo 1, 2"
  parses "foo 1, 2"
+  parses "enum Foo; A = 1\ndef self.foo; 1; end\nend"
  parses "enum Foo; A = 1\ndef self.foo; 1; end\nend"
+  parses "asm(\"nop\" :::: \"volatile\")"
  parses "asm(\"nop\" :::: \"volatile\")"
+  parses "->foo="
  parses "->foo="
+  parses "def foo(x = __DIR__); end"
  parses "def foo(x = __DIR__); end"
+  parses "def self.!=(); end;"
  parses "def self.!=(); end;"
+  parses "def foo(&block :\n Int ->); end"
  parses "def foo(&block :\n Int ->); end"
+  parses "->Foo.&+(Int32)"
  parses "->Foo.&+(Int32)"
+  parses "foo = 1; ->foo.+(Int32)"
  parses "foo = 1; ->foo.+(Int32)"
+  parses "var.@foo.@bar"
  parses "var.@foo.@bar"
+  says syntax error on "def foo(protected); end"
  says syntax error on "def foo(protected); end"
+  parses "->@foo.foo="
  parses "->@foo.foo="
+  parses "def ===; end;"
  parses "def ===; end;"
+  parses "lib LibC\nfun getch = \"get.char\"(x : Int32)\nend"
  parses "lib LibC\nfun getch = \"get.char\"(x : Int32)\nend"
+  parses "{{ foo }}"
  parses "{{ foo }}"
+  says syntax error on "return >= 1"
  says syntax error on "return >= 1"
+  parses "foo.bar [1]"
  parses "foo.bar [1]"
+  parses "@@a, b = 1, 2"
  parses "@@a, b = 1, 2"
+  parses "1_i128"
  parses "1_i128"
+  parses "Set {1, 2, 3}"
  parses "Set {1, 2, 3}"
+  parses "a = uninitialized Foo; a"
  parses "a = uninitialized Foo; a"
+  says syntax error on "A = begin; 1; ensure; B = 1; end"
  says syntax error on "A = begin; 1; ensure; B = 1; end"
+  parses "next {1, 2}"
  parses "next {1, 2}"
+  parses "foo(a: n - 2)"
  parses "foo(a: n - 2)"
+  parses "Foo::Bar?"
  parses "Foo::Bar?"
+  says syntax error on "1 == 2, a = 4"
  says syntax error on "1 == 2, a = 4"
+  says syntax error on "1 then"
  says syntax error on "1 then"
+  parses "{foo:'a', bar:'b'}"
  parses "{foo:'a', bar:'b'}"
+  says syntax error on "return &- 1"
  says syntax error on "return &- 1"
+  parses "lib LibC; type A = B**; end"
  parses "lib LibC; type A = B**; end"
+  parses "yield"
  parses "yield"
+  parses "foo.===(1, 2) { 3 }"
  parses "foo.===(1, 2) { 3 }"
+  parses "def foo(x @@nil); end"
  parses "def foo(x @@nil); end"
+  parses "foo\n   .bar"
  parses "foo\n   .bar"
+  parses "def self.!=; end;"
  parses "def self.!=; end;"
+  parses "->(x : Int32) { x }"
  parses "->(x : Int32) { x }"
+  says syntax error on "break + 1"
  says syntax error on "break + 1"
+  parses "macro ^;end"
  parses "macro ^;end"
+  parses "foo(n // 2)"
  parses "foo(n // 2)"
+  parses "def foo;bar(end: 1);end"
  parses "def foo;bar(end: 1);end"
+  parses "def foo(a, b = a); end"
  parses "def foo(a, b = a); end"
+  parses "{% begin %}%q( %s ){% end %}"
  parses "{% begin %}%q( %s ){% end %}"
+  says syntax error on "break & 1"
  says syntax error on "break & 1"
+  says syntax error on "foo[break]"
  says syntax error on "foo[break]"
+  says syntax error on "1 if break"
  says syntax error on "1 if break"
+  parses "*a = 1, 2"
  parses "*a = 1, 2"
+  says syntax error on "return ... 1"
  says syntax error on "return ... 1"
+  says syntax error on "foo { |(nil)| }"
  says syntax error on "foo { |(nil)| }"
+  parses "abstract def foo(x)"
  parses "abstract def foo(x)"
+  parses "1 -2"
  parses "1 -2"
+  says syntax error on "1 as Bar"
  says syntax error on "1 as Bar"
+  parses "{%\n1\n2\n3\n%}"
  parses "{%\n1\n2\n3\n%}"
+  says syntax error on "foo { |(while)| }"
  says syntax error on "foo { |(while)| }"
+  parses "->Foo::Bar::Baz.foo"
  parses "->Foo::Bar::Baz.foo"
+  parses "{foo:\"a\", bar:\"b\"}"
  parses "{foo:\"a\", bar:\"b\"}"
+  parses "foo *{1}"
  parses "foo *{1}"
+  parses "unless : Int32"
  parses "unless : Int32"
+  parses "def &+(); end"
  parses "def &+(); end"
+  parses "def foo(x = / /); end"
  parses "def foo(x = / /); end"
+  says syntax error on "foo { |(asm)| }"
  says syntax error on "foo { |(asm)| }"
+  parses "foo(n % 2)"
  parses "foo(n % 2)"
+  parses "begin; 1; rescue; 2; end"
  parses "begin; 1; rescue; 2; end"
+  parses "a\nwhile / /; / /; end"
  parses "a\nwhile / /; / /; end"
+  parses "alignof(\n  Int32\n)"
  parses "alignof(\n  Int32\n)"
+  parses "def foo(x @instance_sizeof); end"
  parses "def foo(x @instance_sizeof); end"
+  says syntax error on "foo { |(self)| }"
  says syntax error on "foo { |(self)| }"
+  parses "{[] of Foo, Bar::Baz.new}"
  parses "{[] of Foo, Bar::Baz.new}"
+  sets correct location of global path in class def
  sets correct location of global path in class def
+  parses "break *{1, 2}"
  parses "break *{1, 2}"
+  parses "def foo(x @true); end"
  parses "def foo(x @true); end"
+  parses "foo(1, a: 1, b: 2)"
  parses "foo(1, a: 1, b: 2)"
+  says syntax error on "macro responds_to?; end"
  says syntax error on "macro responds_to?; end"
+  parses "foo do\n//\nend"
  parses "foo do\n//\nend"
+  parses "{% begin %}%| %s |{% end %}"
  parses "{% begin %}%| %s |{% end %}"
+  parses "def >=(*args, **opts, &); end"
  parses "def >=(*args, **opts, &); end"
+  parses "{% begin %}%w| %s |{% end %}"
  parses "{% begin %}%w| %s |{% end %}"
+  parses "1\n+2"
  parses "1\n+2"
+  parses "foo.% 1, 2"
  parses "foo.% 1, 2"
+  parses "macro foo;bar{% begin %}body{% end %}baz;end"
  parses "macro foo;bar{% begin %}body{% end %}baz;end"
+  parses "{% begin %}%r(\\A){% end %}"
  parses "{% begin %}%r(\\A){% end %}"
+  parses "include Foo\nif true; end"
  parses "include Foo\nif true; end"
+  says syntax error on "def foo(if); end"
  says syntax error on "def foo(if); end"
+  parses "foo(a: n % 2)"
  parses "foo(a: n % 2)"
+  parses "if foo.responds_to? :foo\nx = 1\nend"
  parses "if foo.responds_to? :foo\nx = 1\nend"
+  says syntax error on "{1, ->{ |_| x } }"
  says syntax error on "{1, ->{ |_| x } }"
+  says syntax error on "(1, 2 3)"
  says syntax error on "(1, 2 3)"
+  says syntax error on "break - 1"
  says syntax error on "break - 1"
+  parses "def `(cmd); 1; end"
  parses "def `(cmd); 1; end"
+  says syntax error on "foo { |(next)| }"
  says syntax error on "foo { |(next)| }"
+  parses "def foo(@@macro); end"
  parses "def foo(@@macro); end"
+  sets correct location of splat in multiple assignment
  sets correct location of splat in multiple assignment
+  parses "def foo; end; if false; 1; else; 2; end"
  parses "def foo; end; if false; 1; else; 2; end"
+  parses "macro foo;if %var;true;end;end"
  parses "macro foo;if %var;true;end;end"
+  parses "->Foo./(Int32)"
  parses "->Foo./(Int32)"
+  parses "def foo(a, &block : self -> self); end"
  parses "def foo(a, &block : self -> self); end"
+  parses "def foo(@yield); end"
  parses "def foo(@yield); end"
+  parses "a = /=/"
  parses "a = /=/"
+  parses "macro foo(@[Foo] **args);end"
  parses "macro foo(@[Foo] **args);end"
+  parses "foo(1)"
  parses "foo(1)"
+  parses "->Foo.&-(Int32)"
  parses "->Foo.&-(Int32)"
+  parses "def foo(x, *args, y = 2); 1; end"
  parses "def foo(x, *args, y = 2); 1; end"
+  says syntax error on "break >> 1"
  says syntax error on "break >> 1"
+  parses "a, b, *c = 1, 2"
  parses "a, b, *c = 1, 2"
+  says syntax error on "def foo(def); end"
  says syntax error on "def foo(def); end"
+  parses "def **(); end"
  parses "def **(); end"
+  says syntax error on "1 .. return"
  says syntax error on "1 .. return"
+  says syntax error on "next ? 1 : 2"
  says syntax error on "next ? 1 : 2"
+  parses "1 ? 2 : 3"
  parses "1 ? 2 : 3"
+  parses "foo(z: 0, a: n =~ 2)"
  parses "foo(z: 0, a: n =~ 2)"
+  says syntax error on "1 ... break"
  says syntax error on "1 ... break"
+  parses "1.as(Bar)"
  parses "1.as(Bar)"
+  parses "macro foo;bar{% for x in y %}\\  \n   body{% end %}\\   baz;end"
  parses "macro foo;bar{% for x in y %}\\  \n   body{% end %}\\   baz;end"
+  parses ":[]="
  parses ":[]="
+  says syntax error on "macro foo(\"\" y); end"
  says syntax error on "macro foo(\"\" y); end"
+  parses "macro foo\n  <<-FOO\n    %foo\n  FOO\nend"
  parses "macro foo\n  <<-FOO\n    %foo\n  FOO\nend"
+  says syntax error on "foo &.||()"
  says syntax error on "foo &.||()"
+  says syntax error on "def foo(case); end"
  says syntax error on "def foo(case); end"
+  parses "/ /"
  parses "/ /"
+  parses "{\"\".id}"
  parses "{\"\".id}"
+  parses "offsetof(X, 1)"
  parses "offsetof(X, 1)"
+  parses ":/"
  parses ":/"
+  parses "def foo(x @lib); end"
  parses "def foo(x @lib); end"
+  says syntax error on "next << 1"
  says syntax error on "next << 1"
+  parses "foo(z: 0, a: n + 2)"
  parses "foo(z: 0, a: n + 2)"
+  parses "foo(*bar)"
  parses "foo(*bar)"
+  parses "elsif : Int32"
  parses "elsif : Int32"
+  says syntax error on "def foo(until); end"
  says syntax error on "def foo(until); end"
+  parses "class Foo; end\nwhile true; end"
  parses "class Foo; end\nwhile true; end"
+  parses "n &* 2"
  parses "n &* 2"
+  parses "def foo(x, *y); 1; end"
  parses "def foo(x, *y); 1; end"
+  parses "def foo(@break); end"
  parses "def foo(@break); end"
+  parses "def foo(x, *args, y = 2, w, z = 3); 1; end"
  parses "def foo(x, *args, y = 2, w, z = 3); 1; end"
+  parses "foo.| do end"
  parses "foo.| do end"
+  says syntax error on "foo &.||"
  says syntax error on "foo &.||"
+  parses "foo(&.as(T).bar)"
  parses "foo(&.as(T).bar)"
+  parses "{} of Int => Double"
  parses "{} of Int => Double"
+  parses "-> : Int32 { }"
  parses "-> : Int32 { }"
+  parses "enum : Int32"
  parses "enum : Int32"
+  parses "foo.>= 1, 2"
  parses "foo.>= 1, 2"
+  says syntax error on "foo { |(include)| }"
  says syntax error on "foo { |(include)| }"
+  says syntax error on "return &* 1"
  says syntax error on "return &* 1"
+  says syntax error on "def foo(yield); end"
  says syntax error on "def foo(yield); end"
+  parses ":foo?"
  parses ":foo?"
+  parses "def foo(x @with); end"
  parses "def foo(x @with); end"
+  says syntax error on "if 1 == 1 a; end"
  says syntax error on "if 1 == 1 a; end"
+  parses "macro foo;{% verbatim do %}1{% foo %}2{% end %};end"
  parses "macro foo;{% verbatim do %}1{% foo %}2{% end %};end"
+  parses "enum Foo; private def foo; 1; end; end"
  parses "enum Foo; private def foo; 1; end; end"
+  parses "def +(); end;"
  parses "def +(); end;"
+  says syntax error on "foo.responds_to?"
  says syntax error on "foo.responds_to?"
+  parses "def self.^; end;"
  parses "def self.^; end;"
+  parses "def foo(x @while); end"
  parses "def foo(x @while); end"
+  says syntax error on "next // 1"
  says syntax error on "next // 1"
+  parses "def foo(@var); end"
  parses "def foo(@var); end"
+  parses "Foo(Bar(T | U))"
  parses "Foo(Bar(T | U))"
+  says syntax error on "foo &.&&"
  says syntax error on "foo &.&&"
+  parses "a, *b = 1, 2"
  parses "a, *b = 1, 2"
+  parses "property include : Int32"
  parses "property include : Int32"
+  parses "begin\n/ /\nend"
  parses "begin\n/ /\nend"
+  parses "->() { }"
  parses "->() { }"
+  parses "foo = 1; ->foo.//(Int32)"
  parses "foo = 1; ->foo.//(Int32)"
+  parses "{% unless 1; 2; else 3; end %}"
  parses "{% unless 1; 2; else 3; end %}"
+  parses "property elsif : Int32"
  parses "property elsif : Int32"
+  parses "foo.-"
  parses "foo.-"
+  parses "foo { |(_, c, )| c }"
  parses "foo { |(_, c, )| c }"
+  says syntax error on "def self.!; end"
  says syntax error on "def self.!; end"
+  parses "def =~; end;"
  parses "def =~; end;"
+  parses "def foo(x y); y; end"
  parses "def foo(x y); y; end"
+  parses "def []; end"
  parses "def []; end"
+  says syntax error on "foo { |asm| }"
  says syntax error on "foo { |asm| }"
+  parses "a = 1; a &-=\n1"
  parses "a = 1; a &-=\n1"
+  parses "enum Foo; {{1}}; end"
  parses "enum Foo; {{1}}; end"
+  parses "def foo(&block); end"
  parses "def foo(&block); end"
+  parses "1 unless 3"
  parses "1 unless 3"
+  says syntax error on "{1, 2 3}"
  says syntax error on "{1, 2 3}"
+  parses "foo = 1; ->foo.&(Int32)"
  parses "foo = 1; ->foo.&(Int32)"
+  says syntax error on "asm(\"nop\" :::: \"\#{volatile}\")"
  says syntax error on "asm(\"nop\" :::: \"\#{volatile}\")"
+  parses "foo = 1; ->foo.&-(Int32)"
  parses "foo = 1; ->foo.&-(Int32)"
+  parses "x.foo a: 1, b: 2 "
  parses "x.foo a: 1, b: 2 "
+  parses "return 1 if true"
  parses "return 1 if true"
+  says syntax error on "def foo\ninclude\nend"
  says syntax error on "def foo\ninclude\nend"
+  parses "a.b &-=\n1"
  parses "a.b &-=\n1"
+  says syntax error on "foo { |alias| }"
  says syntax error on "foo { |alias| }"
+  parses "foo(out x); x"
  parses "foo(out x); x"
+  parses "enum Foo; protected def foo; 1; end; end"
  parses "enum Foo; protected def foo; 1; end; end"
+  parses "foo(a: n << 2)"
  parses "foo(a: n << 2)"
+  parses "case {1}\nin {Foo(Int32)}; 2; end"
  parses "case {1}\nin {Foo(Int32)}; 2; end"
+  parses "def foo; a = 1; x { a }; end"
  parses "def foo; a = 1; x { a }; end"
+  parses "n !~ 2"
  parses "n !~ 2"
+  parses "def foo(x @@while); end"
  parses "def foo(x @@while); end"
+  says syntax error on "return &+ 1"
  says syntax error on "return &+ 1"
+  parses "def self.>=; end;"
  parses "def self.>=; end;"
+  parses "foo &.%(1)"
  parses "foo &.%(1)"
+  parses "def foo(@@require); end"
  parses "def foo(@@require); end"
+  parses "def type(type); end"
  parses "def type(type); end"
+  parses "return {1, 2}"
  parses "return {1, 2}"
+  parses "macro foo(@[Foo] *args);end"
  parses "macro foo(@[Foo] *args);end"
+  parses ":\"\\\\foo\""
  parses ":\"\\\\foo\""
+  says syntax error on "next * 1"
  says syntax error on "next * 1"
+  parses "(1)\nif true; end"
  parses "(1)\nif true; end"
+  parses "macro foo;var if true;end"
  parses "macro foo;var if true;end"
+  says syntax error on "foo { |(abstract)| }"
  says syntax error on "foo { |(abstract)| }"
+  parses "def foo(@@while); end"
  parses "def foo(@@while); end"
+  says syntax error on "foo { |(extend)| }"
  says syntax error on "foo { |(extend)| }"
+  parses "def foo(@@enum); end"
  parses "def foo(@@enum); end"
+  says syntax error on "def foo(var : Foo+); end"
  says syntax error on "def foo(var : Foo+); end"
+  parses "def ==(*args, **opts); end"
  parses "def ==(*args, **opts); end"
+  says syntax error on "def foo(**args, x); end"
  says syntax error on "def foo(**args, x); end"
+  says syntax error on "foo { |def| }"
  says syntax error on "foo { |def| }"
+  parses "->Foo.&*(Int32)"
  parses "->Foo.&*(Int32)"
+  says syntax error on "a = next"
  says syntax error on "a = next"
+  parses "module Foo(*T); end"
  parses "module Foo(*T); end"
+  says syntax error on "def foo\nextend\nend"
  says syntax error on "def foo\nextend\nend"
+  says syntax error on "next &+ 1"
  says syntax error on "next &+ 1"
+  parses "->Foo.foo"
  parses "->Foo.foo"
+  parses "break : Int32"
  parses "break : Int32"
+  says syntax error on "'a' foo"
  says syntax error on "'a' foo"
+  says syntax error on "foo { |private| }"
  says syntax error on "foo { |private| }"
+  says syntax error on "foo { |break| }"
  says syntax error on "foo { |break| }"
+  says syntax error on "def foo(with); end"
  says syntax error on "def foo(with); end"
+  says syntax error on "a = 1, 2, 3"
  says syntax error on "a = 1, 2, 3"
+  parses "puts __LINE__"
  parses "puts __LINE__"
+  parses "-> { }"
  parses "-> { }"
+  parses "def foo(x : U) : Int32 forall T, U; end"
  parses "def foo(x : U) : Int32 forall T, U; end"
+  parses "def self.!~(); end;"
  parses "def self.!~(); end;"
+  parses "f.x += 2"
  parses "f.x += 2"
+  parses ":>="
  parses ":>="
+  parses "<<-HERE1; <<-HERE2\nHERE1\nhere2\nHERE2"
  parses "<<-HERE1; <<-HERE2\nHERE1\nhere2\nHERE2"
+  says syntax error on "a, b.<="
  says syntax error on "a, b.<="
+  parses "->Foo.<<(Int32)"
  parses "->Foo.<<(Int32)"
+  parses "def self.<=(); end;"
  parses "def self.<=(); end;"
+  says syntax error on "foo { |false| }"
  says syntax error on "foo { |false| }"
+  says syntax error on "foo { |require| }"
  says syntax error on "foo { |require| }"
+  says syntax error on "def foo(foo asm); end"
  says syntax error on "def foo(foo asm); end"
+  parses "def ===(); end"
  parses "def ===(); end"
+  parses "lib LibC; fun getchar(a : Int, b : Float) : Int; end"
  parses "lib LibC; fun getchar(a : Int, b : Float) : Int; end"
+  parses "foo &.as(T).bar"
  parses "foo &.as(T).bar"
+  parses "def self./; end;"
  parses "def self./; end;"
+  parses "@a : Foo = 1"
  parses "@a : Foo = 1"
+  parses "foo.^ 1, 2"
  parses "foo.^ 1, 2"
+  says syntax error on "*a if true = 2"
  says syntax error on "*a if true = 2"
+  parses "foo(&.responds_to?(:foo))"
  parses "foo(&.responds_to?(:foo))"
+  parses "foo(0, n === 2)"
  parses "foo(0, n === 2)"
+  parses "require : Int32"
  parses "require : Int32"
+  parses "lib LibC; fun foo(a : Int*); end"
  parses "lib LibC; fun foo(a : Int*); end"
+  says syntax error on "def foo(x x); 1; end"
  says syntax error on "def foo(x x); 1; end"
+  says syntax error on "break === 1"
  says syntax error on "break === 1"
+  parses "foo(0, n - 2)"
  parses "foo(0, n - 2)"
+  says syntax error on "foo { |(with)| }"
  says syntax error on "foo { |(with)| }"
+  parses "foo()"
  parses "foo()"
+  says syntax error on "foo { |(alias)| }"
  says syntax error on "foo { |(alias)| }"
+  parses "puts __FILE__"
  parses "puts __FILE__"
+  parses "foo bar.baz(1) do\nend"
  parses "foo bar.baz(1) do\nend"
+  parses "macro foo;%var unless true;end"
  parses "macro foo;%var unless true;end"
+  parses "puts {{*1}}"
  parses "puts {{*1}}"
+  parses "a = b = 2"
  parses "a = b = 2"
+  parses "1 && 2"
  parses "1 && 2"
+  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2))"
  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2))"
+  parses "def foo; a = 1; a {}; end"
  parses "def foo; a = 1; a {}; end"
+  parses "foo.<=(1, 2) { 3 }"
  parses "foo.<=(1, 2) { 3 }"
+  parses "macro ==;end"
  parses "macro ==;end"
+  parses "def foo(a, &block : *Int -> ); end"
  parses "def foo(a, &block : *Int -> ); end"
+  parses "/(fo\#{\"bar\"}\#{1}o)/"
  parses "/(fo\#{\"bar\"}\#{1}o)/"
+  parses "foo.%(1, 2) { 3 }"
  parses "foo.%(1, 2) { 3 }"
+  parses "def foo(@@typeof); end"
  parses "def foo(@@typeof); end"
+  parses "a = 1; b = 2; c = 3; a-b-c"
  parses "a = 1; b = 2; c = 3; a-b-c"
+  parses "foo = 1; ->foo.>>(Int32)"
  parses "foo = 1; ->foo.>>(Int32)"
+  says syntax error on "Foo({x: X, x: Y})"
  says syntax error on "Foo({x: X, x: Y})"
+  parses "foo.is_a? Const"
  parses "foo.is_a? Const"
+  says syntax error on "def foo :String\nend"
  says syntax error on "def foo :String\nend"
+  parses "f.x &+= 2"
  parses "f.x &+= 2"
+  says syntax error on "\n      lib LibFoo\n        fun foo(x : Int32\n              y : Float64)\n      end\n      "
  says syntax error on "\n      lib LibFoo\n        fun foo(x : Int32\n              y : Float64)\n      end\n      "
+  says syntax error on "def foo(x : U) forall; end"
  says syntax error on "def foo(x : U) forall; end"
+  parses "foo(0, n &** 2)"
  parses "foo(0, n &** 2)"
+  parses "def foo; yield; end"
  parses "def foo; yield; end"
+  parses "1 &- 2"
  parses "1 &- 2"
+  parses "pointerof(@a)"
  parses "pointerof(@a)"
+  parses "{[] of Foo, ::Bar::Baz.new}"
  parses "{[] of Foo, ::Bar::Baz.new}"
+  parses "foo(Foo: 1, Bar: 2)"
  parses "foo(Foo: 1, Bar: 2)"
+  parses "->\n:\nInt32\n{\n}"
  parses "->\n:\nInt32\n{\n}"
+  parses "x = 1; ->{ x }"
  parses "x = 1; ->{ x }"
+  parses "foo = 1; b = 2; foo +b"
  parses "foo = 1; b = 2; foo +b"
+  parses "(foo bar do\nend)"
  parses "(foo bar do\nend)"
+  parses "foo(*{1})"
  parses "foo(*{1})"
+  parses "case 1\nin Int32.class; 2; end"
  parses "case 1\nin Int32.class; 2; end"
+  parses "pointerof(@a)"
  parses "pointerof(@a)"
+  parses "a()/3"
  parses "a()/3"
+  parses "(/ /)"
  parses "(/ /)"
+  parses "def foo=(value); end"
  parses "def foo=(value); end"
+  parses "foo.!= 1, 2"
  parses "foo.!= 1, 2"
+  parses "1\\\n + 2"
  parses "1\\\n + 2"
+  says syntax error on "yield return"
  says syntax error on "yield return"
+  parses "foo &.as?(T).bar"
  parses "foo &.as?(T).bar"
+  parses "begin; 1; end;"
  parses "begin; 1; end;"
+  parses "def self.==; end;"
  parses "def self.==; end;"
+  parses "(1; 2; 3)"
  parses "(1; 2; 3)"
+  parses "def foo(x : U) forall T, U; end"
  parses "def foo(x : U) forall T, U; end"
+  says syntax error on "foo[return]"
  says syntax error on "foo[return]"
+  parses "foo(\n  &.block\n)"
  parses "foo(\n  &.block\n)"
+  parses "foo(\na: 1,\n)"
  parses "foo(\na: 1,\n)"
+  parses "class Foo < Bar; end"
  parses "class Foo < Bar; end"
+  parses "case {1}\nin {true}; 2; end"
  parses "case {1}\nin {true}; 2; end"
+  parses "foo.^(1, 2)"
  parses "foo.^(1, 2)"
+  parses "foo.% do end"
  parses "foo.% do end"
+  parses "f ->{ a do\n end\n }"
  parses "f ->{ a do\n end\n }"
+  parses "foo.* do end"
  parses "foo.* do end"
+  says syntax error on "def foo(next); end"
  says syntax error on "def foo(next); end"
+  parses "macro foo;bar(end: 1);end"
  parses "macro foo;bar(end: 1);end"
+  parses "foo(a: n | 2)"
  parses "foo(a: n | 2)"
+  parses "foo(z: 0, a: n <= 2)"
  parses "foo(z: 0, a: n <= 2)"
+  parses "foo%r"
  parses "foo%r"
+  parses "def foo(self foo); end"
  parses "def foo(self foo); end"
+  says syntax error on "[\n]"
  says syntax error on "[\n]"
+  parses "Foo(X, alignof(Int32))"
  parses "Foo(X, alignof(Int32))"
+  parses "macro **;end"
  parses "macro **;end"
+  says syntax error on "return ^ 1"
  says syntax error on "return ^ 1"
+  parses "Foo{\"x\" => \"y\"}"
  parses "Foo{\"x\" => \"y\"}"
+  parses "begin; rescue; end"
  parses "begin; rescue; end"
+  parses "class : Int32"
  parses "class : Int32"
+  parses "foo(..2)"
  parses "foo(..2)"
+  parses "1 !~ 2"
  parses "1 !~ 2"
+  parses "foo(0, n // 2)"
  parses "foo(0, n // 2)"
+  parses "macro foo\n  <<-FOO\n    \#{ %var }\n  FOO\nend"
  parses "macro foo\n  <<-FOO\n    \#{ %var }\n  FOO\nend"
+  parses "Foo(X, instance_alignof(Int32))"
  parses "Foo(X, instance_alignof(Int32))"
+  says syntax error on "FOO, BAR = 1, 2"
  says syntax error on "FOO, BAR = 1, 2"
+  parses "foo(0, n ** 2)"
  parses "foo(0, n ** 2)"
+  says syntax error on "break ^ 1"
  says syntax error on "break ^ 1"
+  parses "{% unless 1\n  x\nend %}"
  parses "{% unless 1\n  x\nend %}"
+  parses "macro x\n%{}\nend"
  parses "macro x\n%{}\nend"
+  parses "def foo(@var = 1); 1; end"
  parses "def foo(@var = 1); 1; end"
+  parses "a.foo, *a.bar = 1"
  parses "a.foo, *a.bar = 1"
+  parses "a, b = 1, 2"
  parses "a, b = 1, 2"
+  parses "def foo(var : (Int, Float) -> Double); end"
  parses "def foo(var : (Int, Float) -> Double); end"
+  parses "def foo(@@false); end"
  parses "def foo(@@false); end"
+  parses "foo &block"
  parses "foo &block"
+  parses "nil?"
  parses "nil?"
+  says syntax error on "foo { |(sizeof)| }"
  says syntax error on "foo { |(sizeof)| }"
+  parses "def foo(x @fun); end"
  parses "def foo(x @fun); end"
+  parses "Foo(T)"
  parses "Foo(T)"
+  says syntax error on "<<-HERE\n   One\n \#{1}\n  Zero\n  HERE"
  says syntax error on "<<-HERE\n   One\n \#{1}\n  Zero\n  HERE"
+  parses "def self.**; end;"
  parses "def self.**; end;"
+  parses "\"hello \\\r\n     world\""
  parses "\"hello \\\r\n     world\""
+  parses "property extend : Int32"
  parses "property extend : Int32"
+  parses "Foo(X, sizeof(Int32))"
  parses "Foo(X, sizeof(Int32))"
+  parses "{A::B}"
  parses "{A::B}"
+  parses "def self.-; end;"
  parses "def self.-; end;"
+  parses "def foo(var : Int?); end"
  parses "def foo(var : Int?); end"
+  parses "break *1"
  parses "break *1"
+  parses "Foo(T | U)"
  parses "Foo(T | U)"
+  parses "f.x &-= 2"
  parses "f.x &-= 2"
+  says syntax error on "next == 1"
  says syntax error on "next == 1"
+  parses "lib LibC; type A = B.class; end"
  parses "lib LibC; type A = B.class; end"
+  parses "1 rescue 2 if 3"
  parses "1 rescue 2 if 3"
+  says syntax error on "foo { |next| }"
  says syntax error on "foo { |next| }"
+  parses "macro foo; 1 + 2 {{foo}}\\ 3 + 4; end"
  parses "macro foo; 1 + 2 {{foo}}\\ 3 + 4; end"
+  parses "case 1\nin .bar?; 2; end"
  parses "case 1\nin .bar?; 2; end"
+  parses ":=~"
  parses ":=~"
+  parses "a = 1; a *= 1"
  parses "a = 1; a *= 1"
+  parses "def *(); end;"
  parses "def *(); end;"
+  parses "lib LibC; fun foo(a : ::B, ::C -> ::D); end"
  parses "lib LibC; fun foo(a : ::B, ::C -> ::D); end"
+  parses "def <(); end"
  parses "def <(); end"
+  parses "property def : Int32"
  parses "property def : Int32"
+  says syntax error on "def foo(foo struct); end"
  says syntax error on "def foo(foo struct); end"
+  parses "Int[8, 4]"
  parses "Int[8, 4]"
+  parses "foo = 1; ->foo.foo"
  parses "foo = 1; ->foo.foo"
+  parses "f.x |= 2"
  parses "f.x |= 2"
+  parses "def foo(extend foo); end"
  parses "def foo(extend foo); end"
+  parses "n & 2"
  parses "n & 2"
+  parses "module Foo; end"
  parses "module Foo; end"
+  parses "1+0"
  parses "1+0"
+  parses "module : Int32"
  parses "module : Int32"
+  says syntax error on "foo { |(x, x)| }"
  says syntax error on "foo { |(x, x)| }"
+  parses "\"foo\""
  parses "\"foo\""
+  parses "foo.bar = {} of Int32 => Int32"
  parses "foo.bar = {} of Int32 => Int32"
+  parses "def foo(@@in); end"
  parses "def foo(@@in); end"
+  parses "def self.+; end;"
  parses "def self.+; end;"
+  parses "property protected : Int32"
  parses "property protected : Int32"
+  parses "1..\n2.."
  parses "1..\n2.."
+  says syntax error on "case 1\nin Int32; 2; else"
  says syntax error on "case 1\nin Int32; 2; else"
+  parses "->Foo.<(Int32)"
  parses "->Foo.<(Int32)"
+  says syntax error on "foo { |until| }"
  says syntax error on "foo { |until| }"
+  says syntax error on "case 1\nin _;"
  says syntax error on "case 1\nin _;"
+  says syntax error on "next .. 1"
  says syntax error on "next .. 1"
+  parses "case 1\nin Foo(Int32); 2; end"
  parses "case 1\nin Foo(Int32); 2; end"
+  parses "true"
  parses "true"
+  parses "foo %r()"
  parses "foo %r()"
+  parses "call(foo.as Bar, Baz)"
  parses "call(foo.as Bar, Baz)"
+  parses "n < 2"
  parses "n < 2"
+  says syntax error on "foo { |module| }"
  says syntax error on "foo { |module| }"
+  parses "foo(a: n !~ 2)"
  parses "foo(a: n !~ 2)"
+  parses "def foo(@@extend); end"
  parses "def foo(@@extend); end"
+  parses "def ==(*args, **opts, &); end"
  parses "def ==(*args, **opts, &); end"
+  says syntax error on "@foo :: Foo"
  says syntax error on "@foo :: Foo"
+  parses "foo(&block)"
  parses "foo(&block)"
+  parses "Foo(T, U, 1)"
  parses "Foo(T, U, 1)"
+  says syntax error on "foo { |(private)| }"
  says syntax error on "foo { |(private)| }"
+  parses "->Foo.[]=(Int32)"
  parses "->Foo.[]=(Int32)"
+  parses "puts _"
  parses "puts _"
+  says syntax error on "{\n\"foo\"\n\"bar\"\n}"
  says syntax error on "{\n\"foo\"\n\"bar\"\n}"
+  parses "def foo(var : Char[N]); end"
  parses "def foo(var : Char[N]); end"
+  says syntax error on "macro foo"
  says syntax error on "macro foo"
+  parses "def %; end;"
  parses "def %; end;"
+  parses "foo(a: n >= 2)"
  parses "foo(a: n >= 2)"
+  parses "property instance_sizeof : Int32"
  parses "property instance_sizeof : Int32"
+  parses "foo(z: 0, a: n > 2)"
  parses "foo(z: 0, a: n > 2)"
+  parses "foo &.+(2)"
  parses "foo &.+(2)"
+  parses "foo./(1, 2)"
  parses "foo./(1, 2)"
+  parses "def <; end;"
  parses "def <; end;"
+  says syntax error on "def foo(x @@x); 1; end"
  says syntax error on "def foo(x @@x); 1; end"
+  parses "1 &** 2"
  parses "1 &** 2"
+  parses "Foo(\"foo\": U, \"bar\": V)"
  parses "Foo(\"foo\": U, \"bar\": V)"
+  parses "foo +1"
  parses "foo +1"
+  parses "->foo"
  parses "->foo"
+  parses "[\n1, 2]"
  parses "[\n1, 2]"
+  parses "foo(&.block)"
  parses "foo(&.block)"
+  says syntax error on "def foo(x :Int32); end"
  says syntax error on "def foo(x :Int32); end"
+  says syntax error on "->(x, y z) { }"
  says syntax error on "->(x, y z) { }"
+  parses "a = 1; a &+=\n1"
  parses "a = 1; a &+=\n1"
+  parses "property struct : Int32"
  parses "property struct : Int32"
+  parses "foo = 1; ->foo./(Int32)"
  parses "foo = 1; ->foo./(Int32)"
+  parses "foo.bar.as(Bar)"
  parses "foo.bar.as(Bar)"
+  says syntax error on "def foo(true); end"
  says syntax error on "def foo(true); end"
+  says syntax error on "Foo{one: :two, three: :four}"
  says syntax error on "Foo{one: :two, three: :four}"
+  parses "1 === 2"
  parses "1 === 2"
+  says syntax error on "foo { |abstract| }"
  says syntax error on "foo { |abstract| }"
+  parses "case 1\nwhen .!()\n2\nend"
  parses "case 1\nwhen .!()\n2\nend"
+  says syntax error on "def foo(x, *); 1; end"
  says syntax error on "def foo(x, *); 1; end"
+  parses "foo[*baz] = 1"
  parses "foo[*baz] = 1"
+  says syntax error on "foo { |(true)| }"
  says syntax error on "foo { |(true)| }"
+  parses "def foo(@@var = 1); 1; end"
  parses "def foo(@@var = 1); 1; end"
+  says syntax error on "foo { |enum| }"
  says syntax error on "foo { |enum| }"
+  parses "else : Int32"
  parses "else : Int32"
+  parses "unless foo; 1; end"
  parses "unless foo; 1; end"
+  parses "def foo(x @case); end"
  parses "def foo(x @case); end"
+  parses "return *1, 2"
  parses "return *1, 2"
+  parses "\"\#{1\n}\""
  parses "\"\#{1\n}\""
+  parses "pointerof : Int32"
  parses "pointerof : Int32"
+  parses "1+2*3"
  parses "1+2*3"
+  parses "def foo(var : self.class); end"
  parses "def foo(var : self.class); end"
+  parses "foo = 1; ->foo.!~(Int32)"
  parses "foo = 1; ->foo.!~(Int32)"
+  parses "def foo(@abstract); end"
  parses "def foo(@abstract); end"
+  parses "a = 1; a += 1"
  parses "a = 1; a += 1"
+  parses "a, b, *c = 1"
  parses "a, b, *c = 1"
+  says syntax error on "macro as; end"
  says syntax error on "macro as; end"
+  parses "\"hello \#{1}\" \\\n \"\#{2} world\""
  parses "\"hello \#{1}\" \\\n \"\#{2} world\""
+  parses "a = 1; a ^=\n1"
  parses "a = 1; a ^=\n1"
+  parses "puts %i(one two)"
  parses "puts %i(one two)"
+  parses "def foo(x @@select); end"
  parses "def foo(x @@select); end"
+  parses "def foo(var : Int); end"
  parses "def foo(var : Int); end"
+  parses "lib LibC\nend"
  parses "lib LibC\nend"
+  parses "foo(z: 0, a: n % 2)"
  parses "foo(z: 0, a: n % 2)"
+  says syntax error on "return >> 1"
  says syntax error on "return >> 1"
+  parses "def self.*; end;"
  parses "def self.*; end;"
+  parses "def foo(x @@enum); end"
  parses "def foo(x @@enum); end"
+  parses "if foo; 1; elsif bar; 2; else 3; end"
  parses "if foo; 1; elsif bar; 2; else 3; end"
+  parses "def foo(x @extend); end"
  parses "def foo(x @extend); end"
+  parses "a = 1; a &&= 1"
  parses "a = 1; a &&= 1"
+  says syntax error on "def foo:String\nend"
  says syntax error on "def foo:String\nend"
+  parses "/\\ /"
  parses "/\\ /"
+  parses "1 * 2"
  parses "1 * 2"
+  says syntax error on "->(x y) { }"
  says syntax error on "->(x y) { }"
+  parses "property rescue : Int32"
  parses "property rescue : Int32"
+  parses "begin; 1; rescue ex; 2; end; ex"
  parses "begin; 1; rescue ex; 2; end; ex"
+  parses "Foo(1)"
  parses "Foo(1)"
+  parses "a = 1; a += 10 if a += 20"
  parses "a = 1; a += 10 if a += 20"
+  parses "1 -\n2"
  parses "1 -\n2"
+  parses "2**3**4"
  parses "2**3**4"
+  says syntax error on "a.b() += 1"
  says syntax error on "a.b() += 1"
+  parses "def >=; end;"
  parses "def >=; end;"
+  parses "next 1 if true"
  parses "next 1 if true"
+  parses "foo.+(1, 2) { 3 }"
  parses "foo.+(1, 2) { 3 }"
+  says syntax error on "def Foo(Int32).bar;end"
  says syntax error on "def Foo(Int32).bar;end"
+  parses "Foo(\nT,\nU,\n)"
  parses "Foo(\nT,\nU,\n)"
+  parses "def //(); end"
  parses "def //(); end"
+  says syntax error on "a = 1; a += next"
  says syntax error on "a = 1; a += next"
+  says syntax error on "def foo(extend); end"
  says syntax error on "def foo(extend); end"
+  says syntax error on "Foo(T, U V)"
  says syntax error on "Foo(T, U V)"
+  says syntax error on "false foo"
  says syntax error on "false foo"
+  parses "def foo; / /; end"
  parses "def foo; / /; end"
+  parses "def foo(\nvar); end"
  parses "def foo(\nvar); end"
+  parses "foo(z: 0, a: n / 2)"
  parses "foo(z: 0, a: n / 2)"
+  parses "foo(&.!)"
  parses "foo(&.!)"
+  parses "Foo(*T)"
  parses "Foo(*T)"
+  says syntax error on "foo { |(end)| }"
  says syntax error on "foo { |(end)| }"
+  says syntax error on "def foo(*args = 1); end"
  says syntax error on "def foo(*args = 1); end"
+  parses "foo(n ** 2)"
  parses "foo(n ** 2)"
+  parses "a = 1; a //=\n1"
  parses "a = 1; a //=\n1"
+  says syntax error on "foo.&&()"
  says syntax error on "foo.&&()"
+  says syntax error on "fun foo(Int32); end"
  says syntax error on "fun foo(Int32); end"
+  parses "/\\//"
  parses "/\\//"
+  parses "def self.==(); end;"
  parses "def self.==(); end;"
+  parses "case / /; when / /; / /; else; / /; end"
  parses "case / /; when / /; / /; else; / /; end"
+  parses "def foo(@module); end"
  parses "def foo(@module); end"
+  parses "foo.!~ do end"
  parses "foo.!~ do end"
+  says syntax error on "def foo(foo typeof); end"
  says syntax error on "def foo(foo typeof); end"
+  parses "def foo(x @false); end"
  parses "def foo(x @false); end"
+  parses "foo.nil?"
  parses "foo.nil?"
+  parses "def <=(other, file = 1); end"
  parses "def <=(other, file = 1); end"
+  says syntax error on " {1 => end"
  says syntax error on " {1 => end"
+  parses "foo.!=(1, 2) { 3 }"
  parses "foo.!=(1, 2) { 3 }"
+  says syntax error on "return do\nend"
  says syntax error on "return do\nend"
+  parses "def downto(n)\n1\nend"
  parses "def downto(n)\n1\nend"
+  parses "macro >>;end"
  parses "macro >>;end"
+  says syntax error on "a = 1; a += break"
  says syntax error on "a = 1; a += break"
+  parses "n % 2"
  parses "n % 2"
+  says syntax error on "foo.&&"
  says syntax error on "foo.&&"
+  says syntax error on "case 1; when break; end; end"
  says syntax error on "case 1; when break; end; end"
+  parses "def foo(x @break); end"
  parses "def foo(x @break); end"
+  parses "{% begin %}%i( %s ){% end %}"
  parses "{% begin %}%i( %s ){% end %}"
+  parses "def foo; a = 1; with a yield a; end"
  parses "def foo; a = 1; with a yield a; end"
+  parses "Foo(T)?"
  parses "Foo(T)?"
+  says syntax error on "macro foo(x, *); 1; end"
  says syntax error on "macro foo(x, *); 1; end"
+  parses "begin; 1; rescue ex : ::Foo | ::Bar; 2; end"
  parses "begin; 1; rescue ex : ::Foo | ::Bar; 2; end"
+  says syntax error on "foo { |begin| }"
  says syntax error on "foo { |begin| }"
+  parses "foo./ do end"
  parses "foo./ do end"
+  parses "macro &-;end"
  parses "macro &-;end"
+  parses "1 \\\r\n + 2"
  parses "1 \\\r\n + 2"
+  says syntax error on "a += 1"
  says syntax error on "a += 1"
+  says syntax error on "return * 1"
  says syntax error on "return * 1"
+  parses "def foo(true foo); end"
  parses "def foo(true foo); end"
+  parses "[] of Int"
  parses "[] of Int"
+  parses "foo(0, n % 2)"
  parses "foo(0, n % 2)"
+  parses "foo !false"
  parses "foo !false"
+  parses "case 1\nwhen .is_a?(T)\n2\nend"
  parses "case 1\nwhen .is_a?(T)\n2\nend"
+  says syntax error on "def foo(foo begin); end"
  says syntax error on "def foo(foo begin); end"
+  parses "macro >=;end"
  parses "macro >=;end"
+  parses "def /; end;"
  parses "def /; end;"
+  parses "a = 1; a /= 1"
  parses "a = 1; a /= 1"
+  parses "foo(a: n &* 2)"
  parses "foo(a: n &* 2)"
+  says syntax error on "def foo(alias); end"
  says syntax error on "def foo(alias); end"
+  parses "Foo(X, offsetof(Foo, @a))"
  parses "Foo(X, offsetof(Foo, @a))"
+  parses "def foo(@[Foo] @var); end"
  parses "def foo(@[Foo] @var); end"
+  parses "foo(0, n =~ 2)"
  parses "foo(0, n =~ 2)"
+  parses "foo(1.., 2)"
  parses "foo(1.., 2)"
+  parses "-@@foo"
  parses "-@@foo"
+  parses "foo.^ do end"
  parses "foo.^ do end"
+  says syntax error on "macro !;end"
  says syntax error on "macro !;end"
+  parses "pointerof(\n  foo\n)"
  parses "pointerof(\n  foo\n)"
+  parses "def foo(@@module); end"
  parses "def foo(@@module); end"
+  parses "foo(0, n << 2)"
  parses "foo(0, n << 2)"
+  parses "macro +;end"
  parses "macro +;end"
+  parses "def !~(); end;"
  parses "def !~(); end;"
+  parses "foo.bar(1, 2)"
  parses "foo.bar(1, 2)"
+  says syntax error on "def foo(asm); end"
  says syntax error on "def foo(asm); end"
+  parses "a, b = 1"
  parses "a, b = 1"
+  parses "a = 1; a/b"
  parses "a = 1; a/b"
+  parses "foo a: 1, b: 2"
  parses "foo a: 1, b: 2"
+  parses "def foo(x @@yield); end"
  parses "def foo(x @@yield); end"
+  parses "foo\n.bar"
  parses "foo\n.bar"
+  says syntax error on "return false foo"
  says syntax error on "return false foo"
+  parses "def foo(alias foo); end"
  parses "def foo(alias foo); end"
+  says syntax error on "x--"
  says syntax error on "x--"
+  parses "Foo({String, ->})"
  parses "Foo({String, ->})"
+  parses "foo = 1; ->foo.<<(Int32)"
  parses "foo = 1; ->foo.<<(Int32)"
+  parses ":[]?"
  parses ":[]?"
+  says syntax error on "break &- 1"
  says syntax error on "break &- 1"
+  parses "n * 2"
  parses "n * 2"
+  parses "def self.foo=\n1\nend"
  parses "def self.foo=\n1\nend"
+  parses "def self./(); end;"
  parses "def self./(); end;"
+  parses "case {1, 2}\nwhen {3, 4}, {5, 6}\n7\nend"
  parses "case {1, 2}\nwhen {3, 4}, {5, 6}\n7\nend"
+  says syntax error on "lib Foo; fun foo(x : Int32, x : Int64); end"
  says syntax error on "lib Foo; fun foo(x : Int32, x : Int64); end"
+  parses "foo(bar { })"
  parses "foo(bar { })"
+  parses "foo.%"
  parses "foo.%"
+  parses "def foo(x @begin); end"
  parses "def foo(x @begin); end"
+  parses "def *; end;"
  parses "def *; end;"
+  parses ":%"
  parses ":%"
+  parses "while true; 1; end;"
  parses "while true; 1; end;"
+  parses "def foo(sizeof foo); end"
  parses "def foo(sizeof foo); end"
+  parses "def foo(@[Foo] **args); end"
  parses "def foo(@[Foo] **args); end"
+  parses "{% begin %}%r[\\A]{% end %}"
  parses "{% begin %}%r[\\A]{% end %}"
+  parses "def self.[]; end"
  parses "def self.[]; end"
+  parses "if foo; 1; else; 2; end"
  parses "if foo; 1; else; 2; end"
+  says syntax error on "break ... 1"
  says syntax error on "break ... 1"
+  parses "def foo(in foo); end"
  parses "def foo(in foo); end"
+  parses "def foo(x @@asm); end"
  parses "def foo(x @@asm); end"
+  parses "a @b-1\nc"
  parses "a @b-1\nc"
+  parses "next *1, 2"
  parses "next *1, 2"
+  says syntax error on "{% unless 1; 2; elsif 3; 4; end %}"
  says syntax error on "{% unless 1; 2; elsif 3; 4; end %}"
+  parses "enum Foo; A = 1; B; end"
  parses "enum Foo; A = 1; B; end"
+  says syntax error on "def foo=(**kwargs); end"
  says syntax error on "def foo=(**kwargs); end"
+  parses "1.nil?(\n)"
  parses "1.nil?(\n)"
+  end locations
+    gets corrects end location for "alias Foo = Bar"
    gets corrects end location for "alias Foo = Bar"
+    sets correct location of `else` of unless statement
    sets correct location of `else` of unless statement
+    says syntax error on "case x; when X; 2; when X; end"
    says syntax error on "case x; when X; 2; when X; end"
+    gets corrects end location for "include Foo"
    gets corrects end location for "include Foo"
+    gets corrects end location for "def foo; rescue ex; end"
    gets corrects end location for "def foo; rescue ex; end"
+    parses "%i{foo\\nbar baz}"
    parses "%i{foo\\nbar baz}"
+    gets corrects end location for "sizeof(Foo)"
    gets corrects end location for "sizeof(Foo)"
+    gets corrects end location for "foo.bar(x) do; end"
    gets corrects end location for "foo.bar(x) do; end"
+    gets corrects end location for "->{ }"
    gets corrects end location for "->{ }"
+    sets correct location of var in proc pointer
    sets correct location of var in proc pointer
+    gets corrects end location for "x : Foo(A, *B, C)"
    gets corrects end location for "x : Foo(A, *B, C)"
+    gets corrects end location for "foo 1, 2"
    gets corrects end location for "foo 1, 2"
+    sets location of +=
    sets location of +=
+    gets corrects end location for "foo.bar= *baz"
    gets corrects end location for "foo.bar= *baz"
+    gets corrects end location for "f.x=(*foo)"
    gets corrects end location for "f.x=(*foo)"
+    gets corrects end location for "x : Foo ->"
    gets corrects end location for "x : Foo ->"
+    gets corrects end location for "nil"
    gets corrects end location for "nil"
+    says syntax error on "case x; when 1, _; end"
    says syntax error on "case x; when 1, _; end"
+    says syntax error on "Foo(x: X\n,y: Y)"
    says syntax error on "Foo(x: X\n,y: Y)"
+    sets correct location of call name
    sets correct location of call name
+    says syntax error on "{1 => 2\n,3 => 4}"
    says syntax error on "{1 => 2\n,3 => 4}"
+    gets corrects end location for block with do ... end
    gets corrects end location for block with do ... end
+    gets corrects end location for "pointerof(@foo)"
    gets corrects end location for "pointerof(@foo)"
+    gets corrects end location for "1 rescue 2"
    gets corrects end location for "1 rescue 2"
+    gets corrects end location for block with { ... }
    gets corrects end location for block with { ... }
+    gets correct location of empty exception handler inside def
    gets correct location of empty exception handler inside def
+    sets correct location and end location of parenthesized block
    sets correct location and end location of parenthesized block
+    gets corrects end location for "'a'"
    gets corrects end location for "'a'"
+    gets corrects end location for "@a = uninitialized Foo"
    gets corrects end location for "@a = uninitialized Foo"
+    parses "%w{one  two}"
    parses "%w{one  two}"
+    says syntax error on "case x; when 1..2; 2; when 1..2; end"
    says syntax error on "case x; when 1..2; 2; when 1..2; end"
+    gets corrects end location for "begin; 1; end"
    gets corrects end location for "begin; 1; end"
+    sets correct location of element in array literal
    sets correct location of element in array literal
+    sets correct location of `else` of if statement
    sets correct location of `else` of if statement
+    gets corrects end location for "foo bar, out baz"
    gets corrects end location for "foo bar, out baz"
+    says syntax error on "def foo(x : Array({sizeof(Int32), 2})); end"
    says syntax error on "def foo(x : Array({sizeof(Int32), 2})); end"
+    says syntax error on "case x; when 'a'; 2; when 'a'; end"
    says syntax error on "case x; when 'a'; 2; when 'a'; end"
+    parses "%i{(one two)}"
    parses "%i{(one two)}"
+    gets corrects end location for "begin; 1; 2; 3; end"
    gets corrects end location for "begin; 1; 2; 3; end"
+    gets corrects end location for "1 if 2"
    gets corrects end location for "1 if 2"
+    gets corrects end location for "foo"
    gets corrects end location for "foo"
+    gets corrects end location for "[1, 2]"
    gets corrects end location for "[1, 2]"
+    gets corrects end location for "123.45"
    gets corrects end location for "123.45"
+    gets corrects end location for "foo ->self.bar="
    gets corrects end location for "foo ->self.bar="
+    gets corrects end location for "{} of Int32 => String"
    gets corrects end location for "{} of Int32 => String"
+    gets corrects end location for "puts obj.foo"
    gets corrects end location for "puts obj.foo"
+    says syntax error on "case x; when :a; 2; when :a; end"
    says syntax error on "case x; when :a; 2; when :a; end"
+    says syntax error on "%w{one}}"
    says syntax error on "%w{one}}"
+    gets corrects end location for "/foo/"
    gets corrects end location for "/foo/"
+    gets corrects end location for "f.x=(foo).bar"
    gets corrects end location for "f.x=(foo).bar"
+    gets corrects end location for "a && b"
    gets corrects end location for "a && b"
+    gets corrects end location for "foo ->@bar.baz"
    gets corrects end location for "foo ->@bar.baz"
+    gets corrects end location for "[] of Int32"
    gets corrects end location for "[] of Int32"
+    gets corrects end location for var + var
    gets corrects end location for var + var
+    gets corrects end location for "yield"
    gets corrects end location for "yield"
+    sets correct location of var in type declaration
    sets correct location of var in type declaration
+    sets correct location for fun def with body
    sets correct location for fun def with body
+    gets corrects end location for "class Foo; end"
    gets corrects end location for "class Foo; end"
+    sets correct location of call name in operator assignment
    sets correct location of call name in operator assignment
+    gets corrects end location for "123"
    gets corrects end location for "123"
+    sets location of enum method
    sets location of enum method
+    gets corrects end location for "1..3"
    gets corrects end location for "1..3"
+    sets location of top-level fun name
    sets location of top-level fun name
+    gets corrects end location for "return 1"
    gets corrects end location for "return 1"
+    gets corrects end location for "foo.nil?"
    gets corrects end location for "foo.nil?"
+    gets corrects end location for "foo.[0] = 1"
    gets corrects end location for "foo.[0] = 1"
+    gets corrects end location for "foo ->@@bar.baz="
    gets corrects end location for "foo ->@@bar.baz="
+    gets corrects end location for "1.."
    gets corrects end location for "1.."
+    sets correct location for fun def
    sets correct location for fun def
+    gets corrects end location for "struct Foo; end"
    gets corrects end location for "struct Foo; end"
+    gets corrects end location for "foo ->Bar.baz="
    gets corrects end location for "foo ->Bar.baz="
+    sets correct locations of macro if / else
    sets correct locations of macro if / else
+    says syntax error on "case x; when {1, 2}; 2; when {1, 2}; end"
    says syntax error on "case x; when {1, 2}; 2; when {1, 2}; end"
+    gets corrects end location for "foo : Foo.class"
    gets corrects end location for "foo : Foo.class"
+    gets corrects end location for "x : Foo -> Bar"
    gets corrects end location for "x : Foo -> Bar"
+    gets corrects end location for "foo.responds_to?(:foo)"
    gets corrects end location for "foo.responds_to?(:foo)"
+    gets corrects end location for "@@foo"
    gets corrects end location for "@@foo"
+    gets corrects end location for "{a: 1}"
    gets corrects end location for "{a: 1}"
+    gets corrects end location for "def foo; 1; end"
    gets corrects end location for "def foo; 1; end"
+    says syntax error on "%w("
    says syntax error on "%w("
+    says syntax error on "case x; when 1; when _; end"
    says syntax error on "case x; when 1; when _; end"
+    sets correct location and end location of `begin` block
    sets correct location and end location of `begin` block
+    sets correct location for fun def with return type
    sets correct location for fun def with return type
+    gets corrects end location for "a = 123"
    gets corrects end location for "a = 123"
+    gets corrects end location for "foo : Foo?"
    gets corrects end location for "foo : Foo?"
+    sets correct location and end location of parenthesized empty block
    sets correct location and end location of parenthesized empty block
+    gets corrects end location for "abstract def foo(x)"
    gets corrects end location for "abstract def foo(x)"
+    says syntax error on "foo(1\n,2)"
    says syntax error on "foo(1\n,2)"
+    sets correct location of trailing rescue
    sets correct location of trailing rescue
+    says syntax error on "def foo(x : Int32 | (Int32, Int32)); end"
    says syntax error on "def foo(x : Int32 | (Int32, Int32)); end"
+    sets correct locations of macro if / elsif
    sets correct locations of macro if / elsif
+    sets correct location of vars in C struct
    sets correct location of vars in C struct
+    says syntax error on "macro foo(x\n,y); 1; end"
    says syntax error on "macro foo(x\n,y); 1; end"
+    gets corrects end location for "f.x = foo"
    gets corrects end location for "f.x = foo"
+    says syntax error on "%r("
    says syntax error on "%r("
+    says syntax error on "case x; when /x/; 2; when /x/; end"
    says syntax error on "case x; when /x/; 2; when /x/; end"
+    parses "annotation Foo; end"
    parses "annotation Foo; end"
+    sets correct locations of keywords of exception handler
    sets correct locations of keywords of exception handler
+    gets corrects end location for "foo.nil?(  )"
    gets corrects end location for "foo.nil?(  )"
+    gets corrects end location for "foo.responds_to? :foo"
    gets corrects end location for "foo.responds_to? :foo"
+    gets corrects end location for "unless 1; 2; end"
    gets corrects end location for "unless 1; 2; end"
+    gets corrects end location for "[1, 2,]"
    gets corrects end location for "[1, 2,]"
+    gets corrects end location for "macro foo;end"
    gets corrects end location for "macro foo;end"
+    says syntax error on "def foo(x : {sizeof(Int32), 2}); end"
    says syntax error on "def foo(x : {sizeof(Int32), 2}); end"
+    says syntax error on "case x; when 1; 2; when 1; end"
    says syntax error on "case x; when 1; 2; when 1; end"
+    says syntax error on "%Q("
    says syntax error on "%Q("
+    says syntax error on "{\"a\" : 1}"
    says syntax error on "{\"a\" : 1}"
+    says syntax error on "Foo(X\n,Y)"
    says syntax error on "Foo(X\n,Y)"
+    says syntax error on "{1\n,2}"
    says syntax error on "{1\n,2}"
+    gets corrects end location for "@foo"
    gets corrects end location for "@foo"
+    sets location of obj.x += as call
    sets location of obj.x += as call
+    says syntax error on "case x; when true; 2; when true; end"
    says syntax error on "case x; when true; 2; when true; end"
+    gets corrects end location for "if 1; else; 2; end"
    gets corrects end location for "if 1; else; 2; end"
+    parses "annotation Foo\nend\nrequire \"bar\""
    parses "annotation Foo\nend\nrequire \"bar\""
+    gets corrects end location for "\"hello\""
    gets corrects end location for "\"hello\""
+    gets corrects end location for "foo.!"
    gets corrects end location for "foo.!"
+    says syntax error on "[1\n,2]"
    says syntax error on "[1\n,2]"
+    sets correct location of implicit tuple literal of multi-return
    sets correct location of implicit tuple literal of multi-return
+    says syntax error on "%i{one}}"
    says syntax error on "%i{one}}"
+    says syntax error on "def foo(x\n,y); 1; end"
    says syntax error on "def foo(x\n,y); 1; end"
+    gets corrects end location for "if 1; elseif; 2; end"
    gets corrects end location for "if 1; elseif; 2; end"
+    says syntax error on "<<-HEREDOC\n"
    says syntax error on "<<-HEREDOC\n"
+    gets corrects end location for "offsetof(Foo, @a)"
    gets corrects end location for "offsetof(Foo, @a)"
+    gets corrects end location for "!foo"
    gets corrects end location for "!foo"
+    gets corrects end location for "{1, 2}"
    gets corrects end location for "{1, 2}"
+    parses "annotation Foo::Bar\n\nend"
    parses "annotation Foo::Bar\n\nend"
+    gets corrects end location for "foo(\n  &.block\n)"
    gets corrects end location for "foo(\n  &.block\n)"
+    gets corrects end location for "offsetof({X, Y}, 1)"
    gets corrects end location for "offsetof({X, Y}, 1)"
+    gets corrects end location for "foo.@foo"
    gets corrects end location for "foo.@foo"
+    says syntax error on "%w{{one}"
    says syntax error on "%w{{one}"
+    gets corrects end location for "foo : Foo**"
    gets corrects end location for "foo : Foo**"
+    gets corrects end location for ":foo"
    gets corrects end location for ":foo"
+    says syntax error on "{\"a\": 1, \"b\" : 2}"
    says syntax error on "{\"a\": 1, \"b\" : 2}"
+    sets correct location of var in macro for loop
    sets correct location of var in macro for loop
+    sets correct location of `elsif` of if statement
    sets correct location of `elsif` of if statement
+    says syntax error on "case x; when \"a\"; 2; when \"a\"; end"
    says syntax error on "case x; when \"a\"; 2; when \"a\"; end"
+    sets correct location of receiver var in method def
    sets correct location of receiver var in method def
+    gets corrects end location for "macro foo; 123; end"
    gets corrects end location for "macro foo; 123; end"
+    says syntax error on "def foo(x : *Int32); end"
    says syntax error on "def foo(x : *Int32); end"
+    gets corrects end location for "foo ->@bar.baz="
    gets corrects end location for "foo ->@bar.baz="
+    gets corrects end location for "module Foo; end"
    gets corrects end location for "module Foo; end"
+    gets corrects end location for "{%\nif foo\n  bar\n end\n%}"
    gets corrects end location for "{%\nif foo\n  bar\n end\n%}"
+    gets corrects end location for "a, b = 1, 2"
    gets corrects end location for "a, b = 1, 2"
+    says syntax error on "case x; when [1, 2]; 2; when [1, 2]; end"
    says syntax error on "case x; when [1, 2]; 2; when [1, 2]; end"
+    gets corrects end location for "false"
    gets corrects end location for "false"
+    says syntax error on "%x("
    says syntax error on "%x("
+    gets corrects end location for "require \"foo\""
    gets corrects end location for "require \"foo\""
+    gets corrects end location for "foo ->Bar.baz"
    gets corrects end location for "foo ->Bar.baz"
+    gets correct location after macro with yield
    gets correct location after macro with yield
+    gets corrects end location for "foo(1, 2)"
    gets corrects end location for "foo(1, 2)"
+    gets corrects end location for "::foo"
    gets corrects end location for "::foo"
+    says syntax error on "{1, 2\n,3}"
    says syntax error on "{1, 2\n,3}"
+    sets correct location of trailing ensure
    sets correct location of trailing ensure
+    says syntax error on "case x; when nil; 2; when nil; end"
    says syntax error on "case x; when nil; 2; when nil; end"
+    gets corrects end location for "@@a = uninitialized Foo"
    gets corrects end location for "@@a = uninitialized Foo"
+    gets corrects end location for "return"
    gets corrects end location for "return"
+    sets correct locations of macro if / else / elsif
    sets correct locations of macro if / else / elsif
+    gets corrects end location for "foo.!()"
    gets corrects end location for "foo.!()"
+    gets corrects end location for "foo ->bar="
    gets corrects end location for "foo ->bar="
+    gets corrects of ~
    gets corrects of ~
+    gets corrects end location for "extend Foo"
    gets corrects end location for "extend Foo"
+    says syntax error on "%i{{one}"
    says syntax error on "%i{{one}"
+    gets corrects end location for "Foo?"
    gets corrects end location for "Foo?"
+    says syntax error on "def foo(x : Int32, Int32); end"
    says syntax error on "def foo(x : Int32, Int32); end"
+    says syntax error on "def foo(x : (Int32, Int32) | Int32); end"
    says syntax error on "def foo(x : (Int32, Int32) | Int32); end"
+    gets corrects end location for "a, b = 1, 2 if 3"
    gets corrects end location for "a, b = 1, 2 if 3"
+    parses "%w{one{} two}"
    parses "%w{one{} two}"
+    gets corrects end location for "while 1; end"
    gets corrects end location for "while 1; end"
+    gets correct location with 
+ (#1558)
    gets correct location with 
+ (#1558)
+    gets corrects end location for var
    gets corrects end location for var
+    parses "%w{one\ttwo}"
    parses "%w{one\ttwo}"
+    parses "%i(foo(bar) baz)"
    parses "%i(foo(bar) baz)"
+    gets corrects end location for "yield 1"
    gets corrects end location for "yield 1"
+    parses "%w{\n}"
    parses "%w{\n}"
+    sets location of lib fun name
    sets location of lib fun name
+    gets corrects end location for "Int[8]?"
    gets corrects end location for "Int[8]?"
+    gets corrects end location for "abstract def foo : Int32"
    gets corrects end location for "abstract def foo : Int32"
+    gets corrects end location for "abstract def foo"
    gets corrects end location for "abstract def foo"
+    says syntax error on "class Foo(X\n,Y); 1; end"
    says syntax error on "class Foo(X\n,Y); 1; end"
+    says syntax error on "%q("
    says syntax error on "%q("
+    says syntax error on "def foo(x : (Int32, Int32)); end"
    says syntax error on "def foo(x : (Int32, Int32)); end"
+    gets corrects end location for "foo ->@@bar.baz"
    gets corrects end location for "foo ->@@bar.baz"
+    gets corrects end location for "foo ->self.bar"
    gets corrects end location for "foo ->self.bar"
+    gets corrects end location for "a || b"
    gets corrects end location for "a || b"
+    parses "annotation Foo\n\nend"
    parses "annotation Foo\n\nend"
+    says syntax error on "def foo(x : (*Int32)); end"
    says syntax error on "def foo(x : (*Int32)); end"
+    gets correct location after macro with yield
    gets correct location after macro with yield
+    correctly computes line number after `\{%
+` (#9857)
    correctly computes line number after `\{%
+` (#9857)
+    says syntax error on "foo(a: 1\n,b: 2)"
    says syntax error on "foo(a: 1\n,b: 2)"
+    parses "%w{\\{one}"
    parses "%w{\\{one}"
+    says syntax error on "def foo(x : 1); end"
    says syntax error on "def foo(x : 1); end"
+    gets corrects end location for "1.as(Int32)"
    gets corrects end location for "1.as(Int32)"
+    gets corrects end location for "foo ->bar"
    gets corrects end location for "foo ->bar"
+    gets corrects end location for "foo : Foo[42]"
    gets corrects end location for "foo : Foo[42]"
+    parses "%w{one\\ two}"
    parses "%w{one\\ two}"
+    gets corrects end location for "Foo { 1 }"
    gets corrects end location for "Foo { 1 }"
+    gets corrects end location for "foo : Foo*"
    gets corrects end location for "foo : Foo*"
+    gets corrects end location for "foo ->bar(Baz)"
    gets corrects end location for "foo ->bar(Baz)"
+    says syntax error on "%i("
    says syntax error on "%i("
+    gets corrects end location for "typeof(1)"
    gets corrects end location for "typeof(1)"
+    gets corrects end location for "foo **bar"
    gets corrects end location for "foo **bar"
+    gets corrects end location for "Foo"
    gets corrects end location for "Foo"
+    parses "%w{one\ntwo}"
    parses "%w{one\ntwo}"
+    says syntax error on "<<-HEREDOC"
    says syntax error on "<<-HEREDOC"
+    gets corrects end location for "%w(one two)"
    gets corrects end location for "%w(one two)"
+    says syntax error on "case x; when _; end"
    says syntax error on "case x; when _; end"
+    doesn't override yield with macro yield
    doesn't override yield with macro yield
+    sets correct location of proc literal
    sets correct location of proc literal
+    parses "%w{one\\}}"
    parses "%w{one\\}}"
+    says syntax error on "def foo(x : {Int32, (Int32, Int32)}); end"
    says syntax error on "def foo(x : {Int32, (Int32, Int32)}); end"
+    gets corrects end location for "Foo(A)"
    gets corrects end location for "Foo(A)"
+    gets corrects end location for "def foo; end"
    gets corrects end location for "def foo; end"
+    parses "%i(one\\ two)"
    parses "%i(one\\ two)"
+    gets corrects end location for "foo *bar"
    gets corrects end location for "foo *bar"
+    gets corrects end location for "1 ensure 2"
    gets corrects end location for "1 ensure 2"
+    sets correct location for fun def on multiple lines
    sets correct location for fun def on multiple lines
+    parses "%i((one two))"
    parses "%i((one two))"
+  parses "def foo(x)\n x\nend; foo = 1; b = 2; foo -b"
  parses "def foo(x)\n x\nend; foo = 1; b = 2; foo -b"
+  parses "fun foo(x : Int32) : Int64\nx\nend"
  parses "fun foo(x : Int32) : Int64\nx\nend"
+  says syntax error on "def foo(x, **x); end"
  says syntax error on "def foo(x, **x); end"
+  parses "Foo()?"
  parses "Foo()?"
+  parses "foo % Q()"
  parses "foo % Q()"
+  parses "def foo(@enum); end"
  parses "def foo(@enum); end"
+  parses "a\nwhile / /\n/ /\nend"
  parses "a\nwhile / /\n/ /\nend"
+  parses "foo.=~"
  parses "foo.=~"
+  parses "a : Foo*"
  parses "a : Foo*"
+  says syntax error on "foo { |true| }"
  says syntax error on "foo { |true| }"
+  parses "def >=(); end"
  parses "def >=(); end"
+  parses "Int"
  parses "Int"
+  parses "property until : Int32"
  parses "property until : Int32"
+  parses "def foo(@@fun); end"
  parses "def foo(@@fun); end"
+  parses "def ==(); end"
  parses "def ==(); end"
+  says syntax error on "next[]"
  says syntax error on "next[]"
+  parses "->(x) { x }"
  parses "->(x) { x }"
+  parses "typeof : Int32"
  parses "typeof : Int32"
+  says syntax error on "next[0]"
  says syntax error on "next[0]"
+  parses "Foo({x: X})"
  parses "Foo({x: X})"
+  parses "a = 1; a ensure a"
  parses "a = 1; a ensure a"
+  parses "4./(2)"
  parses "4./(2)"
+  parses "foo &.block[0] = 1"
  parses "foo &.block[0] = 1"
+  parses "lib : Int32"
  parses "lib : Int32"
+  parses "Foo(T, {x: X})"
  parses "Foo(T, {x: X})"
+  says syntax error on "/foo)/"
  says syntax error on "/foo)/"
+  parses "def foo(x @@case); end"
  parses "def foo(x @@case); end"
+  parses "case 1; when x then 2; else; 3; end"
  parses "case 1; when x then 2; else; 3; end"
+  parses "foo a: 1, &block"
  parses "foo a: 1, &block"
+  parses "lib LibC\nfun getchar(a : Int, b : Float)\nend"
  parses "lib LibC\nfun getchar(a : Int, b : Float)\nend"
+  parses "1 ? a : b"
  parses "1 ? a : b"
+  parses "abstract def foo; 1"
  parses "abstract def foo; 1"
+  parses "def foo(x @@with); end"
  parses "def foo(x @@with); end"
+  says syntax error on "*a == 1"
  says syntax error on "*a == 1"
+  parses ":=="
  parses ":=="
+  says syntax error on "foo(return)"
  says syntax error on "foo(return)"
+  parses "{% begin %}%r|\\A|{% end %}"
  parses "{% begin %}%r|\\A|{% end %}"
+  parses "puts {{**1}}"
  parses "puts {{**1}}"
+  parses "def foo(unless foo); end"
  parses "def foo(unless foo); end"
+  parses "def foo(x @@break); end"
  parses "def foo(x @@break); end"
+  says syntax error on "foo { |(in)| }"
  says syntax error on "foo { |(in)| }"
+  says syntax error on "1 .. next"
  says syntax error on "1 .. next"
+  parses "case foo; end"
  parses "case foo; end"
+  parses "def foo(break foo); end"
  parses "def foo(break foo); end"
+  parses "foo(x:\n        begin\n          result : Int32 = 1\n          result\n        end\n      )"
  parses "foo(x:\n        begin\n          result : Int32 = 1\n          result\n        end\n      )"
+  parses "foo [1]"
  parses "foo [1]"
+  says syntax error on "*a === 1"
  says syntax error on "*a === 1"
+  parses "..2"
  parses "..2"
+  says syntax error on " [1, 2, 3 end"
  says syntax error on " [1, 2, 3 end"
+  says syntax error on "def foo(foo def); end"
  says syntax error on "def foo(foo def); end"
+  parses "<<-FOO\n \t 1\n \t FOO"
  parses "<<-FOO\n \t 1\n \t FOO"
+  parses "def foo(x @@sizeof); end"
  parses "def foo(x @@sizeof); end"
+  says syntax error on "x++"
  says syntax error on "x++"
+  says syntax error on "def foo(&a foo); end"
  says syntax error on "def foo(&a foo); end"
+  parses "foo(a: n &- 2)"
  parses "foo(a: n &- 2)"
+  says syntax error on "def foo(foo alias); end"
  says syntax error on "def foo(foo alias); end"
+  parses "foo %r"
  parses "foo %r"
+  says syntax error on "A = begin; 1; rescue; 1; else; B = 1; end"
  says syntax error on "A = begin; 1; rescue; 1; else; B = 1; end"
+  parses "a = 1; a **=\n1"
  parses "a = 1; a **=\n1"
+  says syntax error on "def foo(foo sizeof); end"
  says syntax error on "def foo(foo sizeof); end"
+  parses "{foo:a, bar:b}"
  parses "{foo:a, bar:b}"
+  parses "@@foo"
  parses "@@foo"
+  says syntax error on "def foo(require); end"
  says syntax error on "def foo(require); end"
+  parses "def foo(class foo); end"
  parses "def foo(class foo); end"
+  parses "foo &.each do\nend"
  parses "foo &.each do\nend"
+  parses "foo(a: n === 2)"
  parses "foo(a: n === 2)"
+  parses "return 1, 2"
  parses "return 1, 2"
+  parses "a = 1; a |= 1"
  parses "a = 1; a |= 1"
+  parses "Foo({x: X, y: Y})"
  parses "Foo({x: X, y: Y})"
+  parses "if foo\n1\nelse\n2\nend"
  parses "if foo\n1\nelse\n2\nend"
+  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) ::)"
  parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) ::)"
+  says syntax error on "foo(\"\": 1)"
  says syntax error on "foo(\"\": 1)"
+  says syntax error on "def foo(foo enum); end"
  says syntax error on "def foo(foo enum); end"
+  parses "foo%i"
  parses "foo%i"
+  parses "foo(n & 2)"
  parses "foo(n & 2)"
+  parses "{% begin %}%i< %s >{% end %}"
  parses "{% begin %}%i< %s >{% end %}"
+  parses "->@@foo.foo!"
  parses "->@@foo.foo!"
+  says syntax error on "macro foo x; 1 + 2; end"
  says syntax error on "macro foo x; 1 + 2; end"
+  says syntax error on "def foo(foo self); end"
  says syntax error on "def foo(foo self); end"
+  parses "lib LibC\n@[Bar]; end"
  parses "lib LibC\n@[Bar]; end"
+  parses "foo = 1; b = 2; foo -b"
  parses "foo = 1; b = 2; foo -b"
+  parses "foo(n === 2)"
  parses "foo(n === 2)"
+  parses "Foo()"
  parses "Foo()"
+  parses "@[Foo(1)]"
  parses "@[Foo(1)]"
+  parses "{..2}"
  parses "{..2}"
+  parses "foo.|(1, 2)"
  parses "foo.|(1, 2)"
+  parses "def <=; end;"
  parses "def <=; end;"
+  parses "def foo(&\n); end"
  parses "def foo(&\n); end"
+  parses "foo(n * 2)"
  parses "foo(n * 2)"
+  parses "def foo(x @typeof); end"
  parses "def foo(x @typeof); end"
+  parses "::T/1"
  parses "::T/1"
+  says syntax error on "break.as(Int32)"
  says syntax error on "break.as(Int32)"
+  parses "def foo(x @@class); end"
  parses "def foo(x @@class); end"
+  parses "foo = 1; ->foo.==(Int32)"
  parses "foo = 1; ->foo.==(Int32)"
+  parses "def &(); end;"
  parses "def &(); end;"
+  parses "instance_sizeof(\n  Int32\n)"
  parses "instance_sizeof(\n  Int32\n)"
+  parses "puts a if true"
  parses "puts a if true"
+  parses "x = 1 rescue 2"
  parses "x = 1 rescue 2"
+  parses "foo { |a| 1 }"
  parses "foo { |a| 1 }"
+  parses "a = 1; a[2] &&= 3"
  parses "a = 1; a[2] &&= 3"
+  says syntax error on "yield next"
  says syntax error on "yield next"
+  parses "foo(\n        begin\n          result : Int32 = 1\n          result\n        end\n      )"
  parses "foo(\n        begin\n          result : Int32 = 1\n          result\n        end\n      )"
+  parses "lib LibC; struct Foo; x : Int; y : Float; end end"
  parses "lib LibC; struct Foo; x : Int; y : Float; end end"
+  parses "1 rescue 2"
  parses "1 rescue 2"
+  says syntax error on "next >> 1"
  says syntax error on "next >> 1"
+  parses "1.0"
  parses "1.0"
+  parses "foo &.baz.qux do\nend"
  parses "foo &.baz.qux do\nend"
+  parses "def foo(@[Foo] outer inner); end"
  parses "def foo(@[Foo] outer inner); end"
+  parses ":<"
  parses ":<"
+  parses "x[{1}]"
  parses "x[{1}]"
+  says syntax error on "{{ {{ 1 }} }}"
  says syntax error on "{{ {{ 1 }} }}"
+  parses "macro <=;end"
  parses "macro <=;end"
+  parses "module Foo\ndef foo; end; end"
  parses "module Foo\ndef foo; end; end"
+  parses "case 1; when 1; 2; else; 3; end"
  parses "case 1; when 1; 2; else; 3; end"
+  parses "1 +2"
  parses "1 +2"
+  says syntax error on "break[0]"
  says syntax error on "break[0]"
+  parses "lib LibC; struct Foo; {{ 1 }}; end; end"
  parses "lib LibC; struct Foo; {{ 1 }}; end; end"
+  parses "a ? 1 :\n              b ? 2 :\n              c ? 3\n              : 0"
  parses "a ? 1 :\n              b ? 2 :\n              c ? 3\n              : 0"
+  parses "foo.!~"
  parses "foo.!~"
+  parses "def self.foo()\n1\nend"
  parses "def self.foo()\n1\nend"
+  parses "def foo(case foo); end"
  parses "def foo(case foo); end"
+  parses "a; if / /; / /; elsif / /; / /; end"
  parses "a; if / /; / /; elsif / /; / /; end"
+  says syntax error on "next / 1"
  says syntax error on "next / 1"
+  says syntax error on "lib Foo%end"
  says syntax error on "lib Foo%end"
+  parses "\n      class Foo\n        def bar\n          print as Foo\n        end\n      end\n    "
  parses "\n      class Foo\n        def bar\n          print as Foo\n        end\n      end\n    "
+  says syntax error on "def foo(_ y); y; end"
  says syntax error on "def foo(_ y); y; end"
+  says syntax error on "macro foo; {% foo = 1 }; end"
  says syntax error on "macro foo; {% foo = 1 }; end"
+  parses "1 -2_i64"
  parses "1 -2_i64"
+  parses "foo.+"
  parses "foo.+"
+  parses "until true; end;"
  parses "until true; end;"
+  says syntax error on "unless return; end"
  says syntax error on "unless return; end"
+  parses "foo(n &+ 2)"
  parses "foo(n &+ 2)"
+  parses "foo(z: 0, a: n &- 2)"
  parses "foo(z: 0, a: n &- 2)"
+  parses "def foo(var : Int32 -> = 1); end"
  parses "def foo(var : Int32 -> = 1); end"
+  parses "def foo(x @@true); end"
  parses "def foo(x @@true); end"
+  parses "foo /a/"
  parses "foo /a/"
+  parses "def foo(a, &block : Int -> Double); end"
  parses "def foo(a, &block : Int -> Double); end"
+  parses "def foo(x @return); end"
  parses "def foo(x @return); end"
+  says syntax error on "break &+ 1"
  says syntax error on "break &+ 1"
+  parses "a = 1; a -=\n1"
  parses "a = 1; a -=\n1"
+  parses "foo(a: 1, b: 2)"
  parses "foo(a: 1, b: 2)"
+  parses "a = 1; a &=\n1"
  parses "a = 1; a &=\n1"
+  says syntax error on "x, self = 1, 2"
  says syntax error on "x, self = 1, 2"
+  says syntax error on "def foo(return); end"
  says syntax error on "def foo(return); end"
+  parses "def self.>=(); end;"
  parses "def self.>=(); end;"
+  parses "{[] of Foo, Bar::Baz ** 2}"
  parses "{[] of Foo, Bar::Baz ** 2}"
+  says syntax error on "a.b, c.d() = 1"
  says syntax error on "a.b, c.d() = 1"
+  parses "()"
  parses "()"
+  parses "Foo({\"foo bar\": X})"
  parses "Foo({\"foo bar\": X})"
+  says syntax error on "{1 => 2 3 => 4}"
  says syntax error on "{1 => 2 3 => 4}"
+  says syntax error on "foo { |extend| }"
  says syntax error on "foo { |extend| }"
+  parses "a = 1; a rescue a"
  parses "a = 1; a rescue a"
+  parses "foo.== do end"
  parses "foo.== do end"
+  says syntax error on "macro foo(*x, *y); end"
  says syntax error on "macro foo(*x, *y); end"
+  parses "{[] of Foo, Bar::Baz * 2}"
  parses "{[] of Foo, Bar::Baz * 2}"
+  parses "1.0_f32"
  parses "1.0_f32"
+  parses "def foo(typeof foo); end"
  parses "def foo(typeof foo); end"
+  parses "def foo(var : Int*); end"
  parses "def foo(var : Int*); end"
+  parses "macro foo;bar{% for x in y %}\\  \n   body{% end %}baz;end"
  parses "macro foo;bar{% for x in y %}\\  \n   body{% end %}baz;end"
+  parses ":[]"
  parses ":[]"
+  parses "def foo(var : Char[256]); end"
  parses "def foo(var : Char[256]); end"
+  says syntax error on "def foo(\"bar \#{1} qux\" y); y; end"
  says syntax error on "def foo(\"bar \#{1} qux\" y); y; end"
+  parses "foo.bar.baz"
  parses "foo.bar.baz"
+  parses "break {1 => 2}"
  parses "break {1 => 2}"
+  parses "case {1, 2}\nwhen {3, 4}\n5\nend"
  parses "case {1, 2}\nwhen {3, 4}\n5\nend"
+  parses "def foo(**args)\nargs\nend"
  parses "def foo(**args)\nargs\nend"
+  parses "a\nunless / /\n/ /\nelse\n/ /\nend"
  parses "a\nunless / /\n/ /\nelse\n/ /\nend"
+  says syntax error on "def foo(**args, *x); end"
  says syntax error on "def foo(**args, *x); end"
+  says syntax error on "macro as?; end"
  says syntax error on "macro as?; end"
+  parses "def foo(x @sizeof); end"
  parses "def foo(x @sizeof); end"
+  parses "1.!"
  parses "1.!"
+  parses "property ensure : Int32"
  parses "property ensure : Int32"
+  parses "true : Int32"
  parses "true : Int32"
+  parses "foo **bar"
  parses "foo **bar"
+  parses "foo(/a/)"
  parses "foo(/a/)"
+  parses "def foo(x = __LINE__); end"
  parses "def foo(x = __LINE__); end"
+  parses "def foo(a, &block : Int, self -> Double); end"
  parses "def foo(a, &block : Int, self -> Double); end"
+  parses "alignof(X)"
  parses "alignof(X)"
+  parses "foo.<=(1, 2)"
  parses "foo.<=(1, 2)"
+  parses "1 + 2"
  parses "1 + 2"
+  parses "case 1; when 0, 1; 2; else; 3; end"
  parses "case 1; when 0, 1; 2; else; 3; end"
+  parses "foo(n >> 2)"
  parses "foo(n >> 2)"
+  says syntax error on "def foo(foo return); end"
  says syntax error on "def foo(foo return); end"
+  parses "{1, 2, 3}"
  parses "{1, 2, 3}"
+  parses "foo.^"
  parses "foo.^"
+  parses "<<-HERE1; <<-HERE2\nhere1\nHERE1\nHERE2"
  parses "<<-HERE1; <<-HERE2\nhere1\nHERE1\nHERE2"
+  parses "foo.[0] = 1"
  parses "foo.[0] = 1"
+  parses "lib LibC; type A = B; end"
  parses "lib LibC; type A = B; end"
+  says syntax error on "class Foo(*T, *U); end"
  says syntax error on "class Foo(*T, *U); end"
+  parses "def foo(@offsetof); end"
  parses "def foo(@offsetof); end"
+  parses "->Foo.%(Int32)"
  parses "->Foo.%(Int32)"
+  says syntax error on "def nil?; end"
  says syntax error on "def nil?; end"
+  parses "case 1\nin false; 2; end"
  parses "case 1\nin false; 2; end"
+  parses "*a, b = 1"
  parses "*a, b = 1"
+  says syntax error on "def foo(var = x : Int); end"
  says syntax error on "def foo(var = x : Int); end"
+  parses "extend Foo\nif true; end"
  parses "extend Foo\nif true; end"
+  says syntax error on "next ... 1"
  says syntax error on "next ... 1"
+  parses "def ===(*args, **opts, &); end"
  parses "def ===(*args, **opts, &); end"
+  says syntax error on "def foo(x: Int32); end"
  says syntax error on "def foo(x: Int32); end"
+  says syntax error on "break == 1"
  says syntax error on "break == 1"
+  parses "nil?(  )"
  parses "nil?(  )"
+  says syntax error on "def foo(foo until); end"
  says syntax error on "def foo(foo until); end"
+  parses "foo(z: 0, a: n == 2)"
  parses "foo(z: 0, a: n == 2)"
+  parses "1 == 2"
  parses "1 == 2"
+  says syntax error on "break[0]= 1"
  says syntax error on "break[0]= 1"
+  parses "foo 1, a: 1, b: 2\n1"
  parses "foo 1, a: 1, b: 2\n1"
+  parses "n > 2"
  parses "n > 2"
+  says syntax error on "*1, a = 2"
  says syntax error on "*1, a = 2"
+  parses "*a, b = 1, 2, 3, 4"
  parses "*a, b = 1, 2, 3, 4"
+  parses "def foo(@@private); end"
  parses "def foo(@@private); end"
+  parses "begin 1 end / 2"
  parses "begin 1 end / 2"
+  says syntax error on "unless break; end"
  says syntax error on "unless break; end"
+  parses "foo begin\nbar do\nend\nend"
  parses "foo begin\nbar do\nend\nend"
+  parses "def >(); end;"
  parses "def >(); end;"
+  parses "{[] of Foo, Bar::Baz + 2}"
  parses "{[] of Foo, Bar::Baz + 2}"
+  parses "{% begin %}%Q( %s ){% end %}"
  parses "{% begin %}%Q( %s ){% end %}"
+  sets correct location of instance variable in proc pointer
  sets correct location of instance variable in proc pointer
+  parses "foo = 1; foo(-1)"
  parses "foo = 1; foo(-1)"
+  parses "{% begin %}%r<\\A>{% end %}"
  parses "{% begin %}%r<\\A>{% end %}"
+  says syntax error on "class Foo(T, T); end"
  says syntax error on "class Foo(T, T); end"
+  parses "foo(z: 0, a: n // 2)"
  parses "foo(z: 0, a: n // 2)"
+  parses "foo(a: n &+ 2)"
  parses "foo(a: n &+ 2)"
+  parses "property while : Int32"
  parses "property while : Int32"
+  parses "foo%x"
  parses "foo%x"
+  says syntax error on "@[Foo(\"\": 1)]"
  says syntax error on "@[Foo(\"\": 1)]"
+  parses "foo 1, a: 1, b: 2"
  parses "foo 1, a: 1, b: 2"
+  parses "{% begin %}%i| %s |{% end %}"
  parses "{% begin %}%i| %s |{% end %}"
+  says syntax error on "macro Foo;end"
  says syntax error on "macro Foo;end"
+  parses "my_def def foo\nloop do\nend\nend"
  parses "my_def def foo\nloop do\nend\nend"
+  parses "1 ** -x"
  parses "1 ** -x"
+  says syntax error on "Foo(\"\": T)"
  says syntax error on "Foo(\"\": T)"
+  says syntax error on "foo(break)"
  says syntax error on "foo(break)"
+  parses "private : Int32"
  parses "private : Int32"
+  parses "def foo(module foo); end"
  parses "def foo(module foo); end"
+  parses "Foo(Bar())"
  parses "Foo(Bar())"
+  parses "Foo.foo(count: 3).bar { }"
  parses "Foo.foo(count: 3).bar { }"
+  parses "rescue : Int32"
  parses "rescue : Int32"
+  parses "a = 1"
  parses "a = 1"
+  parses "->Foo.//(Int32)"
  parses "->Foo.//(Int32)"
+  says syntax error on "enum Foo\n  A,   B,   C\nend\n"
  says syntax error on "enum Foo\n  A,   B,   C\nend\n"
+  says syntax error on "foo { |end| }"
  says syntax error on "foo { |end| }"
+  parses "def foo(end foo); end"
  parses "def foo(end foo); end"
+  says syntax error on "foo :: Foo"
  says syntax error on "foo :: Foo"
+  says syntax error on "module Foo; require \"bar\"; end"
  says syntax error on "module Foo; require \"bar\"; end"
+  parses "alias Foo = Bar"
  parses "alias Foo = Bar"
+  parses "f.x = Foo.new"
  parses "f.x = Foo.new"
+  parses "\n\n__LINE__"
  parses "\n\n__LINE__"
+  says syntax error on "break .. 1"
  says syntax error on "break .. 1"
+  parses "macro ~;end"
  parses "macro ~;end"
+  says syntax error on "b! = 1"
  says syntax error on "b! = 1"
+  parses "macro foo(@[Foo] outer inner);end"
  parses "macro foo(@[Foo] outer inner);end"
+  says syntax error on "foo { |(lib)| }"
  says syntax error on "foo { |(lib)| }"
+  parses "foo % w()"
  parses "foo % w()"
+  says syntax error on "foo(**bar, 1)"
  says syntax error on "foo(**bar, 1)"
+  parses "case 1\nin true; 2; end"
  parses "case 1\nin true; 2; end"
+  parses "foo(out @x); @x"
  parses "foo(out @x); @x"
+  parses "def foo(&); end"
  parses "def foo(&); end"
+  says syntax error on "+return"
  says syntax error on "+return"
+  says syntax error on "until return; end"
  says syntax error on "until return; end"
+  parses "a; unless / /; / /; else; / /; end"
  parses "a; unless / /; / /; else; / /; end"
+  parses "def foo(var : Int | Double); end"
  parses "def foo(var : Int | Double); end"
+  parses "def []=(*args, **opts); end"
  parses "def []=(*args, **opts); end"
+  parses "Foo?"
  parses "Foo?"
+  says syntax error on "foo(1, 2, 3 end"
  says syntax error on "foo(1, 2, 3 end"
+  parses "def foo(@@var); end"
  parses "def foo(@@var); end"
+  says syntax error on "def foo(*x, &x); end"
  says syntax error on "def foo(*x, &x); end"
+  says syntax error on "<<-HERE\n   One\n  \#{1}\n wrong\#{1}\n  HERE"
  says syntax error on "<<-HERE\n   One\n  \#{1}\n wrong\#{1}\n  HERE"
+  parses "foo.bar do end"
  parses "foo.bar do end"
+  parses "next *1"
  parses "next *1"
+  parses "x[..2]"
  parses "x[..2]"
+  parses "case 1\nwhen .responds_to?(:foo)\n2\nend"
  parses "case 1\nwhen .responds_to?(:foo)\n2\nend"
+  parses "asm(\n\"nop\"\n:\n\"a\"(0),\n\"b\"(1)\n:\n\"c\"(2),\n\"d\"(3)\n)"
  parses "asm(\n\"nop\"\n:\n\"a\"(0),\n\"b\"(1)\n:\n\"c\"(2),\n\"d\"(3)\n)"
+  says syntax error on "foo { |(yield)| }"
  says syntax error on "foo { |(yield)| }"
+  parses "foo.bar 1, 2"
  parses "foo.bar 1, 2"
+  parses "property when : Int32"
  parses "property when : Int32"
+  parses "def self.===(); end;"
  parses "def self.===(); end;"
+  parses "foo.< 1, 2"
  parses "foo.< 1, 2"
+  parses "def foo(x @include); end"
  parses "def foo(x @include); end"
+  parses "{% begin %}%w( %s ){% end %}"
  parses "{% begin %}%w( %s ){% end %}"
+  parses "def /; end;"
  parses "def /; end;"
+  parses "def >=(); end;"
  parses "def >=(); end;"
+  says syntax error on "def foo(foo select); end"
  says syntax error on "def foo(foo select); end"
+  parses ":^"
  parses ":^"
+  parses "def foo(@@until); end"
  parses "def foo(@@until); end"
+  says syntax error on "return &** 1"
  says syntax error on "return &** 1"
+  parses "foo.& 1, 2"
  parses "foo.& 1, 2"
+  parses "@@a : Foo = 1"
  parses "@@a : Foo = 1"
+  says syntax error on "foo.||()"
  says syntax error on "foo.||()"
+  parses "foo(z: 0, a: n === 2)"
  parses "foo(z: 0, a: n === 2)"
+  parses "def foo(@while); end"
  parses "def foo(@while); end"
+  parses "def foo(var); end"
  parses "def foo(var); end"
+  parses "def foo(x, **args, &block)\n1\nend"
  parses "def foo(x, **args, &block)\n1\nend"
+  parses "def foo(n); foo(n -1); end"
  parses "def foo(n); foo(n -1); end"
+  parses "foo(z: 0, a: n * 2)"
  parses "foo(z: 0, a: n * 2)"
+  parses "def foo(x @@false); end"
  parses "def foo(x @@false); end"
+  parses "puts __DIR__"
  parses "puts __DIR__"
+  parses "select\nwhen foo\n2\nend"
  parses "select\nwhen foo\n2\nend"
+  parses "macro foo\neenum\nend"
  parses "macro foo\neenum\nend"
+  says syntax error on "b? = 1"
  says syntax error on "b? = 1"
+  parses "1 <= 2 <= 3"
  parses "1 <= 2 <= 3"
+  parses "foo(bar do\nend)"
  parses "foo(bar do\nend)"
+  says syntax error on "->() :Int32 { }"
  says syntax error on "->() :Int32 { }"
+  parses "include : Int32"
  parses "include : Int32"
+  says syntax error on "foo.||"
  says syntax error on "foo.||"
+  parses "foo = 1; ->foo.&**(Int32)"
  parses "foo = 1; ->foo.&**(Int32)"
+  parses "class Foo(*T); end"
  parses "class Foo(*T); end"
+  parses "A.new(\"x\", B.new(\"y\"))"
  parses "A.new(\"x\", B.new(\"y\"))"
+  parses "{\n1,\n2\n}"
  parses "{\n1,\n2\n}"
+  parses "macro &+;end"
  parses "macro &+;end"
+  says syntax error on "def foo(select); end"
  says syntax error on "def foo(select); end"
+  parses "def foo(@[Foo] @[Bar] var : Int32); end"
  parses "def foo(@[Foo] @[Bar] var : Int32); end"
+  says syntax error on "fun foo(x : Int32, x : Int64); end"
  says syntax error on "fun foo(x : Int32, x : Int64); end"
+  parses "1 =~ 2"
  parses "1 =~ 2"
+  parses "a ? 1\n              : b"
  parses "a ? 1\n              : b"
+  parses "def foo(a, @[Foo] &block); end"
  parses "def foo(a, @[Foo] &block); end"
+  parses "def foo(@@begin); end"
  parses "def foo(@@begin); end"
+  parses "foo./"
  parses "foo./"
+  parses "foo &.[0]"
  parses "foo &.[0]"
+  says syntax error on "def foo(**args, **args2); end"
  says syntax error on "def foo(**args, **args2); end"
+  parses "{% begin %}%Q{ %s }{% end %}"
  parses "{% begin %}%Q{ %s }{% end %}"
+  parses "offsetof(X, @a)"
  parses "offsetof(X, @a)"
+  says syntax error on "def foo=(*args); end"
  says syntax error on "def foo=(*args); end"
+  says syntax error on "next & 1"
  says syntax error on "next & 1"
+  parses "foo"
  parses "foo"
+  parses "return : Int32"
  parses "return : Int32"
+  says syntax error on "1 foo"
  says syntax error on "1 foo"
+  parses "foo(Bar) { 1 }"
  parses "foo(Bar) { 1 }"
+  parses "return"
  parses "return"
+  parses "foo.== 1, 2"
  parses "foo.== 1, 2"
+  says syntax error on "foo { |macro| }"
  says syntax error on "foo { |macro| }"
+  parses "def foo(@@case); end"
  parses "def foo(@@case); end"
+  says syntax error on "def foo(x, x); end"
  says syntax error on "def foo(x, x); end"
+  parses "Foo(x: U, y: V)"
  parses "Foo(x: U, y: V)"
+  parses "foo.&"
  parses "foo.&"
+  parses "def +(); end"
  parses "def +(); end"
+  says syntax error on "class Foo(T, U V)"
  says syntax error on "class Foo(T, U V)"
+  parses "def foo(x @abstract); end"
  parses "def foo(x @abstract); end"
+  says syntax error on "foo { |(class)| }"
  says syntax error on "foo { |(class)| }"
+  says syntax error on "return / 1"
  says syntax error on "return / 1"
+  parses "def foo(x @unless); end"
  parses "def foo(x @unless); end"
+  parses "def self.-(); end;"
  parses "def self.-(); end;"
+  says syntax error on "macro foo x y; end"
  says syntax error on "macro foo x y; end"
+  parses "@[Foo]"
  parses "@[Foo]"
+  parses "do : Int32"
  parses "do : Int32"
+  parses "def foo(x @protected); end"
  parses "def foo(x @protected); end"
+  says syntax error on "break < 1"
  says syntax error on "break < 1"
+  parses "case 1\nin Int32; 2; end"
  parses "case 1\nin Int32; 2; end"
+  parses "{{ foo &.nil? }}"
  parses "{{ foo &.nil? }}"
+  says syntax error on "def foo *y; 1; end"
  says syntax error on "def foo *y; 1; end"
+  parses "n === 2"
  parses "n === 2"
+  says syntax error on "def foo(while); end"
  says syntax error on "def foo(while); end"
+  parses "foo(n !~ 2)"
  parses "foo(n !~ 2)"
+Semantic: generic class
+  can use type var that resolves to number in restriction (#6502)
  can use type var that resolves to number in restriction (#6502)
+  initializes instance variable of generic type using type var (#961)
  initializes instance variable of generic type using type var (#961)
+  errors if using Tuple in a generic type
  errors if using Tuple in a generic type
+  errors if using Number in recursive alias
  errors if using Number in recursive alias
+  errors if using Proc in a generic type
  errors if using Proc in a generic type
+  unifies generic metaclass types
  unifies generic metaclass types
+  inherits from generic with forwarding (1)
  inherits from generic with forwarding (1)
+  gives helpful error message when generic type var is missing (#1526)
  gives helpful error message when generic type var is missing (#1526)
+  can use virtual type for generic class
  can use virtual type for generic class
+  allows T::Type with T a generic type
  allows T::Type with T a generic type
+  errors if using Number in a generic type
  errors if using Number in a generic type
+  disallow using a non-instantiated generic type as a generic type argument
  disallow using a non-instantiated generic type as a generic type argument
+  finds generic type argument from method with default value
  finds generic type argument from method with default value
+  restricts generic to generic with free var
  restricts generic to generic with free var
+  inherits instance var type annotation from generic to generic to concrete
  inherits instance var type annotation from generic to generic to concrete
+  inherits class methods from generic class
  inherits class methods from generic class
+  never types Generic as virtual outside generic type parameter (#3989)
  never types Generic as virtual outside generic type parameter (#3989)
+  errors on too nested generic instance, with union type
  errors on too nested generic instance, with union type
+  errors if inheriting from generic and incorrect number of type vars
  errors if inheriting from generic and incorrect number of type vars
+  shows error due to generic instantiation (#7083)
  shows error due to generic instantiation (#7083)
+  doesn't crash when matching restriction against number literal (2) (#3157)
  doesn't crash when matching restriction against number literal (2) (#3157)
+  defines empty initialize on inherited generic class
  defines empty initialize on inherited generic class
+  inherits instance var type annotation from generic to concrete
  inherits instance var type annotation from generic to concrete
+  doesn't duplicate overload on generic class with class method (#2385)
  doesn't duplicate overload on generic class with class method (#2385)
+  errors if inheriting generic type and not specifying type vars (#460)
  errors if inheriting generic type and not specifying type vars (#460)
+  can use type var that resolves to number in restriction using Int128
  can use type var that resolves to number in restriction using Int128
+  instantiates generic variadic class, accesses T from instance method through superclass
  instantiates generic variadic class, accesses T from instance method through superclass
+  inherits twice
  inherits twice
+  errors if passing integer literal to Proc as generic argument (#1120)
  errors if passing integer literal to Proc as generic argument (#1120)
+  doesn't find unbound type parameter in main code inside generic type (#6168)
  doesn't find unbound type parameter in main code inside generic type (#6168)
+  calls super on generic type when superclass has no initialize (#933)
  calls super on generic type when superclass has no initialize (#933)
+  inherits non-generic to generic (2)
  inherits non-generic to generic (2)
+  errors if using Reference in a generic type
  errors if using Reference in a generic type
+  restricts virtual generic instance type against generic (#3351)
  restricts virtual generic instance type against generic (#3351)
+  can define instance var forward declared (#962)
  can define instance var forward declared (#962)
+  inherits from generic with forwarding (2)
  inherits from generic with forwarding (2)
+  instantiates generic class with default argument in initialize (#394)
  instantiates generic class with default argument in initialize (#394)
+  never types Path as virtual outside generic type parameter (#3989)
  never types Path as virtual outside generic type parameter (#3989)
+  inherits instance var type annotation from generic to concrete with T
  inherits instance var type annotation from generic to concrete with T
+  inherits from generic with instantiation
  inherits from generic with instantiation
+  instantiates generic variadic class, accesses T from instance method, more args (2)
  instantiates generic variadic class, accesses T from instance method, more args (2)
+  errors if invoking new on private new in generic type (#3485)
  errors if invoking new on private new in generic type (#3485)
+  errors if using Enum in a generic type
  errors if using Enum in a generic type
+  recomputes on new subclass
  recomputes on new subclass
+  errors if using Float in a generic type
  errors if using Float in a generic type
+  instantiates generic variadic class, accesses T from instance method, more args
  instantiates generic variadic class, accesses T from instance method, more args
+  inherits from generic with instantiation with instance var
  inherits from generic with instantiation with instance var
+  instantiates generic variadic class, accesses T from class method through superclass
  instantiates generic variadic class, accesses T from class method through superclass
+  allows initializing instance variable in inherited generic type
  allows initializing instance variable in inherited generic type
+  errors if using Int in a generic type
  errors if using Int in a generic type
+  errors if splatting a non-tuple (#9853)
  errors if splatting a non-tuple (#9853)
+  creates pointer of generic type and uses it (2)
  creates pointer of generic type and uses it (2)
+  resolves T through metaclass inheritance (#7914)
  resolves T through metaclass inheritance (#7914)
+  instantiates generic variadic class, accesses T from instance method through superclass, more args
  instantiates generic variadic class, accesses T from instance method through superclass, more args
+  types macro def with generic instance
  types macro def with generic instance
+  creates pointer of generic type and uses it
  creates pointer of generic type and uses it
+  instantiates generic variadic class, accesses T from class method
  instantiates generic variadic class, accesses T from class method
+  inherits non-generic to generic (1)
  inherits non-generic to generic (1)
+  errors on too nested generic instance
  errors on too nested generic instance
+  instantiates generic variadic class, accesses T from instance method
  instantiates generic variadic class, accesses T from instance method
+  errors if using Value in a generic type
  errors if using Value in a generic type
+  errors if using StaticArray in a generic type
  errors if using StaticArray in a generic type
+  errors if using Class in a generic type
  errors if using Class in a generic type
+  restricts non-generic to generic
  restricts non-generic to generic
+  replaces type parameters for virtual types (#3235)
  replaces type parameters for virtual types (#3235)
+  disallow using a non-instantiated module type as a generic type argument
  disallow using a non-instantiated module type as a generic type argument
+  errors if passing integer literal to Union as generic argument
  errors if passing integer literal to Union as generic argument
+  errors if using Number in alias
  errors if using Number in alias
+  restricts non-generic to generic with free var
  restricts non-generic to generic with free var
+  correctly checks argument count when target type has a splat (#9855)
  correctly checks argument count when target type has a splat (#9855)
+  doesn't consider unbound generic instantiations as concrete (#7200)
  doesn't consider unbound generic instantiations as concrete (#7200)
+  doesn't compute generic instance var initializers in formal superclass's context (#4753)
  doesn't compute generic instance var initializers in formal superclass's context (#4753)
+  nests generics with the same type var (#3297)
  nests generics with the same type var (#3297)
+  errors if using Object in a generic type
  errors if using Object in a generic type
+  errors if passing integer literal to Tuple as generic argument (#1120)
  errors if passing integer literal to Tuple as generic argument (#1120)
+  doesn't find T type parameter of current type in superclass (#4604)
  doesn't find T type parameter of current type in superclass (#4604)
+  errors if using Number | String in a generic type
  errors if using Number | String in a generic type
+  gives helpful error message when generic type var is missing in block spec (#1526)
  gives helpful error message when generic type var is missing in block spec (#1526)
+  doesn't crash when matching restriction against number literal (#3157)
  doesn't crash when matching restriction against number literal (#3157)
+  errors if inheriting from generic when it is non-generic
  errors if inheriting from generic when it is non-generic
+  errors on too nested tuple instance
  errors on too nested tuple instance
+  subclasses twice with same generic class (#3423)
  subclasses twice with same generic class (#3423)
+  errors if using Struct in a generic type
  errors if using Struct in a generic type
+  splats generic type var
  splats generic type var
+  allows initializing instance variable (#665)
  allows initializing instance variable (#665)
+  error on T::Type with T a generic type that's a union
  error on T::Type with T a generic type that's a union
+  restricts generic type argument through alias in a non-strict way
  restricts generic type argument through alias in a non-strict way
+  errors if using Pointer in a generic type
  errors if using Pointer in a generic type
+  doesn't allow union of generic class with module to be assigned to a generic class with module (#2425)
  doesn't allow union of generic class with module to be assigned to a generic class with module (#2425)
+  replaces type parameters in virtual metaclasses (#10691)
  replaces type parameters in virtual metaclasses (#10691)
+  virtual metaclass type implements super virtual metaclass type (#3007)
  virtual metaclass type implements super virtual metaclass type (#3007)
+Normalize: case
+  normalizes select with assign and bang method
  normalizes select with assign and bang method
+  normalizes select with assign and question method
  normalizes select with assign and question method
+  normalizes select with call
  normalizes select with call
+  normalizes select with assign
  normalizes select with assign
+  normalizes select with else
  normalizes select with else
+Semantic: c enum
+  errors if enum value is different from default (Int32) (#194)
  errors if enum value is different from default (Int32) (#194)
+  types enum value with base type
  types enum value with base type
+  allows using an enum as a type in a struct
  allows using an enum as a type in a struct
+  errors if enum base type is not an integer
  errors if enum base type is not an integer
+  allows using an enum as a type in a fun
  allows using an enum as a type in a fun
+  types enum value
  types enum value
+MacroExpander
+  expands macro with char
  expands macro with char
+  expands macro with range
  expands macro with range
+  expands macro with string interpolation
  expands macro with string interpolation
+  for
+    expands macro with for over range literal
    expands macro with for over range literal
+    expands macro with for over range literal, evaluating elements
    expands macro with for over range literal, evaluating elements
+    expands macro with for over array literal with index
    expands macro with for over array literal with index
+    expands macro with for over range literal, evaluating elements (exclusive)
    expands macro with for over range literal, evaluating elements (exclusive)
+    expands macro with for over tuple literal
    expands macro with for over tuple literal
+    expands macro with for over embedded array literal
    expands macro with for over embedded array literal
+    expands macro with for over hash literal with index
    expands macro with for over hash literal with index
+    expands macro with for over array literal
    expands macro with for over array literal
+    expands macro with for over hash literal
    expands macro with for over hash literal
+  does not expand when macro expression is {% ... %}
  does not expand when macro expression is {% ... %}
+  expands macro with or (1)
  expands macro with or (1)
+  expands macro with tuple
  expands macro with tuple
+  does regular unless
  does regular unless
+  expands macro with and (1)
  expands macro with and (1)
+  expands macro with var substitution
  expands macro with var substitution
+  expands simple macro
  expands simple macro
+  expands macro with nil
  expands macro with nil
+  does regular if
  does regular if
+  expands macro with and (2)
  expands macro with and (2)
+  expands macro with boolean
  expands macro with boolean
+  expands macro with symbol substitution
  expands macro with symbol substitution
+  expands macro with argument-less call substitution
  expands macro with argument-less call substitution
+  expands macro with array
  expands macro with array
+  can't use `yield` outside a macro
  can't use `yield` outside a macro
+  expands macro with or (2)
  expands macro with or (2)
+  expands macro with string substitution
  expands macro with string substitution
+  expands macro with symbol
  expands macro with symbol
+  outputs invisible location pragmas
  outputs invisible location pragmas
+  expands macro with string
  expands macro with string
+  if
+    expands macro with if when falsey
    expands macro with if when falsey
+    expands macro with if with nop
    expands macro with if with nop
+    expands macro with if with not
    expands macro with if with not
+    expands macro with if when truthy
    expands macro with if when truthy
+    expands macro with if else when falsey
    expands macro with if else when falsey
+  expands macro with integer
  expands macro with integer
+  expands macro with hash
  expands macro with hash
+Code gen: named args
+  sends two regular arguments as named arguments
  sends two regular arguments as named arguments
+  sends one regular argument as named argument
  sends one regular argument as named argument
+  sends two regular arguments as named arguments in inverted position (1)
  sends two regular arguments as named arguments in inverted position (1)
+  sends two regular arguments as named arguments in inverted position (2)
  sends two regular arguments as named arguments in inverted position (2)
+  overloads based on required named args
  overloads based on required named args
+  calls twice with different types
  calls twice with different types
+  calls new with named arg
  calls new with named arg
+  calls with named arg and other args
  calls with named arg and other args
+  uses bare splat in new (2)
  uses bare splat in new (2)
+  uses named args in dispatch
  uses named args in dispatch
+  overloads based on required named args, with restrictions
  overloads based on required named args, with restrictions
+  calls with named arg as object method
  calls with named arg as object method
+  calls with named arg
  calls with named arg
 Crystal::Repl::Interpreter
-  extern
-    interprets primitive struct_or_union_set and get (struct)
    interprets primitive struct_or_union_set and get (struct)
-    sets struct field through pointer
    sets struct field through pointer
-    discards primitive struct_or_union_set and get (struct)
    discards primitive struct_or_union_set and get (struct)
-    interprets primitive struct_or_union_set and get (union)
    interprets primitive struct_or_union_set and get (union)
-    does automatic C cast
    does automatic C cast
-    discards primitive struct_or_union_set because it's a copy
    discards primitive struct_or_union_set because it's a copy
-    sets extern struct proc field
    sets extern struct proc field
-Semantic: external/internal
-  overloads based on external name (#2610)
  overloads based on external name (#2610)
-  can call with external name and use with internal
  can call with external name and use with internal
-  macros
-    can call positionally
    can call positionally
-    can call with external name and use with internal
    can call with external name and use with internal
-    can call with external name and use with internal, after splat
    can call with external name and use with internal, after splat
-  can call positionally
  can call positionally
-  can call with external name and use with internal, after splat
  can call with external name and use with internal, after splat
+  variadic calls
+    promotes enum
    promotes enum
+    promotes float
    promotes float
+    promotes int
    promotes int
+  command expansion
+    expands ldflags
    expands ldflags
+Code gen: splat
+  splats in initialize
  splats in initialize
+  splats without args
  splats without args
+  splats
  splats
+  evaluates splat argument just once (#2677)
  evaluates splat argument just once (#2677)
+  splats with default value (2)
  splats with default value (2)
+  splats with another arg
  splats with another arg
+  splats on call
  splats on call
+  splats with default value
  splats with default value
+  does #2407
  does #2407
+  splats with default value (3)
  splats with default value (3)
+Visibility modifiers
+  allows setting visibility modifier to macro that generates many methods (2)
  allows setting visibility modifier to macro that generates many methods (2)
+  allows invoking protected method from subclass
  allows invoking protected method from subclass
+  allows setting visibility modifier to macro that generates many methods (1)
  allows setting visibility modifier to macro that generates many methods (1)
+  allows invoking protected method from namespaced type to namespace
  allows invoking protected method from namespaced type to namespace
+  handles virtual types (#8561)
  handles virtual types (#8561)
+  allows invoking private method from the same class
  allows invoking private method from the same class
+  errors if applying visibility modifier to non-def or non-call
  errors if applying visibility modifier to non-def or non-call
+  allows setting visibility modifier to macro
  allows setting visibility modifier to macro
+  allows invoking protected method from subclass (2)
  allows invoking protected method from subclass (2)
+  allows invoking protected method from the same class
  allows invoking protected method from the same class
+  errors if invoking protected method from top-level
  errors if invoking protected method from top-level
+  disallows invoking private method
  disallows invoking private method
+  errors if invoking protected method from non-subclass
  errors if invoking protected method from non-subclass
+  allows invoking private setter with self
  allows invoking private setter with self
+  allows invoking protected from instance to class
  allows invoking protected from instance to class
+  allows calling protected method from nested generic class (1)
  allows calling protected method from nested generic class (1)
+  allows invoking protected method from virtual type
  allows invoking protected method from virtual type
+  allows invoking protected method between types in the same namespace
  allows invoking protected method between types in the same namespace
+  gives correct error on unknown call (#2838)
  gives correct error on unknown call (#2838)
+  allows invoking protected method between types in the same namespace when inheriting
  allows invoking protected method between types in the same namespace when inheriting
+  automatically makes initialize be protected
  automatically makes initialize be protected
+  allows invoking protected method from namespace to namespaced type
  allows invoking protected method from namespace to namespaced type
+  allows calling protected method from nested generic class (2)
  allows calling protected method from nested generic class (2)
+  errors if invoking protected method from non-subclass, generated with macro that generates a macro
  errors if invoking protected method from non-subclass, generated with macro that generates a macro
+  defines protected initialize (#7501)
  defines protected initialize (#7501)
+codegen: previous_def
+  codegens previous def
  codegens previous def
+  correctly passes named arguments
  correctly passes named arguments
+  codegens previous def when inside fun with self
  codegens previous def when inside fun with self
+  codegens previous def when inside fun and forwards args
  codegens previous def when inside fun and forwards args
 Semantic: named tuples
-  matches in type restriction, different order (1)
  matches in type restriction, different order (1)
-  matches in type restriction and gets free var
  matches in type restriction and gets free var
-  can assign to union of compatible named tuple
  can assign to union of compatible named tuple
-  merges two named tuple with same keys but different types
  merges two named tuple with same keys but different types
   gives error when indexing with an unknown name
  gives error when indexing with an unknown name
-  types named tuple access (1)
  types named tuple access (1)
-  types nilable named tuple access (5)
  types nilable named tuple access (5)
-  doesn't error if NamedTuple has no args
  doesn't error if NamedTuple has no args
-  doesn't match in type restriction
  doesn't match in type restriction
-  merges two named tuples with the same keys and types
  merges two named tuples with the same keys and types
-  matches in type restriction, different order (2)
  matches in type restriction, different order (2)
-  doesn't match type restriction with instance
  doesn't match type restriction with instance
-  types nilable named tuple access (1)
  types nilable named tuple access (1)
-  gives error when using named args on a type other than NamedTuple
  gives error when using named args on a type other than NamedTuple
-  types nilable named tuple access (6)
  types nilable named tuple access (6)
+  doesn't unify named tuple metaclasses (#5384)
  doesn't unify named tuple metaclasses (#5384)
   can write generic type for NamedTuple
  can write generic type for NamedTuple
-  accept named tuple in type restriction
  accept named tuple in type restriction
+  gives error when using named args on a type other than NamedTuple
  gives error when using named args on a type other than NamedTuple
+  types nilable named tuple access (1)
  types nilable named tuple access (1)
   gives error when using positional args with NamedTuple
  gives error when using positional args with NamedTuple
-  gets type at compile time
  gets type at compile time
-  types T as a tuple of metaclasses
  types T as a tuple of metaclasses
-  matches in type restriction
  matches in type restriction
-  types named tuple of one element
  types named tuple of one element
   types named tuple of two elements, follows names order
  types named tuple of two elements, follows names order
-  types nilable named tuple access (3)
  types nilable named tuple access (3)
-  doesn't crash on named tuple in not executed block (#6718)
  doesn't crash on named tuple in not executed block (#6718)
-  accepts named tuple covariance in array
  accepts named tuple covariance in array
-  types named tuple of two elements
  types named tuple of two elements
+  doesn't match in type restriction
  doesn't match in type restriction
   types nilable named tuple access (2)
  types nilable named tuple access (2)
-  doesn't unify named tuple metaclasses (#5384)
  doesn't unify named tuple metaclasses (#5384)
+  matches in type restriction
  matches in type restriction
+  matches in type restriction, different order (2)
  matches in type restriction, different order (2)
+  merges two named tuple with same keys but different types
  merges two named tuple with same keys but different types
+  types named tuple of two elements
  types named tuple of two elements
+  matches in type restriction, different order (1)
  matches in type restriction, different order (1)
+  matches in type restriction and gets free var
  matches in type restriction and gets free var
+  types nilable named tuple access (6)
  types nilable named tuple access (6)
+  types named tuple of one element
  types named tuple of one element
   types named tuple access (4)
  types named tuple access (4)
-  types nilable named tuple access (4)
  types nilable named tuple access (4)
+  allows tuple covariance
  allows tuple covariance
+  doesn't error if NamedTuple has no args
  doesn't error if NamedTuple has no args
+  types named tuple access (2)
  types named tuple access (2)
+  merges two named tuples with the same keys and types
  merges two named tuples with the same keys and types
+  doesn't crash on named tuple in not executed block (#6718)
  doesn't crash on named tuple in not executed block (#6718)
   doesn't crash on named tuple type recursion (#7162)
  doesn't crash on named tuple type recursion (#7162)
   types named tuple access (3)
  types named tuple access (3)
-  types named tuple access (2)
  types named tuple access (2)
-  allows tuple covariance
  allows tuple covariance
-Normalize: until
-  normalizes until
  normalizes until
+  types nilable named tuple access (4)
  types nilable named tuple access (4)
+  can assign to union of compatible named tuple
  can assign to union of compatible named tuple
+  accepts named tuple covariance in array
  accepts named tuple covariance in array
+  types T as a tuple of metaclasses
  types T as a tuple of metaclasses
+  gets type at compile time
  gets type at compile time
+  doesn't match type restriction with instance
  doesn't match type restriction with instance
+  types named tuple access (1)
  types named tuple access (1)
+  accept named tuple in type restriction
  accept named tuple in type restriction
+  types nilable named tuple access (3)
  types nilable named tuple access (3)
+  types nilable named tuple access (5)
  types nilable named tuple access (5)
+Code gen: magic constants
+  does __LINE__ when specifying one default arg with __FILE__
  does __LINE__ when specifying one default arg with __FILE__
+  does __DIR__ in macro
  does __DIR__ in macro
+  does __DIR__
  does __DIR__
+  does __LINE__
  does __LINE__
+  does __LINE__ when specifying one middle argument
  does __LINE__ when specifying one middle argument
+  does __LINE__ with dispatch
  does __LINE__ with dispatch
+  does __END_LINE__ without block
  does __END_LINE__ without block
+  does __END_LINE__ in macro without block
  does __END_LINE__ in macro without block
+  does __FILE__
  does __FILE__
+  does __LINE__ in macro
  does __LINE__ in macro
+  does __LINE__ when specifying one normal default arg
  does __LINE__ when specifying one normal default arg
+  does __END_LINE__ with block
  does __END_LINE__ with block
+  does __END_LINE__ in macro with block
  does __END_LINE__ in macro with block
+  does __FILE__ in macro
  does __FILE__ in macro
+Code gen: next
+  codegens next without expressions
  codegens next without expressions
+  codegens next conditionally with int type (2)
  codegens next conditionally with int type (2)
+  codegens next conditionally
  codegens next conditionally
+  codegens next with break (2)
  codegens next with break (2)
+  codegens next with while inside block
  codegens next with while inside block
+  codegens next
  codegens next
+  codegens next with break (3)
  codegens next with break (3)
+  codegens next with break (1)
  codegens next with break (1)
+Code gen: generic class type
+  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)  recomputes two calls that look the same due to generic type being instantiated (#7728)
  recomputes two calls that look the same due to generic type being instantiated (#7728)
+  invokes super in generic class (#2354)
  invokes super in generic class (#2354)
+  codegens inherited generic class instance var
  codegens inherited generic class instance var
+  doesn't use virtual + in type arguments (#2839)
  doesn't use virtual + in type arguments (#2839)
+  doesn't consider abstract generic instantiation when restricting type (#5190)
  doesn't consider abstract generic instantiation when restricting type (#5190)
+  doesn't use virtual + in type arguments for NamedTuple (#2839)
  doesn't use virtual + in type arguments for NamedTuple (#2839)
+  doesn't consider abstract types for including types (#7200)
  doesn't consider abstract types for including types (#7200)
+  runs generic instance var initializers in superclass's metaclass context (#4753)
  runs generic instance var initializers in superclass's metaclass context (#4753)
+  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128  codegens compile-time interpreted generic int128
  codegens compile-time interpreted generic int128
+  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)  uses big integer as generic type argument (#2353)
  uses big integer as generic type argument (#2353)
+  doesn't override guessed instance var in generic type if already declared in superclass (#9431)
  doesn't override guessed instance var in generic type if already declared in superclass (#9431)
+  inherited instance var initialize from generic to generic to concrete (#2128)
  inherited instance var initialize from generic to generic to concrete (#2128)
+  inherited instance var initialize from generic to concrete (#2128)
  inherited instance var initialize from generic to concrete (#2128)
+  declares instance var with virtual T (#1675)
  declares instance var with virtual T (#1675)
+  codegens static array size after instantiating
  codegens static array size after instantiating
+  doesn't crash on generic type restriction with initially no subtypes (#8411)
  doesn't crash on generic type restriction with initially no subtypes (#8411)
+  instantiates generic class with default argument in initialize (#394)
  instantiates generic class with default argument in initialize (#394)
+  allows initializing instance variable in inherited generic type
  allows initializing instance variable in inherited generic type
+  codegens virtual generic metaclass macro method call
  codegens virtual generic metaclass macro method call
+  doesn't crash on generic type restriction with no subtypes (#7583)
  doesn't crash on generic type restriction with no subtypes (#7583)
+  doesn't run generic instance var initializers in formal superclass's context (#4753)
  doesn't run generic instance var initializers in formal superclass's context (#4753)
+  runs generic instance var initializers in superclass's metaclass context (2) (#6482)
  runs generic instance var initializers in superclass's metaclass context (2) (#6482)
+  doesn't use virtual + in type arguments for Tuple (#2839)
  doesn't use virtual + in type arguments for Tuple (#2839)
+  allows initializing instance variable (#665)
  allows initializing instance variable (#665)
 Code gen: array literal spec
-  creates custom generic array via alias (2)
  creates custom generic array via alias (2)
   creates custom non-generic array in module
  creates custom non-generic array in module
-  assignment in array literal works  assignment in array literal works  assignment in array literal works  assignment in array literal works  assignment in array literal works  assignment in array literal works������������  assignment in array literal works��  assignment in array literal works��  assignment in array literal works
  assignment in array literal works
-  creates custom generic array, with splats
  creates custom generic array, with splats
-  creates custom non-generic array
  creates custom non-generic array
-  creates custom generic array in module (#5684)
  creates custom generic array in module (#5684)
-  creates custom non-generic array, with splats
  creates custom non-generic array, with splats
+  creates custom generic array via alias (2)
  creates custom generic array via alias (2)
+  creates custom generic array
  creates custom generic array
   creates custom non-generic array in nested module
  creates custom non-generic array in nested module
+  creates typed array  creates typed array  creates typed array  creates typed array  creates typed array  creates typed array  creates typed array  creates typed array  creates typed array
  creates typed array
+  creates custom non-generic array, with splats
  creates custom non-generic array, with splats
   creates custom generic array with type var
  creates custom generic array with type var
-  creates typed array  creates typed array  creates typed array  creates typed array  creates typed array  creates typed array������������  creates typed array��  creates typed array��  creates typed array
  creates typed array
   creates custom generic array via alias
  creates custom generic array via alias
-  assignment in array-like literal works  assignment in array-like literal works  assignment in array-like literal works  assignment in array-like literal works  assignment in array-like literal works  assignment in array-like literal works  assignment in array-like literal works��������������  assignment in array-like literal works��  assignment in array-like literal works
  assignment in array-like literal works
-  creates custom generic array
  creates custom generic array
-Code gen: C ABI
-  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret  returns struct bigger than 128 bits with sret����  returns struct bigger than 128 bits with sret����������  returns struct bigger than 128 bits with sret��  returns struct bigger than 128 bits with sret
  returns struct bigger than 128 bits with sret
-  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)  returns struct less than 64 bits (for real)��������������  returns struct less than 64 bits (for real)��  returns struct less than 64 bits (for real)
  returns struct less than 64 bits (for real)
-  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)  accepts large struct in a callback (for real)������������  accepts large struct in a callback (for real)��  accepts large struct in a callback (for real)��  accepts large struct in a callback (for real)
  accepts large struct in a callback (for real)
-  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)  passes struct after many other args when returning a large struct (sret return type)����������  passes struct after many other args when returning a large struct (sret return type)������  passes struct after many other args when returning a large struct (sret return type)
  passes struct after many other args when returning a large struct (sret return type)
-  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)  passes struct bigger than 128 bits (for real)����������������  passes struct bigger than 128 bits (for real)
  passes struct bigger than 128 bits (for real)
-  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)  promotes variadic args (i8 to i32) (#9742)������������  promotes variadic args (i8 to i32) (#9742)��  promotes variadic args (i8 to i32) (#9742)��  promotes variadic args (i8 to i32) (#9742)
  promotes variadic args (i8 to i32) (#9742)
-  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)  promotes variadic args (u16 to i32) (#9742)��������������  promotes variadic args (u16 to i32) (#9742)��  promotes variadic args (u16 to i32) (#9742)
  promotes variadic args (u16 to i32) (#9742)
-  promotes variadic args (float to double)  promotes variadic args (float to double)  promotes variadic args (float to double)  promotes variadic args (float to double)  promotes variadic args (float to double)  promotes variadic args (float to double)������������  promotes variadic args (float to double)��  promotes variadic args (float to double)��  promotes variadic args (float to double)
  promotes variadic args (float to double)
-  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)  promotes variadic args (u8 to i32) (#9742)������������  promotes variadic args (u8 to i32) (#9742)��  promotes variadic args (u8 to i32) (#9742)��  promotes variadic args (u8 to i32) (#9742)
  promotes variadic args (u8 to i32) (#9742)
-  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)������������  returns struct between 64 and 128 bits (for real)  returns struct between 64 and 128 bits (for real)����  returns struct between 64 and 128 bits (for real)
  returns struct between 64 and 128 bits (for real)
-  passes struct after many other args (for real)  passes struct after many other args (for real)  passes struct after many other args (for real)  passes struct after many other args (for real)  passes struct after many other args (for real)  passes struct after many other args (for real)������������  passes struct after many other args (for real)��  passes struct after many other args (for real)��  passes struct after many other args (for real)
  passes struct after many other args (for real)
-  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)  passes struct between 64 and 128 bits (for real)��������������  passes struct between 64 and 128 bits (for real)��  passes struct between 64 and 128 bits (for real)
  passes struct between 64 and 128 bits (for real)
-  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)������������  passes struct less than 64 bits (for real)  passes struct less than 64 bits (for real)����  passes struct less than 64 bits (for real)
  passes struct less than 64 bits (for real)
-  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)������������  promotes variadic args (i16 to i32) (#9742)  promotes variadic args (i16 to i32) (#9742)����  promotes variadic args (i16 to i32) (#9742)
  promotes variadic args (i16 to i32) (#9742)
-Semantic: c union
-  errors if using void via typedef in union field type
  errors if using void via typedef in union field type
-  errors if using void in union field type
  errors if using void in union field type
-  errors if setting closure
  errors if setting closure
-  types c union
  types c union
-  errors on empty c union (#633)
  errors on empty c union (#633)
-  types Union#new
  types Union#new
-  types union getter via pointer
  types union getter via pointer
-  types union setter
  types union setter
-  types union setter via pointer
  types union setter via pointer
-  types union getter
  types union getter
-Code gen: C ABI x86_64
-  returns struct between 64 and 128 bits as { i64, i64 }
  returns struct between 64 and 128 bits as { i64, i64 }
-  returns struct less than 64 bits as { i64 }
  returns struct less than 64 bits as { i64 }
-  passes struct less than 64 bits as { i64 }
  passes struct less than 64 bits as { i64 }
-  returns struct bigger than 128 bits with sret
  returns struct bigger than 128 bits with sret
-  passes struct less than 64 bits as { i64 } in varargs
  passes struct less than 64 bits as { i64 } in varargs
-  passes struct between 64 and 128 bits as { i64, i64 }
  passes struct between 64 and 128 bits as { i64, i64 }
-  passes struct bigger than128 bits with byval
  passes struct bigger than128 bits with byval
-  passes struct between 64 and 128 bits as { i64, i64 } (with multiple modules/contexts)
  passes struct between 64 and 128 bits as { i64, i64 } (with multiple modules/contexts)
-Semantic: tuples
-  allows tuple covariance
  allows tuple covariance
-  errors on recursive splat expansion (2) (#361)
  errors on recursive splat expansion (2) (#361)
-  types tuple of three elements
  types tuple of three elements
-  doesn't unify tuple metaclasses (#5384)
  doesn't unify tuple metaclasses (#5384)
-  can name a tuple type
  can name a tuple type
-  doesn't crash on tuple in not executed block (#6718)
  doesn't crash on tuple in not executed block (#6718)
-  errors if non-tuple is splatted inside tuple (2)
  errors if non-tuple is splatted inside tuple (2)
-  accepts tuple covariance in array
  accepts tuple covariance in array
-  types tuple of one element
  types tuple of one element
-  errors if using two splat indices on restriction
  errors if using two splat indices on restriction
-  can call [] on T
  can call [] on T
-  #[](NumberLiteral)
-    types, out of bound, nilable
    types, out of bound, nilable
-    types, inbound index
    types, inbound index
-    gives error when indexing out of range
    gives error when indexing out of range
-    gives error when indexing out of range on empty tuple
    gives error when indexing out of range on empty tuple
-    types, inbound index, nilable
    types, inbound index, nilable
-    types, metaclass index
    types, metaclass index
-  doesn't trigger recursive splat expansion error (#7164)
  doesn't trigger recursive splat expansion error (#7164)
-  gives error when using named args on Tuple
  gives error when using named args on Tuple
-  errors on recursive splat expansion (1) (#361)
  errors on recursive splat expansion (1) (#361)
-  accept tuple in type restriction
  accept tuple in type restriction
-  can iterate T
  can iterate T
-  errors if non-tuple is splatted inside tuple
  errors if non-tuple is splatted inside tuple
-  #[](Path)
-    works for named tuple indexer
    works for named tuple indexer
-    works for tuple indexer
    works for tuple indexer
-  errors on recursive splat expansion (#218)
  errors on recursive splat expansion (#218)
-  merges two tuple types of same size
  merges two tuple types of same size
-  matches tuple with splat (#2932)
  matches tuple with splat (#2932)
-  errors on tuple too big (#3816)
  errors on tuple too big (#3816)
-  errors on named tuple too big
  errors on named tuple too big
-  #[](RangeLiteral)
-    gives error when begin index is out of range
    gives error when begin index is out of range
-    types, begin-less, end-less
    types, begin-less, end-less
-    types, begin-less
    types, begin-less
-    types, inbound begin, nilable
    types, inbound begin, nilable
-    types, out of bound begin, nilable
    types, out of bound begin, nilable
-    types, metaclass index
    types, metaclass index
-    types, exclusive range
    types, exclusive range
-    types, inbound begin, end-less
    types, inbound begin, end-less
-    types, inbound begin
    types, inbound begin
-  matches tuple with splat (2) (#2932)
  matches tuple with splat (2) (#2932)
-  doesn't error if Tuple has no args
  doesn't error if Tuple has no args
-  types T as a tuple of metaclasses
  types T as a tuple of metaclasses
-  types tuple of one element and then two elements
  types tuple of one element and then two elements
-  types tuple with splats inside
  types tuple with splats inside
-Crystal::Command
-  clear_cache
-    clears any cached compiler files
    clears any cached compiler files
-Semantic: warnings
-  deprecated macros
-    deprecation reason is optional
    deprecation reason is optional
-    informs warnings once per call site location (b)
    informs warnings once per call site location (b)
-    detects top-level deprecated macros
    detects top-level deprecated macros
-    detects deprecated macros with named arguments
    detects deprecated macros with named arguments
-    detects deprecated generic class macros
    detects deprecated generic class macros
-    detects deprecated class macros
    detects deprecated class macros
-    informs warnings once per call site location (a)
    informs warnings once per call site location (a)
-    detects deprecated module macros
    detects deprecated module macros
-    errors if invalid named argument
    errors if invalid named argument
-    ignore deprecation excluded locations
    ignore deprecation excluded locations
-    errors if invalid argument type
    errors if invalid argument type
-    errors if too many arguments
    errors if too many arguments
-  exposes syntax warnings after macro interpolation
  exposes syntax warnings after macro interpolation
-  abstract def positional parameter name mismatch
-    stops warning after implementation with matching parameters is found (#12150)
-      different single splats
      different single splats
-      exact match
      exact match
-      reordered named parameters
      reordered named parameters
-      contravariant restrictions
      contravariant restrictions
-    doesn't warn if current type is abstract (#12266)
    doesn't warn if current type is abstract (#12266)
-    informs warnings once per matching overload (1)
    informs warnings once per matching overload (1)
-    detects mismatch within many parameters
    detects mismatch within many parameters
-    continues warning if implementation with matching parameters is not found (#12150)
-      double splat
      double splat
-      single splat
      single splat
-      not a full implementation
      not a full implementation
-    informs warnings once per matching overload (2)
    informs warnings once per matching overload (2)
-    doesn't warn if external parameter name matches (1)
    doesn't warn if external parameter name matches (1)
-    doesn't warn if external parameter name matches (2)
    doesn't warn if external parameter name matches (2)
-    doesn't warn if current type is a module (#12266)
    doesn't warn if current type is a module (#12266)
-    detects multiple mismatches
    detects multiple mismatches
-    doesn't compare single splats
    doesn't compare single splats
-    doesn't compare positional parameters to single splat
    doesn't compare positional parameters to single splat
-    detects mismatch with single parameter
    detects mismatch with single parameter
-    respects external names of positional parameters (2)
    respects external names of positional parameters (2)
-    respects external names of positional parameters (1)
    respects external names of positional parameters (1)
-  deprecated methods
-    detects deprecated initialize
    detects deprecated initialize
-    deprecation reason is optional
    deprecation reason is optional
-    detects top-level deprecated methods
    detects top-level deprecated methods
-    detects deprecated instance methods
    detects deprecated instance methods
-    errors if invalid argument type
    errors if invalid argument type
-    detects deprecated generic class methods
    detects deprecated generic class methods
-    detects deprecated generic instance methods
    detects deprecated generic instance methods
-    informs warnings once per call site location (b)
    informs warnings once per call site location (b)
-    ignore deprecation excluded locations
    ignore deprecation excluded locations
-    informs warnings once per target type
    informs warnings once per target type
-    detects deprecated methods with named arguments
    detects deprecated methods with named arguments
-    detects deprecated initialize with named arguments
    detects deprecated initialize with named arguments
-    informs warnings once per yield
    informs warnings once per yield
-    detects deprecated module methods
    detects deprecated module methods
-    ignores nested calls to deprecated methods
    ignores nested calls to deprecated methods
-    detects deprecated class methods
    detects deprecated class methods
-    errors if too many arguments
    errors if too many arguments
-    errors if invalid named arguments
    errors if invalid named arguments
-    informs warnings once per call site location (a)
    informs warnings once per call site location (a)
-  deprecated constants
-    detects deprecated constants in type declarations (3)
    detects deprecated constants in type declarations (3)
-    detects deprecated constants inside macros
    detects deprecated constants inside macros
-    detects deprecated constants
    detects deprecated constants
-    detects deprecated constants in type declarations (2)
    detects deprecated constants in type declarations (2)
-    detects deprecated constants in type declarations (1)
    detects deprecated constants in type declarations (1)
-  exposes syntax warnings
  exposes syntax warnings
-  deprecated annotations
-    detects deprecated annotations
    detects deprecated annotations
-    detects deprecated namespaced annotations
    detects deprecated namespaced annotations
-Semantic: double splat
-  uses restriction on double splat, means all types must be that type
  uses restriction on double splat, means all types must be that type
-  double splats named argument into arguments (1)
  double splats named argument into arguments (1)
-  errors if duplicate keys on call side with double splat and named args
  errors if duplicate keys on call side with double splat and named args
-  matches double splat on method (empty)
  matches double splat on method (empty)
-  double splats named argument into arguments (2)
  double splats named argument into arguments (2)
-  uses double splat restriction, matches empty
  uses double splat restriction, matches empty
-  matches double splat on method with named args and regular args
  matches double splat on method with named args and regular args
-  uses double splat restriction
  uses double splat restriction
-  uses double splat restriction with concrete type
  uses double splat restriction with concrete type
-  matches named args producing an empty double splat (#2678)
  matches named args producing an empty double splat (#2678)
-  matches double splat on method with named args
  matches double splat on method with named args
-  overloads based on double splat restriction
  overloads based on double splat restriction
-  uses restriction on double splat, doesn't match with empty named tuple
  uses restriction on double splat, doesn't match with empty named tuple
-  uses double splat in new
  uses double splat in new
-  errors if duplicate keys on call side with two double splats
  errors if duplicate keys on call side with two double splats
-  errors missing argument with double splat
  errors missing argument with double splat
-  matches double splat with regular splat
  matches double splat with regular splat
-  uses restriction on double splat, doesn't match with empty named tuple (2)
  uses restriction on double splat, doesn't match with empty named tuple (2)
-Semantic: enum
-  allows class vars in enum
  allows class vars in enum
-  disallows implicit conversion of int to enum
  disallows implicit conversion of int to enum
-  doesn't overflow on flags member (#7877)
  doesn't overflow on flags member (#7877)
-  finds method in enum type
  finds method in enum type
-  errors if reopening enum with different base type (2)
  errors if reopening enum with different base type (2)
-  errors if reopen and tries to define constant
  errors if reopen and tries to define constant
-  doesn't error when defining a non-flags enum with None or All
  doesn't error when defining a non-flags enum with None or All
-  can use macro for inside enum
  can use macro for inside enum
-  errors if declaring type inside enum (#3127)
  errors if declaring type inside enum (#3127)
-  reopens enum without base type (1)
  reopens enum without base type (1)
-  doesn't break assigned values in enum flags when a member has value 0 (#5767)
  doesn't break assigned values in enum flags when a member has value 0 (#5767)
-  errors if enum value is too big for type (#678)
  errors if enum value is too big for type (#678)
-  gives error on signed flags enum overflow after a member with value
  gives error on signed flags enum overflow after a member with value
-  disallows All value for @[Flags] enum
  disallows All value for @[Flags] enum
-  reopens an enum
  reopens an enum
-  finds class method in enum type
  finds class method in enum type
-  doesn't overflow when going from negative to zero (#7874)
  doesn't overflow when going from negative to zero (#7874)
-  can use macro expression inside enum
  can use macro expression inside enum
-  defines method on enum
  defines method on enum
-  errors on enum without members (#3447)
  errors on enum without members (#3447)
-  defines class method on enum
  defines class method on enum
-  has All value when defined as @[Flags]
  has All value when defined as @[Flags]
-  types enum value
  types enum value
-  reopens enum with same base type (2)
  reopens enum with same base type (2)
-  gives error on enum overflow
  gives error on enum overflow
-  allows redefining None to 0 for @[Flags] enum
  allows redefining None to 0 for @[Flags] enum
-  errors if reopening enum with different base type (1)
  errors if reopening enum with different base type (1)
-  has None value when defined as @[Flags]
  has None value when defined as @[Flags]
-  errors if using a name twice
  errors if using a name twice
-  doesn't error when defining a method for an enum with flags
  doesn't error when defining a method for an enum with flags
-  attaches annotation to enum method (#6690)
  attaches annotation to enum method (#6690)
-  marks as flags with base type (#2185)
  marks as flags with base type (#2185)
-  creates enum from value
  creates enum from value
-  doesn't visit enum members generated by macros twice (#10104)
  doesn't visit enum members generated by macros twice (#10104)
-  disallows redefining None to non-0 for @[Flags] enum
  disallows redefining None to non-0 for @[Flags] enum
-  errors if reopen but not enum
  errors if reopen but not enum
-  errors if defining initialize in Enum (#7238)
  errors if defining initialize in Enum (#7238)
-  gives error on flags enum overflow
  gives error on flags enum overflow
-  errors if inheriting Enum (#3592)
  errors if inheriting Enum (#3592)
-  reopens enum with same base type (1)
  reopens enum with same base type (1)
-  errors if declaring type inside enum, nested (#3127)
  errors if declaring type inside enum, nested (#3127)
-  gives error on enum overflow after a member with value
  gives error on enum overflow after a member with value
-  errors if invoking private enum method
  errors if invoking private enum method
-  gives error on unsigned flags enum overflow after a member with value
  gives error on unsigned flags enum overflow after a member with value
-  doesn't error when defining a flags enum in a lib with None or All
  doesn't error when defining a flags enum in a lib with None or All
-  can redefine Enum.new
  can redefine Enum.new
-  types enum
  types enum
-  errors if using instance var inside enum (#991)
  errors if using instance var inside enum (#991)
-  reopens enum without base type (2)
  reopens enum without base type (2)
-Codegen: while
-  break with value, condition fails
  break with value, condition fails
-  doesn't crash on #2767 (2)
  doesn't crash on #2767 (2)
-  codegens endless while
  codegens endless while
-  codegens def with while
  codegens def with while
-  codegens while with declared var 2
  codegens while with declared var 2
-  doesn't crash on #2767
  doesn't crash on #2767
-  endless conditional break with value
  endless conditional break with value
-  codegens while with declared var 3
  codegens while with declared var 3
-  conditional break with value
  conditional break with value
-  doesn't crash on a = NoReturn
  doesn't crash on a = NoReturn
-  conditional break without value
  conditional break without value
-  doesn't crash on #2767 (3)
  doesn't crash on #2767 (3)
-  codegens while with non-false condition
  codegens while with non-false condition
-  break without value
  break without value
-  doesn't crash on while true begin break rescue (#7786)
  doesn't crash on while true begin break rescue (#7786)
-  endless break with value
  endless break with value
-  codegens while with false
  codegens while with false
-  skip block with next
  skip block with next
-  codegens while with declared var 1
  codegens while with declared var 1
-  doesn't crash on #2767 (4)
  doesn't crash on #2767 (4)
-  break with value
  break with value
-Semantic: initialize
-  doesn't mark instance variable as nilable when using self.class in method
  doesn't mark instance variable as nilable when using self.class in method
-  finishes when analyzing recursive calls
  finishes when analyzing recursive calls
-  types initializer of recursive generic type
  types initializer of recursive generic type
-  marks instance variable as nilable in initialize if assigning self
  marks instance variable as nilable in initialize if assigning self
-  doesn't mark instance variable as nilable when using self.class
  doesn't mark instance variable as nilable when using self.class
-  doesn't type instance var as nilable if used after global method call
  doesn't type instance var as nilable if used after global method call
-  doesn't type instance var as nilable if used after method call that doesn't read var
  doesn't type instance var as nilable if used after method call that doesn't read var
-  types instance vars as nilable if doesn't invoke super in initialize
  types instance vars as nilable if doesn't invoke super in initialize
-  types instance var as nilable if used after method call that reads var (2)
  types instance var as nilable if used after method call that reads var (2)
-  types instance var as nilable if used after method call that reads var
  types instance var as nilable if used after method call that reads var
-  doesn't type instance var as nilable if not used in method call
  doesn't type instance var as nilable if not used in method call
-  types instance var as nilable if used before assignment
  types instance var as nilable if used before assignment
-  doesn't type instance var as nilable if out
  doesn't type instance var as nilable if out
-  errors if found matches for initialize but doesn't cover all (bug #204)
  errors if found matches for initialize but doesn't cover all (bug #204)
-  marks instance variable as nilable when using self in super
  marks instance variable as nilable when using self in super
-  types instance var as nilable if used after method call that reads var through other calls
  types instance var as nilable if used after method call that reads var through other calls
-  doesn't type instance var as nilable if assigned before method call
  doesn't type instance var as nilable if assigned before method call
-  types instance var as non-nilable if calls super and super defines it, with one level of indirection
  types instance var as non-nilable if calls super and super defines it, with one level of indirection
-  types instance var as not-nilable if assigned in block but previously assigned
  types instance var as not-nilable if assigned in block but previously assigned
-  types instance var as nilable if used in first of two method calls
  types instance var as nilable if used in first of two method calls
-  marks instance variable as nilable in initialize if using self in method
  marks instance variable as nilable in initialize if using self in method
-  types instance var as nilable if assigned in block
  types instance var as nilable if assigned in block
-  checks instance vars of included modules
  checks instance vars of included modules
-  types initializer of generic type after instantiated
  types initializer of generic type after instantiated
-  doesn't type instance var as nilable if used after method call inside typeof
  doesn't type instance var as nilable if used after method call inside typeof
-  types instance vars as nilable if doesn't invoke super in initialize with deep subclass
  types instance vars as nilable if doesn't invoke super in initialize with deep subclass
-  doesn't type ivar as nilable if super call present and parent has already typed ivar (#4764)
  doesn't type ivar as nilable if super call present and parent has already typed ivar (#4764)
-  doesn't type ivar having initializer as nilable even if it is used before assigned inside initialize (#5112)
  doesn't type ivar having initializer as nilable even if it is used before assigned inside initialize (#5112)
-  errors on default new when using named arguments (#2245)
  errors on default new when using named arguments (#2245)
-  types instance var as non-nilable if calls super and super defines it
  types instance var as non-nilable if calls super and super defines it
-  doesn't type instance var as nilable if used after method call that assigns var
  doesn't type instance var as nilable if used after method call that assigns var
-  types instance var as nilable if not always assigned
  types instance var as nilable if not always assigned
-  marks instance variable as nilable in initialize if using self
  marks instance variable as nilable in initialize if using self
-  types instance vars as nilable if doesn't invoke super with default arguments
  types instance vars as nilable if doesn't invoke super with default arguments
-Semantic: virtual metaclass
-  types virtual metaclass method
  types virtual metaclass method
-  merges metaclass types
  merges metaclass types
-  allows passing metaclass to virtual metaclass restriction
  allows passing metaclass to virtual metaclass restriction
-  types virtual metaclass
  types virtual metaclass
-  restricts virtual metaclass to Class (#11376)
  restricts virtual metaclass to Class (#11376)
-  types metaclass node
  types metaclass node
-  allows passing metaclass to virtual metaclass restriction
  allows passing metaclass to virtual metaclass restriction
-  allows allocating virtual type when base class is abstract
  allows allocating virtual type when base class is abstract
-  merges metaclass types with 3 types
  merges metaclass types with 3 types
-  yields virtual type in block arg if class is abstract
  yields virtual type in block arg if class is abstract
-Crystal::Repl
-  can return static and runtime type information for
-    UnionType
    UnionType
-    MixedUnionType
    MixedUnionType
-    Non Union
    Non Union
-    VirtualType
    VirtualType
-  can parse and evaluate snippets
  can parse and evaluate snippets
-Normalize: case
-  normalizes case with implicit call
  normalizes case with implicit call
-  normalizes case with multiple expressions with underscore
  normalizes case with multiple expressions with underscore
-  normalizes case with multiple expressions with all underscores
  normalizes case with multiple expressions with all underscores
-  normalizes case with multiple expressions and non-tuple
  normalizes case with multiple expressions and non-tuple
-  normalizes case with implicit as? (#3040)
  normalizes case with implicit as? (#3040)
-  normalizes case with Generic.class to is_a?
  normalizes case with Generic.class to is_a?
-  normalizes case with var in cond
  normalizes case with var in cond
-  normalizes case with multiple expressions and types
  normalizes case with multiple expressions and types
-  normalizes case with Path.class to is_a? (in)
  normalizes case with Path.class to is_a? (in)
-  normalizes case with multiple expressions
  normalizes case with multiple expressions
-  normalizes case without cond, when and else
  normalizes case without cond, when and else
-  normalizes case with generic to is_a?
  normalizes case with generic to is_a?
-  normalizes case with Path.class to is_a?
  normalizes case with Path.class to is_a?
-  normalizes case without cond, when but else
  normalizes case without cond, when but else
-  normalizes case with assignment wrapped by paren
  normalizes case with assignment wrapped by paren
-  normalizes case with call
  normalizes case with call
-  normalizes case with nil to is_a?
  normalizes case with nil to is_a?
-  normalizes case with implicit as (#3040)
  normalizes case with implicit as (#3040)
-  normalizes case with Path to is_a?
  normalizes case with Path to is_a?
-  normalizes case with assignment
  normalizes case with assignment
-  normalizes case with implicit responds_to? (#3040)
  normalizes case with implicit responds_to? (#3040)
-  normalizes case with multiple expressions with all underscores twice
  normalizes case with multiple expressions with all underscores twice
-  normalizes case with implicit is_a? (#3040)
  normalizes case with implicit is_a? (#3040)
-  normalizes case with many expressions in when
  normalizes case with many expressions in when
-  normalizes case without when and else
  normalizes case without when and else
-  normalizes case with multiple expressions and comma
  normalizes case with multiple expressions and comma
-  normalizes case without when but else
  normalizes case without when but else
-  normalizes case with multiple expressions and implicit obj
  normalizes case with multiple expressions and implicit obj
-  normalizes case without value with many expressions in when
  normalizes case without value with many expressions in when
-  normalizes case with implicit !
  normalizes case with implicit !
-  normalizes case without value
  normalizes case without value
-Semantic: annotation
-  #annotations
-    of a specific type
-      finds annotations in lib
      finds annotations in lib
-      finds annotations in class
      finds annotations in class
-      find annotations on method parameters
      find annotations on method parameters
-      overrides annotations value in type
      overrides annotations value in type
-      collects annotations values in type
      collects annotations values in type
-      finds annotations in generic parent (#7885)
      finds annotations in generic parent (#7885)
-      uses annotations value, positional
      uses annotations value, positional
-      finds annotations in enum
      finds annotations in enum
-      adds annotations on def
      adds annotations on def
-      can't find annotations on def
      can't find annotations on def
-      can't find annotations in instance var, when other annotations are present
      can't find annotations in instance var, when other annotations are present
-      finds annotations in instance var (declaration)
      finds annotations in instance var (declaration)
-      uses annotations value, keyword
      uses annotations value, keyword
-      finds annotations in instance var (declaration, generic)
      finds annotations in instance var (declaration, generic)
-      can't find annotations on def, when other annotations are present
      can't find annotations on def, when other annotations are present
-      can't find annotations in instance var
      can't find annotations in instance var
-      finds annotations in struct
      finds annotations in struct
-      finds annotations on a module
      finds annotations on a module
-      returns an empty array if there are none defined
      returns an empty array if there are none defined
-    all types
-      adds annotations on def
      adds annotations on def
-      find annotations on method parameters
      find annotations on method parameters
-      finds annotations on a class
      finds annotations on a class
-      finds annotations in generic parent (#7885)
      finds annotations in generic parent (#7885)
-      finds annotations on a struct
      finds annotations on a struct
-      finds annotations in instance var (declaration, generic)
      finds annotations in instance var (declaration, generic)
-      finds annotations on a lib
      finds annotations on a lib
-      finds annotations in instance var (declaration)
      finds annotations in instance var (declaration)
-      returns an empty array if there are none defined
      returns an empty array if there are none defined
-      finds annotations on a enum
      finds annotations on a enum
-      finds annotations on a module
      finds annotations on a module
-  errors if wanting to add type inside annotation (2) (#8614)
  errors if wanting to add type inside annotation (2) (#8614)
-  errors when annotate instance variable in subclass
  errors when annotate instance variable in subclass
-  arguments
-    #named_args
-      returns a NamedTupleLiteral if there are named arguments defined
      returns a NamedTupleLiteral if there are named arguments defined
-      returns an empty NamedTupleLiteral if there are none defined
      returns an empty NamedTupleLiteral if there are none defined
-    #args
-      returns an empty TupleLiteral if there are none defined
      returns an empty TupleLiteral if there are none defined
-      returns a TupleLiteral if there are positional arguments defined
      returns a TupleLiteral if there are positional arguments defined
-    returns a correctly with named and positional args
    returns a correctly with named and positional args
-  declares annotation
  declares annotation
-  #annotation
-    adds annotation on def
    adds annotation on def
-    finds annotation in class
    finds annotation in class
-    finds annotation in instance var (declaration, generic)
    finds annotation in instance var (declaration, generic)
-    doesn't carry link annotation from lib to fun
    doesn't carry link annotation from lib to fun
-    finds annotation in generic parent (#7885)
    finds annotation in generic parent (#7885)
-    can't find annotation in instance var
    can't find annotation in instance var
-    finds annotation in instance var (declaration)
    finds annotation in instance var (declaration)
-    can't find annotation in module
    can't find annotation in module
-    uses annotation value, positional
    uses annotation value, positional
-    errors if annotation doesn't exist
    errors if annotation doesn't exist
-    uses annotation value, keyword
    uses annotation value, keyword
-    finds annotation on method arg
    finds annotation on method arg
-    finds annotation in enum
    finds annotation in enum
-    finds annotation on method splat arg
    finds annotation on method splat arg
-    finds annotation in module
    finds annotation in module
-    finds annotation in struct
    finds annotation in struct
-    errors if annotation doesn't point to an annotation type
    errors if annotation doesn't point to an annotation type
-    errors if using invalid annotation on fun
    errors if using invalid annotation on fun
-    overrides annotation value in type
    overrides annotation value in type
-    errors if using annotation other than ThreadLocal for class vars
    errors if using annotation other than ThreadLocal for class vars
-    finds annotation on an restricted method block arg
    finds annotation on an restricted method block arg
-    finds annotation on method double splat arg
    finds annotation on method double splat arg
-    overrides annotation in instance var
    overrides annotation in instance var
-    finds annotation in lib
    finds annotation in lib
-    can't find annotation in module, when other annotations are present
    can't find annotation in module, when other annotations are present
-    can't find annotation on def
    can't find annotation on def
-    finds annotation in instance var (assignment)
    finds annotation in instance var (assignment)
-    can't find annotation on def, when other annotations are present
    can't find annotation on def, when other annotations are present
-    can't find annotation in instance var, when other annotations are present
    can't find annotation in instance var, when other annotations are present
-  doesn't bleed annotation from class into class variable (#8314)
  doesn't bleed annotation from class into class variable (#8314)
-  errors if wanting to add type inside annotation (1) (#8614)
  errors if wanting to add type inside annotation (1) (#8614)
-Semantic: fun
-  errors if defining class inside fun through macro (#6874)
  errors if defining class inside fun through macro (#6874)
-Crystal::Config
-  .host_target
  .host_target
-  .linux_runtime_libc
  .linux_runtime_libc
-Semantic: array
-  types array literal of int
  types array literal of int
-  types array literal size correctly
  types array literal size correctly
-  types array literal of union
  types array literal of union
-  types array literal of int with splats
  types array literal of int with splats
-  types array literal with splats
  types array literal with splats
-  assignment in array literal works (#3195)
  assignment in array literal works (#3195)
-  types empty typed array literal of int32
  types empty typed array literal of int32
-  types non-empty typed array literal of int
  types non-empty typed array literal of int
-  types non-empty typed array literal of int
  types non-empty typed array literal of int
-  types array literal with splats (2)
  types array literal with splats (2)
-Crystal::Formatter
-  formats "lib Foo\n  fun bar = Bar\nend"
  formats "lib Foo\n  fun bar = Bar\nend"
-  formats "next 1, {2, 3}"
  formats "next 1, {2, 3}"
-  formats "\n   # hello\n\n1"
  formats "\n   # hello\n\n1"
-  formats "macro foo\n  {% if 1 %}\\ 2 {% else %}\\ 3 {% end %}\\\nend"
  formats "macro foo\n  {% if 1 %}\\ 2 {% else %}\\ 3 {% end %}\\\nend"
-  formats "next  *1  ,2"
  formats "next  *1  ,2"
-  formats "case 1\nwhen 1      then 1\nwhen 123    then 2\nwhen 1..123 then 3\nelse             4\nend"
  formats "case 1\nwhen 1      then 1\nwhen 123    then 2\nwhen 1..123 then 3\nelse             4\nend"
-  formats "   {%\na = 1\n   %}"
  formats "   {%\na = 1\n   %}"
-  formats "-> : {Int32} { String }"
  formats "-> : {Int32} { String }"
-  formats "def foo\n  {% if flag?(:foo) %}\n    foo  +  bar\n  {% else %}\n    baz  +  qux\n  {% end %}\nend"
  formats "def foo\n  {% if flag?(:foo) %}\n    foo  +  bar\n  {% else %}\n    baz  +  qux\n  {% end %}\nend"
-  formats "begin\nend\n\n# a\n"
  formats "begin\nend\n\n# a\n"
-  formats "  {% for x in y %} 2 {% end %}"
  formats "  {% for x in y %} 2 {% end %}"
-  formats "select   \n when  foo \n 2 \n end"
  formats "select   \n when  foo \n 2 \n end"
-  formats "->( ){ x }"
  formats "->( ){ x }"
-  formats "b &.[c]?.d"
  formats "b &.[c]?.d"
-  formats "foo do  | x | \n x \n end"
  formats "foo do  | x | \n x \n end"
-  formats "begin 0[1] rescue 2 end"
  formats "begin 0[1] rescue 2 end"
-  formats "lib Foo\n  $foo  :  Int32 \nend"
  formats "lib Foo\n  $foo  :  Int32 \nend"
-  formats "{%\n  unless true\n    1\n  end\n%}"
  formats "{%\n  unless true\n    1\n  end\n%}"
-  formats "foo(\"bar\" \\\n\"baz\")"
  formats "foo(\"bar\" \\\n\"baz\")"
-  formats "'a'"
  formats "'a'"
-  formats "if 1\n  {% for x in y %} {% end %}\nend"
  formats "if 1\n  {% for x in y %} {% end %}\nend"
-  formats "\"\\a\\c\\b\\d\""
  formats "\"\\a\\c\\b\\d\""
-  formats "# Hello\n#\n# ```cr\n#   1\n# ```\n# Bye"
  formats "# Hello\n#\n# ```cr\n#   1\n# ```\n# Bye"
-  formats "class Foo\n  enum Bar\n  A; B; C;\n  D; E; F\nend\nend\n"
  formats "class Foo\n  enum Bar\n  A; B; C;\n  D; E; F\nend\nend\n"
-  formats "a &.b.c.as(C)"
  formats "a &.b.c.as(C)"
-  formats "p = Foo[1, 2, 3,\n        4, 5, 6,\n       ]"
  formats "p = Foo[1, 2, 3,\n        4, 5, 6,\n       ]"
-  formats ":&"
  formats ":&"
-  formats "def foo\n  # Comment\n\n\nend"
  formats "def foo\n  # Comment\n\n\nend"
-  formats "[\n]   of   \n   Foo  "
  formats "[\n]   of   \n   Foo  "
-  formats "@[Foo( 1, 2 )]"
  formats "@[Foo( 1, 2 )]"
-  formats "a = foo &.bar do\n  1 + 2\nend"
  formats "a = foo &.bar do\n  1 + 2\nend"
-  formats "case 1        # foo\nwhen 2 then 3 # bar\nwhen 4 then 5 # baz\nelse        6 # zzz\nend"
  formats "case 1        # foo\nwhen 2 then 3 # bar\nwhen 4 then 5 # baz\nelse        6 # zzz\nend"
-  formats "X(typeof(begin\n  e.is_a?(Y) ? 1 : 2\nend))"
  formats "X(typeof(begin\n  e.is_a?(Y) ? 1 : 2\nend))"
-  formats "foo \\\n  1,\n  2\n\nbar \\\n  foo: 1,\n  bar: 2"
  formats "foo \\\n  1,\n  2\n\nbar \\\n  foo: 1,\n  bar: 2"
-  formats "def foo\n  <<-FOO\n  foo \#{1}\n  FOO\nend"
  formats "def foo\n  <<-FOO\n  foo \#{1}\n  FOO\nend"
-  formats "1 &&\n2 &&\n3"
  formats "1 &&\n2 &&\n3"
-  formats "x  :   A  |  B"
  formats "x  :   A  |  B"
-  formats "\n\n1"
  formats "\n\n1"
-  formats "def foo : A | B(C)\n  nil\nend"
  formats "def foo : A | B(C)\n  nil\nend"
-  formats "-> :: Foo . foo="
  formats "-> :: Foo . foo="
-  formats "def foo(x @@y)\nend"
  formats "def foo(x @@y)\nend"
-  formats "foo   &bar"
  formats "foo   &bar"
-  formats "long_variable_name = [1, 2, 3,\n                      4, 5, 6]"
  formats "long_variable_name = [1, 2, 3,\n                      4, 5, 6]"
-  formats "-> : Int32 | String { 1 }"
  formats "-> : Int32 | String { 1 }"
-  formats ":foo"
  formats ":foo"
-  formats "if a\n2\n3\nelse\n4\n5\nend"
  formats "if a\n2\n3\nelse\n4\n5\nend"
-  formats "next  1 ,  2"
  formats "next  1 ,  2"
-  formats "next  1"
  formats "next  1"
-  formats "1 if 2\n# foo"
  formats "1 if 2\n# foo"
-  formats "  {% if 1 %} {% if 2 %} 2 {% end %} {% end %}"
  formats "  {% if 1 %} {% if 2 %} 2 {% end %} {% end %}"
-  formats "1.!= do\nend"
  formats "1.!= do\nend"
-  formats "1 + \n2"
  formats "1 + \n2"
-  formats "foo.as?(T).bar"
  formats "foo.as?(T).bar"
-  formats "foo(->do\n  1 + 2\nend)"
  formats "foo(->do\n  1 + 2\nend)"
-  formats "class Foo\nend\nclass Bar\nend"
  formats "class Foo\nend\nclass Bar\nend"
-  formats "def foo(a : T, b : U) forall T, U\n  #\nend"
  formats "def foo(a : T, b : U) forall T, U\n  #\nend"
-  formats "if 1\n  {% if 2 %} {% end %}\nend"
  formats "if 1\n  {% if 2 %} {% end %}\nend"
-  formats "def foo\n  1 #\nrescue\nend"
  formats "def foo\n  1 #\nrescue\nend"
-  formats "foo(bar(\n  1,\n  baz(2,\n      3,\n     )\n))"
  formats "foo(bar(\n  1,\n  baz(2,\n      3,\n     )\n))"
-  formats "->Foo.foo"
  formats "->Foo.foo"
-  formats "Foo::Bar?"
  formats "Foo::Bar?"
-  formats "run(\"a\", 1)"
  formats "run(\"a\", 1)"
-  formats "   {%\na = 1 %}"
  formats "   {%\na = 1 %}"
-  formats "@x[ 1 ]   ||=   2"
  formats "@x[ 1 ]   ||=   2"
-  formats "def foo(*y, **z)\nend"
  formats "def foo(*y, **z)\nend"
-  formats "foo (1)"
  formats "foo (1)"
-  formats "next { {1, 2}, {3, 4} }, 5"
  formats "next { {1, 2}, {3, 4} }, 5"
-  formats "1 && # foo\n  2 &&\n  3"
  formats "1 && # foo\n  2 &&\n  3"
-  formats "foo : Pointer(Foo)*"
  formats "foo : Pointer(Foo)*"
-  formats "lib Bar\n  enum Foo\n  end\nend"
  formats "lib Bar\n  enum Foo\n  end\nend"
-  formats "<<-HTML\n  \#{\"foo\"}\n  \#{\"bar\"}\n  HTML"
  formats "<<-HTML\n  \#{\"foo\"}\n  \#{\"bar\"}\n  HTML"
-  formats "getter foo : Int32 # comment\n\ndef foo\nend"
  formats "getter foo : Int32 # comment\n\ndef foo\nend"
-  formats "{  } of  A   =>   B"
  formats "{  } of  A   =>   B"
-  formats "Hash{\n  foo => <<-EOF,\n  foo\n  EOF\n}"
  formats "Hash{\n  foo => <<-EOF,\n  foo\n  EOF\n}"
-  formats "asm(\n\"nop\"\n)"
  formats "asm(\n\"nop\"\n)"
-  formats "lib Foo\nalias  Foo  =  Bar -> \n$a : Int32\nend"
  formats "lib Foo\nalias  Foo  =  Bar -> \n$a : Int32\nend"
-  formats "  {% begin %} 2 {% end %}"
  formats "  {% begin %} 2 {% end %}"
-  formats "foo.[]"
  formats "foo.[]"
-  formats "foo\n  .bar\n  .baz(\n    1\n  )"
  formats "foo\n  .bar\n  .baz(\n    1\n  )"
-  formats "asm(\"nop\" : \"a\"(0),\n\"b\"(1)\n: \"c\"(2), \"d\"(3) )"
  formats "asm(\"nop\" : \"a\"(0),\n\"b\"(1)\n: \"c\"(2), \"d\"(3) )"
-  formats "next {1, 2}, {3, 4}"
  formats "next {1, 2}, {3, 4}"
-  formats "{% foo <<-X\nbar\nX\n%}"
  formats "{% foo <<-X\nbar\nX\n%}"
-  formats "1   # foo"
  formats "1   # foo"
-  formats "&+ 1"
  formats "&+ 1"
-  formats "case 1\nwhen a; 2\nelse; ; b\nend"
  formats "case 1\nwhen a; 2\nelse; ; b\nend"
-  formats "macro foo\n  {{x}}  <<-FOO\n    hello  \n  FOO\nend"
  formats "macro foo\n  {{x}}  <<-FOO\n    hello  \n  FOO\nend"
-  formats "lib LibFoo\n  {% begin %}\n    fun x = y(Int32)\n  {% end %}\nend"
  formats "lib LibFoo\n  {% begin %}\n    fun x = y(Int32)\n  {% end %}\nend"
-  formats "long_variable_name = [1, 2, 3, # foo\n                      4, 5, 6]"
  formats "long_variable_name = [1, 2, 3, # foo\n                      4, 5, 6]"
-  formats "@[Foo]\ndef foo\nend"
  formats "@[Foo]\ndef foo\nend"
-  formats "lib Foo\nunion Foo\nend\nend"
  formats "lib Foo\nunion Foo\nend\nend"
-  formats "macro foo\n  if 1\n 1 + 2\n end\nend"
  formats "macro foo\n  if 1\n 1 + 2\n end\nend"
-  formats "1.===() { 3 }"
  formats "1.===() { 3 }"
-  formats " Array( {x:  Int32,   y:  String } )"
  formats " Array( {x:  Int32,   y:  String } )"
-  formats "def foo : Int32\n  1\nend"
  formats "def foo : Int32\n  1\nend"
-  formats "1*2"
  formats "1*2"
-  formats "foo{|x| x}"
  formats "foo{|x| x}"
-  formats "case  1 \n when 2 ;\n 3 \n end"
  formats "case  1 \n when 2 ;\n 3 \n end"
-  formats "->@foo.foo!"
  formats "->@foo.foo!"
-  formats "def foo(x @y)\nend"
  formats "def foo(x @y)\nend"
-  formats "x, y = <<-FOO, <<-BAR\n  hello\n  FOO\n  world\n  BAR"
  formats "x, y = <<-FOO, <<-BAR\n  hello\n  FOO\n  world\n  BAR"
-  formats "enum Foo\nA = 1\nend"
  formats "enum Foo\nA = 1\nend"
-  formats "foo  x:  1"
  formats "foo  x:  1"
-  formats "foo : Foo * * * * *"
  formats "foo : Foo * * * * *"
-  formats "return { 1 ,  2 }"
  formats "return { 1 ,  2 }"
-  formats "foo(/ /)"
  formats "foo(/ /)"
-  formats "foo = 1\n->foo.[]=(Int32)"
  formats "foo = 1\n->foo.[]=(Int32)"
-  formats "x  :   Int32[ 8 ]"
  formats "x  :   Int32[ 8 ]"
-  formats "begin\n  1 \\\n    + 2\n  3\nend"
  formats "begin\n  1 \\\n    + 2\n  3\nend"
-  formats "a  ||  b"
  formats "a  ||  b"
-  formats "inner &.color=(@color)\n1"
  formats "inner &.color=(@color)\n1"
-  formats "lib Foo\nfun foo ()  :  Int32\nend"
  formats "lib Foo\nfun foo ()  :  Int32\nend"
-  formats "{\n  foo:    1,\n  b:      2,\n  barbaz: 3,\n}"
  formats "{\n  foo:    1,\n  b:      2,\n  barbaz: 3,\n}"
-  formats "<<-HTML\n  hello \n  world   \n  HTML"
  formats "<<-HTML\n  hello \n  world   \n  HTML"
-  formats "foo[&.bar] ||= 1"
  formats "foo[&.bar] ||= 1"
-  formats "def foo( x , & block  : Int32 ->)\nend"
  formats "def foo( x , & block  : Int32 ->)\nend"
-  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n\n  @[MyAnn] @[MyAnn] baz,\n\n  @[MyAnn]\n  @[MyAnn]\n  biz\n); end"
  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n\n  @[MyAnn] @[MyAnn] baz,\n\n  @[MyAnn]\n  @[MyAnn]\n  biz\n); end"
-  formats "bar = foo({\n        1 => 2,\n        3 => 4,\n        5 => 6,\n      })"
  formats "bar = foo({\n        1 => 2,\n        3 => 4,\n        5 => 6,\n      })"
-  formats "class Foo\n  # ```\n  # 1\n  # ```\nend\n"
  formats "class Foo\n  # ```\n  # 1\n  # ```\nend\n"
-  formats "foo 1, do\n2\nend"
  formats "foo 1, do\n2\nend"
-  formats "->@@foo.foo?"
  formats "->@@foo.foo?"
-  formats "unless a\n    # hello\n 2\nend"
  formats "unless a\n    # hello\n 2\nend"
-  formats "def foo(x, **z, &block)\nend"
  formats "def foo(x, **z, &block)\nend"
-  formats ":<<"
  formats ":<<"
-  formats "bar = foo([\n  1,\n  2,\n  3,\n])"
  formats "bar = foo([\n  1,\n  2,\n  3,\n])"
-  formats "foo &.nil?"
  formats "foo &.nil?"
-  formats "1 #=> 2"
  formats "1 #=> 2"
-  formats "{\n  <<-KEY => 1,\n  key\n  KEY\n}"
  formats "{\n  <<-KEY => 1,\n  key\n  KEY\n}"
-  formats "enum Foo;end"
  formats "enum Foo;end"
-  formats "class Foo\n  NamedTuple(\n    a: Int32,\n  )\nend"
  formats "class Foo\n  NamedTuple(\n    a: Int32,\n  )\nend"
-  formats "def foo(x y)\nend"
  formats "def foo(x y)\nend"
-  formats "::Tuple(T)"
  formats "::Tuple(T)"
-  formats "~ 1"
  formats "~ 1"
-  formats "def   foo (\nx ,\n y )  \n  end"
  formats "def   foo (\nx ,\n y )  \n  end"
-  formats "long_variable_name = [\n  {\n    :foo => 1,\n  },\n  {\n    :bar => 2,\n  },\n]"
  formats "long_variable_name = [\n  {\n    :foo => 1,\n  },\n  {\n    :bar => 2,\n  },\n]"
-  formats "select\n# when foo\nwhen bar\n  break\nend"
  formats "select\n# when foo\nwhen bar\n  break\nend"
-  formats "[\n1, # a\n2, # b\n 3 # c\n]"
  formats "[\n1, # a\n2, # b\n 3 # c\n]"
-  formats "x =  <<-EOF\n 1\nEOF"
  formats "x =  <<-EOF\n 1\nEOF"
-  formats "asm(\"a\" : \"b\"(c)\n)"
  formats "asm(\"a\" : \"b\"(c)\n)"
-  formats "   {{\n1 + 2\n   }}"
  formats "   {{\n1 + 2\n   }}"
-  formats "if 1\n1\n\n# foo\nend"
  formats "if 1\n1\n\n# foo\nend"
-  formats "1.!=() { 3 }"
  formats "1.!=() { 3 }"
-  formats "@@a"
  formats "@@a"
-  formats "__DIR__"
  formats "__DIR__"
-  formats "foo(\n # foo\n1,\n\n # bar\n2,  \n)"
  formats "foo(\n # foo\n1,\n\n # bar\n2,  \n)"
-  formats "foo &.bar.is_a?(Baz)"
  formats "foo &.bar.is_a?(Baz)"
-  formats "a.b &.[c]?\n1"
  formats "a.b &.[c]?\n1"
-  formats "1 ? 2 : 3"
  formats "1 ? 2 : 3"
-  formats "a = 1\nb, c = 2, 3\n{% begin %}\n  a |= 1\n  b |= 2\n  c |= 3\n{% end %}"
  formats "a = 1\nb, c = 2, 3\n{% begin %}\n  a |= 1\n  b |= 2\n  c |= 3\n{% end %}"
-  formats "-> :: Foo . foo"
  formats "-> :: Foo . foo"
-  formats "def foo( x , & block  : Int32->Float64)\nend"
  formats "def foo( x , & block  : Int32->Float64)\nend"
-  formats "return 1\n# end"
  formats "return 1\n# end"
-  formats "foo = 1\n->foo.foo="
  formats "foo = 1\n->foo.foo="
-  formats "foo \\\n  foo: 1,\n  bar: 2"
  formats "foo \\\n  foo: 1,\n  bar: 2"
-  formats "{ \"foo\" =>  1 }"
  formats "{ \"foo\" =>  1 }"
-  formats "begin\n  select\n  when foo\n    # foo\n    # bar\n  else\n    # foo\n    # bar\n  end\nend"
  formats "begin\n  select\n  when foo\n    # foo\n    # bar\n  else\n    # foo\n    # bar\n  end\nend"
-  formats "lib Foo\n  fun foo =\n\n\n    bar : Void\nend"
  formats "lib Foo\n  fun foo =\n\n\n    bar : Void\nend"
-  formats "def foo(\n   @[MyAnn]   bar\n); end"
  formats "def foo(\n   @[MyAnn]   bar\n); end"
-  formats "foo &.[]"
  formats "foo &.[]"
-  formats "foo(\n  1, 2)"
  formats "foo(\n  1, 2)"
-  formats "def func # comment\n  (1 + 2) / 3\nend"
  formats "def func # comment\n  (1 + 2) / 3\nend"
-  formats "def foo(x =  __FILE__ )\nend"
  formats "def foo(x =  __FILE__ )\nend"
-  formats "foo(\n1,\n 2  \n)"
  formats "foo(\n1,\n 2  \n)"
-  formats "module Foo\n  1 # bar\nend\n\nmodule Foo\n  1\n  # bar\nend\n\nmodule Foo\n  1\n\n  # bar\nend\n\nmodule Foo\n  1\n  2\n  # bar\nend\n\nmodule Foo\n  1\n  2\n\n  # bar\nend\n\nif 1\n  1\n  # bar\nend\n\nif 1\n  1\n\n  # bar\nend\n\n1\n2\n# foo\n\n1\n2\n\n# foo\n"
  formats "module Foo\n  1 # bar\nend\n\nmodule Foo\n  1\n  # bar\nend\n\nmodule Foo\n  1\n\n  # bar\nend\n\nmodule Foo\n  1\n  2\n  # bar\nend\n\nmodule Foo\n  1\n  2\n\n  # bar\nend\n\nif 1\n  1\n  # bar\nend\n\nif 1\n  1\n\n  # bar\nend\n\n1\n2\n# foo\n\n1\n2\n\n# foo\n"
-  formats "alias Foo::Bar= Baz"
  formats "alias Foo::Bar= Baz"
-  formats "foo = 1\n->foo.bar=(Int32)"
  formats "foo = 1\n->foo.bar=(Int32)"
-  formats "1.!=(2) { 3 }"
  formats "1.!=(2) { 3 }"
-  formats "next"
  formats "next"
-  formats "1/2"
  formats "1/2"
-  formats "struct Foo\n  # bar\n  # baz\n1\nend"
  formats "struct Foo\n  # bar\n  # baz\n1\nend"
-  formats "getter foo # comment\n\ndef foo\nend"
  formats "getter foo # comment\n\ndef foo\nend"
-  formats "page= <<-HTML\n  foo\nHTML"
  formats "page= <<-HTML\n  foo\nHTML"
-  formats "foo.bar. as?   Int32"
  formats "foo.bar. as?   Int32"
-  formats "a+1"
  formats "a+1"
-  formats ":/"
  formats ":/"
-  formats "foo a: 1\nb"
  formats "foo a: 1\nb"
-  formats "foo   &.is_a?(T)"
  formats "foo   &.is_a?(T)"
-  formats "def foo(\n\n#foo\nx,\n\n#bar\nz\n)\nend"
  formats "def foo(\n\n#foo\nx,\n\n#bar\nz\n)\nend"
-  formats "if a\n2\nend"
  formats "if a\n2\nend"
-  formats "foo &.[]?(  1, 2  )"
  formats "foo &.[]?(  1, 2  )"
-  formats "foo[a, b: 2]"
  formats "foo[a, b: 2]"
-  formats "macro flags\n  {% if 1 %}\\\n  {% end %}\\\nend"
  formats "macro flags\n  {% if 1 %}\\\n  {% end %}\\\nend"
-  formats "next {1, 2}, 3"
  formats "next {1, 2}, 3"
-  formats "def foo(a : T, b : U) forall T, U         #\n  #\nend"
  formats "def foo(a : T, b : U) forall T, U         #\n  #\nend"
-  formats "def foo\nend\ndef bar\nend"
  formats "def foo\nend\ndef bar\nend"
-  formats "  {% if 1 %} 2 {% end %}"
  formats "  {% if 1 %} 2 {% end %}"
-  formats "\"foo \#{ 1  +  2 }\""
  formats "\"foo \#{ 1  +  2 }\""
-  formats "1.[]= { 3 }"
  formats "1.[]= { 3 }"
-  formats "\"\#{\n  foo = 1}\""
  formats "\"\#{\n  foo = 1}\""
-  formats "bar = foo(->{\n  1 + 2\n})"
  formats "bar = foo(->{\n  1 + 2\n})"
-  formats "x  :   {A, B}"
  formats "x  :   {A, B}"
-  formats "1 +  # foo\n2"
  formats "1 +  # foo\n2"
-  formats "def foo\n  ((((((((((((((((0_u64\n    ) | ptr[0]) << 8\n    ) | ptr[1]) << 8\n    ) | ptr[2]) << 8\n    ) | ptr[3]) << 8\n    ) | ptr[4]) << 8\n    ) | ptr[5]) << 8\n    ) | ptr[6]) << 8\n    ) | ptr[7])\nend"
  formats "def foo\n  ((((((((((((((((0_u64\n    ) | ptr[0]) << 8\n    ) | ptr[1]) << 8\n    ) | ptr[2]) << 8\n    ) | ptr[3]) << 8\n    ) | ptr[4]) << 8\n    ) | ptr[5]) << 8\n    ) | ptr[6]) << 8\n    ) | ptr[7])\nend"
-  formats "a = # foo\n  bar(1)"
  formats "a = # foo\n  bar(1)"
-  formats "foo = 1\n->foo.foo!"
  formats "foo = 1\n->foo.foo!"
-  formats "case 1\nelse # foo\n  # bar\nend"
  formats "case 1\nelse # foo\n  # bar\nend"
-  formats "if 1\n2\nelsif\n3\n4\nend"
  formats "if 1\n2\nelsif\n3\n4\nend"
-  formats "asm(\"nop\" :: \"r\"(0))"
  formats "asm(\"nop\" :: \"r\"(0))"
-  formats "macro flags\n  {% if 1 %}{{1}}a{{2}}{% end %}\\\nend"
  formats "macro flags\n  {% if 1 %}{{1}}a{{2}}{% end %}\\\nend"
-  formats "break  *1  , *2"
  formats "break  *1  , *2"
-  formats "case\n# hello\nwhen 1\n  2\nend"
  formats "case\n# hello\nwhen 1\n  2\nend"
-  formats "break( *1  , *2 )"
  formats "break( *1  , *2 )"
-  formats "foo = 1\n->foo.bar(Int32)"
  formats "foo = 1\n->foo.bar(Int32)"
-  formats "asm(\"a\" :::: \"volatile\"\n)"
  formats "asm(\"a\" :::: \"volatile\"\n)"
-  formats "foo &.as(T)"
  formats "foo &.as(T)"
-  formats "[\n  1, # foo\n  3,\n]"
  formats "[\n  1, # foo\n  3,\n]"
-  formats "case  1 \n when 2 then 3 \n end"
  formats "case  1 \n when 2 then 3 \n end"
-  formats "%w(one   two  three)"
  formats "%w(one   two  three)"
-  formats "a = 1;;; b = 2"
  formats "a = 1;;; b = 2"
-  formats "def foo(\n  a,\n  b\n)\nend"
  formats "def foo(\n  a,\n  b\n)\nend"
-  adds trailing comma to def multi-line normal, splat, and double splat parameters
-    formats "def foo(\n  a,\n  b\n)\nend"
    formats "def foo(\n  a,\n  b\n)\nend"
-    formats "def foo(\n  a : Int32,\n  b : Int32 = 1\n)\nend"
    formats "def foo(\n  a : Int32,\n  b : Int32 = 1\n)\nend"
-    formats "def foo(\n  a,\n  @[Ann]\n  b\n)\nend"
    formats "def foo(\n  a,\n  @[Ann]\n  b\n)\nend"
-    formats "def foo(\n  a,\n  *b\n)\nend"
    formats "def foo(\n  a,\n  *b\n)\nend"
-    formats "macro foo(\n  a,\n  *b\n)\nend"
    formats "macro foo(\n  a,\n  *b\n)\nend"
-    formats "def foo(a, *args)\nend"
    formats "def foo(a, *args)\nend"
-    formats "def foo(a, &block)\nend"
    formats "def foo(a, &block)\nend"
-    formats "def foo(\n  a,\n  @[Ann] b\n)\nend"
    formats "def foo(\n  a,\n  @[Ann] b\n)\nend"
-    formats "def foo(a, b)\nend"
    formats "def foo(a, b)\nend"
-    formats "def foo(\n  a, b,\n  c, d\n)\nend"
    formats "def foo(\n  a, b,\n  c, d\n)\nend"
-    formats "def foo(\n  a,\n  &block\n)\nend"
    formats "def foo(\n  a,\n  &block\n)\nend"
-    formats "def foo(\n  a,\n  b c\n)\nend"
    formats "def foo(\n  a,\n  b c\n)\nend"
-    formats "def foo(\n  a, # Foo\n  b # Bar\n)\nend"
    formats "def foo(\n  a, # Foo\n  b # Bar\n)\nend"
-    formats "fun foo(\n  a : Int32,\n  ...\n)\nend"
    formats "fun foo(\n  a : Int32,\n  ...\n)\nend"
-    formats "def foo(\n  a : Int32,\n  b : Int32\n)\nend"
    formats "def foo(\n  a : Int32,\n  b : Int32\n)\nend"
-    formats "def foo(\n  a, b\n)\nend"
    formats "def foo(\n  a, b\n)\nend"
-    formats "def foo(\n  a,\n  **b\n)\nend"
    formats "def foo(\n  a,\n  **b\n)\nend"
-    formats "macro foo(\n  a,\n  b\n)\nend"
    formats "macro foo(\n  a,\n  b\n)\nend"
-    formats "def foo(a, *args, &block)\nend"
    formats "def foo(a, *args, &block)\nend"
-    formats "def foo(a)\nend"
    formats "def foo(a)\nend"
-    formats "def foo(a, **kwargs)\nend"
    formats "def foo(a, **kwargs)\nend"
-    formats "def foo(a, **kwargs, &block)\nend"
    formats "def foo(a, **kwargs, &block)\nend"
-    formats "def foo(\n  a,\n)\nend"
    formats "def foo(\n  a,\n)\nend"
-    formats "fun foo(\n  a : Int32,\n  b : Int32\n)\nend"
    formats "fun foo(\n  a : Int32,\n  b : Int32\n)\nend"
-  formats "lib Foo\nfun foo  :  Int32\nend"
  formats "lib Foo\nfun foo  :  Int32\nend"
-  formats "asm(\"nop\" : \"a\"(0) )"
  formats "asm(\"nop\" : \"a\"(0) )"
-  formats "$~"
  formats "$~"
-  formats "FOO = 2\nA = 1"
  formats "FOO = 2\nA = 1"
-  formats "foo { |x, *y| }"
  formats "foo { |x, *y| }"
-  formats "foo : (   A  |  B   )"
  formats "foo : (   A  |  B   )"
-  formats "lib Foo\nfun foo(x : Int32, ... )  :  Int32\nend"
  formats "lib Foo\nfun foo(x : Int32, ... )  :  Int32\nend"
-  formats "[foo <<-X\nbar\nX\n]"
  formats "[foo <<-X\nbar\nX\n]"
-  formats "begin\n1\nrescue   ex\n3\nend"
  formats "begin\n1\nrescue   ex\n3\nend"
-  formats "next  1  , *2"
  formats "next  1  , *2"
-  formats "x  :   Int32**"
  formats "x  :   Int32**"
-  formats "def foo(  @[MyAnn]  v  ); end"
  formats "def foo(  @[MyAnn]  v  ); end"
-  formats "foo &.bar.as?(T)"
  formats "foo &.bar.as?(T)"
-  formats "if 1\n  ->{ 1 }\nend"
  formats "if 1\n  ->{ 1 }\nend"
-  formats "_ = 1"
  formats "_ = 1"
-  formats "<<-FOO\nfoo\nfoo\nFOO"
  formats "<<-FOO\nfoo\nfoo\nFOO"
-  formats "1  &&  2"
  formats "1  &&  2"
-  formats "foo \\\n  1,\n  2"
  formats "foo \\\n  1,\n  2"
-  formats "enum Foo\nend"
  formats "enum Foo\nend"
-  formats "return  *1"
  formats "return  *1"
-  formats "Foo( A , 1 )"
  formats "Foo( A , 1 )"
-  formats "def foo(a,\n        &block)\nend"
  formats "def foo(a,\n        &block)\nend"
-  formats "foo(\n1,\n\n 2  \n)"
  formats "foo(\n1,\n\n 2  \n)"
-  formats "{% if true %}\n  # x\n{% end %}"
  formats "{% if true %}\n  # x\n{% end %}"
-  formats "1.[]= do\nend"
  formats "1.[]= do\nend"
-  formats "return {1, 2}, 3"
  formats "return {1, 2}, 3"
-  formats "begin\n  # Comment\n\n\nend"
  formats "begin\n  # Comment\n\n\nend"
-  formats "foo(\n  [\n    1,\n    2,\n  ],\n  [\n    3,\n    4,\n  ]\n)"
  formats "foo(\n  [\n    1,\n    2,\n  ],\n  [\n    3,\n    4,\n  ]\n)"
-  formats "->@foo.foo"
  formats "->@foo.foo"
-  formats "foo (1).bar"
  formats "foo (1).bar"
-  formats "macro foo=(x)\nend"
  formats "macro foo=(x)\nend"
-  formats "Hash{\n  foo => <<-EOF,\n  foo\n  EOF\n  bar => <<-BAR,\n  bar\n  BAR\n}"
  formats "Hash{\n  foo => <<-EOF,\n  foo\n  EOF\n  bar => <<-BAR,\n  bar\n  BAR\n}"
-  formats "unless a\n2\nelse\n3\nend"
  formats "unless a\n2\nelse\n3\nend"
-  formats "x  :   A?"
  formats "x  :   A?"
-  formats "1   >   2"
  formats "1   >   2"
-  formats "def   foo (  x  :  Int32 )  \n  end"
  formats "def   foo (  x  :  Int32 )  \n  end"
-  formats "module Foo\n1\n\n# foo\nend"
  formats "module Foo\n1\n\n# foo\nend"
-  formats "asm(\"a\" ::: \"f\"\n)"
  formats "asm(\"a\" ::: \"f\"\n)"
-  formats "->{\nx\n}"
  formats "->{\nx\n}"
-  formats "@[Foo]"
  formats "@[Foo]"
-  formats "case 1\nwhen \"foo\"     ; 3\nwhen \"lalalala\"; 4\nelse             5\nend"
  formats "case 1\nwhen \"foo\"     ; 3\nwhen \"lalalala\"; 4\nelse             5\nend"
-  formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\#{foo}\\v\\f\\e\""
  formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\#{foo}\\v\\f\\e\""
-  formats "foo\n.bar\n.baz"
  formats "foo\n.bar\n.baz"
-  formats "foo &.[]=(1, 2)"
  formats "foo &.[]=(1, 2)"
-  formats "    [   1,   \n   2   ,   \n   3   ]   "
  formats "    [   1,   \n   2   ,   \n   3   ]   "
-  formats "a = 1\ndef bar\nend"
  formats "a = 1\ndef bar\nend"
-  formats "@[::Foo::Bar]"
  formats "@[::Foo::Bar]"
-  formats "foo bar, \\\nbaz"
  formats "foo bar, \\\nbaz"
-  formats "page= <<-HTML\n  \#{1}foo\nHTML"
  formats "page= <<-HTML\n  \#{1}foo\nHTML"
-  formats "case\nend"
  formats "case\nend"
-  formats "def   foo(x   :  (A | B)) \n  end"
  formats "def   foo(x   :  (A | B)) \n  end"
-  formats ":>>"
  formats ":>>"
-  formats "-> { 1 }"
  formats "-> { 1 }"
-  formats ":\"foo\""
  formats ":\"foo\""
-  formats "[\n1,\n\n2]"
  formats "[\n1,\n\n2]"
-  formats "a = 1\na ||= begin\n  1\nend"
  formats "a = 1\na ||= begin\n  1\nend"
-  formats "foo  x:  1,  y:  2"
  formats "foo  x:  1,  y:  2"
-  formats "yield (1).foo"
  formats "yield (1).foo"
-  formats "foo[x: 1, &.bar]"
  formats "foo[x: 1, &.bar]"
-  formats "def /(x)\n  1\nend"
  formats "def /(x)\n  1\nend"
-  formats "next  *1"
  formats "next  *1"
-  formats "def foo(\n  foo,\n  @[MyAnn]\n  &block\n); end"
  formats "def foo(\n  foo,\n  @[MyAnn]\n  &block\n); end"
-  formats "a = 1 if 1 == 2 ||\n  3 == 4\n"
  formats "a = 1 if 1 == 2 ||\n  3 == 4\n"
-  formats "->do\nend"
  formats "->do\nend"
-  formats "x = a do\n  1 ||\n    2\nend"
  formats "x = a do\n  1 ||\n    2\nend"
-  formats "class Foo\ndef   foo (\nx ,\n y )  \n  end\nend"
  formats "class Foo\ndef   foo (\nx ,\n y )  \n  end\nend"
-  formats "foo &.[]=(  1, 2  )"
  formats "foo &.[]=(  1, 2  )"
-  formats "1.== { 3 }"
  formats "1.== { 3 }"
-  formats "1 ensure 2"
  formats "1 ensure 2"
-  formats ":*"
  formats ":*"
-  formats "def foo(a, # comment\n        *b)\nend"
  formats "def foo(a, # comment\n        *b)\nend"
-  formats "if a\nif b\nelse\n4\nend\nend"
  formats "if a\nif b\nelse\n4\nend\nend"
-  formats "x  =   uninitialized   Int32"
  formats "x  =   uninitialized   Int32"
-  formats "x, y, z = <<-FOO, <<-BAR, <<-BAZ\n  hello\n  FOO\n  world\n  BAR\n  qux\nBAZ"
  formats "x, y, z = <<-FOO, <<-BAR, <<-BAZ\n  hello\n  FOO\n  world\n  BAR\n  qux\nBAZ"
-  formats ":&-"
  formats ":&-"
-  formats "def foo(@[MyAnn] v); end"
  formats "def foo(@[MyAnn] v); end"
-  formats "alias Foo::Bar=Baz"
  formats "alias Foo::Bar=Baz"
-  formats "def   foo  :  Int32 \n  end"
  formats "def   foo  :  Int32 \n  end"
-  formats "1 == / /"
  formats "1 == / /"
-  formats "foo(\"bar\": 1, \"baz qux\": 2)"
  formats "foo(\"bar\": 1, \"baz qux\": 2)"
-  formats "\n# hello\n\n\n1"
  formats "\n# hello\n\n\n1"
-  formats "-> :: foo!"
  formats "-> :: foo!"
-  formats "\"hel\\nlo\""
  formats "\"hel\\nlo\""
-  formats "-> : {Int32, String} {}"
  formats "-> : {Int32, String} {}"
-  formats "module Foo; 1; end"
  formats "module Foo; 1; end"
-  formats "break {1, 2}, {3, 4}"
  formats "break {1, 2}, {3, 4}"
-  formats "if 1  # foo\nend"
  formats "if 1  # foo\nend"
-  formats "args.any? &.name.baz"
  formats "args.any? &.name.baz"
-  formats ""
  formats ""
-  formats "foo a , *b"
  formats "foo a , *b"
-  formats "def   foo (  x , y )  \n  end"
  formats "def   foo (  x , y )  \n  end"
-  formats "def foo(\nx, #foo\nz #bar\n)\nend"
  formats "def foo(\nx, #foo\nz #bar\n)\nend"
-  formats "alias X = ((Y, Z) ->)"
  formats "alias X = ((Y, Z) ->)"
-  formats "/foo \#{ bar }/"
  formats "/foo \#{ bar }/"
-  formats "next { 1 ,  2 }"
  formats "next { 1 ,  2 }"
-  formats "def foo\nend;def bar\nend"
  formats "def foo\nend;def bar\nend"
-  formats "`foo \#{ bar }`"
  formats "`foo \#{ bar }`"
-  formats "foo[] =1"
  formats "foo[] =1"
-  formats "def foo(@x)\n\nrescue\nend"
  formats "def foo(@x)\n\nrescue\nend"
-  formats "1\nyield\n2"
  formats "1\nyield\n2"
-  formats "foo . responds_to?( :bar )"
  formats "foo . responds_to?( :bar )"
-  formats "{ \"foo\":  1 }"
  formats "{ \"foo\":  1 }"
-  formats "{1, 2, 3}"
  formats "{1, 2, 3}"
-  formats "->foo!"
  formats "->foo!"
-  formats "macro foo\n  {% unless 1 %} 2 {% end %}\nend"
  formats "macro foo\n  {% unless 1 %} 2 {% end %}\nend"
-  formats "! 1"
  formats "! 1"
-  formats "asm(\"a\" : :: : \"volatile\")"
  formats "asm(\"a\" : :: : \"volatile\")"
-  formats "foo.bar(&.%(baz))"
  formats "foo.bar(&.%(baz))"
-  formats "foo.bar # comment\n  .baz"
  formats "foo.bar # comment\n  .baz"
-  formats "case 1\nwhen \"foo\"      then 3\nwhen \"lalalala\" then 4\nelse                 5\nend"
  formats "case 1\nwhen \"foo\"      then 3\nwhen \"lalalala\" then 4\nelse                 5\nend"
-  formats "foo (1), 2"
  formats "foo (1), 2"
-  formats "abstract  def   foo  \n  1"
  formats "abstract  def   foo  \n  1"
-  formats "private def foo\nend\nprivate def bar\nend"
  formats "private def foo\nend\nprivate def bar\nend"
-  formats "1\n.."
  formats "1\n.."
-  formats "1 # foo\n/ 1 /"
  formats "1 # foo\n/ 1 /"
-  formats "def foo # bar\n  # baz\nend"
  formats "def foo # bar\n  # baz\nend"
-  formats "class Foo\nx = 1\nend"
  formats "class Foo\nx = 1\nend"
-  formats "enum E\n  A # hello\n  B # hello;  C # hello\nend"
  formats "enum E\n  A # hello\n  B # hello;  C # hello\nend"
-  formats "[\n  a() # b\n]"
  formats "[\n  a() # b\n]"
-  formats "yield(1 , \n2)"
  formats "yield(1 , \n2)"
-  formats "Foo( Bar(  ) )"
  formats "Foo( Bar(  ) )"
-  formats "NamedTuple()"
  formats "NamedTuple()"
-  formats "-> : Int32 {}"
  formats "-> : Int32 {}"
-  formats "$0"
  formats "$0"
-  formats "\" \" * 2"
  formats "\" \" * 2"
-  formats "{% if 1 %}\n  2\n{% end %}\ndef foo\nend"
  formats "{% if 1 %}\n  2\n{% end %}\ndef foo\nend"
-  formats "if 0\n1 &&\n2 &&\n3\nend"
  formats "if 0\n1 &&\n2 &&\n3\nend"
-  formats "fun foo(x : Int32) : Int32\n  1\nend"
  formats "fun foo(x : Int32) : Int32\n  1\nend"
-  formats "select   \n when  foo \n 2 \n else \n 3 \n end"
  formats "select   \n when  foo \n 2 \n else \n 3 \n end"
-  formats "foo(\n  1, 2,\n&block)"
  formats "foo(\n  1, 2,\n&block)"
-  formats "macro foo( x  =   1, y  =  2,  &block)\nend"
  formats "macro foo( x  =   1, y  =  2,  &block)\nend"
-  formats "if 1\n  node.is_a?(T)\nend"
  formats "if 1\n  node.is_a?(T)\nend"
-  formats "{ {% begin %}1{% end %}, nil }"
  formats "{ {% begin %}1{% end %}, nil }"
-  formats "a &.a.!"
  formats "a &.a.!"
-  formats "1 // 2"
  formats "1 // 2"
-  formats "asm(\"nop\")"
  formats "asm(\"nop\")"
-  formats "def foo( & )\nend"
  formats "def foo( & )\nend"
-  formats "foo a , b ,  x:  1"
  formats "foo a , b ,  x:  1"
-  formats "{} of A => B\n{} of Foo => Bar"
  formats "{} of A => B\n{} of Foo => Bar"
-  formats "@[ Foo ]\ndef foo\nend"
  formats "@[ Foo ]\ndef foo\nend"
-  formats "def   foo (  x  :   Int32  =  1 )  \n  end"
  formats "def   foo (  x  :   Int32  =  1 )  \n  end"
-  formats "a = [\n1,\n2]"
  formats "a = [\n1,\n2]"
-  formats "alias  Foo::Bar  =   Baz"
  formats "alias  Foo::Bar  =   Baz"
-  formats "if 1\n2\nend\nif 3\nend"
  formats "if 1\n2\nend\nif 3\nend"
-  formats "foo(1, 2, {\n  foo: 1,\n  bar: 2,\n})"
  formats "foo(1, 2, {\n  foo: 1,\n  bar: 2,\n})"
-  formats "$1"
  formats "$1"
-  formats "alias Foo= Bar"
  formats "alias Foo= Bar"
-  formats "x = <<-FOO\n  hello\n  FOO\n\ndef bar\nend"
  formats "x = <<-FOO\n  hello\n  FOO\n\ndef bar\nend"
-  formats "bar do\n  call(foo <<-X\n  bar\n  X\n  )\nend"
  formats "bar do\n  call(foo <<-X\n  bar\n  X\n  )\nend"
-  formats "{\n  variables => true,\n  query     => <<-HEREDOC,\n    foo\n  HEREDOC\n}"
  formats "{\n  variables => true,\n  query     => <<-HEREDOC,\n    foo\n  HEREDOC\n}"
-  formats "->Foo.foo="
  formats "->Foo.foo="
-  formats "{% if true %}\n  # x\n  # y\n{% end %}"
  formats "{% if true %}\n  # x\n  # y\n{% end %}"
-  formats "as Foo"
  formats "as Foo"
-  formats "break {1, 2}, 3"
  formats "break {1, 2}, 3"
-  formats "foo()"
  formats "foo()"
-  formats "foo.foo1(\n  bar\n    .bar1\n    .bar2)"
  formats "foo.foo1(\n  bar\n    .bar1\n    .bar2)"
-  formats "def foo(x, *, z)\nend"
  formats "def foo(x, *, z)\nend"
-  formats "if 1;\n2;\nelse;\n3;\nend"
  formats "if 1;\n2;\nelse;\n3;\nend"
-  formats "foo.bar = \n1"
  formats "foo.bar = \n1"
-  formats "1.==(2) { 3 }"
  formats "1.==(2) { 3 }"
-  formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\\v\\f\\e\""
  formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\\v\\f\\e\""
-  formats "def foo(**z)\nend"
  formats "def foo(**z)\nend"
-  formats ":+"
  formats ":+"
-  formats "-> :: Foo . foo?"
  formats "-> :: Foo . foo?"
-  formats "\"hel\nlo\""
  formats "\"hel\nlo\""
-  formats "macro foo\n    def   bar  \n  end \n    end"
  formats "macro foo\n    def   bar  \n  end \n    end"
-  formats "@x[ 1 ]   &&=   2"
  formats "@x[ 1 ]   &&=   2"
-  formats "def foo(\n  @[MyAnn] bar\n); end"
  formats "def foo(\n  @[MyAnn] bar\n); end"
-  formats "1 if 2\n# foo\n3"
  formats "1 if 2\n# foo\n3"
-  formats "def foo(**a,)\n  1\nend"
  formats "def foo(**a,)\n  1\nend"
-  formats "begin\n  #hola\n  1\nend\n"
  formats "begin\n  #hola\n  1\nend\n"
-  formats "{x => self // 1}"
  formats "{x => self // 1}"
-  formats "def //(x)\n  1\nend"
  formats "def //(x)\n  1\nend"
-  formats "def a\n  b(\n    1, # x\n    # y\n  )\nend"
  formats "def a\n  b(\n    1, # x\n    # y\n  )\nend"
-  formats "NamedTuple(\n  a: Int32,)"
  formats "NamedTuple(\n  a: Int32,)"
-  formats "foo.responds_to? :bar\n1"
  formats "foo.responds_to? :bar\n1"
-  formats "<<-FOO\nbarfoobar\nFOO"
  formats "<<-FOO\nbarfoobar\nFOO"
-  formats "%(\n1\n)\n\n{\n    1 => 2,\n  234 => 5,\n}"
  formats "%(\n1\n)\n\n{\n    1 => 2,\n  234 => 5,\n}"
-  formats "a-1"
  formats "a-1"
-  formats "select\nwhen foo # foo\n  # bar\nelse # foo\n  # bar\nend"
  formats "select\nwhen foo # foo\n  # bar\nelse # foo\n  # bar\nend"
-  formats "case\nelse\n  1\nend"
  formats "case\nelse\n  1\nend"
-  formats "begin\n  ()\nend"
  formats "begin\n  ()\nend"
-  formats "%r(foo \#{ bar })"
  formats "%r(foo \#{ bar })"
-  formats "foo do # a\n  # b\n  bar\nend"
  formats "foo do # a\n  # b\n  bar\nend"
-  formats "def   foo(x   :  self ?) \n  end"
  formats "def   foo(x   :  self ?) \n  end"
-  formats "foo({\n  1 => 2,\n  3 => {\n    4 => 5,\n  },\n})"
  formats "foo({\n  1 => 2,\n  3 => {\n    4 => 5,\n  },\n})"
-  formats "\"1\#{\"\#{\"2\"}\"}3\#{\"4\"}5\""
  formats "\"1\#{\"\#{\"2\"}\"}3\#{\"4\"}5\""
-  formats "{% verbatim do %}{{1}} + {{2}}{% end %}"
  formats "{% verbatim do %}{{1}} + {{2}}{% end %}"
-  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar\n); end"
  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar\n); end"
-  formats "1 &&\n2"
  formats "1 &&\n2"
-  formats "foo   &.bar( 1 , 2 )"
  formats "foo   &.bar( 1 , 2 )"
-  formats "1  #foo  \n2  #bar"
  formats "1  #foo  \n2  #bar"
-  formats "lib Foo\nstruct Foo\nend\nend"
  formats "lib Foo\nstruct Foo\nend\nend"
-  formats "foo.as(T).bar"
  formats "foo.as(T).bar"
-  formats "lib Foo\n  fun foo =\n\n\n    bar(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo =\n\n\n    bar(Int32) : Int32\nend"
-  formats "foo.bar\n.baz"
  formats "foo.bar\n.baz"
-  formats "->(){}"
  formats "->(){}"
-  formats "%i(one   two  three)"
  formats "%i(one   two  three)"
-  formats "{ 1   =>   2 ,\n\n   3  =>  4 }"
  formats "{ 1   =>   2 ,\n\n   3  =>  4 }"
-  formats "lib Bar\n  enum Foo\n    A\n  end\nend"
  formats "lib Bar\n  enum Foo\n    A\n  end\nend"
-  formats "asm(\"a\" ::: \"a\"\n        : \"volatile\",\n          \"intel\")"
  formats "asm(\"a\" ::: \"a\"\n        : \"volatile\",\n          \"intel\")"
-  formats "def foo(\"bar baz\" qux)\nend"
  formats "def foo(\"bar baz\" qux)\nend"
-  formats "  <<-HTML\n   foo\n  HTML"
  formats "  <<-HTML\n   foo\n  HTML"
-  formats "foo.as? ( Int32* )"
  formats "foo.as? ( Int32* )"
-  formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n        : \"f\")"
  formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n        : \"f\")"
-  formats "true"
  formats "true"
-  formats "foo { |x| (x).a }"
  formats "foo { |x| (x).a }"
-  formats "case  1 \n when 2 ; 3 \n end"
  formats "case  1 \n when 2 ; 3 \n end"
-  formats "return {1, 2}, {3, 4}"
  formats "return {1, 2}, {3, 4}"
-  formats "foo &.bar.nil?()"
  formats "foo &.bar.nil?()"
-  formats "  <<-HTML\n    hello \n    world   \n    HTML"
  formats "  <<-HTML\n    hello \n    world   \n    HTML"
-  formats "1\n2  \n  # foo"
  formats "1\n2  \n  # foo"
-  formats "while 1 &&\n2 &&\n3\n4\nend"
  formats "while 1 &&\n2 &&\n3\n4\nend"
-  formats "if a\n2\n3\nend"
  formats "if a\n2\n3\nend"
-  formats "lib Foo\n  fun foo(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo(Int32) : Int32\nend"
-  formats "@x   ||=   1"
  formats "@x   ||=   1"
-  formats "alias A = ((B(C | D) | E) | F)"
  formats "alias A = ((B(C | D) | E) | F)"
-  formats "->\n:\nInt32\n{\n}"
  formats "->\n:\nInt32\n{\n}"
-  formats "$0.bar"
  formats "$0.bar"
-  formats "case / /\nwhen / /, /x/\n  / /\nend"
  formats "case / /\nwhen / /, /x/\n  / /\nend"
-  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n\n  @[MyAnn]  @[MyAnn]  baz,\n\n  @[MyAnn]\n\n  @[MyAnn]\n\n  biz\n); end"
  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n\n  @[MyAnn]  @[MyAnn]  baz,\n\n  @[MyAnn]\n\n  @[MyAnn]\n\n  biz\n); end"
-  formats "yield( 1 )"
  formats "yield( 1 )"
-  formats "begin\n  array[\n    0, # Zero\n  ]\nend"
  formats "begin\n  array[\n    0, # Zero\n  ]\nend"
-  formats "__LINE__"
  formats "__LINE__"
-  formats "def foo\n  case x\n  # z\n  when 1\n  end\nend"
  formats "def foo\n  case x\n  # z\n  when 1\n  end\nend"
-  formats "def foo(a,\n        **b)\nend"
  formats "def foo(a,\n        **b)\nend"
-  formats "case 1\nwhen 2\n\n#comment\nend"
  formats "case 1\nwhen 2\n\n#comment\nend"
-  formats "a(&.b.c.as C)"
  formats "a(&.b.c.as C)"
-  formats "def foo(a : T) forall T\n  #\n\nend"
  formats "def foo(a : T) forall T\n  #\n\nend"
-  formats "macro foo\n  {%1 + 2%}\\\nend"
  formats "macro foo\n  {%1 + 2%}\\\nend"
-  formats "{ {{FOO}}, nil}"
  formats "{ {{FOO}}, nil}"
-  formats "foo(\n# x\n1,\n\n# y\nz: 2,\n\n# a\nb: 3)"
  formats "foo(\n# x\n1,\n\n# y\nz: 2,\n\n# a\nb: 3)"
-  formats "a.!"
  formats "a.!"
-  formats "foo[1, &.bar] ||= 1"
  formats "foo[1, &.bar] ||= 1"
-  formats "foo.bar.baz\n.qux"
  formats "foo.bar.baz\n.qux"
-  formats "SomeLib.UppercasedFunCall"
  formats "SomeLib.UppercasedFunCall"
-  formats "case 1\nend"
  formats "case 1\nend"
-  formats "class Actor\n  macro inherited\nend\nend\n"
  formats "class Actor\n  macro inherited\nend\nend\n"
-  formats "break { 1 ,  2 }"
  formats "break { 1 ,  2 }"
-  formats "case 1\nwhen 8     then 1\nwhen 16    then 2\nwhen 256   then 3\nwhen 'a'   then 5\nwhen \"foo\" then 6\nelse            4\nend"
  formats "case 1\nwhen 8     then 1\nwhen 16    then 2\nwhen 256   then 3\nwhen 'a'   then 5\nwhen \"foo\" then 6\nelse            4\nend"
-  formats "foo(&.@bar)"
  formats "foo(&.@bar)"
-  formats "module Ton\n  macro foo\n    class {{name.id}}\n    end\n  end\nend"
  formats "module Ton\n  macro foo\n    class {{name.id}}\n    end\n  end\nend"
-  formats "foo.[] =1"
  formats "foo.[] =1"
-  formats "class Foo\n  macro foo\n    1\n  end\nend"
  formats "class Foo\n  macro foo\n    1\n  end\nend"
-  formats "a = \"\n\"\n1    # 1\n12 # 2\n"
  formats "a = \"\n\"\n1    # 1\n12 # 2\n"
-  formats "foo do;\n1; end"
  formats "foo do;\n1; end"
-  formats "asm(\"a\" :: \"d\"(e)\n)"
  formats "asm(\"a\" :: \"d\"(e)\n)"
-  formats "foo(\n  1,\n) {\n  2\n}"
  formats "foo(\n  1,\n) {\n  2\n}"
-  formats "foo do\n  bar do\n    foo <<-X\n    bar\n    X\n  end\nend"
  formats "foo do\n  bar do\n    foo <<-X\n    bar\n    X\n  end\nend"
-  formats "@[Foo(\n  foo: 1\n)]\ndef foo\nend"
  formats "@[Foo(\n  foo: 1\n)]\ndef foo\nend"
-  formats "<<-HTML\n  \#{\"foo\"}\#{1}\n  HTML"
  formats "<<-HTML\n  \#{\"foo\"}\#{1}\n  HTML"
-  formats "return( 1 )"
  formats "return( 1 )"
-  formats "def `(x)\n  1\nend"
  formats "def `(x)\n  1\nend"
-  formats "foo &.[](  1, 2  )"
  formats "foo &.[](  1, 2  )"
-  formats "%<hello>"
  formats "%<hello>"
-  formats "typeof( 1, 2, 3 )"
  formats "typeof( 1, 2, 3 )"
-  formats "->( x , y )   { x }"
  formats "->( x , y )   { x }"
-  formats "foo {;1}"
  formats "foo {;1}"
-  formats "foo.bar=(2)\n1"
  formats "foo.bar=(2)\n1"
-  formats "{%\n  unless true\n    1\n  else\n    2\n  end\n%}"
  formats "{%\n  unless true\n    1\n  else\n    2\n  end\n%}"
-  formats " _ , *_ ,\na.foo  ,a.bar  =  1  ,  2,3"
  formats " _ , *_ ,\na.foo  ,a.bar  =  1  ,  2,3"
-  formats "yield 1\n2"
  formats "yield 1\n2"
-  formats "begin\n  a\nend.b { }\nc"
  formats "begin\n  a\nend.b { }\nc"
-  formats "foo(->{\n  1 + 2\n})"
  formats "foo(->{\n  1 + 2\n})"
-  formats "1   ;\n    2"
  formats "1   ;\n    2"
-  formats "foo do\n  # bar\nend"
  formats "foo do\n  # bar\nend"
-  formats "select # some comment\nwhen bar\n  break\nend"
  formats "select # some comment\nwhen bar\n  break\nend"
-  formats "case  1 \n when 2 \n 3 \n end"
  formats "case  1 \n when 2 \n 3 \n end"
-  formats "__FILE__"
  formats "__FILE__"
-  formats "\"foo\" \\\n \"bar\""
  formats "\"foo\" \\\n \"bar\""
-  formats "{\n  query     => <<-HEREDOC,\n    foo\n  HEREDOC\n}"
  formats "{\n  query     => <<-HEREDOC,\n    foo\n  HEREDOC\n}"
-  formats "def   foo (  x )  \n  end"
  formats "def   foo (  x )  \n  end"
-  formats "def a\n  [\n    1, # x\n    # y\n  ]\nend"
  formats "def a\n  [\n    1, # x\n    # y\n  ]\nend"
-  formats "x = 1\nx    +=   1"
  formats "x = 1\nx    +=   1"
-  formats "macro foo\n  <<-FOO\n    hello  \n  FOO\nend"
  formats "macro foo\n  <<-FOO\n    hello  \n  FOO\nend"
-  formats "$? = 1"
  formats "$? = 1"
-  formats "lib Foo\ntype  Foo  =   Bar\nend"
  formats "lib Foo\ntype  Foo  =   Bar\nend"
-  formats "foo.[1]"
  formats "foo.[1]"
-  formats "def foo(**b, # comment\n        &block)\nend"
  formats "def foo(**b, # comment\n        &block)\nend"
-  formats "x  :   (A -> B)?"
  formats "x  :   (A -> B)?"
-  formats "1  ||  2"
  formats "1  ||  2"
-  formats "{ {1, 2, 3} }"
  formats "{ {1, 2, 3} }"
-  formats "def foo\n  {% for x in y %}\n    foo  +  bar\n  {% end %}\nend"
  formats "def foo\n  {% for x in y %}\n    foo  +  bar\n  {% end %}\nend"
-  formats "[1, 2, 3,  ]"
  formats "[1, 2, 3,  ]"
-  formats "def foo(\n  **a # comment\n)\n  1\nend"
  formats "def foo(\n  **a # comment\n)\n  1\nend"
-  formats "struct   Foo \n\n 1  \n\nend"
  formats "struct   Foo \n\n 1  \n\nend"
-  formats "foo &.bar do\n  1 + 2\nend"
  formats "foo &.bar do\n  1 + 2\nend"
-  formats "  [   1  ,    2  ,    3  ]  "
  formats "  [   1  ,    2  ,    3  ]  "
-  formats "foo : A(B)\nbar : C"
  formats "foo : A(B)\nbar : C"
-  formats "...\n2"
  formats "...\n2"
-  formats "macro []=(x, y)\nend"
  formats "macro []=(x, y)\nend"
-  formats " .. 2"
  formats " .. 2"
-  formats "def foo(x) # bar\n  # baz\nend"
  formats "def foo(x) # bar\n  # baz\nend"
-  formats "begin\n1\nrescue   ex   :   Int32 \n3\nend"
  formats "begin\n1\nrescue   ex   :   Int32 \n3\nend"
-  formats "foo = 1\n->foo.foo"
  formats "foo = 1\n->foo.foo"
-  formats "::Tuple()"
  formats "::Tuple()"
-  formats ":-"
  formats ":-"
-  formats "asm(\n# foo\n\"nop\"\n# bar\n)"
  formats "asm(\n# foo\n\"nop\"\n# bar\n)"
-  formats "def foo\nend\n\n\n\ndef bar\nend"
  formats "def foo\nend\n\n\n\ndef bar\nend"
-  formats "def foo : (A | B(C))\n  nil\nend"
  formats "def foo : (A | B(C))\n  nil\nend"
-  formats "def foo\n1\nrescue\n2\nend"
  formats "def foo\n1\nrescue\n2\nend"
-  formats "<<-HTML\n  \#{__FILE__}\n  HTML"
  formats "<<-HTML\n  \#{__FILE__}\n  HTML"
-  formats "1   *   2"
  formats "1   *   2"
-  formats "\"foo \#{bar}\" \\\n \"baz\""
  formats "\"foo \#{bar}\" \\\n \"baz\""
-  formats "lib Foo\nfun foo()  :  Int32\nend"
  formats "lib Foo\nfun foo()  :  Int32\nend"
-  formats "lib Foo\n  fun foo =\n    \"bar\"(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo =\n    \"bar\"(Int32) : Int32\nend"
-  formats "foo &.bar.nil?"
  formats "foo &.bar.nil?"
-  formats "->do\nx\nend"
  formats "->do\nx\nend"
-  formats "foo {;;1}"
  formats "foo {;;1}"
-  formats "a = \nif 1\n2\nend"
  formats "a = \nif 1\n2\nend"
-  formats "foo(\n  1,\n  &.foo\n)"
  formats "foo(\n  1,\n  &.foo\n)"
-  formats "# foo\na = 1 # bar"
  formats "# foo\na = 1 # bar"
-  formats "{1 => foo <<-X\nbar\nX\n}"
  formats "{1 => foo <<-X\nbar\nX\n}"
-  formats "def foo\nend\n\ndef bar\nend\n\n# foo"
  formats "def foo\nend\n\ndef bar\nend\n\n# foo"
-  formats "def foo(x)\n  case 1\n  when self // 2\n    3\n  end\nend"
  formats "def foo(x)\n  case 1\n  when self // 2\n    3\n  end\nend"
-  formats "x : {\"foo bar\": Int32}"
  formats "x : {\"foo bar\": Int32}"
-  formats "def foo=(x)\nend"
  formats "def foo=(x)\nend"
-  formats "foo &.bar.as(T)"
  formats "foo &.bar.as(T)"
-  formats "foo(bar([\n  1,\n]))"
  formats "foo(bar([\n  1,\n]))"
-  formats "1.=== do\nend"
  formats "1.=== do\nend"
-  formats "$~ = 1"
  formats "$~ = 1"
-  formats "foo do\n  {{ foo <<-X\n  bar\n  X\n  }}\nend"
  formats "foo do\n  {{ foo <<-X\n  bar\n  X\n  }}\nend"
-  formats "foo.[ 1 , 2 ]"
  formats "foo.[ 1 , 2 ]"
-  formats "foo = {1, {2,\n           3},\n       4}"
  formats "foo = {1, {2,\n           3},\n       4}"
-  formats "/foo/"
  formats "/foo/"
-  formats "foo : self? | A"
  formats "foo : self? | A"
-  formats "foo do  | x , y | \n x \n end"
  formats "foo do  | x , y | \n x \n end"
-  formats "macro foo # bar\n  baz\nend"
  formats "macro foo # bar\n  baz\nend"
-  formats "macro foo\n  {% if true %}if true{% end %}\n  {% if true %}end{% end %}\nend"
  formats "macro foo\n  {% if true %}if true{% end %}\n  {% if true %}end{% end %}\nend"
-  formats "-> : Int32 { }"
  formats "-> : Int32 { }"
-  formats "foo 1 ,  &bar"
  formats "foo 1 ,  &bar"
-  formats "foo[bar.baz]\n  .qux"
  formats "foo[bar.baz]\n  .qux"
-  formats "a = begin\n1\n2\nend"
  formats "a = begin\n1\n2\nend"
-  formats "if # some comment\n 2 # another\n 3 # final \n end # end "
  formats "if # some comment\n 2 # another\n 3 # final \n end # end "
-  formats "def foo(**z : Foo)\nend"
  formats "def foo(**z : Foo)\nend"
-  formats "{% if z %}\n  1\n{% end %}\n\ndef foo\n  z =\n    123 + # foo\n      4   # bar\n\n  1\nend"
  formats "{% if z %}\n  1\n{% end %}\n\ndef foo\n  z =\n    123 + # foo\n      4   # bar\n\n  1\nend"
-  formats "[\n  <<-EOF,\n  foo\n  EOF\n]"
  formats "[\n  <<-EOF,\n  foo\n  EOF\n]"
-  formats "unless a\nelse\n2\nend"
  formats "unless a\nelse\n2\nend"
-  formats ":^"
  formats ":^"
-  formats "@foo : Int32 # comment\n\ndef foo\nend"
  formats "@foo : Int32 # comment\n\ndef foo\nend"
-  formats "1 ||\n  # foo\n  2"
  formats "1 ||\n  # foo\n  2"
-  formats "if 1\nelse\n2\nend\n3"
  formats "if 1\nelse\n2\nend\n3"
-  formats "def foo(\n  **a\n\n  # comment\n)\n  1\nend"
  formats "def foo(\n  **a\n\n  # comment\n)\n  1\nend"
-  formats "foo &.as(T).bar"
  formats "foo &.as(T).bar"
-  formats "if a\n2; 3\nelse\n3\nend"
  formats "if a\n2; 3\nelse\n3\nend"
-  formats "foo &.[](1, 2)"
  formats "foo &.[](1, 2)"
-  formats "if 1\nfoo do  | x , y | \n x \n end\nend"
  formats "if 1\nfoo do  | x , y | \n x \n end\nend"
-  formats "if / /\nend"
  formats "if / /\nend"
-  formats "break"
  formats "break"
-  formats "[ # foo\n  1,\n]"
  formats "[ # foo\n  1,\n]"
-  formats "while 1\n2\nend"
  formats "while 1\n2\nend"
-  formats "1 + \\\n2 + \\\n3"
  formats "1 + \\\n2 + \\\n3"
-  formats "macro flags\n  {% if 1 %}\\\n 1 {% else %}\\\n {% end %}\\\nend"
  formats "macro flags\n  {% if 1 %}\\\n 1 {% else %}\\\n {% end %}\\\nend"
-  formats "foo[ 1 , 2 ]   =3"
  formats "foo[ 1 , 2 ]   =3"
-  formats "loop do\n  1\n  loop do\n    2\n  rescue\n    3\n  end\n  4\nend"
  formats "loop do\n  1\n  loop do\n    2\n  rescue\n    3\n  end\n  4\nend"
-  formats "case nil\nelse nil; nil # comment\nend"
  formats "case nil\nelse nil; nil # comment\nend"
-  formats "def %(x)\n  1\nend"
  formats "def %(x)\n  1\nend"
-  formats "while 1  # foo\nend"
  formats "while 1  # foo\nend"
-  formats "while 1 # foo\n  # bar\n  2\nend"
  formats "while 1 # foo\n  # bar\n  2\nend"
-  formats "def foo(\n  foo,\n\n  @[MyAnn]\n  &block\n); end"
  formats "def foo(\n  foo,\n\n  @[MyAnn]\n  &block\n); end"
-  formats "if 1\nbegin\n2\nensure\n3\nend\nend"
  formats "if 1\nbegin\n2\nensure\n3\nend\nend"
-  formats "alias X = (A, B) ->\nbar : C"
  formats "alias X = (A, B) ->\nbar : C"
-  formats "module Readline\n  @@completion_proc : (String -> Array(String)?) | (String -> Array(String)) | Nil\nend"
  formats "module Readline\n  @@completion_proc : (String -> Array(String)?) | (String -> Array(String)) | Nil\nend"
-  formats "call(foo <<-X\nbar\nX\n)"
  formats "call(foo <<-X\nbar\nX\n)"
-  formats "def foo(a, **b, # comment\n        &block)\nend"
  formats "def foo(a, **b, # comment\n        &block)\nend"
-  formats "# Hello\n#\n# ```\n# puts 1+2 # bye\n# 1+2 # hello\n#\n# 1+2\n# ```\n\n# ```\n# puts 1+2\n\n# ```\n# puts 1+2\n\n# Hola\n#\n#     1+2\n#     foo do\n#     3+4\n#     end\n\n# Hey\n#\n#     1+2\n#     foo do\n#     3+4\n#     end\n#\n# ```\n# 1+2\n# ```\n#\n#     1+2\n#\n# Bye\n"
  formats "# Hello\n#\n# ```\n# puts 1+2 # bye\n# 1+2 # hello\n#\n# 1+2\n# ```\n\n# ```\n# puts 1+2\n\n# ```\n# puts 1+2\n\n# Hola\n#\n#     1+2\n#     foo do\n#     3+4\n#     end\n\n# Hey\n#\n#     1+2\n#     foo do\n#     3+4\n#     end\n#\n# ```\n# 1+2\n# ```\n#\n#     1+2\n#\n# Bye\n"
-  formats "foo . is_a? ( Bar )"
  formats "foo . is_a? ( Bar )"
-  formats "1 # foo\n1234 # bar\n\n10 # bar"
  formats "1 # foo\n1234 # bar\n\n10 # bar"
-  formats "macro foo( x , y )\nend"
  formats "macro foo( x , y )\nend"
-  formats "def   foo (  bar  @select)  \n  end"
  formats "def   foo (  bar  @select)  \n  end"
-  formats "false"
  formats "false"
-  formats "next( 1 )"
  formats "next( 1 )"
-  formats "select   \n when  foo \n 2 \n when bar \n 3 \n end"
  formats "select   \n when  foo \n 2 \n when bar \n 3 \n end"
-  formats "if 1\n  foo(\n    1,\n    2 # lala\n    )\nend\n"
  formats "if 1\n  foo(\n    1,\n    2 # lala\n    )\nend\n"
-  formats "macro foo(x)\n  {% if 1 %} 2 {% end %}\nend"
  formats "macro foo(x)\n  {% if 1 %} 2 {% end %}\nend"
-  formats "foo.bar(1) # comment\n  .baz"
  formats "foo.bar(1) # comment\n  .baz"
-  formats "foo(a: 1 // 2)"
  formats "foo(a: 1 // 2)"
-  formats "if 1;\n2; end"
  formats "if 1;\n2; end"
-  formats "def foo(x)\n  case //\n  when //\n    3\n  end\nend"
  formats "def foo(x)\n  case //\n  when //\n    3\n  end\nend"
-  formats "1.<= { 3 }"
  formats "1.<= { 3 }"
-  formats "a = case 1\nwhen 2\n3\nend"
  formats "a = case 1\nwhen 2\n3\nend"
-  formats "if 1\n2 && 3\nend"
  formats "if 1\n2 && 3\nend"
-  formats "[c.x]\n  .foo"
  formats "[c.x]\n  .foo"
-  formats "def foo(&: Int32)\nend"
  formats "def foo(&: Int32)\nend"
-  formats "unless a\n2\n3\nend"
  formats "unless a\n2\n3\nend"
-  formats "->@@foo.foo="
  formats "->@@foo.foo="
-  formats "def foo\n\n1\n\nend"
  formats "def foo\n\n1\n\nend"
-  formats "-> : Int32 {}"
  formats "-> : Int32 {}"
-  formats "@x   &&=   1"
  formats "@x   &&=   1"
-  formats "<<-FOO\nfoo\n1\nFOO"
  formats "<<-FOO\nfoo\n1\nFOO"
-  formats "macro foo(\n  a,\n  *b,\n)\nend"
  formats "macro foo(\n  a,\n  *b,\n)\nend"
-  formats "{1 => 2, 3 => 4}\n{5234234 => 234098234, 7 => 8}"
  formats "{1 => 2, 3 => 4}\n{5234234 => 234098234, 7 => 8}"
-  formats "foo 1,\n2"
  formats "foo 1,\n2"
-  formats "1.as?   Int32"
  formats "1.as?   Int32"
-  formats "foo x, self // 1"
  formats "foo x, self // 1"
-  formats "@[Foo( 1, 2, foo: 3 )]"
  formats "@[Foo( 1, 2, foo: 3 )]"
-  formats "def foo(x)\n  {% if true %}\n    x = x + 2\n  {% end %}\nend"
  formats "def foo(x)\n  {% if true %}\n    x = x + 2\n  {% end %}\nend"
-  formats "if 1 # foo\n2\nend"
  formats "if 1 # foo\n2\nend"
-  formats "[] of (((Array(T))))"
  formats "[] of (((Array(T))))"
-  formats "->( x : Int32 , y )   { x }"
  formats "->( x : Int32 , y )   { x }"
-  formats "foo : StaticArray(Foo, 12)[34]"
  formats "foo : StaticArray(Foo, 12)[34]"
-  formats "{ {1}.foo, 2 }"
  formats "{ {1}.foo, 2 }"
-  formats "{\n1   =>   2 ,\n   3  =>  4 }"
  formats "{\n1   =>   2 ,\n   3  =>  4 }"
-  formats "foo(1 ||\n    # foo\n    2)"
  formats "foo(1 ||\n    # foo\n    2)"
-  formats "-> :: foo?"
  formats "-> :: foo?"
-  formats "<<-HTML\n  \#{1}x\n  y\n  z\n  HTML"
  formats "<<-HTML\n  \#{1}x\n  y\n  z\n  HTML"
-  formats "lib Foo\n  fun foo = \"bar\"(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo = \"bar\"(Int32) : Int32\nend"
-  formats "foo(1,\n  &.bar)"
  formats "foo(1,\n  &.bar)"
-  formats "foo[1, &.bar]?"
  formats "foo[1, &.bar]?"
-  formats "[\n# foo\n] of String"
  formats "[\n# foo\n] of String"
-  formats "begin\n  begin\n    a\n    # b\n  end\nend"
  formats "begin\n  begin\n    a\n    # b\n  end\nend"
-  formats "foo : (Array(String)?) | String"
  formats "foo : (Array(String)?) | String"
-  formats "foo.bar  &.baz( 1 , 2 )"
  formats "foo.bar  &.baz( 1 , 2 )"
-  formats "def foo(\n  a,\n  &block\n)\nend"
  formats "def foo(\n  a,\n  &block\n)\nend"
-  formats "foo(A |\nB |\nC)"
  formats "foo(A |\nB |\nC)"
-  formats "case  1 \n in Int32 \n 3 \n end"
  formats "case  1 \n in Int32 \n 3 \n end"
-  formats "def foo\n  1\nend\n\n# Comment\n\ndef bar\n  2\nend"
  formats "def foo\n  1\nend\n\n# Comment\n\ndef bar\n  2\nend"
-  formats "a(&.b.c.as(C))"
  formats "a(&.b.c.as(C))"
-  formats "  <<-EOF\n   1\n EOF"
  formats "  <<-EOF\n   1\n EOF"
-  formats "def foo(a : T) forall T\n  #\n\n\nend"
  formats "def foo(a : T) forall T\n  #\n\n\nend"
-  formats "foo ( )"
  formats "foo ( )"
-  formats "foo(\n  <<-HERE,\n  hello\n  HERE\n  # foo\n  foo: 1,\n)"
  formats "foo(\n  <<-HERE,\n  hello\n  HERE\n  # foo\n  foo: 1,\n)"
-  formats "(())"
  formats "(())"
-  formats "unless a\n2\nend"
  formats "unless a\n2\nend"
-  formats "foo({\n  1 => 2,\n  3 => 4,\n  5 => 6,\n})"
  formats "foo({\n  1 => 2,\n  3 => 4,\n  5 => 6,\n})"
-  formats "foo : (A) | D"
  formats "foo : (A) | D"
-  formats "lib Foo\n  fun foo = bar(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo = bar(Int32) : Int32\nend"
-  formats "begin\n  1\n  # Comment\n\n\nend"
  formats "begin\n  1\n  # Comment\n\n\nend"
-  formats "Foo::Bar(T, U?)?"
  formats "Foo::Bar(T, U?)?"
-  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n\n  @[MyAnn] baz\n); end"
  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n\n  @[MyAnn] baz\n); end"
-  formats "lib LibFoo\n  {% begin %}\n    fun foo : Int32\n  {% end %}\nend"
  formats "lib LibFoo\n  {% begin %}\n    fun foo : Int32\n  {% end %}\nend"
-  formats "module Moo ( T )\nend"
  formats "module Moo ( T )\nend"
-  formats "break  *1  ,2"
  formats "break  *1  ,2"
-  formats "1 +\n  # foo\n  2"
  formats "1 +\n  # foo\n  2"
-  formats "  (  1;  2;   3  )  "
  formats "  (  1;  2;   3  )  "
-  formats "def foo(x)\n  {% if true %}\n    \\{% if true %}\n      x = 1\n    \\{% else %}\n      x = 2\n    \\{% end %}\n    \\{% for x in y %}\n      x = 1\n    \\{% end %}\n    \\{{x}}\n    \\{% x %}\n  {% end %}\nend"
  formats "def foo(x)\n  {% if true %}\n    \\{% if true %}\n      x = 1\n    \\{% else %}\n      x = 2\n    \\{% end %}\n    \\{% for x in y %}\n      x = 1\n    \\{% end %}\n    \\{{x}}\n    \\{% x %}\n  {% end %}\nend"
-  formats "if 1 &&\n   (2 || 3)\n  1\nelse\n  2\nend"
  formats "if 1 &&\n   (2 || 3)\n  1\nelse\n  2\nend"
-  formats "{\n  \"a\" => 1, \"b\" => 2,\n  \"foo\" => 3, \"bar\" => 4,\n  \"coconio\" => 5, \"lala\" => 6,\n}\n"
  formats "{\n  \"a\" => 1, \"b\" => 2,\n  \"foo\" => 3, \"bar\" => 4,\n  \"coconio\" => 5, \"lala\" => 6,\n}\n"
-  formats "Foo"
  formats "Foo"
-  formats "break( 1 )"
  formats "break( 1 )"
-  formats "a = / /"
  formats "a = / /"
-  formats "while 1;\n2; end"
  formats "while 1;\n2; end"
-  formats "foo 1,\na: 1,\nb: 2,\nc: 3"
  formats "foo 1,\na: 1,\nb: 2,\nc: 3"
-  formats "def foo(@[AnnOne] @[AnnTwo] v); end"
  formats "def foo(@[AnnOne] @[AnnTwo] v); end"
-  formats "foo({\nbar: 1,\n})"
  formats "foo({\nbar: 1,\n})"
-  formats "{%\n  if 1\n    2\n  end\n%}"
  formats "{%\n  if 1\n    2\n  end\n%}"
-  formats "<<-HEREDOC\n  \#{foo}\n  H\#{bar}\n  HEREDOC"
  formats "<<-HEREDOC\n  \#{foo}\n  H\#{bar}\n  HEREDOC"
-  formats "- 1"
  formats "- 1"
-  formats "foo self // 1"
  formats "foo self // 1"
-  formats "asm(\"a\" : : :: \"volatile\")"
  formats "asm(\"a\" : : :: \"volatile\")"
-  formats "abstract  class Foo\nend"
  formats "abstract  class Foo\nend"
-  formats "def foo(a,\n        *b)\nend"
  formats "def foo(a,\n        *b)\nend"
-  formats "lib Foo\nfun foo( ... )  :  Int32\nend"
  formats "lib Foo\nfun foo( ... )  :  Int32\nend"
-  formats "def foo\n  a = 1; # foo\n  a = 2; # bar\nend\n"
  formats "def foo\n  a = 1; # foo\n  a = 2; # bar\nend\n"
-  formats "{ # foo\n  1 => 2,\n}"
  formats "{ # foo\n  1 => 2,\n}"
-  formats "a = 1\n;\nb = 2"
  formats "a = 1\n;\nb = 2"
-  formats "next  *1  , *2"
  formats "next  *1  , *2"
-  formats "1 \\\n+ 2"
  formats "1 \\\n+ 2"
-  formats "foo : Foo*****"
  formats "foo : Foo*****"
-  formats "begin\n1\nensure\n2\nend"
  formats "begin\n1\nensure\n2\nend"
-  formats "&- 1"
  formats "&- 1"
-  formats "macro foo\n  {% if 1 %} 2 {% else %} 3 {% end %}\nend"
  formats "macro foo\n  {% if 1 %} 2 {% else %} 3 {% end %}\nend"
-  formats "[1, 2, 3] of Foo"
  formats "[1, 2, 3] of Foo"
-  formats "case 1\nwhen 2\n#comment\nend"
  formats "case 1\nwhen 2\n#comment\nend"
-  formats "def foo\na = bar do\n1\nend\nend"
  formats "def foo\na = bar do\n1\nend\nend"
-  formats "10 / a"
  formats "10 / a"
-  formats "if a\nelse\n2\nend"
  formats "if a\nelse\n2\nend"
-  formats "def a\n  b(\n    1, # x\n    # y\n    2\n  )\nend"
  formats "def a\n  b(\n    1, # x\n    # y\n    2\n  )\nend"
-  formats "begin; 1; end"
  formats "begin; 1; end"
-  formats "+ 1"
  formats "+ 1"
-  formats "def   foo (  @select)  \n  end"
  formats "def   foo (  @select)  \n  end"
-  formats "A = 1\nFOO = 2\n\nEX = 3"
  formats "A = 1\nFOO = 2\n\nEX = 3"
-  formats "asm(\"nop\" ::: \"eax\" )"
  formats "asm(\"nop\" ::: \"eax\" )"
-  formats "def foo\n  1\n  #\nrescue\nend"
  formats "def foo\n  1\n  #\nrescue\nend"
-  formats "[\n  # foo\n  1,\n\n  # bar\n  2,\n]"
  formats "[\n  # foo\n  1,\n\n  # bar\n  2,\n]"
-  formats "def execute\n  begin\n    1\n  ensure\n    2\n  end\n  3\nend"
  formats "def execute\n  begin\n    1\n  ensure\n    2\n  end\n  3\nend"
-  formats "foo : self?"
  formats "foo : self?"
-  formats "\"\#{foo = 1\n}\""
  formats "\"\#{foo = 1\n}\""
-  formats "foo.% bar"
  formats "foo.% bar"
-  formats "def foo(x) : Int32 # bar\n  # baz\nend"
  formats "def foo(x) : Int32 # bar\n  # baz\nend"
-  formats "def foo\n  1\n  # Comment\n\n\nend"
  formats "def foo\n  1\n  # Comment\n\n\nend"
-  formats "a = foo(bar(\n  1,\n  2,\n))"
  formats "a = foo(bar(\n  1,\n  2,\n))"
-  formats "break  1"
  formats "break  1"
-  formats "{%\n  if true\n    1\n  else\n    2\n  end\n%}"
  formats "{%\n  if true\n    1\n  else\n    2\n  end\n%}"
-  formats "<<-HTML\n  \#{\"fo\#{\"o\"}\"}\n  HTML"
  formats "<<-HTML\n  \#{\"fo\#{\"o\"}\"}\n  HTML"
-  formats "if 1\n[   1  ,    2  ,    3  ]\nend"
  formats "if 1\n[   1  ,    2  ,    3  ]\nend"
-  formats "lib Foo\n  fun foo =\n    \"bar\"(Int32) : Int32\n  # comment\nend"
  formats "lib Foo\n  fun foo =\n    \"bar\"(Int32) : Int32\n  # comment\nend"
-  formats "{\n         1 => 2,\n        10 => 30,\n        30 => 40,\n  \"foobar\" => 50,\n  \"coco\"   => 60,\n}"
  formats "{\n         1 => 2,\n        10 => 30,\n        30 => 40,\n  \"foobar\" => 50,\n  \"coco\"   => 60,\n}"
-  formats "::NamedTuple()"
  formats "::NamedTuple()"
-  formats "def foo(a : T) forall T \n  #\nend"
  formats "def foo(a : T) forall T \n  #\nend"
-  formats "   1"
  formats "   1"
-  formats "while / /\nend"
  formats "while / /\nend"
-  formats "foo 1, a: 1,\nb: 2,\nc: 3"
  formats "foo 1, a: 1,\nb: 2,\nc: 3"
-  formats "foo(\n  1,\n  # 2,\n  3,\n)"
  formats "foo(\n  1,\n  # 2,\n  3,\n)"
-  formats "1   +   2"
  formats "1   +   2"
-  formats "\n# hello\n\n1"
  formats "\n# hello\n\n1"
-  formats "foo(1 &- 2)"
  formats "foo(1 &- 2)"
-  formats "->{}"
  formats "->{}"
-  formats "foo &.nil?()"
  formats "foo &.nil?()"
-  formats "break  1  , *2"
  formats "break  1  , *2"
-  formats "[\n  a(),\n]"
  formats "[\n  a(),\n]"
-  formats "include  Foo"
  formats "include  Foo"
-  formats "b &.[c].d"
  formats "b &.[c].d"
-  formats "class Foo  # foo\nend"
  formats "class Foo  # foo\nend"
-  formats "foo(\"b\#{1}\" \\\n\"baz\")"
  formats "foo(\"b\#{1}\" \\\n\"baz\")"
-  formats "asm(\"nop\" : : )"
  formats "asm(\"nop\" : : )"
-  formats "lib Bar\n  enum Foo\n    A = 1\n  end\nend"
  formats "lib Bar\n  enum Foo\n    A = 1\n  end\nend"
-  formats "# ```text\n#  1  +  2\n# ```"
  formats "# ```text\n#  1  +  2\n# ```"
-  formats "foo . bar  =  1"
  formats "foo . bar  =  1"
-  formats "lib Foo\n  fun Foo = Bar\nend"
  formats "lib Foo\n  fun Foo = Bar\nend"
-  formats "foo . bar( x , y )"
  formats "foo . bar( x , y )"
-  formats "lib Foo\nfun foo\nend"
  formats "lib Foo\nfun foo\nend"
-  formats "def   foo (  x , y , )  \n  end"
  formats "def   foo (  x , y , )  \n  end"
-  formats "[1,\n2,\n3]"
  formats "[1,\n2,\n3]"
-  formats "foo do\n  [foo <<-X\n  bar\n  X\n  ]\nend"
  formats "foo do\n  [foo <<-X\n  bar\n  X\n  ]\nend"
-  formats "alias Foo::Bar =Baz"
  formats "alias Foo::Bar =Baz"
-  formats "10/a"
  formats "10/a"
-  formats "macro foo\n  def bar\n    {{\n      1 + 2\n    }}\n  end\nend"
  formats "macro foo\n  def bar\n    {{\n      1 + 2\n    }}\n  end\nend"
-  formats "def foo( x , & block  :   ->)\nend"
  formats "def foo( x , & block  :   ->)\nend"
-  formats "def foo(x : (self)?)\nend"
  formats "def foo(x : (self)?)\nend"
-  formats "foo(a: //)"
  formats "foo(a: //)"
-  formats "Foo(\"bar\": Int32, \"baz qux\": Float64)"
  formats "Foo(\"bar\": Int32, \"baz qux\": Float64)"
-  formats "if 1\ncase 1\nwhen 2\n3\nend\nend"
  formats "if 1\ncase 1\nwhen 2\n3\nend\nend"
-  formats "def foo(@[AnnOne]   @[AnnTwo]   &  ); end"
  formats "def foo(@[AnnOne]   @[AnnTwo]   &  ); end"
-  formats "->{1}"
  formats "->{1}"
-  formats "begin\n1\nrescue   Int32 \n3\nend"
  formats "begin\n1\nrescue   Int32 \n3\nend"
-  formats "def foo\n  1\n  #\n\n\nrescue\nend"
  formats "def foo\n  1\n  #\n\n\nrescue\nend"
-  adds `&` to yielding methods that don't have a block parameter (#8764)
-    formats "def foo\n  yield\nend"
    formats "def foo\n  yield\nend"
-    formats "def foo(a, **b)\n  yield\nend"
    formats "def foo(a, **b)\n  yield\nend"
-    formats "def foo(x,\ny,)\n  yield\nend"
    formats "def foo(x,\ny,)\n  yield\nend"
-    formats "def foo(\nx)\n  yield\nend"
    formats "def foo(\nx)\n  yield\nend"
-    formats "def foo(\nx,\n)\n  yield\nend"
    formats "def foo(\nx,\n)\n  yield\nend"
-    formats "def foo(\nx, y)\n  yield\nend"
    formats "def foo(\nx, y)\n  yield\nend"
-    formats "def foo(\nx,\ny)\n  yield\nend"
    formats "def foo(\nx,\ny)\n  yield\nend"
-    formats "def foo(x ,)\n  yield\nend"
    formats "def foo(x ,)\n  yield\nend"
-    formats "def foo # bar\n  yield\nend"
    formats "def foo # bar\n  yield\nend"
-    formats "def foo()\n  yield\nend"
    formats "def foo()\n  yield\nend"
-    formats "def foo(\n)\n  yield\nend"
    formats "def foo(\n)\n  yield\nend"
-    formats "def foo(x)\n  yield\nend"
    formats "def foo(x)\n  yield\nend"
-    formats "macro f\n  yield\n  {{ yield }}\nend"
    formats "macro f\n  yield\n  {{ yield }}\nend"
-    formats "def foo(x\n)\n  yield\nend"
    formats "def foo(x\n)\n  yield\nend"
-    formats "def foo(x,\ny)\n  yield\nend"
    formats "def foo(x,\ny)\n  yield\nend"
-    formats "def foo(x,\n)\n  yield\nend"
    formats "def foo(x,\n)\n  yield\nend"
-  formats "module Foo;end"
  formats "module Foo;end"
-  formats "return  *1  , *2"
  formats "return  *1  , *2"
-  formats "{\n    1 => 2, 3 => 4,\n  567 => 8910,\n}"
  formats "{\n    1 => 2, 3 => 4,\n  567 => 8910,\n}"
-  formats "a &.b.c.as C"
  formats "a &.b.c.as C"
-  formats "'\\n'"
  formats "'\\n'"
-  formats "if 1\n  return foo(\n    1,\n    2,\n  )\nend"
  formats "if 1\n  return foo(\n    1,\n    2,\n  )\nend"
-  formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1),\n\"c\"(2) )"
  formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1),\n\"c\"(2) )"
-  formats "a = if 1\n2\nelse\n3\nend"
  formats "a = if 1\n2\nelse\n3\nend"
-  formats " * a = 1 "
  formats " * a = 1 "
-  formats "macro foo\n  %foo{x,y}\nend"
  formats "macro foo\n  %foo{x,y}\nend"
-  formats "class   Foo \n\n 1  \n\nend"
  formats "class   Foo \n\n 1  \n\nend"
-  formats "%{hello}"
  formats "%{hello}"
-  formats "lib Foo\n  fun foo = bar(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo = bar(Int32) : Int32\nend"
-  formats "a = b = 1\na, b =\n  b, a"
  formats "a = b = 1\na, b =\n  b, a"
-  formats "enum Foo : Int32\nA = 1\ndef foo\n1\nend\nend"
  formats "enum Foo : Int32\nA = 1\ndef foo\n1\nend\nend"
-  formats "foo(\n 1, # hola\n2, # chau\n )"
  formats "foo(\n 1, # hola\n2, # chau\n )"
-  formats "foo(1 &+ \n2)"
  formats "foo(1 &+ \n2)"
-  formats "{ foo:  1 }"
  formats "{ foo:  1 }"
-  formats "class Bar\nprotected def foo(x)\na=b(c)\nend\nend"
  formats "class Bar\nprotected def foo(x)\na=b(c)\nend\nend"
-  formats "foo(bar(\n  1,\n  baz(\n    2,\n    3,\n  )\n))"
  formats "foo(bar(\n  1,\n  baz(\n    2,\n    3,\n  )\n))"
-  formats "x  :   Int32  =   1"
  formats "x  :   Int32  =   1"
-  formats "def   foo (  x  :  Foo.class )  \n  end"
  formats "def   foo (  x  :  Foo.class )  \n  end"
-  formats "asm(\n\"nop\" : \"a\"(0), \"b\"(1) )"
  formats "asm(\n\"nop\" : \"a\"(0), \"b\"(1) )"
-  formats "1 if nil?\na.b + c"
  formats "1 if nil?\na.b + c"
-  formats "if a\n2\nelse\nend"
  formats "if a\n2\nelse\nend"
-  formats "10 ** a"
  formats "10 ** a"
-  formats "enum Foo; A = 1; end"
  formats "enum Foo; A = 1; end"
-  formats "asm(\"a\" : \"b\"(c) : \"d\"(e) :: \"volatile\")"
  formats "asm(\"a\" : \"b\"(c) : \"d\"(e) :: \"volatile\")"
-  formats "1#foo"
  formats "1#foo"
-  formats "foo([\n  1,\n  2,\n  3,\n])"
  formats "foo([\n  1,\n  2,\n  3,\n])"
-  formats "a, b = \nif 1\n2\nend"
  formats "a, b = \nif 1\n2\nend"
-  formats "if 1\n  foo(\n    bar\n    # comment\n  )\nend"
  formats "if 1\n  foo(\n    bar\n    # comment\n  )\nend"
-  formats "class Foo\n  def foo\n    # nothing\n  end\nend"
  formats "class Foo\n  def foo\n    # nothing\n  end\nend"
-  formats "Foo(  )"
  formats "Foo(  )"
-  formats "begin\n  query = <<-HEREDOC\n    foo\n  HEREDOC\nend"
  formats "begin\n  query = <<-HEREDOC\n    foo\n  HEREDOC\nend"
-  formats "->Foo.foo?"
  formats "->Foo.foo?"
-  formats "def foo(\n  **a\n  # comment\n)\n  1\nend"
  formats "def foo(\n  **a\n  # comment\n)\n  1\nend"
-  formats "foo(1 + \n2)"
  formats "foo(1 + \n2)"
-  formats "yield 1 , \n2"
  formats "yield 1 , \n2"
-  formats "x 1, \\\n  2"
  formats "x 1, \\\n  2"
-  formats "->Foo.foo!"
  formats "->Foo.foo!"
-  formats ":&*"
  formats ":&*"
-  formats "foo(<<-X,\na\nX\n  1)"
  formats "foo(<<-X,\na\nX\n  1)"
-  formats "coco.lala\nfoo\n  .bar"
  formats "coco.lala\nfoo\n  .bar"
-  formats "if 1\n  ((1) + 2)\nend"
  formats "if 1\n  ((1) + 2)\nend"
-  formats "unless a\nunless b\nelse\n4\nend\nend"
  formats "unless a\nunless b\nelse\n4\nend\nend"
-  formats "NamedTuple(a: Int32,)"
  formats "NamedTuple(a: Int32,)"
-  formats "macro foo\n  {{ 1 + 2 }}\nend"
  formats "macro foo\n  {{ 1 + 2 }}\nend"
-  formats "%[hello]"
  formats "%[hello]"
-  formats "Union(Foo::Bar?, Baz?, Qux(T, U?))"
  formats "Union(Foo::Bar?, Baz?, Qux(T, U?))"
-  formats "foo([\n  1, 2,\n  3, 4,\n])"
  formats "foo([\n  1, 2,\n  3, 4,\n])"
-  formats "{% begin %}\n  \"\n    foo\"\n{% end %}"
  formats "{% begin %}\n  \"\n    foo\"\n{% end %}"
-  formats "\"foo\#{\"bar\"} Baz \#{\"qux\"} \""
  formats "\"foo\#{\"bar\"} Baz \#{\"qux\"} \""
-  formats "<<-HTML\n  \#{\"foo\"}\n  HTML"
  formats "<<-HTML\n  \#{\"foo\"}\n  HTML"
-  formats "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2) )"
  formats "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2) )"
-  formats "<<-FOO\n1\nFOO\n\n{\n   1 => 2,\n  10 => 3,\n}"
  formats "<<-FOO\n1\nFOO\n\n{\n   1 => 2,\n  10 => 3,\n}"
-  formats "def   foo  \n  end"
  formats "def   foo  \n  end"
-  formats "{ # foo\n  1,\n}"
  formats "{ # foo\n  1,\n}"
-  formats "foo &.as?(T).bar"
  formats "foo &.as?(T).bar"
-  formats "foo[x: 1, &.bar] = 1"
  formats "foo[x: 1, &.bar] = 1"
-  formats "def foo(a, &@b)\nend"
  formats "def foo(a, &@b)\nend"
-  formats "foo.as?   Int32*"
  formats "foo.as?   Int32*"
-  formats "foo.[ 1 , 2 ]   =3"
  formats "foo.[ 1 , 2 ]   =3"
-  formats "1.=== { 3 }"
  formats "1.=== { 3 }"
-  formats "nil"
  formats "nil"
-  formats "  ((1) + 2)"
  formats "  ((1) + 2)"
-  formats "module Foo ( U, *T ); 1; end"
  formats "module Foo ( U, *T ); 1; end"
-  formats "if 1\n2  # foo\nend"
  formats "if 1\n2  # foo\nend"
-  formats "next( 1 , 2 )"
  formats "next( 1 , 2 )"
-  formats "$1?"
  formats "$1?"
-  formats "a = 1 +  #    foo\n2"
  formats "a = 1 +  #    foo\n2"
-  formats "def a\n  b(\n    1, # x\n    # y\n    a: 1, # x\n    # y\n    b: 2 # z\n  )\nend"
  formats "def a\n  b(\n    1, # x\n    # y\n    a: 1, # x\n    # y\n    b: 2 # z\n  )\nend"
-  formats "1.[]=(2) { 3 }"
  formats "1.[]=(2) { 3 }"
-  formats "foo : (String -> Array(String)?) | (String -> Array(String)) | Nil"
  formats "foo : (String -> Array(String)?) | (String -> Array(String)) | Nil"
-  formats "{ 1   =>   2 ,   3  =>  4 }"
  formats "{ 1   =>   2 ,   3  =>  4 }"
-  formats "def foo(x)\n  case self // x\n  when 2\n    3\n  end\nend"
  formats "def foo(x)\n  case self // x\n  when 2\n    3\n  end\nend"
-  formats "macro foo\n  {% for x in y %}\\ 2 {% end %}\\\nend"
  formats "macro foo\n  {% for x in y %}\\ 2 {% end %}\\\nend"
-  formats "x\n# foo\n\n# bar"
  formats "x\n# foo\n\n# bar"
-  formats "1\n\n2"
  formats "1\n\n2"
-  formats "{ %() }"
  formats "{ %() }"
-  formats "1 + \\\n2"
  formats "1 + \\\n2"
-  formats "macro foo\n  %foo{x.id+2}\nend"
  formats "macro foo\n  %foo{x.id+2}\nend"
-  formats "if 1 &&\n2 &&\n3\n4\nend"
  formats "if 1 &&\n2 &&\n3\n4\nend"
-  formats "foo(1, ) { }"
  formats "foo(1, ) { }"
-  formats "foo(1, / /)"
  formats "foo(1, / /)"
-  formats "a=1"
  formats "a=1"
-  formats "def foo : self | Nil\n  nil\nend"
  formats "def foo : self | Nil\n  nil\nend"
-  formats "%(hello)"
  formats "%(hello)"
-  formats "foo &.[]?"
  formats "foo &.[]?"
-  formats "class Foo\n macro foo\n    1  +  2 \n    end\n end"
  formats "class Foo\n macro foo\n    1  +  2 \n    end\n end"
-  formats "a &.b.as(C)"
  formats "a &.b.as(C)"
-  formats "\"\#{\"foo\"}\""
  formats "\"\#{\"foo\"}\""
-  formats "alias A = ({A, (B)})"
  formats "alias A = ({A, (B)})"
-  formats "foo({% verbatim do %}{{1}} + {{2}}{% end %})"
  formats "foo({% verbatim do %}{{1}} + {{2}}{% end %})"
-  formats "foo.[] = 1"
  formats "foo.[] = 1"
-  formats "foo = 1\n->foo.bar(Int32*)"
  formats "foo = 1\n->foo.bar(Int32*)"
-  formats "fun foo(\n  x : Int32,\n  ...\n) : Int32\n  1\nend"
  formats "fun foo(\n  x : Int32,\n  ...\n) : Int32\n  1\nend"
-  formats "def foo\n  1\n  2\nrescue IO\n  1\nend"
  formats "def foo\n  1\n  2\nrescue IO\n  1\nend"
-  formats "$?.bar"
  formats "$?.bar"
-  formats "def foo(x)\n  {% if true %}\n    # comment\n    Foo = 1\n    B   = 2\n  {% end %}\nend"
  formats "def foo(x)\n  {% if true %}\n    # comment\n    Foo = 1\n    B   = 2\n  {% end %}\nend"
-  formats "Set{ # foo\n  1,\n}"
  formats "Set{ # foo\n  1,\n}"
-  formats "1.==() { 3 }"
  formats "1.==() { 3 }"
-  formats "  case 1\n  when 2\n    3\n  else #:newline, :eof\n    1 if 2\n    return 3\n  end\n"
  formats "  case 1\n  when 2\n    3\n  else #:newline, :eof\n    1 if 2\n    return 3\n  end\n"
-  formats "1 +\n  # foo\n  2"
  formats "1 +\n  # foo\n  2"
-  formats "{ 1   =>   2 }"
  formats "{ 1   =>   2 }"
-  formats "->{\n  # first comment\n  puts \"hi\"\n  # second comment\n}"
  formats "->{\n  # first comment\n  puts \"hi\"\n  # second comment\n}"
-  formats "foo(\n  1,\n  # 2,\n  # 3,\n)"
  formats "foo(\n  1,\n  # 2,\n  # 3,\n)"
-  formats "->(x : Int32) { }"
  formats "->(x : Int32) { }"
-  formats "foo . responds_to? :bar"
  formats "foo . responds_to? :bar"
-  formats "foo &.[]?(1, 2)"
  formats "foo &.[]?(1, 2)"
-  formats "a = if 1\n2\nelsif 3\n4\nend"
  formats "a = if 1\n2\nelsif 3\n4\nend"
-  formats "1 && (\n  2 || 3\n)"
  formats "1 && (\n  2 || 3\n)"
-  formats "yield  *1"
  formats "yield  *1"
-  formats "yield( *1  , *2 )"
  formats "yield( *1  , *2 )"
-  formats "0i64"
  formats "0i64"
-  formats "offsetof( String, @length )"
  formats "offsetof( String, @length )"
-  formats "Foo(  * T, { * A  ,*\n  B } )"
  formats "Foo(  * T, { * A  ,*\n  B } )"
-  formats "a = foo(bar(baz3 do\nend))"
  formats "a = foo(bar(baz3 do\nend))"
-  formats "x : {A, B, }"
  formats "x : {A, B, }"
-  formats "macro foo\n  \\{\nend"
  formats "macro foo\n  \\{\nend"
-  formats "  macro foo\n  end\n\n  :+"
  formats "  macro foo\n  end\n\n  :+"
-  formats "foo.as ( Int32* )"
  formats "foo.as ( Int32* )"
-  formats "def foo(\n  @[MyAnn]\n  bar\n); end"
  formats "def foo(\n  @[MyAnn]\n  bar\n); end"
-  formats "instance_alignof( Int32 )"
  formats "instance_alignof( Int32 )"
-  formats "alias A = (   A  |  B   )"
  formats "alias A = (   A  |  B   )"
-  formats "def foo : A(B)\n  nil\nend"
  formats "def foo : A(B)\n  nil\nend"
-  formats "foo(\n  <<-HERE,\n  hello\n  HERE\n  foo: 1,\n)"
  formats "foo(\n  <<-HERE,\n  hello\n  HERE\n  foo: 1,\n)"
-  formats "begin\n  1 + \\\n    2\n  3\nend"
  formats "begin\n  1 + \\\n    2\n  3\nend"
-  formats "x  :   (A -> )"
  formats "x  :   (A -> )"
-  formats "asm(\"nop\" :: )"
  formats "asm(\"nop\" :: )"
-  formats "bla.select(&.all?{ |x| x } )"
  formats "bla.select(&.all?{ |x| x } )"
-  formats "macro foo()\n  {% if 1 %} 2 {% end %}\nend"
  formats "macro foo()\n  {% if 1 %} 2 {% end %}\nend"
-  formats "foo = 1\n->foo.[](Int32)"
  formats "foo = 1\n->foo.[](Int32)"
-  formats "class Foo\n@x  :  Int32\nend"
  formats "class Foo\n@x  :  Int32\nend"
-  formats "a = while 1\n2\nend"
  formats "a = while 1\n2\nend"
-  formats "def foo(\n  **a\n)\n  1\nend"
  formats "def foo(\n  **a\n)\n  1\nend"
-  formats "foo 1, a: 1,\nb: 2,\nc: 3,\n&block"
  formats "foo 1, a: 1,\nb: 2,\nc: 3,\n&block"
-  formats "+ a + d"
  formats "+ a + d"
-  formats "\n# hello\n1"
  formats "\n# hello\n1"
-  formats "asm(\"nop\" ::: \"eax\" ,  \"ebx\" :   \"volatile\"  ,  \"alignstack\" )"
  formats "asm(\"nop\" ::: \"eax\" ,  \"ebx\" :   \"volatile\"  ,  \"alignstack\" )"
-  formats "def   foo (  x  :  self )  \n  end"
  formats "def   foo (  x  :  self )  \n  end"
-  formats "lib Foo\n  fun foo =\n    bar : Void\nend"
  formats "lib Foo\n  fun foo =\n    bar : Void\nend"
-  formats "class X; annotation  FooAnnotation  ;  end ; end"
  formats "class X; annotation  FooAnnotation  ;  end ; end"
-  formats "lib Foo::Bar\nend"
  formats "lib Foo::Bar\nend"
-  formats "String???"
  formats "String???"
-  formats "macro foo(x, *, z)\nend"
  formats "macro foo(x, *, z)\nend"
-  formats "# Hello\n#\n# ```crystal\n#   1\n# ```\n# Bye"
  formats "# Hello\n#\n# ```crystal\n#   1\n# ```\n# Bye"
-  formats "def   foo (  x , y ,\n)  \n  end"
  formats "def   foo (  x , y ,\n)  \n  end"
-  formats "a = if 1\n2\n3\nend"
  formats "a = if 1\n2\n3\nend"
-  formats "macro foo\nend"
  formats "macro foo\nend"
-  formats "def foo(@[MyAnn] &block); end"
  formats "def foo(@[MyAnn] &block); end"
-  formats "def foo(x : X)  forall   X ,   Y; end"
  formats "def foo(x : X)  forall   X ,   Y; end"
-  formats "1 \\\nensure 2"
  formats "1 \\\nensure 2"
-  formats "String?"
  formats "String?"
-  formats "foo : (A -> B)\nbar : C"
  formats "foo : (A -> B)\nbar : C"
-  formats "a[1] , b[2] = 1  ,  2"
  formats "a[1] , b[2] = 1  ,  2"
-  formats "macro foo\n  1  \n  {{  \n    42  \n  }}  \n  2  \nend"
  formats "macro foo\n  1  \n  {{  \n    42  \n  }}  \n  2  \nend"
-  formats "def foo\nselect   \n when  foo \n 2 \n else \n 3 \nend\nend"
  formats "def foo\nselect   \n when  foo \n 2 \n else \n 3 \nend\nend"
-  formats "require   \"foo\""
  formats "require   \"foo\""
-  formats "1.<= do\nend"
  formats "1.<= do\nend"
-  formats "def foo\n1\nend"
  formats "def foo\n1\nend"
-  formats "foo . is_a? Bar"
  formats "foo . is_a? Bar"
-  formats "0_u64"
  formats "0_u64"
-  formats "foo(out x)"
  formats "foo(out x)"
-  formats "alias  Foo  =   Bar"
  formats "alias  Foo  =   Bar"
-  formats "class X\n annotation  FooAnnotation  \n  end \n end"
  formats "class X\n annotation  FooAnnotation  \n  end \n end"
-  formats "foo . bar"
  formats "foo . bar"
-  formats "0u64"
  formats "0u64"
-  formats "[1, 2,\n  3, 4]\n"
  formats "[1, 2,\n  3, 4]\n"
-  formats "1.!= { 3 }"
  formats "1.!= { 3 }"
-  formats "\"\" + <<-END\n  bar\n  END"
  formats "\"\" + <<-END\n  bar\n  END"
-  formats "foo ((1) ? 2 : 3)"
  formats "foo ((1) ? 2 : 3)"
-  formats "def foo(x)\n  self // x\nend"
  formats "def foo(x)\n  self // x\nend"
-  formats "asm(\"nop\"\n: \"a\"(0) )"
  formats "asm(\"nop\"\n: \"a\"(0) )"
-  formats "->@foo.foo?"
  formats "->@foo.foo?"
-  formats "def foo(a, **b : Int32)\nend"
  formats "def foo(a, **b : Int32)\nend"
-  formats "x.is_a? T\n3\n"
  formats "x.is_a? T\n3\n"
-  formats "{% if z %}\n  class   Foo\n  end\n{% end %}"
  formats "{% if z %}\n  class   Foo\n  end\n{% end %}"
-  formats "class Foo\n1\n\n# foo\nend"
  formats "class Foo\n1\n\n# foo\nend"
-  formats "break { {1, 2}, {3, 4} }, 5"
  formats "break { {1, 2}, {3, 4} }, 5"
-  formats "foo.bar += \n1"
  formats "foo.bar += \n1"
-  formats "{\n  variables => true,\n  query     => <<-HEREDOC,\n    foo\n  HEREDOC\n  foo => true,\n}"
  formats "{\n  variables => true,\n  query     => <<-HEREDOC,\n    foo\n  HEREDOC\n  foo => true,\n}"
-  formats "10//a"
  formats "10//a"
-  formats "  <<-HTML\n   \#{1}\n  HTML"
  formats "  <<-HTML\n   \#{1}\n  HTML"
-  formats "asm(\"nop\" ::: \"eax\" ,  \"ebx\" )"
  formats "asm(\"nop\" ::: \"eax\" ,  \"ebx\" )"
-  formats "Foo:: Bar"
  formats "Foo:: Bar"
-  formats "1   ;    2"
  formats "1   ;    2"
-  formats "foo { | a, ( b , c, ), | a + b + c }"
  formats "foo { | a, ( b , c, ), | a + b + c }"
-  formats "foo(1,\n2,\n)"
  formats "foo(1,\n2,\n)"
-  formats "-> do\nend"
  formats "-> do\nend"
-  formats "struct Foo(T)\n# bar\n1\nend"
  formats "struct Foo(T)\n# bar\n1\nend"
-  formats "unless a\n2; 3\nelse\n3\nend"
  formats "unless a\n2; 3\nelse\n3\nend"
-  formats "foo bar # comment\n\n# doc\ndef baz; end"
  formats "foo bar # comment\n\n# doc\ndef baz; end"
-  formats "break { {1, 2}, {3, 4} }"
  formats "break { {1, 2}, {3, 4} }"
-  formats "a &.!"
  formats "a &.!"
-  formats "foo.@bar"
  formats "foo.@bar"
-  formats "def   foo (  @@select)  \n  end"
  formats "def   foo (  @@select)  \n  end"
-  formats "1\n2\n# foo"
  formats "1\n2\n# foo"
-  formats "alias A = (B(C, (C | D)) | E)"
  formats "alias A = (B(C, (C | D)) | E)"
-  formats "{% if flag?(:freebsd) %}\n  1 + 2\n{% end %}\n\ncase x\nwhen 1234 then 1\nelse           x\nend"
  formats "{% if flag?(:freebsd) %}\n  1 + 2\n{% end %}\n\ncase x\nwhen 1234 then 1\nelse           x\nend"
-  formats "asm(\"nop\" : \"a\"(0), \"b\"(1) )"
  formats "asm(\"nop\" : \"a\"(0), \"b\"(1) )"
-  formats "Set { 1 , 2 }"
  formats "Set { 1 , 2 }"
-  formats "ary.size = (1).to_i"
  formats "ary.size = (1).to_i"
-  formats "module   Moo \n\n 1  \n\nend"
  formats "module   Moo \n\n 1  \n\nend"
-  formats "1_234"
  formats "1_234"
-  formats "foo(1, # foo\n  &.bar)"
  formats "foo(1, # foo\n  &.bar)"
-  formats "@x[ 1 ]   +=   2"
  formats "@x[ 1 ]   +=   2"
-  gives proper line number in syntax error inside macro
  gives proper line number in syntax error inside macro
-  formats "alias A = (B) -> C"
  formats "alias A = (B) -> C"
-  formats "foo.as   Int32*"
  formats "foo.as   Int32*"
-  formats "alias Foo=\nBar"
  formats "alias Foo=\nBar"
-  formats "@[Foo()]"
  formats "@[Foo()]"
-  formats "foo { | a, ( b , c ) | a + b + c }"
  formats "foo { | a, ( b , c ) | a + b + c }"
-  formats "foo.bar. as   Int32"
  formats "foo.bar. as   Int32"
-  formats "::foo(1, 2)"
  formats "::foo(1, 2)"
-  formats "if 1\nelse\n2  # foo\nend"
  formats "if 1\nelse\n2  # foo\nend"
-  formats "def   foo (  @x)  \n  end"
  formats "def   foo (  @x)  \n  end"
-  formats "enum Foo\n  A;   B;   C\nend\n"
  formats "enum Foo\n  A;   B;   C\nend\n"
-  formats "is_a? Foo"
  formats "is_a? Foo"
-  formats "<<-HTML\n  hello \n  HTML"
  formats "<<-HTML\n  hello \n  HTML"
-  formats "\"hello\""
  formats "\"hello\""
-  formats "foo\n  .foo1(bar\n    .bar1\n    .bar2)"
  formats "foo\n  .foo1(bar\n    .bar1\n    .bar2)"
-  formats "\"1\#{\"4\#{\"\#{\"2\"}\"}3\"}3\#{__DIR__}4\#{5}6\""
  formats "\"1\#{\"4\#{\"\#{\"2\"}\"}3\"}3\#{__DIR__}4\#{5}6\""
-  formats "1.>= do\nend"
  formats "1.>= do\nend"
-  formats "class Foo ( T )\nend"
  formats "class Foo ( T )\nend"
-  formats ":&+"
  formats ":&+"
-  formats "return"
  formats "return"
-  formats "foo(\n  1, 2, &block)"
  formats "foo(\n  1, 2, &block)"
-  formats "def foo\n1\nensure\n2\nend"
  formats "def foo\n1\nensure\n2\nend"
-  formats "bar = foo(->do\n  1 + 2\nend)"
  formats "bar = foo(->do\n  1 + 2\nend)"
-  formats "select\nwhen foo\n  # foo\n  # bar\nelse\n  # foo\n  # bar\nend"
  formats "select\nwhen foo\n  # foo\n  # bar\nelse\n  # foo\n  # bar\nend"
-  formats "-> { }"
  formats "-> { }"
-  formats "->() do x end"
  formats "->() do x end"
-  formats "def foo : (A, B) ->\n  nil\nend"
  formats "def foo : (A, B) ->\n  nil\nend"
-  formats "#### ###"
  formats "#### ###"
-  formats "1+2*3"
  formats "1+2*3"
-  formats "lib Foo\nstruct Foo\nx  ,  y  :  Int32\nend\nend"
  formats "lib Foo\nstruct Foo\nx  ,  y  :  Int32\nend\nend"
-  formats "{\n  a:   1,\n  foo: bar,\n}"
  formats "{\n  a:   1,\n  foo: bar,\n}"
-  formats "foo[ 1,  2 ]?"
  formats "foo[ 1,  2 ]?"
-  formats "a.b &.[c]\n1"
  formats "a.b &.[c]\n1"
-  formats "1 ?\n  2    :   \n 3"
  formats "1 ?\n  2    :   \n 3"
-  formats "foo : (F(A)) | D"
  formats "foo : (F(A)) | D"
-  assert
  assert
-  formats "foo { | a, ( _ , c ) | a + c }"
  formats "foo { | a, ( _ , c ) | a + c }"
-  formats "def foo(x : (   A  |  B   )) : (   A  |  B   )\nend"
  formats "def foo(x : (   A  |  B   )) : (   A  |  B   )\nend"
-  formats "foo(\n# x\n1,\n\n# y\nz: 2\n)"
  formats "foo(\n# x\n1,\n\n# y\nz: 2\n)"
-  formats "#!shebang\n1 + 2"
  formats "#!shebang\n1 + 2"
-  formats "%w{one(   two(  three)}"
  formats "%w{one(   two(  three)}"
-  formats "1..\n2"
  formats "1..\n2"
-  formats "   {{\n1 + 2 }}"
  formats "   {{\n1 + 2 }}"
-  formats "-> : Int32[1] {}"
  formats "-> : Int32[1] {}"
-  formats "macro foo\n{% verbatim do %}1 + 2{% end %}\nend"
  formats "macro foo\n{% verbatim do %}1 + 2{% end %}\nend"
-  formats "a[b] ||= c"
  formats "a[b] ||= c"
-  formats "foo(&.bar)"
  formats "foo(&.bar)"
-  formats "macro foo\n  {% for x in y %} 2 {% end %}\nend"
  formats "macro foo\n  {% for x in y %} 2 {% end %}\nend"
-  formats "foo  1  ,   2"
  formats "foo  1  ,   2"
-  formats "lib Foo\nfun foo(x : Int32,\ny : Float64) : Int32\nend"
  formats "lib Foo\nfun foo(x : Int32,\ny : Float64) : Int32\nend"
-  formats "x: Int32"
  formats "x: Int32"
-  formats "{ * 1 * 2,\n*\n3, 4 }"
  formats "{ * 1 * 2,\n*\n3, 4 }"
-  formats "def foo   (   )   \n1\nend"
  formats "def foo   (   )   \n1\nend"
-  formats "-> : {x: Int32, y: String} {}"
  formats "-> : {x: Int32, y: String} {}"
-  formats "a = \\\n  # foo\n  bar(1)"
  formats "a = \\\n  # foo\n  bar(1)"
-  formats "[\n1,\n2,\n3]"
  formats "[\n1,\n2,\n3]"
-  formats "def foo(x : A(B), y)\nend"
  formats "def foo(x : A(B), y)\nend"
-  formats "enum Foo : Int32\nA = 1\nend"
  formats "enum Foo : Int32\nA = 1\nend"
-  formats "asm(\"nop\" :::: \"volatile\" )"
  formats "asm(\"nop\" :::: \"volatile\" )"
-  formats "as? Foo"
  formats "as? Foo"
-  formats "case  1 \n when 2 , 3 \n 4 \n end"
  formats "case  1 \n when 2 , 3 \n 4 \n end"
-  formats "case 1\nwhen 1 then\n2\nwhen 3\n4\nend"
  formats "case 1\nwhen 1 then\n2\nwhen 3\n4\nend"
-  formats "@[Foo(\n  1,\n)]"
  formats "@[Foo(\n  1,\n)]"
-  formats "1\n.as?(Int32)"
  formats "1\n.as?(Int32)"
-  formats "sizeof( Int32 )"
  formats "sizeof( Int32 )"
-  formats "unless a\n2\nelse\nend"
  formats "unless a\n2\nelse\nend"
-  formats "lib LibFoo\n  struct Bar\n    {% begin %}\n      x : Int32\n    {% end %}\n  end\nend"
  formats "lib LibFoo\n  struct Bar\n    {% begin %}\n      x : Int32\n    {% end %}\n  end\nend"
-  formats "{% for a in %w() %}\n  <<-FOO\n    hello  \n  FOO\n{% end %}"
  formats "{% for a in %w() %}\n  <<-FOO\n    hello  \n  FOO\n{% end %}"
-  formats "module Foo  # foo\nend"
  formats "module Foo  # foo\nend"
-  formats "1 + \\\n2\n3"
  formats "1 + \\\n2\n3"
-  formats "1\n\n\n2"
  formats "1\n\n\n2"
-  formats "<<-FOO\nfoo\nFOO"
  formats "<<-FOO\nfoo\nFOO"
-  formats "yield  1 ,  2"
  formats "yield  1 ,  2"
-  formats "until 1\n2\nend"
  formats "until 1\n2\nend"
-  formats "/\#{1}/imx"
  formats "/\#{1}/imx"
-  formats "foo do\n  {% foo <<-X\n  bar\n  X\n  %}\nend"
  formats "foo do\n  {% foo <<-X\n  bar\n  X\n  %}\nend"
-  formats "1  # foo\n2  # bar"
  formats "1  # foo\n2  # bar"
-  formats "-> : Int32* {}"
  formats "-> : Int32* {}"
-  formats "-> : Array(Int32) {}"
  formats "-> : Array(Int32) {}"
-  formats "1 rescue 2"
  formats "1 rescue 2"
-  formats "{ {1 => 2} }"
  formats "{ {1 => 2} }"
-  formats "foo do\n  {1 => foo <<-X\n  bar\n  X\n  }\nend"
  formats "foo do\n  {1 => foo <<-X\n  bar\n  X\n  }\nend"
-  formats "foo[ 1 , 2 ]"
  formats "foo[ 1 , 2 ]"
-  formats "case  1 \n when 2 \n 3 \n when 4 \n 5 \n end"
  formats "case  1 \n when 2 \n 3 \n when 4 \n 5 \n end"
-  formats "class Foo;end"
  formats "class Foo;end"
-  formats "foo &.[a] = 1"
  formats "foo &.[a] = 1"
-  formats "if 1\n  {{1 + 2}}\nend"
  formats "if 1\n  {{1 + 2}}\nend"
-  formats "[] of (Array(T))"
  formats "[] of (Array(T))"
-  formats "a = %w(\n  one two\n  three four\n)"
  formats "a = %w(\n  one two\n  three four\n)"
-  formats "lib Foo\nstruct Foo\nx  :  Int32\nend\nend"
  formats "lib Foo\nstruct Foo\nx  :  Int32\nend\nend"
-  formats "foo a , **b"
  formats "foo a , **b"
-  formats "def foo(x) forall T # bar\n  # baz\nend"
  formats "def foo(x) forall T # bar\n  # baz\nend"
-  formats "foo \\\nbar"
  formats "foo \\\nbar"
-  formats "-> :: foo"
  formats "-> :: foo"
-  formats "{ A: 1 }\n"
  formats "{ A: 1 }\n"
-  formats "def foo(\n  foo,\n  @[MyAnn] &block\n); end"
  formats "def foo(\n  foo,\n  @[MyAnn] &block\n); end"
-  formats "foo.bar / 2\n"
  formats "foo.bar / 2\n"
-  formats "%x(foo \#{ bar })"
  formats "%x(foo \#{ bar })"
-  formats "(size - 1).downto(0) do |i|\n  yield @buffer[i]\nend"
  formats "(size - 1).downto(0) do |i|\n  yield @buffer[i]\nend"
-  formats ":&**"
  formats ":&**"
-  formats "yield  *1  ,2"
  formats "yield  *1  ,2"
-  formats "break( 1 , 2 )"
  formats "break( 1 , 2 )"
-  formats "foo(baz1 do\nend)"
  formats "foo(baz1 do\nend)"
-  formats "private FOO = 2\nprivate A = 1"
  formats "private FOO = 2\nprivate A = 1"
-  formats "foo = 1\n->foo.foo?"
  formats "foo = 1\n->foo.foo?"
-  formats "a &.b[c]?"
  formats "a &.b[c]?"
-  formats "join io, &.inspect"
  formats "join io, &.inspect"
-  formats "yield  *1  , *2"
  formats "yield  *1  , *2"
-  formats "private   getter   foo"
  formats "private   getter   foo"
-  formats "def foo\n# hello\n1\nend"
  formats "def foo\n# hello\n1\nend"
-  formats "def bar\n  foo(<<-X,\n  a\n  X\n    1)\nend"
  formats "def bar\n  foo(<<-X,\n  a\n  X\n    1)\nend"
-  formats "a = foo(1, 2, {\n  foo: 1,\n  bar: 2,\n})"
  formats "a = foo(1, 2, {\n  foo: 1,\n  bar: 2,\n})"
-  formats "macro foo\n  {% 1 + 2 %}\nend"
  formats "macro foo\n  {% 1 + 2 %}\nend"
-  formats "A = 10\nFOO = 123\nBARBAZ = 1234\n"
  formats "A = 10\nFOO = 123\nBARBAZ = 1234\n"
-  formats "case 1\nend"
  formats "case 1\nend"
-  formats "foo(bar(\n  1,\n  2,\n))"
  formats "foo(bar(\n  1,\n  2,\n))"
-  formats "[1,\n2,\n3\n]"
  formats "[1,\n2,\n3\n]"
-  formats "if 1\n  foo(\n    bar,\n    # comment\n  )\nend"
  formats "if 1\n  foo(\n    bar,\n    # comment\n  )\nend"
-  formats "x  :   (A | B)"
  formats "x  :   (A | B)"
-  formats "[\n  1, 2, # foo\n  3,\n]"
  formats "[\n  1, 2, # foo\n  3,\n]"
-  formats "unless a\n2\n3\nelse\n4\n5\nend"
  formats "unless a\n2\n3\nelse\n4\n5\nend"
-  formats "alias Foo=Bar"
  formats "alias Foo=Bar"
-  formats "x  :   Int32*"
  formats "x  :   Int32*"
-  formats "foo[x: 1, &.bar] ||= 1"
  formats "foo[x: 1, &.bar] ||= 1"
-  formats "foo{}"
  formats "foo{}"
-  formats "10 // a"
  formats "10 // a"
-  formats "asm(\"a\" : : : : \"volatile\")"
  formats "asm(\"a\" : : : : \"volatile\")"
-  formats "begin\n1\n2\n3\nend"
  formats "begin\n1\n2\n3\nend"
-  formats "foo([\n  1,\n  bar do\n  end,\n  [\n    2,\n  ],\n])"
  formats "foo([\n  1,\n  bar do\n  end,\n  [\n    2,\n  ],\n])"
-  formats "<<-FOO\nFOO"
  formats "<<-FOO\nFOO"
-  formats "1234 # foo\n1 # bar"
  formats "1234 # foo\n1 # bar"
-  formats "a&-1"
  formats "a&-1"
-  formats "(\n  a = 1\n  a\n)"
  formats "(\n  a = 1\n  a\n)"
-  formats "(a).b { }\nc"
  formats "(a).b { }\nc"
-  formats " <<-EOF\n 1\nEOF"
  formats " <<-EOF\n 1\nEOF"
-  formats "foo"
  formats "foo"
-  formats "1 #=>2"
  formats "1 #=>2"
-  formats "foo(\n  1,\n) do\n  2\nend"
  formats "foo(\n  1,\n) do\n  2\nend"
-  formats "1&+2&*3"
  formats "1&+2&*3"
-  formats "x  :   Int32"
  formats "x  :   Int32"
-  formats "{ {1, 2, 3} => 4 }"
  formats "{ {1, 2, 3} => 4 }"
-  formats "\"\#{ # foo\n  foo = 1\n}\""
  formats "\"\#{ # foo\n  foo = 1\n}\""
-  formats "\"foo \#{ 1 } \#{ __DIR__ }\""
  formats "\"foo \#{ 1 } \#{ __DIR__ }\""
-  formats "::StaticArray(T)"
  formats "::StaticArray(T)"
-  formats "begin\n1\nrescue\n3\nensure\n2\nend"
  formats "begin\n1\nrescue\n3\nensure\n2\nend"
-  formats "@a"
  formats "@a"
-  formats "  <<-HTML\n  \#{1} \#{2}\n  HTML"
  formats "  <<-HTML\n  \#{1} \#{2}\n  HTML"
-  formats "::Pointer(T)"
  formats "::Pointer(T)"
-  formats "  <<-EOF\n 1\n  2\n EOF"
  formats "  <<-EOF\n 1\n  2\n EOF"
-  formats "class Actor\n  macro inherited\n\nend\nend\n"
  formats "class Actor\n  macro inherited\n\nend\nend\n"
-  formats "enum Foo\nA  \nend"
  formats "enum Foo\nA  \nend"
-  formats "->@@foo.foo"
  formats "->@@foo.foo"
-  formats "X(typeof(begin\n  e.is_a?(Y)\nend))"
  formats "X(typeof(begin\n  e.is_a?(Y)\nend))"
-  formats "<<-HTML\n  \#{1}x\n  y\n  HTML"
  formats "<<-HTML\n  \#{1}x\n  y\n  HTML"
-  formats "case / /\nwhen /x/, / /\n  / /\nend"
  formats "case / /\nwhen /x/, / /\n  / /\nend"
-  formats "begin\n  call\n  # comment\nrescue\n  call\n  # comment\nelse\n  call\n  # comment\nensure\n  call\n  # comment\nend"
  formats "begin\n  call\n  # comment\nrescue\n  call\n  # comment\nelse\n  call\n  # comment\nensure\n  call\n  # comment\nend"
-  formats "select   \n when  foo  then  2 \n end"
  formats "select   \n when  foo  then  2 \n end"
-  formats "break 1, {2, 3}"
  formats "break 1, {2, 3}"
-  formats "def a\n  b(\n    a: 1, # x\n    # y\n    b: 2\n  )\nend"
  formats "def a\n  b(\n    a: 1, # x\n    # y\n    b: 2\n  )\nend"
-  formats "foo(1, &.bar)"
  formats "foo(1, &.bar)"
-  formats "def   foo (  @x, @y)  \n  end"
  formats "def   foo (  @x, @y)  \n  end"
-  formats "-> :: foo="
  formats "-> :: foo="
-  formats "def foo\n@x   =  uninitialized   Int32\nend"
  formats "def foo\n@x   =  uninitialized   Int32\nend"
-  formats "foo do   # hello\nend"
  formats "foo do   # hello\nend"
-  formats "begin\n1\nrescue   ex\n3\nelse\n4\nend"
  formats "begin\n1\nrescue   ex\n3\nelse\n4\nend"
-  formats "foo   &.bar"
  formats "foo   &.bar"
-  formats "if a\n    # hello\n 2\nend"
  formats "if a\n    # hello\n 2\nend"
-  formats "foo   &.responds_to?(:foo)"
  formats "foo   &.responds_to?(:foo)"
-  formats "1.<=() { 3 }"
  formats "1.<=() { 3 }"
-  formats "`foo`"
  formats "`foo`"
-  formats "->{}"
  formats "->{}"
-  formats "def foo(x, *, y, **z)\nend"
  formats "def foo(x, *, y, **z)\nend"
-  formats "1 / 2"
  formats "1 / 2"
-  formats "->: Int32 do\nx\nend"
  formats "->: Int32 do\nx\nend"
-  formats "foo : (String -> String?) | (String)"
  formats "foo : (String -> String?) | (String)"
-  formats "a , b  = 1  ,  2"
  formats "a , b  = 1  ,  2"
-  formats "begin\n1 ? 2 : 3\nend"
  formats "begin\n1 ? 2 : 3\nend"
-  formats "case  1 \n when 2 then \n 3 \n end"
  formats "case  1 \n when 2 then \n 3 \n end"
-  formats "foo.[]"
  formats "foo.[]"
-  formats "a = case 1\nwhen 2\n3\nelse\n4\nend"
  formats "a = case 1\nwhen 2\n3\nelse\n4\nend"
-  formats "\"foo\" \\\n \"bar\" \\\n \"baz\""
  formats "\"foo\" \\\n \"bar\" \\\n \"baz\""
-  formats "(1 .. )"
  formats "(1 .. )"
-  formats "macro bar\n  1\nend\n\ncase 1\nwhen  2 then 3\nwhen 45 then 6\nend"
  formats "macro bar\n  1\nend\n\ncase 1\nwhen  2 then 3\nwhen 45 then 6\nend"
-  formats "[\n  a(), # b\n]"
  formats "[\n  a(), # b\n]"
-  formats "->@@foo.foo!"
  formats "->@@foo.foo!"
-  formats "case 1\nwhen a; 2\nelse; b\nend"
  formats "case 1\nwhen a; 2\nelse; b\nend"
-  formats "'\\u{0123}'"
  formats "'\\u{0123}'"
-  formats "def foo(x, **z)\nend"
  formats "def foo(x, **z)\nend"
-  formats "->{}"
  formats "->{}"
-  formats "foo do  \n x \n end"
  formats "foo do  \n x \n end"
-  formats "1.as   Int32"
  formats "1.as   Int32"
-  formats "bar do\n  foo <<-X\n  bar\n  X\nend"
  formats "bar do\n  foo <<-X\n  bar\n  X\nend"
-  formats "foo &.bar.responds_to?(:baz)"
  formats "foo &.bar.responds_to?(:baz)"
-  formats "macro foo\n  {% for value, i in values %}\\\n    {% if true %}\\\n    {% end %}\\\n    {{ 1 }}/\n  {% end %}\\\nend\n\n{\n  1 => 2,\n  1234 => 5,\n}\n"
  formats "macro foo\n  {% for value, i in values %}\\\n    {% if true %}\\\n    {% end %}\\\n    {{ 1 }}/\n  {% end %}\\\nend\n\n{\n  1 => 2,\n  1234 => 5,\n}\n"
-  formats "break  1 ,  2"
  formats "break  1 ,  2"
-  formats "1   if   2"
  formats "1   if   2"
-  formats "x[ y ] += 1"
  formats "x[ y ] += 1"
-  formats "{ {% for x in 1..2 %}3{% end %}, nil }"
  formats "{ {% for x in 1..2 %}3{% end %}, nil }"
-  formats "alias A = (B)"
  formats "alias A = (B)"
-  formats "case 1\nwhen 2\n  3\n  # foo\nelse\n  4\n  # bar\nend"
  formats "case 1\nwhen 2\n  3\n  # foo\nelse\n  4\n  # bar\nend"
-  formats "foo.bar do\n  baz\n    .b\nend"
  formats "foo.bar do\n  baz\n    .b\nend"
-  formats "foo((1..3))"
  formats "foo((1..3))"
-  formats "-> : Int32? {}"
  formats "-> : Int32? {}"
-  formats "x  :   (A -> B)"
  formats "x  :   (A -> B)"
-  formats "lib Foo\n  $foo = hello  :  Int32 \nend"
  formats "lib Foo\n  $foo = hello  :  Int32 \nend"
-  formats "1.>=(2) { 3 }"
  formats "1.>=(2) { 3 }"
-  formats "macro foo\n  {{ 1 + 2 }}\\\n 1\n end"
  formats "macro foo\n  {{ 1 + 2 }}\\\n 1\n end"
-  formats "foo.[1, 2] = 3"
  formats "foo.[1, 2] = 3"
-  formats "macro foo\n  1 + 2\nend"
  formats "macro foo\n  1 + 2\nend"
-  formats "class Foo\ndef foo\n1\nensure\n2\nend\nend"
  formats "class Foo\ndef foo\n1\nensure\n2\nend\nend"
-  formats "case 1\nwhen 2 # a\n  # b\nend"
  formats "case 1\nwhen 2 # a\n  # b\nend"
-  formats "foo(baz(x, y) do\n  1 + 2\nend)"
  formats "foo(baz(x, y) do\n  1 + 2\nend)"
-  formats "foo(  1  ,   2 )"
  formats "foo(  1  ,   2 )"
-  formats "   {{ 1 + 2 }}"
  formats "   {{ 1 + 2 }}"
-  formats "def foo(\n  &block\n)\nend"
  formats "def foo(\n  &block\n)\nend"
-  formats "foo (1; 2)"
  formats "foo (1; 2)"
-  formats "def   foo ( x )  :  Int32 \n  end"
  formats "def   foo ( x )  :  Int32 \n  end"
-  formats "if 1;\n2;\nelsif 3;\n4;\nend"
  formats "if 1;\n2;\nelsif 3;\n4;\nend"
-  formats "def run\n\nrescue\n  2\n  3\nend"
  formats "def run\n\nrescue\n  2\n  3\nend"
-  formats "foo.bar   +=   2"
  formats "foo.bar   +=   2"
-  formats "return  *1  ,2"
  formats "return  *1  ,2"
-  formats "begin\n1\nrescue   ex   :   Int32  |  Float64  \n3\nend"
  formats "begin\n1\nrescue   ex   :   Int32  |  Float64  \n3\nend"
-  formats "foo.[ 1,  2 ]?"
  formats "foo.[ 1,  2 ]?"
-  formats "1\n..2"
  formats "1\n..2"
-  formats "[\n  <<-EOF,\n  foo\n  EOF\n  <<-BAR,\n  bar\n  BAR\n]"
  formats "[\n  <<-EOF,\n  foo\n  EOF\n  <<-BAR,\n  bar\n  BAR\n]"
-  formats "1 # foo\n1234 # bar"
  formats "1 # foo\n1234 # bar"
-  does not add `&` without flag `method_signature_yield`
-    formats "def foo(\n)\n  yield\nend"
    formats "def foo(\n)\n  yield\nend"
-    formats "def foo(x ,)\n  yield\nend"
    formats "def foo(x ,)\n  yield\nend"
-    formats "def foo(a, **b)\n  yield\nend"
    formats "def foo(a, **b)\n  yield\nend"
-    formats "def foo(\nx)\n  yield\nend"
    formats "def foo(\nx)\n  yield\nend"
-    formats "def foo(\nx, y)\n  yield\nend"
    formats "def foo(\nx, y)\n  yield\nend"
-    formats "def foo(x\n)\n  yield\nend"
    formats "def foo(x\n)\n  yield\nend"
-    formats "def foo(\nx,\n)\n  yield\nend"
    formats "def foo(\nx,\n)\n  yield\nend"
-    formats "def foo(x,\n)\n  yield\nend"
    formats "def foo(x,\n)\n  yield\nend"
-    formats "def foo\n  yield\nend"
    formats "def foo\n  yield\nend"
-    formats "def foo(\nx,\ny)\n  yield\nend"
    formats "def foo(\nx,\ny)\n  yield\nend"
-    formats "def foo(x,\n        y)\n  yield\nend"
    formats "def foo(x,\n        y)\n  yield\nend"
-    formats "def foo(x,\ny,)\n  yield\nend"
    formats "def foo(x,\ny,)\n  yield\nend"
-    formats "def foo(x)\n  yield\nend"
    formats "def foo(x)\n  yield\nend"
-    formats "def foo # bar\n  yield\nend"
    formats "def foo # bar\n  yield\nend"
-    formats "def foo()\n  yield\nend"
    formats "def foo()\n  yield\nend"
-  formats "def   foo (  x  =   1 )  \n  end"
  formats "def   foo (  x  =   1 )  \n  end"
-  formats "pointerof( @a )"
  formats "pointerof( @a )"
-  formats "def foo\n  1 #\nrescue\nend"
  formats "def foo\n  1 #\nrescue\nend"
-  formats "a = \\\n  # foo\n  nil"
  formats "a = \\\n  # foo\n  nil"
-  formats "begin\n  / /\nend"
  formats "begin\n  / /\nend"
-  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n  @[MyAnn] @[MyAnn] baz,\n  @[MyAnn]\n  @[MyAnn]\n  biz\n); end"
  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n  @[MyAnn] @[MyAnn] baz,\n  @[MyAnn]\n  @[MyAnn]\n  biz\n); end"
-  formats "def foo(@[AnnOne]   @[AnnTwo] v); end"
  formats "def foo(@[AnnOne]   @[AnnTwo] v); end"
-  formats "bar = foo(->{\n  1 + 2\n})"
  formats "bar = foo(->{\n  1 + 2\n})"
-  formats "return  1"
  formats "return  1"
-  formats "foo  1"
  formats "foo  1"
-  formats ":\"foo bar\""
  formats ":\"foo bar\""
-  formats "%i{one(   two(  three)}"
  formats "%i{one(   two(  three)}"
-  formats "-> :: Foo . foo!"
  formats "-> :: Foo . foo!"
-  formats "macro foo\n    1  +  2 \n    end"
  formats "macro foo\n    1  +  2 \n    end"
-  formats "foo . bar()"
  formats "foo . bar()"
-  formats "foo 1, # comment\n  # bar\n  do\n  end"
  formats "foo 1, # comment\n  # bar\n  do\n  end"
-  formats "foo\n  \nbar"
  formats "foo\n  \nbar"
-  formats "begin\n 0[1] rescue 2 end"
  formats "begin\n 0[1] rescue 2 end"
-  formats "enum Foo\n  {% begin %}\n    A\n    B\n    C\n  {% end %}\nend"
  formats "enum Foo\n  {% begin %}\n    A\n    B\n    C\n  {% end %}\nend"
-  formats "SomeLib.UppercasedFunCall 1, 2"
  formats "SomeLib.UppercasedFunCall 1, 2"
-  formats "[/ /, / /]"
  formats "[/ /, / /]"
-  formats "yield( 1 , 2 )"
  formats "yield( 1 , 2 )"
-  formats "case  1 \n when 2 ,\n 3 \n 4 \n end"
  formats "case  1 \n when 2 ,\n 3 \n 4 \n end"
-  formats "foo(a: //, b: //)"
  formats "foo(a: //, b: //)"
-  formats "break  *1"
  formats "break  *1"
-  formats "class Foo\n# nothing\nend"
  formats "class Foo\n# nothing\nend"
-  formats "def foo(@[MyAnn] &); end"
  formats "def foo(@[MyAnn] &); end"
-  formats "%w(\n  one two\n  three four\n)"
  formats "%w(\n  one two\n  three four\n)"
-  formats "yield  1  , *2"
  formats "yield  1  , *2"
-  formats "foo[]"
  formats "foo[]"
-  formats "a &.b.as C"
  formats "a &.b.as C"
-  formats "def foo: Int32\nend"
  formats "def foo: Int32\nend"
-  formats "asm(\"nop\" :::: \"volatile\"  , \"alignstack\"  ,  \"intel\"   )"
  formats "asm(\"nop\" :::: \"volatile\"  , \"alignstack\"  ,  \"intel\"   )"
-  formats "foo { | ( a, *b , c ) | a }"
  formats "foo { | ( a, *b , c ) | a }"
-  formats "foo[&.bar] = 1"
  formats "foo[&.bar] = 1"
-  formats "1   &+   2"
  formats "1   &+   2"
-  formats "()"
  formats "()"
-  formats "->{ x }"
  formats "->{ x }"
-  formats "a = foo(bar([\n  1,\n]))"
  formats "a = foo(bar([\n  1,\n]))"
-  formats "macro [](x)\nend"
  formats "macro [](x)\nend"
-  formats "Tuple()"
  formats "Tuple()"
-  formats "asm(\"nop\" : \"a\"(0), \"b\"(1)\n: \"c\"(2), \"d\"(3) )"
  formats "asm(\"nop\" : \"a\"(0), \"b\"(1)\n: \"c\"(2), \"d\"(3) )"
-  formats "def foo()\n1\nend"
  formats "def foo()\n1\nend"
-  formats "\"\\a\\c\#{foo}\\b\\d\""
  formats "\"\\a\\c\#{foo}\\b\\d\""
-  formats "def   foo (  &@block)  \n  end"
  formats "def   foo (  &@block)  \n  end"
-  formats "1"
  formats "1"
-  formats "[\n  {\n    1 => 2,\n  }, {\n    3 => 4,\n  }, {\n    5 => 6,\n  },\n]"
  formats "[\n  {\n    1 => 2,\n  }, {\n    3 => 4,\n  }, {\n    5 => 6,\n  },\n]"
-  formats "def foo( & block )\nend"
  formats "def foo( & block )\nend"
-  formats "enum Baz\nA = 1\nFOO = 2\n\nEX = 3\nend"
  formats "enum Baz\nA = 1\nFOO = 2\n\nEX = 3\nend"
-  formats "def foo(\n   @[MyAnn]\n bar\n); end"
  formats "def foo(\n   @[MyAnn]\n bar\n); end"
-  formats "/foo/imx"
  formats "/foo/imx"
-  formats "# ```text\n# 1 + 2\n# ```\n#\n# ```\n# 3 + 4\n# ```"
  formats "# ```text\n# 1 + 2\n# ```\n#\n# ```\n# 3 + 4\n# ```"
-  formats "asm(\n  # the assembly template string, following the\n  # syntax for LLVM's integrated assembler\n  \"nop\" :               # output operands\n\"=r\"(foo), \"=r\"(bar) : # input operands\n\"r\"(1), \"r\"(baz) :     # names of clobbered registers\n\"eax\", \"memory\" :      # optional flags, corresponding to the LLVM IR\n  # sideeffect / alignstack / inteldialect / unwind attributes\n\"volatile\", \"alignstack\", \"intel\", \"unwind\"\n)"
  formats "asm(\n  # the assembly template string, following the\n  # syntax for LLVM's integrated assembler\n  \"nop\" :               # output operands\n\"=r\"(foo), \"=r\"(bar) : # input operands\n\"r\"(1), \"r\"(baz) :     # names of clobbered registers\n\"eax\", \"memory\" :      # optional flags, corresponding to the LLVM IR\n  # sideeffect / alignstack / inteldialect / unwind attributes\n\"volatile\", \"alignstack\", \"intel\", \"unwind\"\n)"
-  formats "unless a\nunless b\n3\nelse\n4\nend\nend"
  formats "unless a\nunless b\n3\nelse\n4\nend\nend"
-  formats "$?"
  formats "$?"
-  formats "lib Foo\nstruct Foo\nx  :  Int32\ny : Float64\nend\nend"
  formats "lib Foo\nstruct Foo\nx  :  Int32\ny : Float64\nend\nend"
-  formats "x.try &.[]= 123, 456"
  formats "x.try &.[]= 123, 456"
-  formats "def foo( x , & : Int32 )\nend"
  formats "def foo( x , & : Int32 )\nend"
-  formats "macro foo\n  {{\n1 + 2 }}\nend"
  formats "macro foo\n  {{\n1 + 2 }}\nend"
-  formats "@x : A(B | C)?"
  formats "@x : A(B | C)?"
-  formats "macro foo(\n  a,\n  **b,\n)\nend"
  formats "macro foo(\n  a,\n  **b,\n)\nend"
-  formats ":|"
  formats ":|"
-  formats "foo[1, &.bar] = 1"
  formats "foo[1, &.bar] = 1"
-  formats "{% if true %}\n  # x\n  #\n{% end %}\n\n# ```\n# x\n# ```"
  formats "{% if true %}\n  # x\n  #\n{% end %}\n\n# ```\n# x\n# ```"
-  formats "case foo\nwhen 1\n  # A\nelse\n# B\nend\n"
  formats "case foo\nwhen 1\n  # A\nelse\n# B\nend\n"
-  formats "yield  1"
  formats "yield  1"
-  formats "p = Foo[\n  1, 2, 3,\n  4, 5, 6\n]\n"
  formats "p = Foo[\n  1, 2, 3,\n  4, 5, 6\n]\n"
-  formats "macro foo\n  %foo\nend"
  formats "macro foo\n  %foo\nend"
-  formats "case 1\nwhen 1, # 1\n     2, # 2\n     3  # 3\n  1\nend"
  formats "case 1\nwhen 1, # 1\n     2, # 2\n     3  # 3\n  1\nend"
-  formats "macro foo\n  macro bar\n    \\{% begin %}\n      \\\\{% puts %}\n    \\{% end %}\n  end\nend"
  formats "macro foo\n  macro bar\n    \\{% begin %}\n      \\\\{% puts %}\n    \\{% end %}\n  end\nend"
-  formats "macro foo()\nend"
  formats "macro foo()\nend"
-  formats "1.===(2) { 3 }"
  formats "1.===(2) { 3 }"
-  formats "{{ foo <<-X\nbar\nX\n}}"
  formats "{{ foo <<-X\nbar\nX\n}}"
-  formats "あ.い = 1"
  formats "あ.い = 1"
-  formats "def foo(\n   @[MyAnn]\n bar\n); end"
  formats "def foo(\n   @[MyAnn]\n bar\n); end"
-  formats "lib Foo\n  fun Bar\nend"
  formats "lib Foo\n  fun Bar\nend"
-  formats "class Foo ( *T, U )\nend"
  formats "class Foo ( *T, U )\nend"
-  formats "a &.!.!"
  formats "a &.!.!"
-  formats "foo[1, &.bar]"
  formats "foo[1, &.bar]"
-  formats "def +(x)\nend"
  formats "def +(x)\nend"
-  formats "a&+1"
  formats "a&+1"
-  formats "extend  Foo"
  formats "extend  Foo"
-  formats "foo(\n  a: 1,\n  b: 2,\n  )\n"
  formats "foo(\n  a: 1,\n  b: 2,\n  )\n"
-  formats "return 1, {2, 3}"
  formats "return 1, {2, 3}"
-  formats "foo.%(bar)"
  formats "foo.%(bar)"
-  formats "@[Foo(\n  foo: 1,\n)]\ndef foo\nend"
  formats "@[Foo(\n  foo: 1,\n)]\ndef foo\nend"
-  formats "begin\n  1\nend\n\n1\n"
  formats "begin\n  1\nend\n\n1\n"
-  formats "case  1 \n when 2 \n 3 \n else \n 4 \n end"
  formats "case  1 \n when 2 \n 3 \n else \n 4 \n end"
-  formats "def a\n  {\n    1, # x\n    # y\n  }\nend"
  formats "def a\n  {\n    1, # x\n    # y\n  }\nend"
-  formats "Foo( x:  Int32  ,  y: Float64 )"
  formats "Foo( x:  Int32  ,  y: Float64 )"
-  formats "{ %w() }"
  formats "{ %w() }"
-  formats "foo(self // 1)"
  formats "foo(self // 1)"
-  formats "a = case 1\n    when 1, # 1\n         2, # 2\n         3  # 3\n      1\n    end"
  formats "a = case 1\n    when 1, # 1\n         2, # 2\n         3  # 3\n      1\n    end"
-  formats "\"\#{\"\#{foo}\"}\""
  formats "\"\#{\"\#{foo}\"}\""
-  formats "foo(\n  1,\n  2\n) do\n  1\nend"
  formats "foo(\n  1,\n  2\n) do\n  1\nend"
-  formats "1.[]=() { 3 }"
  formats "1.[]=() { 3 }"
-  formats "def self . foo\nend"
  formats "def self . foo\nend"
-  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n  @[MyAnn] baz\n); end"
  formats "def foo(\n  @[MyAnn]\n  @[MyAnn]\n  bar,\n  @[MyAnn] baz\n); end"
-  formats "abstract def foo\nabstract def bar"
  formats "abstract def foo\nabstract def bar"
-  formats "x.try &.[] 123"
  formats "x.try &.[] 123"
-  formats "macro foo\n  {{1 + 2}}\nend"
  formats "macro foo\n  {{1 + 2}}\nend"
-  formats "foo(1, 2,\n)"
  formats "foo(1, 2,\n)"
-  formats "foo &.as?(T)"
  formats "foo &.as?(T)"
-  formats "foo 1, # comment\n  do\n  end"
  formats "foo 1, # comment\n  do\n  end"
-  formats "::Foo:: Bar"
  formats "::Foo:: Bar"
-  formats "{1 => 2,\n  3 => 4, # lala\n}\n"
  formats "{1 => 2,\n  3 => 4, # lala\n}\n"
-  formats "foo[x: 1, &.bar]?"
  formats "foo[x: 1, &.bar]?"
-  formats "lib Foo\nstruct Foo\nx  ,  y  , z :  Int32\nend\nend"
  formats "lib Foo\nstruct Foo\nx  ,  y  , z :  Int32\nend\nend"
-  formats "def foo(@[AnnOne]   @[AnnTwo]   &block : Int32 ->  ); end"
  formats "def foo(@[AnnOne]   @[AnnTwo]   &block : Int32 ->  ); end"
-  formats "[1, 2, 3]"
  formats "[1, 2, 3]"
-  formats "x = {% if flag?(:foo) %}\n      foo  +  bar\n    {% else %}\n      baz  +  qux\n    {% end %}"
  formats "x = {% if flag?(:foo) %}\n      foo  +  bar\n    {% else %}\n      baz  +  qux\n    {% end %}"
-  formats "->@foo.foo="
  formats "->@foo.foo="
-  formats "0x1234_u32"
  formats "0x1234_u32"
-  formats "if a\n2\nelse\n3\nend"
  formats "if a\n2\nelse\n3\nend"
-  formats "next { {1, 2}, {3, 4} }"
  formats "next { {1, 2}, {3, 4} }"
-  formats "asm(\"a\" :: : : \"volatile\")"
  formats "asm(\"a\" :: : : \"volatile\")"
-  formats "lib Foo\n  fun foo =\n    bar(Int32) : Int32\nend"
  formats "lib Foo\n  fun foo =\n    bar(Int32) : Int32\nend"
-  formats "case 1\nelse\n  2\nend"
  formats "case 1\nelse\n  2\nend"
-  formats "def x(@y = ->(z) {})\nend"
  formats "def x(@y = ->(z) {})\nend"
-  formats "case nil\nelse nil; nil\n# comment\nend"
  formats "case nil\nelse nil; nil\n# comment\nend"
-  formats "def foo( x , & block )\nend"
  formats "def foo( x , & block )\nend"
-  formats "class Foo; 1; end"
  formats "class Foo; 1; end"
-  formats "foo{|x|\n x}"
  formats "foo{|x|\n x}"
-  formats "10**a"
  formats "10**a"
-  formats "[\n  [\n    1,\n  ], [\n    2,\n  ], [\n    3,\n  ],\n]"
  formats "[\n  [\n    1,\n  ], [\n    2,\n  ], [\n    3,\n  ],\n]"
-  formats "def   foo (  bar  @@select)  \n  end"
  formats "def   foo (  bar  @@select)  \n  end"
-  formats "with foo yield bar"
  formats "with foo yield bar"
-  formats "Foo( x:  Int32  )"
  formats "Foo( x:  Int32  )"
-  formats "#######"
  formats "#######"
-  formats "nil?"
  formats "nil?"
-  formats "x : Int32 |\nString"
  formats "x : Int32 |\nString"
-  formats "Hash{\n  foo => <<-EOF\n  foo\n  EOF\n}"
  formats "Hash{\n  foo => <<-EOF\n  foo\n  EOF\n}"
-  formats "@[Foo::Bar]"
  formats "@[Foo::Bar]"
-  formats "foo \"bar\": 1, \"baz qux\": 2"
  formats "foo \"bar\": 1, \"baz qux\": 2"
-  formats "def   foo (  x ,\n y )  \n  end"
  formats "def   foo (  x ,\n y )  \n  end"
-  formats "class   Foo  < \n  Bar \n\n 1  \n\nend"
  formats "class   Foo  < \n  Bar \n\n 1  \n\nend"
-  formats "def foo\n1\n2\n# foo\nend"
  formats "def foo\n1\n2\n# foo\nend"
-  formats "def foo(\n  foo,\n\n  @[MyAnn]\n  @[MyAnn]\n  & : Nil -> Nil\n); end"
  formats "def foo(\n  foo,\n\n  @[MyAnn]\n  @[MyAnn]\n  & : Nil -> Nil\n); end"
-  formats "return { {1, 2}, {3, 4} }"
  formats "return { {1, 2}, {3, 4} }"
-  formats "foo[&.bar]?"
  formats "foo[&.bar]?"
-  formats "def   foo (  @@x)  \n  end"
  formats "def   foo (  @@x)  \n  end"
-  formats "def foo\n  {{@type}}\nend"
  formats "def foo\n  {{@type}}\nend"
-  formats "->foo"
  formats "->foo"
-  formats "case\nend"
  formats "case\nend"
-  formats "def foo(**z, &block)\nend"
  formats "def foo(**z, &block)\nend"
-  formats "def foo( & \n )\nend"
  formats "def foo( & \n )\nend"
-  formats "macro foo\n  {% if 1 %} 2 {% elsif 3 %} 4 {% else %} 5 {% end %}\nend"
  formats "macro foo\n  {% if 1 %} 2 {% elsif 3 %} 4 {% else %} 5 {% end %}\nend"
-  formats "long_variable_name = [\n  {\n    :foo => 1,\n  }, {\n    :bar => 2,\n  },\n]"
  formats "long_variable_name = [\n  {\n    :foo => 1,\n  }, {\n    :bar => 2,\n  },\n]"
-  formats "lib Foo\n  fun foo =\n    bar(Int32,\n    Int32) : Int32\nend"
  formats "lib Foo\n  fun foo =\n    bar(Int32,\n    Int32) : Int32\nend"
-  formats "loop do\n  1\nrescue\n  2\nend"
  formats "loop do\n  1\nrescue\n  2\nend"
-  formats "a = begin\n  1\nend\n\na =\nbegin\n  1\nend\n\na = if 1\n  2\nend\n\nb = 1\nb ||= begin\n  2\nend\n\nb ||= if 1\n  2\nend\n\nb += if 1\n  2\nend\n\nb +=\nif 1\n  2\nend\n\na, b = begin\n  1\nend\n\na, b =\nbegin\n  1\nend\n\nc[x] = begin\n  2\nend\n\nc[x] =\nbegin\n  2\nend\n\nc[x] = if 1\n  2\nend\n\nc[x] ||= begin 1\n  2\nend\n\nc[x] ||= if 1\n  2\nend\n\nc[x] += if 1\n  2\nend\n\nc[x] += begin 1\n  2\nend\n\nc[x] +=\nbegin\n  1\n  2\nend\n\nfoo.bar = begin\nend\n\nfoo.bar =\nbegin\nend\n\nfoo.bar = if\n  2\nend\n\nfoo.bar += begin\n  2\nend\n\nfoo.bar += if\n  2\nend\n\n"
  formats "a = begin\n  1\nend\n\na =\nbegin\n  1\nend\n\na = if 1\n  2\nend\n\nb = 1\nb ||= begin\n  2\nend\n\nb ||= if 1\n  2\nend\n\nb += if 1\n  2\nend\n\nb +=\nif 1\n  2\nend\n\na, b = begin\n  1\nend\n\na, b =\nbegin\n  1\nend\n\nc[x] = begin\n  2\nend\n\nc[x] =\nbegin\n  2\nend\n\nc[x] = if 1\n  2\nend\n\nc[x] ||= begin 1\n  2\nend\n\nc[x] ||= if 1\n  2\nend\n\nc[x] += if 1\n  2\nend\n\nc[x] += begin 1\n  2\nend\n\nc[x] +=\nbegin\n  1\n  2\nend\n\nfoo.bar = begin\nend\n\nfoo.bar =\nbegin\nend\n\nfoo.bar = if\n  2\nend\n\nfoo.bar += begin\n  2\nend\n\nfoo.bar += if\n  2\nend\n\n"
-  formats "def foo( x , * y )\nend"
  formats "def foo( x , * y )\nend"
-  formats "::NamedTuple(T)"
  formats "::NamedTuple(T)"
-  formats "while 1\n2  # foo\nend"
  formats "while 1\n2  # foo\nend"
-  formats "foo(  )"
  formats "foo(  )"
-  formats "->(x : Int32) {}"
  formats "->(x : Int32) {}"
-  formats "class Foo\n@x  : Int32\nend"
  formats "class Foo\n@x  : Int32\nend"
-  formats "lib Foo\n  {% if 1 %}\n    fun foo\n  {% end %}\nend\n\nmacro bar\n  1\nend"
  formats "lib Foo\n  {% if 1 %}\n    fun foo\n  {% end %}\nend\n\nmacro bar\n  1\nend"
-  formats "  <<-HTML\n  foo\nHTML"
  formats "  <<-HTML\n  foo\nHTML"
-  formats "[\n  # foo\n] of String"
  formats "[\n  # foo\n] of String"
-  formats "# Here is the doc of a method, and contains an example:\n#\n# ```\n# result = foo\n#\n# puts result\n# ```\ndef foo\n  # ...\nend\n"
  formats "# Here is the doc of a method, and contains an example:\n#\n# ```\n# result = foo\n#\n# puts result\n# ```\ndef foo\n  # ...\nend\n"
-  formats "asm(\"nop\" : \"a\"(0) : \"b\"(1) )"
  formats "asm(\"nop\" : \"a\"(0) : \"b\"(1) )"
-  formats "\"\#{\n  foo = 1\n}\""
  formats "\"\#{\n  foo = 1\n}\""
-  formats "return( 1 , 2 )"
  formats "return( 1 , 2 )"
-  formats "def foo(\n  a,\n  b,\n)\nend"
  formats "def foo(\n  a,\n  b,\n)\nend"
-  formats "<<-FOO\nbarfoo\nFOO"
  formats "<<-FOO\nbarfoo\nFOO"
-  formats "1 .. 2"
  formats "1 .. 2"
-  formats "def foo\n2  # foo\nend"
  formats "def foo\n2  # foo\nend"
-  formats "foo ()"
  formats "foo ()"
-  formats "foo   &.>=(2)"
  formats "foo   &.>=(2)"
-  formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n        : \"f\",\n          \"g\")"
  formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n        : \"f\",\n          \"g\")"
-  formats "def foo\n@x  :  Int32\nend"
  formats "def foo\n@x  :  Int32\nend"
-  formats "1 \\\nif 2"
  formats "1 \\\nif 2"
-  formats "if a\nif b\n3\nelse\n4\nend\nend"
  formats "if a\nif b\n3\nelse\n4\nend\nend"
-  formats "case 0\nwhen 0 then 1; 2\n# Comments\nend"
  formats "case 0\nwhen 0 then 1; 2\n# Comments\nend"
-  formats "if 1\n# nothing\nend"
  formats "if 1\n# nothing\nend"
-  formats "{% verbatim do %}\n  <<-FOO\n    hello  \n  FOO\n{% end %}"
  formats "{% verbatim do %}\n  <<-FOO\n    hello  \n  FOO\n{% end %}"
-  formats "if 1\n2\nelsif\n3\n4\nelsif 5\n6\nend"
  formats "if 1\n2\nelsif\n3\n4\nelsif 5\n6\nend"
-  formats "<<-FOO\nfoobar\nFOO"
  formats "<<-FOO\nfoobar\nFOO"
-  formats "1\n..\n2"
  formats "1\n..\n2"
-  formats "foo\n  .bar(\n    1\n  )"
  formats "foo\n  .bar(\n    1\n  )"
-  formats "1\n.as(Int32)"
  formats "1\n.as(Int32)"
-  formats "# foo\ndef foo\nend\n# bar\ndef bar\nend"
  formats "# foo\ndef foo\nend\n# bar\ndef bar\nend"
-  formats "if a\n  b &c\nend"
  formats "if a\n  b &c\nend"
-  formats "1   unless   2"
  formats "1   unless   2"
-  formats "next( *1  , *2 )"
  formats "next( *1  , *2 )"
-  formats "[ * [ * [ 1 ] ], *    \n[ 2] ]"
  formats "[ * [ * [ 1 ] ], *    \n[ 2] ]"
-  formats "foo(bar(baz3 do\nend))"
  formats "foo(bar(baz3 do\nend))"
-  formats "1 ... 2"
  formats "1 ... 2"
-  formats "lib Foo\nfun foo(x   :   Int32, y   :   Float64)  :  Int32\nend"
  formats "lib Foo\nfun foo(x   :   Int32, y   :   Float64)  :  Int32\nend"
-  formats "foo &.@bar"
  formats "foo &.@bar"
-  Unicode bi-directional control characters
-    formats "%(\u2068)"
    formats "%(\u2068)"
-    formats "\"\\c\u202C\#{1}\""
    formats "\"\\c\u202C\#{1}\""
-    formats "\"\\c\u202A\#{1}\""
    formats "\"\\c\u202A\#{1}\""
-    formats "def foo(\"\u202E\" x)\nend"
    formats "def foo(\"\u202E\" x)\nend"
-    formats "%r(\u202C)"
    formats "%r(\u202C)"
-    formats "%Q(\u202E\#{1})"
    formats "%Q(\u202E\#{1})"
-    formats "<<-EOS\n\u2066\nEOS"
    formats "<<-EOS\n\u2066\nEOS"
-    formats "%Q(\u202D\#{1})"
    formats "%Q(\u202D\#{1})"
-    formats "\"\\c\u2067\#{1}\""
    formats "\"\\c\u2067\#{1}\""
-    formats "{\"\u2067\": 1}"
    formats "{\"\u2067\": 1}"
-    formats "foo(\"\u2068\": 1)"
    formats "foo(\"\u2068\": 1)"
-    formats "%r(\u2067\#{1})"
    formats "%r(\u2067\#{1})"
-    formats "foo(\"\u202A\": 1)"
    formats "foo(\"\u202A\": 1)"
-    formats "%i(\u202A)"
    formats "%i(\u202A)"
-    formats "\"\u2068\""
    formats "\"\u2068\""
-    formats "\"\\c\u202B\#{1}\""
    formats "\"\\c\u202B\#{1}\""
-    formats "%w(\u2069)"
    formats "%w(\u2069)"
-    formats "/\u202A\#{1}/"
    formats "/\u202A\#{1}/"
-    formats "%q(\u2068)"
    formats "%q(\u2068)"
-    formats "\"\\c\u202B\""
    formats "\"\\c\u202B\""
-    formats "%Q(\u202E)"
    formats "%Q(\u202E)"
-    formats "\"\\c\u2069\#{1}\""
    formats "\"\\c\u2069\#{1}\""
-    formats "%i(\u2069)"
    formats "%i(\u2069)"
-    formats "<<-'EOS'\n\u202E\nEOS"
    formats "<<-'EOS'\n\u202E\nEOS"
-    formats "\"\u202B\""
    formats "\"\u202B\""
-    formats "%q(\u2069)"
    formats "%q(\u2069)"
-    formats "NamedTuple(\"\u2069\": Int32)"
    formats "NamedTuple(\"\u2069\": Int32)"
-    formats "%r(\u2068\#{1})"
    formats "%r(\u2068\#{1})"
-    formats "%q(\u202A)"
    formats "%q(\u202A)"
-    formats "/\u202A/"
    formats "/\u202A/"
-    formats "%(\u2067)"
    formats "%(\u2067)"
-    formats "NamedTuple(\"\u202D\": Int32)"
    formats "NamedTuple(\"\u202D\": Int32)"
-    formats "%Q(\u202C)"
    formats "%Q(\u202C)"
-    formats "\"\u2066\#{1}\""
    formats "\"\u2066\#{1}\""
-    formats "%Q(\u2067)"
    formats "%Q(\u2067)"
-    formats "/\u202C/"
    formats "/\u202C/"
-    formats "<<-EOS\n\u202A\nEOS"
    formats "<<-EOS\n\u202A\nEOS"
-    formats "%r(\u202B)"
    formats "%r(\u202B)"
-    formats "NamedTuple(\"\u2068\": Int32)"
    formats "NamedTuple(\"\u2068\": Int32)"
-    formats "%i(\u2066)"
    formats "%i(\u2066)"
-    formats "%Q(\u202C\#{1})"
    formats "%Q(\u202C\#{1})"
-    formats "%Q(\u2068)"
    formats "%Q(\u2068)"
-    formats "<<-EOS\n\u2068\nEOS"
    formats "<<-EOS\n\u2068\nEOS"
-    formats "%r(\u202E\#{1})"
    formats "%r(\u202E\#{1})"
-    formats "NamedTuple(\"\u202A\": Int32)"
    formats "NamedTuple(\"\u202A\": Int32)"
-    formats "%r(\u2069)"
    formats "%r(\u2069)"
-    formats "<<-EOS\n\u202B\nEOS"
    formats "<<-EOS\n\u202B\nEOS"
-    formats "foo(\"\u2066\": 1)"
    formats "foo(\"\u2066\": 1)"
-    formats "def foo(\"\u202C\" x)\nend"
    formats "def foo(\"\u202C\" x)\nend"
-    formats "%r(\u202A\#{1})"
    formats "%r(\u202A\#{1})"
-    formats "{\"\u202E\": 1}"
    formats "{\"\u202E\": 1}"
-    formats "%Q(\u2066\#{1})"
    formats "%Q(\u2066\#{1})"
-    formats "%i(\u202D)"
    formats "%i(\u202D)"
-    formats "%i(\u202B)"
    formats "%i(\u202B)"
-    formats "<<-'EOS'\n\u202B\nEOS"
    formats "<<-'EOS'\n\u202B\nEOS"
-    formats "%q(\u202C)"
    formats "%q(\u202C)"
-    formats "/\u202C\#{1}/"
    formats "/\u202C\#{1}/"
-    formats "foo(\"\u202C\": 1)"
    formats "foo(\"\u202C\": 1)"
-    formats "<<-'EOS'\n\u202A\nEOS"
    formats "<<-'EOS'\n\u202A\nEOS"
-    formats "\"\\c\u2069\""
    formats "\"\\c\u2069\""
-    formats "%Q(\u2068\#{1})"
    formats "%Q(\u2068\#{1})"
-    formats "foo(\"\u202D\": 1)"
    formats "foo(\"\u202D\": 1)"
-    formats "%Q(\u2067\#{1})"
    formats "%Q(\u2067\#{1})"
-    formats "%Q(\u2069\#{1})"
    formats "%Q(\u2069\#{1})"
-    formats "{\"\u2069\": 1}"
    formats "{\"\u2069\": 1}"
-    formats "\"\u202E\#{1}\""
    formats "\"\u202E\#{1}\""
-    formats "def foo(\"\u202B\" x)\nend"
    formats "def foo(\"\u202B\" x)\nend"
-    formats "<<-'EOS'\n\u202C\nEOS"
    formats "<<-'EOS'\n\u202C\nEOS"
-    formats "%w(\u202B)"
    formats "%w(\u202B)"
-    formats "%Q(\u2069)"
    formats "%Q(\u2069)"
-    formats "%Q(\u2066)"
    formats "%Q(\u2066)"
-    formats "\"\\c\u202E\#{1}\""
    formats "\"\\c\u202E\#{1}\""
-    formats "<<-EOS\n\u2068\#{1}\nEOS"
    formats "<<-EOS\n\u2068\#{1}\nEOS"
-    formats "\"\u2069\""
    formats "\"\u2069\""
-    formats "<<-'EOS'\n\u202D\nEOS"
    formats "<<-'EOS'\n\u202D\nEOS"
-    formats "\"\\c\u2066\#{1}\""
    formats "\"\\c\u2066\#{1}\""
-    formats "\"\\c\u2067\""
    formats "\"\\c\u2067\""
-    formats "<<-EOS\n\u2067\nEOS"
    formats "<<-EOS\n\u2067\nEOS"
-    formats "<<-'EOS'\n\u2068\nEOS"
    formats "<<-'EOS'\n\u2068\nEOS"
-    formats "%w(\u2068)"
    formats "%w(\u2068)"
-    formats "\"\\c\u202E\""
    formats "\"\\c\u202E\""
-    formats "\"\\c\u202D\#{1}\""
    formats "\"\\c\u202D\#{1}\""
-    formats "{\"\u2066\": 1}"
    formats "{\"\u2066\": 1}"
-    formats "%r(\u2067)"
    formats "%r(\u2067)"
-    formats "/\u2067\#{1}/"
    formats "/\u2067\#{1}/"
-    formats "%q(\u202E)"
    formats "%q(\u202E)"
-    formats "%(\u202E)"
    formats "%(\u202E)"
-    formats "\"\u202A\""
    formats "\"\u202A\""
-    formats "%Q(\u202D)"
    formats "%Q(\u202D)"
-    formats "def foo(\"\u202A\" x)\nend"
    formats "def foo(\"\u202A\" x)\nend"
-    formats "%r(\u202E)"
    formats "%r(\u202E)"
-    formats "<<-EOS\n\u202E\nEOS"
    formats "<<-EOS\n\u202E\nEOS"
-    formats "\"\\c\u2066\""
    formats "\"\\c\u2066\""
-    formats "%i(\u2068)"
    formats "%i(\u2068)"
-    formats "\"\u2067\#{1}\""
    formats "\"\u2067\#{1}\""
-    formats "<<-EOS\n\u202D\nEOS"
    formats "<<-EOS\n\u202D\nEOS"
-    formats "%i(\u202E)"
    formats "%i(\u202E)"
-    formats "%w(\u202A)"
    formats "%w(\u202A)"
-    formats "NamedTuple(\"\u202B\": Int32)"
    formats "NamedTuple(\"\u202B\": Int32)"
-    formats "<<-'EOS'\n\u2069\nEOS"
    formats "<<-'EOS'\n\u2069\nEOS"
-    formats "\"\u202A\#{1}\""
    formats "\"\u202A\#{1}\""
-    formats "{\"\u202B\": 1}"
    formats "{\"\u202B\": 1}"
-    formats "/\u202E\#{1}/"
    formats "/\u202E\#{1}/"
-    formats "\"\u2066\""
    formats "\"\u2066\""
-    formats "foo(\"\u202B\": 1)"
    formats "foo(\"\u202B\": 1)"
-    formats "%w(\u2066)"
    formats "%w(\u2066)"
-    formats "%(\u202B)"
    formats "%(\u202B)"
-    formats "def foo(\"\u2067\" x)\nend"
    formats "def foo(\"\u2067\" x)\nend"
-    formats "%(\u202D)"
    formats "%(\u202D)"
-    formats "<<-EOS\n\u2069\nEOS"
    formats "<<-EOS\n\u2069\nEOS"
-    formats "<<-'EOS'\n\u2067\nEOS"
    formats "<<-'EOS'\n\u2067\nEOS"
-    formats "%Q(\u202A)"
    formats "%Q(\u202A)"
-    formats "<<-EOS\n\u202C\nEOS"
    formats "<<-EOS\n\u202C\nEOS"
-    formats "%r(\u2066)"
    formats "%r(\u2066)"
-    formats "foo(\"\u2067\": 1)"
    formats "foo(\"\u2067\": 1)"
-    formats "/\u2066/"
    formats "/\u2066/"
-    formats "%Q(\u202B)"
    formats "%Q(\u202B)"
-    formats "/\u202D/"
    formats "/\u202D/"
-    formats "<<-EOS\n\u202D\#{1}\nEOS"
    formats "<<-EOS\n\u202D\#{1}\nEOS"
-    formats "<<-EOS\n\u202B\#{1}\nEOS"
    formats "<<-EOS\n\u202B\#{1}\nEOS"
-    formats "{\"\u202A\": 1}"
    formats "{\"\u202A\": 1}"
-    formats "%r(\u202C\#{1})"
    formats "%r(\u202C\#{1})"
-    formats "%Q(\u202B\#{1})"
    formats "%Q(\u202B\#{1})"
-    formats "%r(\u2069\#{1})"
    formats "%r(\u2069\#{1})"
-    formats "%(\u2069)"
    formats "%(\u2069)"
-    formats "/\u2066\#{1}/"
    formats "/\u2066\#{1}/"
-    formats "%r(\u2068)"
    formats "%r(\u2068)"
-    formats "\"\\c\u202C\""
    formats "\"\\c\u202C\""
-    formats "\"\u2069\#{1}\""
    formats "\"\u2069\#{1}\""
-    formats "/\u2068\#{1}/"
    formats "/\u2068\#{1}/"
-    formats "%r(\u202B\#{1})"
    formats "%r(\u202B\#{1})"
-    formats "<<-EOS\n\u2067\#{1}\nEOS"
    formats "<<-EOS\n\u2067\#{1}\nEOS"
-    formats "/\u2069/"
    formats "/\u2069/"
-    formats "foo(\"\u2069\": 1)"
    formats "foo(\"\u2069\": 1)"
-    formats "/\u202D\#{1}/"
    formats "/\u202D\#{1}/"
-    formats "<<-EOS\n\u202A\#{1}\nEOS"
    formats "<<-EOS\n\u202A\#{1}\nEOS"
-    formats "NamedTuple(\"\u2067\": Int32)"
    formats "NamedTuple(\"\u2067\": Int32)"
-    formats "<<-EOS\n\u202C\#{1}\nEOS"
    formats "<<-EOS\n\u202C\#{1}\nEOS"
-    formats "%r(\u202D)"
    formats "%r(\u202D)"
-    formats "/\u2068/"
    formats "/\u2068/"
-    formats "<<-EOS\n\u2066\#{1}\nEOS"
    formats "<<-EOS\n\u2066\#{1}\nEOS"
-    formats "{\"\u202C\": 1}"
    formats "{\"\u202C\": 1}"
-    formats "%i(\u2067)"
    formats "%i(\u2067)"
-    formats "\"\u202D\""
    formats "\"\u202D\""
-    formats "<<-EOS\n\u2069\#{1}\nEOS"
    formats "<<-EOS\n\u2069\#{1}\nEOS"
-    formats "%w(\u2067)"
    formats "%w(\u2067)"
-    formats "/\u202E/"
    formats "/\u202E/"
-    formats "\"\u202B\#{1}\""
    formats "\"\u202B\#{1}\""
-    formats "%Q(\u202A\#{1})"
    formats "%Q(\u202A\#{1})"
-    formats "%r(\u202A)"
    formats "%r(\u202A)"
-    formats "/\u202B/"
    formats "/\u202B/"
-    formats "%r(\u202D\#{1})"
    formats "%r(\u202D\#{1})"
-    formats "%q(\u2066)"
    formats "%q(\u2066)"
-    formats "\"\\c\u202A\""
    formats "\"\\c\u202A\""
-    formats "\"\u202C\#{1}\""
    formats "\"\u202C\#{1}\""
-    formats "<<-'EOS'\n\u2066\nEOS"
    formats "<<-'EOS'\n\u2066\nEOS"
-    formats "{\"\u202D\": 1}"
    formats "{\"\u202D\": 1}"
-    formats "\"\u202D\#{1}\""
    formats "\"\u202D\#{1}\""
-    formats "NamedTuple(\"\u202E\": Int32)"
    formats "NamedTuple(\"\u202E\": Int32)"
-    formats "NamedTuple(\"\u2066\": Int32)"
    formats "NamedTuple(\"\u2066\": Int32)"
-    formats "%r(\u2066\#{1})"
    formats "%r(\u2066\#{1})"
-    formats "def foo(\"\u2069\" x)\nend"
    formats "def foo(\"\u2069\" x)\nend"
-    formats "/\u2067/"
    formats "/\u2067/"
-    formats "%(\u202A)"
    formats "%(\u202A)"
-    formats "%w(\u202C)"
    formats "%w(\u202C)"
-    formats "\"\\c\u2068\#{1}\""
    formats "\"\\c\u2068\#{1}\""
-    formats "%w(\u202E)"
    formats "%w(\u202E)"
-    formats "def foo(\"\u2066\" x)\nend"
    formats "def foo(\"\u2066\" x)\nend"
-    formats "%q(\u202B)"
    formats "%q(\u202B)"
-    formats "%w(\u202D)"
    formats "%w(\u202D)"
-    formats "{\"\u2068\": 1}"
    formats "{\"\u2068\": 1}"
-    formats "/\u2069\#{1}/"
    formats "/\u2069\#{1}/"
-    formats "\"\u202E\""
    formats "\"\u202E\""
-    formats "NamedTuple(\"\u202C\": Int32)"
    formats "NamedTuple(\"\u202C\": Int32)"
-    formats "\"\\c\u202D\""
    formats "\"\\c\u202D\""
-    formats "\"\u202C\""
    formats "\"\u202C\""
-    formats "%(\u2066)"
    formats "%(\u2066)"
-    formats "foo(\"\u202E\": 1)"
    formats "foo(\"\u202E\": 1)"
-    formats "\"\u2068\#{1}\""
    formats "\"\u2068\#{1}\""
-    formats "\"\\c\u2068\""
    formats "\"\\c\u2068\""
-    formats "def foo(\"\u2068\" x)\nend"
    formats "def foo(\"\u2068\" x)\nend"
-    formats "/\u202B\#{1}/"
    formats "/\u202B\#{1}/"
-    formats "%q(\u2067)"
    formats "%q(\u2067)"
-    formats "def foo(\"\u202D\" x)\nend"
    formats "def foo(\"\u202D\" x)\nend"
-    formats "%(\u202C)"
    formats "%(\u202C)"
-    formats "<<-EOS\n\u202E\#{1}\nEOS"
    formats "<<-EOS\n\u202E\#{1}\nEOS"
-    formats "\"\u2067\""
    formats "\"\u2067\""
-    formats "%q(\u202D)"
    formats "%q(\u202D)"
-    formats "%i(\u202C)"
    formats "%i(\u202C)"
-  formats "@[ Foo(foo: 1) ]\ndef foo\nend"
  formats "@[ Foo(foo: 1) ]\ndef foo\nend"
-  formats "$~.bar"
  formats "$~.bar"
-  formats "foo : (self)?"
  formats "foo : (self)?"
-  formats "foo bar:baz, qux:other"
  formats "foo bar:baz, qux:other"
-  formats "1.<=(2) { 3 }"
  formats "1.<=(2) { 3 }"
-  formats "a = 1\ncase\nwhen 2\nelse\n  a /= 3\nend"
  formats "a = 1\ncase\nwhen 2\nelse\n  a /= 3\nend"
-  formats "return  1  , *2"
  formats "return  1  , *2"
-  formats "return( *1  , *2 )"
  formats "return( *1  , *2 )"
-  formats "asm(\"a\" : \"b\"(1), \"c\"(2) : \"d\"(3) : : \"volatile\")"
  formats "asm(\"a\" : \"b\"(1), \"c\"(2) : \"d\"(3) : : \"volatile\")"
-  formats "->foo="
  formats "->foo="
-  formats "{ 1   =>   2 ,\n   3  =>  4 }"
  formats "{ 1   =>   2 ,\n   3  =>  4 }"
-  formats "case  1 \n when 2 \n 3 \n else 4 \n end"
  formats "case  1 \n when 2 \n 3 \n else 4 \n end"
-  formats "if 1\n2\nelsif\n3\n4\nelse\n6\nend"
  formats "if 1\n2\nelsif\n3\n4\nelse\n6\nend"
-  formats "macro foo\n  {% if 1 %} 2 {% end %}\nend"
  formats "macro foo\n  {% if 1 %} 2 {% end %}\nend"
-  formats "alias Foo =Bar"
  formats "alias Foo =Bar"
-  formats "NamedTuple(\n  a: Int32,\n)"
  formats "NamedTuple(\n  a: Int32,\n)"
-  formats "foo.bar(&.% baz)"
  formats "foo.bar(&.% baz)"
-  formats "module Foo\n# nothing\nend"
  formats "module Foo\n# nothing\nend"
-  formats "[\n  1, 2, # foo\n  3, 4,\n]"
  formats "[\n  1, 2, # foo\n  3, 4,\n]"
-  formats "yield(\n1 , \n2)"
  formats "yield(\n1 , \n2)"
-  formats "[] of Int32\n1"
  formats "[] of Int32\n1"
-  formats "foo.bar(&.baz)"
  formats "foo.bar(&.baz)"
-  formats "begin\n  array[\n    0 # Zero\n  ]\nend"
  formats "begin\n  array[\n    0 # Zero\n  ]\nend"
-  formats "if 1\n2\n3\n# foo\nend"
  formats "if 1\n2\n3\n# foo\nend"
-  formats "{\n  \"foo\":    1,\n  \"babraz\": 2,\n}"
  formats "{\n  \"foo\":    1,\n  \"babraz\": 2,\n}"
-  formats "foo   &.bar"
  formats "foo   &.bar"
-  formats "1 # foo\n/ 1 /"
  formats "1 # foo\n/ 1 /"
-  formats "FOO = 2 + 3\nA = 1 - 10"
  formats "FOO = 2 + 3\nA = 1 - 10"
-  formats "foo(\n  <<-HERE,\n  hello\n  HERE\n  1,\n)"
  formats "foo(\n  <<-HERE,\n  hello\n  HERE\n  1,\n)"
-  formats "あ.い, う.え.お = 1, 2"
  formats "あ.い, う.え.お = 1, 2"
-  formats "foo(\n  1,\n  a: 1,\n  b: 2,\n)"
  formats "foo(\n  1,\n  a: 1,\n  b: 2,\n)"
-  formats "{% if true %}\n  <<-FOO\n    hello  \n  FOO\n{% end %}"
  formats "{% if true %}\n  <<-FOO\n    hello  \n  FOO\n{% end %}"
-  formats "require \"foo\"\n\n@x : Int32\n\nclass Bar\nend"
  formats "require \"foo\"\n\n@x : Int32\n\nclass Bar\nend"
-  formats "foo { | a, ( b , (c, d) ) | a + b + c }"
  formats "foo { | a, ( b , (c, d) ) | a + b + c }"
-  formats "return  1 ,  2"
  formats "return  1 ,  2"
-  formats "self.as(Int32)"
  formats "self.as(Int32)"
-  formats "a = foo(baz1 do\nend)"
  formats "a = foo(baz1 do\nend)"
-  formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1), \"c\"(2) )"
  formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1), \"c\"(2) )"
-  formats "1 \\\nrescue 2"
  formats "1 \\\nrescue 2"
-  formats "<<-HTML\n  \#{1}x\n  HTML"
  formats "<<-HTML\n  \#{1}x\n  HTML"
-  formats "case  1 \n when 2 ; 3 \n when 4 ; 5\nend"
  formats "case  1 \n when 2 ; 3 \n when 4 ; 5\nend"
-  formats "\"foo \#{ __DIR__ }\""
  formats "\"foo \#{ __DIR__ }\""
-  formats "foo &.responds_to?(:foo).bar"
  formats "foo &.responds_to?(:foo).bar"
-  formats "[] of Foo"
  formats "[] of Foo"
-  formats "Foo:: Bar"
  formats "Foo:: Bar"
-  formats "alignof( Int32 )"
  formats "alignof( Int32 )"
-  formats "def foo(@[MyAnn] & : String -> Nil); end"
  formats "def foo(@[MyAnn] & : String -> Nil); end"
-  formats "(1)"
  formats "(1)"
-  formats "lib Foo\nend"
  formats "lib Foo\nend"
-  formats "def foo(&block: Int32)\nend"
  formats "def foo(&block: Int32)\nend"
-  formats "foo(//, //)"
  formats "foo(//, //)"
-  formats "if 1\n  [\n    1,\n  ].none?\nend"
  formats "if 1\n  [\n    1,\n  ].none?\nend"
-  formats "<<-HTML\n  foo\n  \#{\"foo\"}\n  HTML"
  formats "<<-HTML\n  foo\n  \#{\"foo\"}\n  HTML"
-  formats "yield"
  formats "yield"
-  formats "case  1 \n when  .foo? \n 3 \n end"
  formats "case  1 \n when  .foo? \n 3 \n end"
-  formats "->foo?"
  formats "->foo?"
-  formats "return { {1, 2}, {3, 4} }, 5"
  formats "return { {1, 2}, {3, 4} }, 5"
-  formats "foo.bar\n  .baz(\n    1\n  )"
  formats "foo.bar\n  .baz(\n    1\n  )"
-  formats "responds_to? :foo"
  formats "responds_to? :foo"
-  formats "instance_sizeof( Int32 )"
  formats "instance_sizeof( Int32 )"
-  formats "foo = [1, [2,\n           3],\n       4]"
  formats "foo = [1, [2,\n           3],\n       4]"
-  formats "1.>= { 3 }"
  formats "1.>= { 3 }"
-  formats "foo[&.bar]"
  formats "foo[&.bar]"
-  formats "# ```\n# macro foo\n#   1\n# end\n# ```\n"
  formats "# ```\n# macro foo\n#   1\n# end\n# ```\n"
-  formats "/ /"
  formats "/ /"
-  formats "Union(Int32, String)?"
  formats "Union(Int32, String)?"
-  formats "while true\n1\n\n# foo\nend"
  formats "while true\n1\n\n# foo\nend"
-  formats "select   \n when  foo  ;  2 \n end"
  formats "select   \n when  foo  ;  2 \n end"
-  formats "if 1\n[\n  a() # b\n]\nend"
  formats "if 1\n[\n  a() # b\n]\nend"
-  formats "macro foo\n  {{ 1 + 2 }}\\\nend"
  formats "macro foo\n  {{ 1 + 2 }}\\\nend"
-  formats "foo &.is_a?(T).bar"
  formats "foo &.is_a?(T).bar"
-  formats "case 1 # foo\nwhen 2\nend"
  formats "case 1 # foo\nwhen 2\nend"
-  formats "if 1\nelse\n# nothing\nend"
  formats "if 1\nelse\n# nothing\nend"
-  formats "while 1\n# nothing\nend"
  formats "while 1\n# nothing\nend"
-  formats "{ {foo: 2} }"
  formats "{ {foo: 2} }"
-  formats "def foo( x , & block  : Int32 )\nend"
  formats "def foo( x , & block  : Int32 )\nend"
-  formats "1\n# hello\n\n\n"
  formats "1\n# hello\n\n\n"
-  formats "foo(1, ) do\nend"
  formats "foo(1, ) do\nend"
-  formats "1.>=() { 3 }"
  formats "1.>=() { 3 }"
-  formats "module M\n  @[MyAnn(\n    1\n\n  )]\nend"
  formats "module M\n  @[MyAnn(\n    1\n\n  )]\nend"
-  formats "if 1\nif 2\n3 # foo\nend\nend"
  formats "if 1\nif 2\n3 # foo\nend\nend"
-  formats "1.== do\nend"
  formats "1.== do\nend"
-  formats "x : { {A, B}, {C, D} }"
  formats "x : { {A, B}, {C, D} }"
-  formats "$1.bar"
  formats "$1.bar"
-  formats "enum Baz\nA = 1\nFOO\n\nEX = 3\nend"
  formats "enum Baz\nA = 1\nFOO\n\nEX = 3\nend"
-  formats "foo(1, 2,)"
  formats "foo(1, 2,)"
-  formats "enum Foo\n  A      =   10\n  FOO    =  123\n  BARBAZ = 1234\nend\n"
  formats "enum Foo\n  A      =   10\n  FOO    =  123\n  BARBAZ = 1234\nend\n"
-  formats "long_variable_name = [{\n  :foo => 1,\n}, {\n  :bar => 2,\n}]"
  formats "long_variable_name = [{\n  :foo => 1,\n}, {\n  :bar => 2,\n}]"
-  formats "->( x )\n:\nInt32 { }"
  formats "->( x )\n:\nInt32 { }"
-  formats "foo   &.==(2)"
  formats "foo   &.==(2)"
-  formats "{/ / => / /, / / => / /}"
  formats "{/ / => / /, / / => / /}"
-  formats "begin\n  begin\n\n  end\nend"
  formats "begin\n  begin\n\n  end\nend"
-  formats "foo.\nbar"
  formats "foo.\nbar"
-Semantic: abstract def
-  errors if abstract method is not implemented by subclass of subclass
  errors if abstract method is not implemented by subclass of subclass
-  doesn't error if implements with included module
  doesn't error if implements with included module
-  errors if implementation doesn't match keyword argument type
  errors if implementation doesn't match keyword argument type
-  doesn't error if implements a NoReturn param
  doesn't error if implements a NoReturn param
-  errors if abstract method of private type is not implemented by subclass
  errors if abstract method of private type is not implemented by subclass
-  doesn't error if abstract method with args is implemented by subclass (restriction -> no restriction)
  doesn't error if abstract method with args is implemented by subclass (restriction -> no restriction)
-  implements through extend (considers original type for generic lookup) (#8096)
  implements through extend (considers original type for generic lookup) (#8096)
-  doesn't error if abstract method with args is implemented by subclass
  doesn't error if abstract method with args is implemented by subclass
-  matches instantiated generic module
  matches instantiated generic module
-  doesn't error if implements with generic included module instance
  doesn't error if implements with generic included module instance
-  errors if abstract method with arguments is not implemented by subclass (block difference)
  errors if abstract method with arguments is not implemented by subclass (block difference)
-  doesn't error if abstract method is implemented by subclass
  doesn't error if abstract method is implemented by subclass
-  allow double splat when abstract doesn't have it
  allow double splat when abstract doesn't have it
-  doesn't error if abstract method is not implemented by including module
  doesn't error if abstract method is not implemented by including module
-  extra keyword arguments must have compatible type to double splat
  extra keyword arguments must have compatible type to double splat
-  finds implements in included module in disorder (#4052)
  finds implements in included module in disorder (#4052)
-  errors if using abstract def on subclass that also defines it as abstract
  errors if using abstract def on subclass that also defines it as abstract
-  error shows full signature of block parameter
  error shows full signature of block parameter
-  doesn't error if implements with parent class
  doesn't error if implements with parent class
-  works on abstract def on sub-subclass
  works on abstract def on sub-subclass
-  doesn't error if implements with generic parent class instance
  doesn't error if implements with generic parent class instance
-  matches generic types
  matches generic types
-  doesn't error if implementation have default value
  doesn't error if implementation have default value
-  errors if different return type
  errors if different return type
-  allow double splat argument
  allow double splat argument
-  errors if using abstract def on non-abstract class
  errors if using abstract def on non-abstract class
-  errors if implementation doesn't have the same default value
  errors if implementation doesn't have the same default value
-  gives correct error when no overload matches, when an abstract method is implemented (#1406)
  gives correct error when no overload matches, when an abstract method is implemented (#1406)
-  doesn't error if implements with parent module
  doesn't error if implements with parent module
-  double splat must match keyword argument type
  double splat must match keyword argument type
-  errors if abstract method is not implemented by subclass (nested in module)
  errors if abstract method is not implemented by subclass (nested in module)
-  matches instantiated generic types
  matches instantiated generic types
-  implements through extend (considers original type for generic lookup) (2) (#8096)
  implements through extend (considers original type for generic lookup) (2) (#8096)
-  errors if implementation doesn't have a splat
  errors if implementation doesn't have a splat
-  matches generic return type
  matches generic return type
-  errors if abstract method of private type is not implemented by including class
  errors if abstract method of private type is not implemented by including class
-  doesn't error if abstract method with args is implemented by subclass (don't check subclasses)
  doesn't error if abstract method with args is implemented by subclass (don't check subclasses)
-  errors if abstract method is not implemented by including class
  errors if abstract method is not implemented by including class
-  errors if implementation doesn't have keyword arguments
  errors if implementation doesn't have keyword arguments
-  errors if using abstract def on subclass
  errors if using abstract def on subclass
-  errors if abstract method is not implemented by subclass
  errors if abstract method is not implemented by subclass
-  errors if abstract method with arguments is not implemented by subclass
  errors if abstract method with arguments is not implemented by subclass
-  matches generic module (a bit more complex)
  matches generic module (a bit more complex)
-  doesn't error if abstract method is implemented by including class
  doesn't error if abstract method is implemented by including class
-  errors if abstract method with arguments is not implemented by subclass (wrong type)
  errors if abstract method with arguments is not implemented by subclass (wrong type)
-  doesn't error if free var in arg restriction shadows another type (#10153)
  doesn't error if free var in arg restriction shadows another type (#10153)
-  doesn't error if implementation matches keyword argument
  doesn't error if implementation matches keyword argument
-  errors if double splat type doesn't match
  errors if double splat type doesn't match
-  errors if using abstract def on metaclass
  errors if using abstract def on metaclass
-  errors if abstract method with arguments is not implemented by subclass (wrong number of arguments)
  errors if abstract method with arguments is not implemented by subclass (wrong number of arguments)
-  errors if can't find parent return type
  errors if can't find parent return type
-  errors if implementation doesn't match splat type
  errors if implementation doesn't match splat type
-  can implement even if yield comes later in macro code
  can implement even if yield comes later in macro code
-  matches generic module
  matches generic module
-  can implement by block signature even if yield comes later in macro code
  can implement by block signature even if yield comes later in macro code
-  errors if missing return type
  errors if missing return type
-  errors if implementation adds type restriction
  errors if implementation adds type restriction
-  doesn't error if abstract method is implemented by subclass via module inclusion
  doesn't error if abstract method is implemented by subclass via module inclusion
-  doesn't error if implementation have keyword arguments in different order
  doesn't error if implementation have keyword arguments in different order
-  doesn't error if implementation has more keyword arguments with default values
  doesn't error if implementation has more keyword arguments with default values
-  doesn't error with splat and args with default value
  doesn't error with splat and args with default value
-  works on abstract method on abstract class
  works on abstract method on abstract class
-  implementation is not inherited from supertype
-    nongeneric module
    nongeneric module
-    nongeneric class
    nongeneric class
-    generic module
    generic module
-    generic class
    generic class
-  allow splat instead of keyword argument
  allow splat instead of keyword argument
-  errors if implementation has more keyword arguments
  errors if implementation has more keyword arguments
-  allows arguments to be collapsed into splat
  allows arguments to be collapsed into splat
-  errors if implementation doesn't have a keyword argument
  errors if implementation doesn't have a keyword argument
-  doesn't error if abstract method with args is implemented by subclass (with one default arg)
  doesn't error if abstract method with args is implemented by subclass (with one default arg)
-  can return a more specific type
  can return a more specific type
-  errors if keyword argument doesn't have the same default value
  errors if keyword argument doesn't have the same default value
-  errors if can't find child return type
  errors if can't find child return type
-  errors if implementation doesn't have default value
  errors if implementation doesn't have default value
-  errors if missing a return type in subclass of generic subclass
  errors if missing a return type in subclass of generic subclass
-  errors if implementation misses the double splat
  errors if implementation misses the double splat
-  doesn't error with splat
  doesn't error with splat
-Normalize: unless
-  normalizes unless
  normalizes unless
-immutability of returned container literals (#10818)
-  ProcPointer#args
  ProcPointer#args
-  When#conds
  When#conds
-  MultiAssign#targets
  MultiAssign#targets
-  Union#types
  Union#types
-  Annotation#args
  Annotation#args
-  Generic#type_vars
  Generic#type_vars
-  StringInterpolation#expressions
  StringInterpolation#expressions
-  MultiAssign#values
  MultiAssign#values
-  ProcNotation#inputs
  ProcNotation#inputs
-Code gen: multi assign
-  supports m to n assignment, with splat on left-hand side (3)
  supports m to n assignment, with splat on left-hand side (3)
-  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)  supports 1 to n assignment, raises if out of bounds (1)������������  supports 1 to n assignment, raises if out of bounds (1)��  supports 1 to n assignment, raises if out of bounds (1)��  supports 1 to n assignment, raises if out of bounds (1)
  supports 1 to n assignment, raises if out of bounds (1)
-  supports m to n assignment, splat is empty tuple (2)
  supports m to n assignment, splat is empty tuple (2)
-  supports m to n assignment, with splat on left-hand side (2)
  supports m to n assignment, with splat on left-hand side (2)
-  supports 1 to n assignment, with splat on left-hand side (2)
  supports 1 to n assignment, with splat on left-hand side (2)
-  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)  supports 1 to n assignment, splat is empty (1)������������  supports 1 to n assignment, splat is empty (1)��  supports 1 to n assignment, splat is empty (1)��  supports 1 to n assignment, splat is empty (1)
  supports 1 to n assignment, splat is empty (1)
-  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short  supports 1 to n assignment, raises if too short������������  supports 1 to n assignment, raises if too short��  supports 1 to n assignment, raises if too short��  supports 1 to n assignment, raises if too short
  supports 1 to n assignment, raises if too short
-  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)  supports 1 to n assignment, with splat on left-hand side (1)������������  supports 1 to n assignment, with splat on left-hand side (1)��  supports 1 to n assignment, with splat on left-hand side (1)��  supports 1 to n assignment, with splat on left-hand side (1)
  supports 1 to n assignment, with splat on left-hand side (1)
-  strict_multi_assign
-    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count    raises if value size in 1 to n assignment doesn't match target count����������    raises if value size in 1 to n assignment doesn't match target count����    raises if value size in 1 to n assignment doesn't match target count��    raises if value size in 1 to n assignment doesn't match target count
    raises if value size in 1 to n assignment doesn't match target count
-    supports 1 to n assignment    supports 1 to n assignment    supports 1 to n assignment    supports 1 to n assignment    supports 1 to n assignment    supports 1 to n assignment����������    supports 1 to n assignment����    supports 1 to n assignment��    supports 1 to n assignment
    supports 1 to n assignment
-  supports m to n assignment, splat is empty tuple (1)
  supports m to n assignment, splat is empty tuple (1)
-  supports m to n assignment, splat is empty tuple (3)
  supports m to n assignment, splat is empty tuple (3)
-  supports m to n assignment, with splat on left-hand side (1)
  supports m to n assignment, with splat on left-hand side (1)
-  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)������������  supports 1 to n assignment, raises if out of bounds (2)  supports 1 to n assignment, raises if out of bounds (2)����  supports 1 to n assignment, raises if out of bounds (2)
  supports 1 to n assignment, raises if out of bounds (2)
-  supports 1 to n assignment, splat is empty (3)
  supports 1 to n assignment, splat is empty (3)
-  supports n to n assignment
  supports n to n assignment
-  supports 1 to n assignment, with splat on left-hand side (3)
  supports 1 to n assignment, with splat on left-hand side (3)
-  without strict_multi_assign
-    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count    doesn't raise if value size in 1 to n assignment doesn't match target count��������������    doesn't raise if value size in 1 to n assignment doesn't match target count��    doesn't raise if value size in 1 to n assignment doesn't match target count
    doesn't raise if value size in 1 to n assignment doesn't match target count
-    supports 1 to n assignment
    supports 1 to n assignment
-  supports 1 to n assignment, splat is empty (2)
  supports 1 to n assignment, splat is empty (2)
-Crystal::Command::FormatCommand
-  formats stdin (invalid byte sequence error)
  formats stdin (invalid byte sequence error)
-  formats files
  formats files
-  formats files (error)
  formats files (error)
-  formats stdin
  formats stdin
-  checks files format (excludes)
  checks files format (excludes)
-  formats files (bug + show-stacktrace)
  formats files (bug + show-stacktrace)
-  checks files format (ok)
  checks files format (ok)
-  formats stdin (syntax error)
  formats stdin (syntax error)
-  formats files (dir)
  formats files (dir)
-  checks files format (excludes + includes)
  checks files format (excludes + includes)
-  formats stdin (bug)
  formats stdin (bug)
-  formats stdin (formatted)
  formats stdin (formatted)
-  formats files (bug)
  formats files (bug)
-  checks files format
  checks files format
-  formats stdin (bug + show-backtrace)
  formats stdin (bug + show-backtrace)
-Codegen: is_a?
-  codegens is_a? with nilable gives false because other type 2
  codegens is_a? with nilable gives false because other type 2
-  codegens is_a? true for simple type
  codegens is_a? true for simple type
-  codegens is_a? from virtual type to module
  codegens is_a? from virtual type to module
-  does is_a? for virtual generic instance type against generic
  does is_a? for virtual generic instance type against generic
-  does is_a?(generic type) for nested generic inheritance, through upcast (2)
  does is_a?(generic type) for nested generic inheritance, through upcast (2)
-  codegens is_a? false for simple type
  codegens is_a? false for simple type
-  gives false if generic type doesn't match exactly
  gives false if generic type doesn't match exactly
-  codegens is_a? on right side of and
  codegens is_a? on right side of and
-  works with inherited generic class against an instantiation
  works with inherited generic class against an instantiation
-  doesn't work with inherited generic class against an instantiation (2)
  doesn't work with inherited generic class against an instantiation (2)
-  doesn't consider generic type to be a generic type of a recursive alias (#3524)
  doesn't consider generic type to be a generic type of a recursive alias (#3524)
-  doesn't error if result is discarded (#14113)
  doesn't error if result is discarded (#14113)
-  codegens is_a? with nilable gives true
  codegens is_a? with nilable gives true
-  transforms then if condition is always truthy
  transforms then if condition is always truthy
-  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true  codegens is_a? with a Const does comparison and gives true������������  codegens is_a? with a Const does comparison and gives true��  codegens is_a? with a Const does comparison and gives true��  codegens is_a? with a Const does comparison and gives true
  codegens is_a? with a Const does comparison and gives true
-  evaluates method on filtered union type 2
  evaluates method on filtered union type 2
-  codegens is_a? from nilable reference union type to nil
  codegens is_a? from nilable reference union type to nil
-  codegens is_a? with union gives true
  codegens is_a? with union gives true
-  passes is_a? with generic module type on virtual type (#10302)
  passes is_a? with generic module type on virtual type (#10302)
-  codegens untyped var (#4009)
  codegens untyped var (#4009)
-  visits 1.to_s twice, may trigger enclosing_call (#4364)  visits 1.to_s twice, may trigger enclosing_call (#4364)����  visits 1.to_s twice, may trigger enclosing_call (#4364)  visits 1.to_s twice, may trigger enclosing_call (#4364)  visits 1.to_s twice, may trigger enclosing_call (#4364)������  visits 1.to_s twice, may trigger enclosing_call (#4364)��  visits 1.to_s twice, may trigger enclosing_call (#4364)��  visits 1.to_s twice, may trigger enclosing_call (#4364)��  visits 1.to_s twice, may trigger enclosing_call (#4364)
  visits 1.to_s twice, may trigger enclosing_call (#4364)
-  evaluate method on filtered type nilable type nil
  evaluate method on filtered type nilable type nil
-  does is_a?/responds_to? twice (#1451)
  does is_a?/responds_to? twice (#1451)
-  codegens is_a? casts union to nilable
  codegens is_a? casts union to nilable
-  codegens is_a? from nilable reference union type to type
  codegens is_a? from nilable reference union type to type
-  does is_a? with union type as Union(X, Y), don't resolve to virtual type (#10244)
  does is_a? with union type as Union(X, Y), don't resolve to virtual type (#10244)
-  does is_a? with generic class metaclass
  does is_a? with generic class metaclass
-  doesn't skip assignment when used in combination with .is_a? and && (#1121)
  doesn't skip assignment when used in combination with .is_a? and && (#1121)
-  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used������������  codegens when is_a? is always false but properties are used  codegens when is_a? is always false but properties are used����  codegens when is_a? is always false but properties are used
  codegens when is_a? is always false but properties are used
-  does is_a? with union type, don't resolve to virtual type (#10244)
  does is_a? with union type, don't resolve to virtual type (#10244)
-  codegens is_a? with nilable gives false because other type 1
  codegens is_a? with nilable gives false because other type 1
-  doesn't skip assignment when used in combination with .is_a? (false case) (#1121)
  doesn't skip assignment when used in combination with .is_a? (false case) (#1121)
-  says false for value.is_a?(Class)
  says false for value.is_a?(Class)
-  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false  codegens is_a? with a Const does comparison and gives false������������  codegens is_a? with a Const does comparison and gives false��  codegens is_a? with a Const does comparison and gives false��  codegens is_a? with a Const does comparison and gives false
  codegens is_a? with a Const does comparison and gives false
-  restricts virtual metaclass against virtual metaclass type
  restricts virtual metaclass against virtual metaclass type
-  does is_a? with && and true condition
  does is_a? with && and true condition
-  codegens is_a? with union gives false
  codegens is_a? with union gives false
-  codegens is_a? with union gives true
  codegens is_a? with union gives true
-  codegens is_a? with virtual and module
  codegens is_a? with virtual and module
-  transforms else if condition is always falsey
  transforms else if condition is always falsey
-  codegens is_a? casts union to nilable in method
  codegens is_a? casts union to nilable in method
-  says true for Class.is_a?(Class.class.class) (#4374)
  says true for Class.is_a?(Class.class.class) (#4374)
-  restricts type in else but lazily
  restricts type in else but lazily
-  does is_a?(generic type) for nested generic inheritance (2)
  does is_a?(generic type) for nested generic inheritance (2)
-  says true for Class.is_a?(Class.class) (#4374)
  says true for Class.is_a?(Class.class) (#4374)
-  evaluates method on filtered union type
  evaluates method on filtered union type
-  codegens is_a? with union gives false
  codegens is_a? with union gives false
-  restricts metaclass against virtual metaclass type
  restricts metaclass against virtual metaclass type
-  evaluates method on filtered union type 3  evaluates method on filtered union type 3  evaluates method on filtered union type 3  evaluates method on filtered union type 3  evaluates method on filtered union type 3  evaluates method on filtered union type 3������������  evaluates method on filtered union type 3��  evaluates method on filtered union type 3��  evaluates method on filtered union type 3
  evaluates method on filtered union type 3
-  restricts union metaclass to metaclass (#12295)
  restricts union metaclass to metaclass (#12295)
-  codegens is_a? with virtual and nil
  codegens is_a? with virtual and nil
-  codegens is_a? with nilable gives false because no type
  codegens is_a? with nilable gives false because no type
-  evaluate method on filtered type
  evaluate method on filtered type
-  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)������������  does is_a? for generic type against generic class instance type (#12304)  does is_a? for generic type against generic class instance type (#12304)����  does is_a? for generic type against generic class instance type (#12304)
  does is_a? for generic type against generic class instance type (#12304)
-  says false for GenericChild(Base).is_a?(GenericBase(Child)) (#1294)
  says false for GenericChild(Base).is_a?(GenericBase(Child)) (#1294)
-  restricts union with union
  restricts union with union
-  virtual metaclass type is not virtual instance type (#12628)
  virtual metaclass type is not virtual instance type (#12628)
-  evaluate method on filtered type nilable type not-nil
  evaluate method on filtered type nilable type not-nil
-  does is_a?(generic type) for nested generic inheritance, through upcast (1)
  does is_a?(generic type) for nested generic inheritance, through upcast (1)
-  codegens is_a? with nilable gives false because no type
  codegens is_a? with nilable gives false because no type
-  does is_a?(generic type) for nested generic inheritance (1) (#9660)
  does is_a?(generic type) for nested generic inheritance (1) (#9660)
-  resets truthy state after visiting nodes (bug)
  resets truthy state after visiting nodes (bug)
-  doesn't skip assignment when used in combination with .is_a? (true case, then) (#1121)
  doesn't skip assignment when used in combination with .is_a? (true case, then) (#1121)
-  works with inherited generic class against an instantiation (3)
  works with inherited generic class against an instantiation (3)
-  restricts simple type with union
  restricts simple type with union
-  doesn't type merge (1) (#548)
  doesn't type merge (1) (#548)
-  doesn't skip assignment when used in combination with .is_a? (true case, else) (#1121)
  doesn't skip assignment when used in combination with .is_a? (true case, else) (#1121)
-  does is_a? with more strict virtual type
  does is_a? with more strict virtual type
-  doesn't type merge (2) (#548)
  doesn't type merge (2) (#548)
-  codegens is_a? with virtual
  codegens is_a? with virtual
-  does is_a? for union of module and type
  does is_a? for union of module and type
+  assignment in array literal works  assignment in array literal works  assignment in array literal works  assignment in array literal works  assignment in array literal works  assignment in array literal works  assignment in array literal works  assignment in array literal works  assignment in array literal works
  assignment in array literal works
+  creates custom generic array in module (#5684)
  creates custom generic array in module (#5684)
+  creates custom generic array, with splats
  creates custom generic array, with splats
+  assignment in array-like literal works  assignment in array-like literal works  assignment in array-like literal works  assignment in array-like literal works  assignment in array-like literal works  assignment in array-like literal works  assignment in array-like literal works  assignment in array-like literal works  assignment in array-like literal works
  assignment in array-like literal works
+  creates custom non-generic array
  creates custom non-generic array
+Normalize: proc pointer
+  normalizes proc pointer with parameters, without object
  normalizes proc pointer with parameters, without object
+  normalizes proc pointer with const receiver
  normalizes proc pointer with const receiver
+  normalizes proc pointer with global const receiver
  normalizes proc pointer with global const receiver
+  normalizes proc pointer with ivar receiver
  normalizes proc pointer with ivar receiver
+  normalizes proc pointer with cvar receiver
  normalizes proc pointer with cvar receiver
+  normalizes proc pointer with variable receiver
  normalizes proc pointer with variable receiver
+  normalizes proc pointer without object
  normalizes proc pointer without object
+  normalizes proc pointer of global call
  normalizes proc pointer of global call
+Semantic: if
+  types an if with else of different type
  types an if with else of different type
+  doesn't fail on new variables inside typeof condition
  doesn't fail on new variables inside typeof condition
+  restricts || of more than 2 clauses (#8864)
  restricts || of more than 2 clauses (#8864)
+  doesn't filter and recombine when variables don't change in if
  doesn't filter and recombine when variables don't change in if
+  passes bug (related to #1729)
  passes bug (related to #1729)
+  doesn't consider nil type in else branch with if with && (#7434)
  doesn't consider nil type in else branch with if with && (#7434)
+  types variable after unreachable else of && (#3360)
  types variable after unreachable else of && (#3360)
+  doesn't fail on Expressions condition (1)
  doesn't fail on Expressions condition (1)
+  restricts && else in sub && (right)
  restricts && else in sub && (right)
+  restricts type with !var.is_a?(...) and &&
  restricts type with !var.is_a?(...) and &&
+  doesn't restrict || else in sub && (right)
  doesn't restrict || else in sub && (right)
+  restricts with || but doesn't unify types to base class
  restricts with || but doesn't unify types to base class
+  doesn't restrict with || on different vars
  doesn't restrict with || on different vars
+  types an if without else
  types an if without else
+  types an if with else of same type
  types an if with else of same type
+  restricts || else in sub || (left)
  restricts || else in sub || (left)
+  restricts || else (1) (#3266)
  restricts || else (1) (#3266)
+  doesn't fail on nested conditionals inside typeof condition
  doesn't fail on nested conditionals inside typeof condition
+  doesn't restrict || else in sub && (left)
  doesn't restrict || else in sub && (left)
+  restricts with || (#2464)
  restricts with || (#2464)
+  restricts type with !var and ||
  restricts type with !var and ||
+  restricts && of !var.is_a(...)
  restricts && of !var.is_a(...)
+  restricts the type of the right hand side of an || when using is_a? (#1728)
  restricts the type of the right hand side of an || when using is_a? (#1728)
+  correctly filters type of variable if there's a raise with an interpolation that can't be typed
  correctly filters type of variable if there's a raise with an interpolation that can't be typed
+  doesn't fail on Expressions condition (2)
  doesn't fail on Expressions condition (2)
+  restricts || else (2) (#3266)
  restricts || else (2) (#3266)
+  restricts and doesn't unify union types
  restricts and doesn't unify union types
+  errors if requires inside if
  errors if requires inside if
+  types `if` with `&&` and assignment
  types `if` with `&&` and assignment
+  restricts with && always falsey
  restricts with && always falsey
+  can invoke method on var that is declared on the right hand side of an and
  can invoke method on var that is declared on the right hand side of an and
+  doesn't restrict with || on var and non-restricting condition
  doesn't restrict with || on var and non-restricting condition
+  restricts || else (3) (#3266)
  restricts || else (3) (#3266)
+  restricts && else in sub && (left)
  restricts && else in sub && (left)
+  includes pointer types in falsey branch
  includes pointer types in falsey branch
+  restricts type with !var.is_a?(...) and ||
  restricts type with !var.is_a?(...) and ||
+  restricts || else in sub || (right)
  restricts || else in sub || (right)
+.validate_name
+  digits
  digits
+  empty
  empty
+  underscores
  underscores
+  dashes
  dashes
+  uppercase
  uppercase
+  invalid character
  invalid character
+  length
  length
+Call errors
+  says type mismatch for symbol against enum (did you mean)
  says type mismatch for symbol against enum (did you mean)
+  replaces generic type var in named argument
  replaces generic type var in named argument
+  says type mismatch for positional argument with two options
  says type mismatch for positional argument with two options
+  says missing named arguments
  says missing named arguments
+  says no parameter named
  says no parameter named
+  says missing named argument
  says missing named argument
+  says argument already specified
  says argument already specified
+  says type mismatch for positional argument
  says type mismatch for positional argument
+  replaces free variables in positional argument
  replaces free variables in positional argument
+  errors on argument if argument matches in all overloads but with different types in other arguments
  errors on argument if argument matches in all overloads but with different types in other arguments
+  says type mismatch for positional argument even if there are overloads that don't match
  says type mismatch for positional argument even if there are overloads that don't match
+  errors on argument if more types are given than expected
  errors on argument if more types are given than expected
+  replaces generic type var in positional argument
  replaces generic type var in positional argument
+  method signatures in error traces
+    expands single splat argument
    expands single splat argument
+    expands positional and single splat argument
    expands positional and single splat argument
+    expands positional and single splat argument, more elements
    expands positional and single splat argument, more elements
+    expands double splat argument, more elements
    expands double splat argument, more elements
+    uses `T.method` instead of `T.class#method`
    uses `T.method` instead of `T.class#method`
+    includes positional and named argument
    includes positional and named argument
+    expands positional and double splat argument, more elements
    expands positional and double splat argument, more elements
+    expands single splat argument, more elements
    expands single splat argument, more elements
+    includes named argument
    includes named argument
+    uses `T.method` instead of `T:module#method`
    uses `T.method` instead of `T:module#method`
+    expands positional and double splat argument, empty named tuple
    expands positional and double splat argument, empty named tuple
+    expands positional and double splat argument
    expands positional and double splat argument
+    expands single splat argument, empty tuple
    expands single splat argument, empty tuple
+    includes named arguments
    includes named arguments
+    expands double splat argument
    expands double splat argument
+    expands double splat argument, empty named tuple
    expands double splat argument, empty named tuple
+    expands positional and single splat argument, empty tuple
    expands positional and single splat argument, empty tuple
+  says type mismatch for positional argument with three options
  says type mismatch for positional argument with three options
+  says no parameters named
  says no parameters named
+  says not expected to be invoked with a block
  says not expected to be invoked with a block
+  says wrong number of arguments even if other overloads don't match by block
  says wrong number of arguments even if other overloads don't match by block
+  says type mismatch for symbol against enum (list all possibilities when 10 or less)
  says type mismatch for symbol against enum (list all possibilities when 10 or less)
+  says type mismatch for symbol against enum, named argument case
  says type mismatch for symbol against enum, named argument case
+  errors on argument if more types are given than expected, shows all expected types
  errors on argument if more types are given than expected, shows all expected types
+  says type mismatch for named argument 
  says type mismatch for named argument 
+  says expected to be invoked with a block
  says expected to be invoked with a block
+  says wrong number of arguments (to few arguments)
  says wrong number of arguments (to few arguments)
+  replaces free variables in named argument
  replaces free variables in named argument
+Crystal::Repl::Interpreter
+  pointers
+    pointerof class var
    pointerof class var
+    pointerof read `StaticArray#@buffer` (1)
    pointerof read `StaticArray#@buffer` (1)
+    interprets pointer diff, negative
    interprets pointer diff, negative
+    pointerof instance var
    pointerof instance var
+    interprets pointerof, mutates pointer, read var
    interprets pointerof, mutates pointer, read var
+    interprets pointer set and get (union type, setter value)
    interprets pointer set and get (union type, setter value)
+    interprets pointer diff
    interprets pointer diff
+    interprets pointer set and get (union type)
    interprets pointer set and get (union type)
+    discards pointer diff
    discards pointer diff
+    interprets pointerof and mutates memory (there are more variables)
    interprets pointerof and mutates memory (there are more variables)
+    discards pointerof
    discards pointerof
+    discards pointer malloc
    discards pointer malloc
+    interprets pointer set and get (bool)
    interprets pointer set and get (bool)
+    interprets pointer realloc
    interprets pointer realloc
+    interprets pointer set and get (int)
    interprets pointer set and get (int)
+    interprets pointer set and get (clear stack)
    interprets pointer set and get (clear stack)
+    pointerof read instance var
    pointerof read instance var
+    pointerof read `StaticArray#@buffer` (2)
    pointerof read `StaticArray#@buffer` (2)
+    interprets pointer new and pointer address
    interprets pointer new and pointer address
+    interprets pointerof, mutates var, read pointer
    interprets pointerof, mutates var, read pointer
+    discards pointer get
    discards pointer get
+    discards pointer set
    discards pointer set
+    interprets nilable pointer truthiness
    interprets nilable pointer truthiness
+    discards pointer add
    discards pointer add
+    discards pointer new
    discards pointer new
+    interprets pointer realloc wrapper
    interprets pointer realloc wrapper
+    discards pointer realloc
    discards pointer realloc
+    interprets pointer add
    interprets pointer add
+Semantic: class var
+  allows class var in primitive types (#612)
  allows class var in primitive types (#612)
+  errors if using self as type var but there's no self
  errors if using self as type var but there's no self
+  errors if redefining class var type in subclass
  errors if redefining class var type in subclass
+  declares class variable
  declares class variable
+  types as nilable if doesn't have initializer
  types as nilable if doesn't have initializer
+  can find class var in subclass
  can find class var in subclass
+  errors if using class variable at the top level
  errors if using class variable at the top level
+  errors if redefining class var type in included module
  errors if redefining class var type in included module
+  types class var
  types class var
+  says undefined class variable
  says undefined class variable
+  errors if redefining class var type in subclass, with guess
  errors if redefining class var type in subclass, with guess
+  errors when typing a class variable inside a method
  errors when typing a class variable inside a method
+  allows self.class as type var in class body (#537)
  allows self.class as type var in class body (#537)
+  gives correct error when trying to use Int as a class variable type
  gives correct error when trying to use Int as a class variable type
+  errors on undefined constant (2)
  errors on undefined constant (2)
+  infers type from T.new
  infers type from T.new
+  declares uninitialized (#2935)
  declares uninitialized (#2935)
+  types class var inside instance method
  types class var inside instance method
+  doesn't error if accessing class variable before defined (#2941)
  doesn't error if accessing class variable before defined (#2941)
+  declares class var in generic class
  declares class var in generic class
+  declares class variable (2)
  declares class variable (2)
+  errors on undefined constant (1)
  errors on undefined constant (1)
+  can access constant from generic metaclass (#3719)
  can access constant from generic metaclass (#3719)
+  infers in multiple assign for tuple type (1)
  infers in multiple assign for tuple type (1)
+  errors if class variable not nilable without initializer
  errors if class variable not nilable without initializer
+  doesn't error on recursive dependency if var is nilable (#2943)
  doesn't error on recursive dependency if var is nilable (#2943)
+  declares class var in generic module
  declares class var in generic module
+  redefines class variable type
  redefines class variable type
+  errors if using local variable in initializer
  errors if using local variable in initializer
+  types class var as nil if not assigned at the top level
  types class var as nil if not assigned at the top level
+  infers type from number literal
  infers type from number literal
+  errors when using Class (#2605)
  errors when using Class (#2605)
+  types class var inside proc literal inside class
  types class var inside proc literal inside class
+  can find class var through included module
  can find class var through included module
+  can assign to class variable if this type can be up-casted to ancestors class variable type (#4869)
  can assign to class variable if this type can be up-casted to ancestors class variable type (#4869)
+  types class var as nil if assigned for the first time inside method (#2059)
  types class var as nil if assigned for the first time inside method (#2059)
+Code gen: exception
+  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue  rescues with types defaults to generic rescue
  rescues with types defaults to generic rescue
+  executes ensure of next inside while inside body  executes ensure of next inside while inside body  executes ensure of next inside while inside body  executes ensure of next inside while inside body  executes ensure of next inside while inside body  executes ensure of next inside while inside body  executes ensure of next inside while inside body  executes ensure of next inside while inside body  executes ensure of next inside while inside body
  executes ensure of next inside while inside body
+  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)  can use argument in rescue, with a different type (2) (#2844)
  can use argument in rescue, with a different type (2) (#2844)
+  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue  executes ensure of break inside while inside rescue
  executes ensure of break inside while inside rescue
+  executes ensure when exception is unhandled (1)  executes ensure when exception is unhandled (1)  executes ensure when exception is unhandled (1)  executes ensure when exception is unhandled (1)  executes ensure when exception is unhandled (1)  executes ensure when exception is unhandled (1)  executes ensure when exception is unhandled (1)  executes ensure when exception is unhandled (1)  executes ensure when exception is unhandled (1)
  executes ensure when exception is unhandled (1)
+  codegens exception handler with return  codegens exception handler with return  codegens exception handler with return  codegens exception handler with return  codegens exception handler with return  codegens exception handler with return  codegens exception handler with return  codegens exception handler with return  codegens exception handler with return
  codegens exception handler with return
+  can use argument in rescue (#2844)  can use argument in rescue (#2844)  can use argument in rescue (#2844)  can use argument in rescue (#2844)  can use argument in rescue (#2844)  can use argument in rescue (#2844)  can use argument in rescue (#2844)  can use argument in rescue (#2844)  can use argument in rescue (#2844)
  can use argument in rescue (#2844)
+  receives exception object  receives exception object  receives exception object  receives exception object  receives exception object  receives exception object  receives exception object  receives exception object  receives exception object
  receives exception object
+  executes ensure when exception is raised (2)  executes ensure when exception is raised (2)  executes ensure when exception is raised (2)  executes ensure when exception is raised (2)  executes ensure when exception is raised (2)  executes ensure when exception is raised (2)  executes ensure when exception is raised (2)  executes ensure when exception is raised (2)  executes ensure when exception is raised (2)
  executes ensure when exception is raised (2)
+  types parenthesized expression (#5511)  types parenthesized expression (#5511)  types parenthesized expression (#5511)  types parenthesized expression (#5511)  types parenthesized expression (#5511)  types parenthesized expression (#5511)  types parenthesized expression (#5511)  types parenthesized expression (#5511)  types parenthesized expression (#5511)
  types parenthesized expression (#5511)
+  doesn't execute else if exception is raised (2)  doesn't execute else if exception is raised (2)  doesn't execute else if exception is raised (2)  doesn't execute else if exception is raised (2)  doesn't execute else if exception is raised (2)  doesn't execute else if exception is raised (2)  doesn't execute else if exception is raised (2)  doesn't execute else if exception is raised (2)  doesn't execute else if exception is raised (2)
  doesn't execute else if exception is raised (2)
+  codegens return from rescue with value  codegens return from rescue with value  codegens return from rescue with value  codegens return from rescue with value  codegens return from rescue with value  codegens return from rescue with value  codegens return from rescue with value  codegens return from rescue with value  codegens return from rescue with value
  codegens return from rescue with value
+  rescues a valid nested union  rescues a valid nested union  rescues a valid nested union  rescues a valid nested union  rescues a valid nested union  rescues a valid nested union  rescues a valid nested union  rescues a valid nested union  rescues a valid nested union
  rescues a valid nested union
+  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers  executes ensure of break inside while inside body with nested handlers
  executes ensure of break inside while inside body with nested handlers
+  doesn't crash on #1988  doesn't crash on #1988  doesn't crash on #1988  doesn't crash on #1988  doesn't crash on #1988  doesn't crash on #1988  doesn't crash on #1988  doesn't crash on #1988  doesn't crash on #1988
  doesn't crash on #1988
+  doesn't execute else if exception is raised conditionally (1)  doesn't execute else if exception is raised conditionally (1)  doesn't execute else if exception is raised conditionally (1)  doesn't execute else if exception is raised conditionally (1)  doesn't execute else if exception is raised conditionally (1)  doesn't execute else if exception is raised conditionally (1)  doesn't execute else if exception is raised conditionally (1)  doesn't execute else if exception is raised conditionally (1)  doesn't execute else if exception is raised conditionally (1)
  doesn't execute else if exception is raised conditionally (1)
+  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)  does ensure after rescue which returns (#171)
  does ensure after rescue which returns (#171)
+  does not rescue just any module  does not rescue just any module  does not rescue just any module  does not rescue just any module  does not rescue just any module  does not rescue just any module  does not rescue just any module  does not rescue just any module  does not rescue just any module
  does not rescue just any module
+  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block
  executes ensure of next inside block
+  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns
  executes ensure when the main block returns
+  can use argument in rescue, with a different type (1) (#2844)  can use argument in rescue, with a different type (1) (#2844)  can use argument in rescue, with a different type (1) (#2844)  can use argument in rescue, with a different type (1) (#2844)  can use argument in rescue, with a different type (1) (#2844)  can use argument in rescue, with a different type (1) (#2844)  can use argument in rescue, with a different type (1) (#2844)  can use argument in rescue, with a different type (1) (#2844)  can use argument in rescue, with a different type (1) (#2844)
  can use argument in rescue, with a different type (1) (#2844)
+  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)  executes ensure when exception is raised (1)
  executes ensure when exception is raised (1)
+  handles exception in outer block (2)  handles exception in outer block (2)  handles exception in outer block (2)  handles exception in outer block (2)  handles exception in outer block (2)  handles exception in outer block (2)  handles exception in outer block (2)  handles exception in outer block (2)  handles exception in outer block (2)
  handles exception in outer block (2)
+  executes else if no exception is raised (2)  executes else if no exception is raised (2)  executes else if no exception is raised (2)  executes else if no exception is raised (2)  executes else if no exception is raised (2)  executes else if no exception is raised (2)  executes else if no exception is raised (2)  executes else if no exception is raised (2)  executes else if no exception is raised (2)
  executes else if no exception is raised (2)
+  executes ensure when raising inside rescue  executes ensure when raising inside rescue  executes ensure when raising inside rescue  executes ensure when raising inside rescue  executes ensure when raising inside rescue  executes ensure when raising inside rescue  executes ensure when raising inside rescue  executes ensure when raising inside rescue  executes ensure when raising inside rescue
  executes ensure when raising inside rescue
+  executes ensure when no exception is raised (1)  executes ensure when no exception is raised (1)  executes ensure when no exception is raised (1)  executes ensure when no exception is raised (1)  executes ensure when no exception is raised (1)  executes ensure when no exception is raised (1)  executes ensure when no exception is raised (1)  executes ensure when no exception is raised (1)  executes ensure when no exception is raised (1)
  executes ensure when no exception is raised (1)
+  runs NoReturn ensure (#3082)  runs NoReturn ensure (#3082)  runs NoReturn ensure (#3082)  runs NoReturn ensure (#3082)  runs NoReturn ensure (#3082)  runs NoReturn ensure (#3082)  runs NoReturn ensure (#3082)  runs NoReturn ensure (#3082)  runs NoReturn ensure (#3082)
  runs NoReturn ensure (#3082)
+  doesn't execute else if exception is raised conditionally (2)  doesn't execute else if exception is raised conditionally (2)  doesn't execute else if exception is raised conditionally (2)  doesn't execute else if exception is raised conditionally (2)  doesn't execute else if exception is raised conditionally (2)  doesn't execute else if exception is raised conditionally (2)  doesn't execute else if exception is raised conditionally (2)  doesn't execute else if exception is raised conditionally (2)  doesn't execute else if exception is raised conditionally (2)
  doesn't execute else if exception is raised conditionally (2)
+  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block  executes ensure of next inside block
  executes ensure of next inside block
+  executes ensure of calling method when doing break inside block (#1233)  executes ensure of calling method when doing break inside block (#1233)  executes ensure of calling method when doing break inside block (#1233)  executes ensure of calling method when doing break inside block (#1233)  executes ensure of calling method when doing break inside block (#1233)  executes ensure of calling method when doing break inside block (#1233)  executes ensure of calling method when doing break inside block (#1233)  executes ensure of calling method when doing break inside block (#1233)  executes ensure of calling method when doing break inside block (#1233)
  executes ensure of calling method when doing break inside block (#1233)
+  can result into union (1)  can result into union (1)  can result into union (1)  can result into union (1)  can result into union (1)  can result into union (1)  can result into union (1)  can result into union (1)  can result into union (1)
  can result into union (1)
+  ensure without rescue  ensure without rescue  ensure without rescue  ensure without rescue  ensure without rescue  ensure without rescue  ensure without rescue  ensure without rescue  ensure without rescue
  ensure without rescue
+  codegens issue #118 (2)
  codegens issue #118 (2)
+  handles nested exceptions  handles nested exceptions  handles nested exceptions  handles nested exceptions  handles nested exceptions  handles nested exceptions  handles nested exceptions  handles nested exceptions  handles nested exceptions
  handles nested exceptions
+  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target
  executes ensure from return until target
+  closures rescue variable (#8141)
  closures rescue variable (#8141)
+  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally  executes rescue if something is raised unconditionally
  executes rescue if something is raised unconditionally
+  executes ensure of break inside while inside body  executes ensure of break inside while inside body  executes ensure of break inside while inside body  executes ensure of break inside while inside body  executes ensure of break inside while inside body  executes ensure of break inside while inside body  executes ensure of break inside while inside body  executes ensure of break inside while inside body  executes ensure of break inside while inside body
  executes ensure of break inside while inside body
+  handles subclass  handles subclass  handles subclass  handles subclass  handles subclass  handles subclass  handles subclass  handles subclass  handles subclass
  handles subclass
+  executes ensure when no exception is raised (2)  executes ensure when no exception is raised (2)  executes ensure when no exception is raised (2)  executes ensure when no exception is raised (2)  executes ensure when no exception is raised (2)  executes ensure when no exception is raised (2)  executes ensure when no exception is raised (2)  executes ensure when no exception is raised (2)  executes ensure when no exception is raised (2)
  executes ensure when no exception is raised (2)
+  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally  executes rescue if something is raised conditionally
  executes rescue if something is raised conditionally
+  does not rescue just any union  does not rescue just any union  does not rescue just any union  does not rescue just any union  does not rescue just any union  does not rescue just any union  does not rescue just any union  does not rescue just any union  does not rescue just any union
  does not rescue just any union
+  can result into union (2)  can result into union (2)  can result into union (2)  can result into union (2)  can result into union (2)  can result into union (2)  can result into union (2)  can result into union (2)  can result into union (2)
  can result into union (2)
+  handle multiple exception types (1)  handle multiple exception types (1)  handle multiple exception types (1)  handle multiple exception types (1)  handle multiple exception types (1)  handle multiple exception types (1)  handle multiple exception types (1)  handle multiple exception types (1)  handle multiple exception types (1)
  handle multiple exception types (1)
+  executes ensure of break inside while inside body with block  executes ensure of break inside while inside body with block  executes ensure of break inside while inside body with block  executes ensure of break inside while inside body with block  executes ensure of break inside while inside body with block  executes ensure of break inside while inside body with block  executes ensure of break inside while inside body with block  executes ensure of break inside while inside body with block  executes ensure of break inside while inside body with block
  executes ensure of break inside while inside body with block
+  executes return inside rescue, executing ensure  executes return inside rescue, executing ensure  executes return inside rescue, executing ensure  executes return inside rescue, executing ensure  executes return inside rescue, executing ensure  executes return inside rescue, executing ensure  executes return inside rescue, executing ensure  executes return inside rescue, executing ensure  executes return inside rescue, executing ensure
  executes return inside rescue, executing ensure
+  handles rescuing union between module types  handles rescuing union between module types  handles rescuing union between module types  handles rescuing union between module types  handles rescuing union between module types  handles rescuing union between module types  handles rescuing union between module types  handles rescuing union between module types  handles rescuing union between module types
  handles rescuing union between module types
+  handle exception raised by proc literal  handle exception raised by proc literal  handle exception raised by proc literal  handle exception raised by proc literal  handle exception raised by proc literal  handle exception raised by proc literal  handle exception raised by proc literal  handle exception raised by proc literal  handle exception raised by proc literal
  handle exception raised by proc literal
+  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target  executes ensure from return until target
  executes ensure from return until target
+  handles rescuing module type  handles rescuing module type  handles rescuing module type  handles rescuing module type  handles rescuing module type  handles rescuing module type  handles rescuing module type  handles rescuing module type  handles rescuing module type
  handles rescuing module type
+  executes ensure of break inside block  executes ensure of break inside block  executes ensure of break inside block  executes ensure of break inside block  executes ensure of break inside block  executes ensure of break inside block  executes ensure of break inside block  executes ensure of break inside block  executes ensure of break inside block
  executes ensure of break inside block
+  can rescue TypeCastError (#2607)  can rescue TypeCastError (#2607)  can rescue TypeCastError (#2607)  can rescue TypeCastError (#2607)  can rescue TypeCastError (#2607)  can rescue TypeCastError (#2607)  can rescue TypeCastError (#2607)  can rescue TypeCastError (#2607)  can rescue TypeCastError (#2607)
  can rescue TypeCastError (#2607)
+  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)  catches exception thrown by as inside method (#4030)
  catches exception thrown by as inside method (#4030)
+  codegens issue #118 (1)
  codegens issue #118 (1)
+  executes ensure of break inside while inside else  executes ensure of break inside while inside else  executes ensure of break inside while inside else  executes ensure of break inside while inside else  executes ensure of break inside while inside else  executes ensure of break inside while inside else  executes ensure of break inside while inside else  executes ensure of break inside while inside else  executes ensure of break inside while inside else
  executes ensure of break inside while inside else
+  executes ensure when exception is unhandled (2)  executes ensure when exception is unhandled (2)  executes ensure when exception is unhandled (2)  executes ensure when exception is unhandled (2)  executes ensure when exception is unhandled (2)  executes ensure when exception is unhandled (2)  executes ensure when exception is unhandled (2)  executes ensure when exception is unhandled (2)  executes ensure when exception is unhandled (2)
  executes ensure when exception is unhandled (2)
+  uses exception after rescue  uses exception after rescue  uses exception after rescue  uses exception after rescue  uses exception after rescue  uses exception after rescue  uses exception after rescue  uses exception after rescue  uses exception after rescue
  uses exception after rescue
+  runs #2441  runs #2441  runs #2441  runs #2441  runs #2441  runs #2441  runs #2441  runs #2441  runs #2441
  runs #2441
+  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)  doesn't execute else if exception is raised (1)
  doesn't execute else if exception is raised (1)
+  codegens rescue specific leaf exception  codegens rescue specific leaf exception  codegens rescue specific leaf exception  codegens rescue specific leaf exception  codegens rescue specific leaf exception  codegens rescue specific leaf exception  codegens rescue specific leaf exception  codegens rescue specific leaf exception  codegens rescue specific leaf exception
  codegens rescue specific leaf exception
+  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns  executes ensure when the main block returns
  executes ensure when the main block returns
+  executes body if nothing raised (1)  executes body if nothing raised (1)  executes body if nothing raised (1)  executes body if nothing raised (1)  executes body if nothing raised (1)  executes body if nothing raised (1)  executes body if nothing raised (1)  executes body if nothing raised (1)  executes body if nothing raised (1)
  executes body if nothing raised (1)
+  executes else if no exception is raised (1)  executes else if no exception is raised (1)  executes else if no exception is raised (1)  executes else if no exception is raised (1)  executes else if no exception is raised (1)  executes else if no exception is raised (1)  executes else if no exception is raised (1)  executes else if no exception is raised (1)  executes else if no exception is raised (1)
  executes else if no exception is raised (1)
+  handle multiple exception types (2)  handle multiple exception types (2)  handle multiple exception types (2)  handle multiple exception types (2)  handle multiple exception types (2)  handle multiple exception types (2)  handle multiple exception types (2)  handle multiple exception types (2)  handle multiple exception types (2)
  handle multiple exception types (2)
+  propagates raise status (#2074)  propagates raise status (#2074)  propagates raise status (#2074)  propagates raise status (#2074)  propagates raise status (#2074)  propagates raise status (#2074)  propagates raise status (#2074)  propagates raise status (#2074)  propagates raise status (#2074)
  propagates raise status (#2074)
+  rescues with type  rescues with type  rescues with type  rescues with type  rescues with type  rescues with type  rescues with type  rescues with type  rescues with type
  rescues with type
+  rescues a valid union  rescues a valid union  rescues a valid union  rescues a valid union  rescues a valid union  rescues a valid union  rescues a valid union  rescues a valid union  rescues a valid union
  rescues a valid union
+  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns  executes ensure when the main block yields and returns
  executes ensure when the main block yields and returns
+  doesn't codegen duplicated ensure if unreachable (#709)
  doesn't codegen duplicated ensure if unreachable (#709)
+  captures exception thrown from proc  captures exception thrown from proc  captures exception thrown from proc  captures exception thrown from proc  captures exception thrown from proc  captures exception thrown from proc  captures exception thrown from proc  captures exception thrown from proc  captures exception thrown from proc
  captures exception thrown from proc
+  handles rescuing union between module type and class type  handles rescuing union between module type and class type  handles rescuing union between module type and class type  handles rescuing union between module type and class type  handles rescuing union between module type and class type  handles rescuing union between module type and class type  handles rescuing union between module type and class type  handles rescuing union between module type and class type  handles rescuing union between module type and class type
  handles rescuing union between module type and class type
+  handles exception in outer block (1)  handles exception in outer block (1)  handles exception in outer block (1)  handles exception in outer block (1)  handles exception in outer block (1)  handles exception in outer block (1)  handles exception in outer block (1)  handles exception in outer block (1)  handles exception in outer block (1)
  handles exception in outer block (1)
+Normalize: regex literal
+  StringLiteral
+    expands to const
    expands to const
+    simple
    simple
+  options
+    im
    im
+    empty
    empty
+    i
    i
+    x
    x
+    imx
    imx
+  StringInterpolation
+    simple
    simple
+Crystal::Doc::Macro
+  args_to_s
+    shows simple arg and double splat arg
    shows simple arg and double splat arg
+    shows simple args
    shows simple args
+    shows simple arg and splat arg
    shows simple arg and splat arg
+    shows external name of arg with quotes and escaping
    shows external name of arg with quotes and escaping
+    shows external name of arg
    shows external name of arg
+    shows simple arg and block arg
    shows simple arg and block arg
+    shows block arg
    shows block arg
+    shows double splat arg
    shows double splat arg
+    shows default value with highlighting
    shows default value with highlighting
+    shows double splat arg
    shows double splat arg
+    shows splat arg
    shows splat arg
+Code gen: debug
+  correctly restores debug location after fun change (#4254)
  correctly restores debug location after fun change (#4254)
+  has debug info in closure inside if (#5593)
  has debug info in closure inside if (#5593)
+  stores and restores debug location after jumping to main (3)
  stores and restores debug location after jumping to main (3)
+  codegens extern union (#7335)
  codegens extern union (#7335)
+  stores and restores debug location after jumping to main (2)
  stores and restores debug location after jumping to main (2)
+  doesn't emit incorrect debug info for closured self
  doesn't emit incorrect debug info for closured self
+  codegens abstract struct (#3578)
  codegens abstract struct (#3578)
+  doesn't fail on constant read calls (#11416)
  doesn't fail on constant read calls (#11416)
+  codegens lib union (#7335)
  codegens lib union (#7335)
+  has correct debug location after constant initialization in call with block (#4719)
  has correct debug location after constant initialization in call with block (#4719)
+  codegens correct debug info for new with custom allocate (#3945)
  codegens correct debug info for new with custom allocate (#3945)
+  stores and restores debug location after jumping to main (#6920)
  stores and restores debug location after jumping to main (#6920)
+  codegens correct debug info for untyped expression (#4007 and #4008)
  codegens correct debug info for untyped expression (#4007 and #4008)
+  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals  doesn't fail on splat expansions inside array-like literals
  doesn't fail on splat expansions inside array-like literals
+  doesn't emit debug info for unused variable declarations (#9882)
  doesn't emit debug info for unused variable declarations (#9882)
+  inlines instance var access through getter in debug mode
  inlines instance var access through getter in debug mode
+Lexer: location
+  pushes and pops its location
  pushes and pops its location
+  stores column numbers
  stores column numbers
+  locations in same files are comparable based on line
  locations in same files are comparable based on line
+  stores line numbers
  stores line numbers
+  overrides location with pragma
  overrides location with pragma
+  locations in different files have no order
  locations in different files have no order
+  Location.parse
+    raises ArgumentError if missing part
    raises ArgumentError if missing part
+    parses location from string
    parses location from string
+    raises ArgumentError if missing colon
    raises ArgumentError if missing colon
+    raises ArgumentError if line number is invalid
    raises ArgumentError if line number is invalid
+    raises ArgumentError if column number is invalid
    raises ArgumentError if column number is invalid
+  locations with virtual files should be comparable
  locations with virtual files should be comparable
+  assigns correct loc location to node
  assigns correct loc location to node
+  parses var/call right after loc (#491)
  parses var/call right after loc (#491)
+  uses two consecutive loc pragma 
  uses two consecutive loc pragma 
+Crystal::Doc::MarkdDocRenderer
+  renders headline
+    renders "## Foo Bar\n### Sub\n## Bar Baz\n### Sub"
    renders "## Foo Bar\n### Sub\n## Bar Baz\n### Sub"
+    renders "## Foo Bar"
    renders "## Foo Bar"
+  renders code blocks
+    renders "```\nHello\nWorld\n```"
    renders "```\nHello\nWorld\n```"
+    renders "```cr\nHello\nWorld\n```"
    renders "```cr\nHello\nWorld\n```"
+    renders "```crystal\nHello\nWorld\n```"
    renders "```crystal\nHello\nWorld\n```"
+  renders links
+    renders "[foo](http://example.com/foo)"
    renders "[foo](http://example.com/foo)"
+    renders "[`Foo`](http://example.com/foo)"
    renders "[`Foo`](http://example.com/foo)"
+    renders "[filter](https://docs.celestine.dev/Celestine/Meta/Context.html#filter(&block:Celestine::Filter-%3ECelestine::Filter)-instance-method)"
    renders "[filter](https://docs.celestine.dev/Celestine/Meta/Context.html#filter(&block:Celestine::Filter-%3ECelestine::Filter)-instance-method)"
+  renders html
+    renders "<h1 align=\"center\">Foo</h1>"
    renders "<h1 align=\"center\">Foo</h1>"
+  renders code spans
+    renders "`<style>`"
    renders "`<style>`"
+  expand_code_links
+    finds method with question mark
    finds method with question mark
+    finds method with args even with empty brackets
    finds method with args even with empty brackets
+    finds operator method
    finds operator method
+    does not break when referencing lib type (#9928)
    does not break when referencing lib type (#9928)
+    doesn't find parents' methods
    doesn't find parents' methods
+    doesn't spuriously match range literals
    doesn't spuriously match range literals
+    finds types from base
    finds types from base
+    finds sibling methods with self receiver
    finds sibling methods with self receiver
+    finds operator method with unspecified args
    finds operator method with unspecified args
+    doesn't find wrong absolute type
    doesn't find wrong absolute type
+    finds nested type
    finds nested type
+    doesn't match with different separator
    doesn't match with different separator
+    finds constant
    finds constant
+    finds method of an absolute type
    finds method of an absolute type
+    finds method with zero args
    finds method with zero args
+    doesn't find sibling methods of wrong type
    doesn't find sibling methods of wrong type
+    doesn't find wrong kind of sibling methods
    doesn't find wrong kind of sibling methods
+    finds method with args
    finds method with args
+    doesn't find wrong kind of methods
    doesn't find wrong kind of methods
+    doesn't find method with wrong number of args
    doesn't find method with wrong number of args
+    finds sibling methods
    finds sibling methods
+    doesn't find substrings for methods
    doesn't find substrings for methods
+    matches methods on single-character class names
    matches methods on single-character class names
+    finds methods of a type
    finds methods of a type
+    doesn't find sibling methods with fake receiver
    doesn't find sibling methods with fake receiver
+    finds method with exclamation mark
    finds method with exclamation mark
+    finds multiple kinds of things
    finds multiple kinds of things
+    doesn't find type not at word boundary
    doesn't find type not at word boundary
+    doesn't find parents' methods
    doesn't find parents' methods
+    finds multiple methods with brackets
    finds multiple methods with brackets
+    finds method with unspecified args
    finds method with unspecified args
+    finds absolute type
    finds absolute type
+    finds types from nested
    finds types from nested
+    doesn't find method with wrong number of args
    doesn't find method with wrong number of args
+    finds sibling methods
    finds sibling methods
+Semantic: abstract def
+  errors if implementation misses the double splat
  errors if implementation misses the double splat
+  errors if implementation doesn't match splat type
  errors if implementation doesn't match splat type
+  errors if implementation doesn't have a keyword argument
  errors if implementation doesn't have a keyword argument
+  doesn't error if implementation have default value
  doesn't error if implementation have default value
+  can implement by block signature even if yield comes later in macro code
  can implement by block signature even if yield comes later in macro code
+  doesn't error if abstract method is not implemented by including module
  doesn't error if abstract method is not implemented by including module
+  errors if implementation adds type restriction
  errors if implementation adds type restriction
+  errors if implementation doesn't match keyword argument type
  errors if implementation doesn't match keyword argument type
+  errors if abstract method is not implemented by subclass
  errors if abstract method is not implemented by subclass
+  doesn't error if abstract method is implemented by including class
  doesn't error if abstract method is implemented by including class
+  allow splat instead of keyword argument
  allow splat instead of keyword argument
+  doesn't error if implements with parent module
  doesn't error if implements with parent module
+  error shows full signature of block parameter
  error shows full signature of block parameter
+  doesn't error if abstract method with args is implemented by subclass (don't check subclasses)
  doesn't error if abstract method with args is implemented by subclass (don't check subclasses)
+  gives correct error when no overload matches, when an abstract method is implemented (#1406)
  gives correct error when no overload matches, when an abstract method is implemented (#1406)
+  matches generic return type
  matches generic return type
+  errors if implementation has more keyword arguments
  errors if implementation has more keyword arguments
+  allows arguments to be collapsed into splat
  allows arguments to be collapsed into splat
+  errors if abstract method is not implemented by including class
  errors if abstract method is not implemented by including class
+  can implement even if yield comes later in macro code
  can implement even if yield comes later in macro code
+  doesn't error if implements with included module
  doesn't error if implements with included module
+  errors if different return type
  errors if different return type
+  doesn't error if abstract method with args is implemented by subclass (with one default arg)
  doesn't error if abstract method with args is implemented by subclass (with one default arg)
+  errors if abstract method of private type is not implemented by including class
  errors if abstract method of private type is not implemented by including class
+  works on abstract def on sub-subclass
  works on abstract def on sub-subclass
+  errors if missing a return type in subclass of generic subclass
  errors if missing a return type in subclass of generic subclass
+  doesn't error if implements with parent class
  doesn't error if implements with parent class
+  errors if double splat type doesn't match
  errors if double splat type doesn't match
+  errors if using abstract def on non-abstract class
  errors if using abstract def on non-abstract class
+  allow double splat argument
  allow double splat argument
+  extra keyword arguments must have compatible type to double splat
  extra keyword arguments must have compatible type to double splat
+  errors if abstract method with arguments is not implemented by subclass (wrong type)
  errors if abstract method with arguments is not implemented by subclass (wrong type)
+  errors if abstract method is not implemented by subclass of subclass
  errors if abstract method is not implemented by subclass of subclass
+  errors if abstract method of private type is not implemented by subclass
  errors if abstract method of private type is not implemented by subclass
+  doesn't error if implements with generic included module instance
  doesn't error if implements with generic included module instance
+  can return a more specific type
  can return a more specific type
+  errors if implementation doesn't have default value
  errors if implementation doesn't have default value
+  matches instantiated generic types
  matches instantiated generic types
+  errors if using abstract def on metaclass
  errors if using abstract def on metaclass
+  errors if using abstract def on subclass that also defines it as abstract
  errors if using abstract def on subclass that also defines it as abstract
+  matches generic module (a bit more complex)
  matches generic module (a bit more complex)
+  matches instantiated generic module
  matches instantiated generic module
+  errors if can't find parent return type
  errors if can't find parent return type
+  implements through extend (considers original type for generic lookup) (2) (#8096)
  implements through extend (considers original type for generic lookup) (2) (#8096)
+  implements through extend (considers original type for generic lookup) (#8096)
  implements through extend (considers original type for generic lookup) (#8096)
+  errors if using abstract def on subclass
  errors if using abstract def on subclass
+  works on abstract method on abstract class
  works on abstract method on abstract class
+  doesn't error with splat and args with default value
  doesn't error with splat and args with default value
+  doesn't error if abstract method is implemented by subclass via module inclusion
  doesn't error if abstract method is implemented by subclass via module inclusion
+  doesn't error if abstract method with args is implemented by subclass
  doesn't error if abstract method with args is implemented by subclass
+  implementation is not inherited from supertype
+    generic module
    generic module
+    nongeneric module
    nongeneric module
+    generic class
    generic class
+    nongeneric class
    nongeneric class
+  finds implements in included module in disorder (#4052)
  finds implements in included module in disorder (#4052)
+  errors if abstract method with arguments is not implemented by subclass (block difference)
  errors if abstract method with arguments is not implemented by subclass (block difference)
+  doesn't error if implementation has more keyword arguments with default values
  doesn't error if implementation has more keyword arguments with default values
+  errors if keyword argument doesn't have the same default value
  errors if keyword argument doesn't have the same default value
+  doesn't error if implements with generic parent class instance
  doesn't error if implements with generic parent class instance
+  errors if abstract method with arguments is not implemented by subclass
  errors if abstract method with arguments is not implemented by subclass
+  doesn't error if abstract method with args is implemented by subclass (restriction -> no restriction)
  doesn't error if abstract method with args is implemented by subclass (restriction -> no restriction)
+  allow double splat when abstract doesn't have it
  allow double splat when abstract doesn't have it
+  doesn't error if implementation have keyword arguments in different order
  doesn't error if implementation have keyword arguments in different order
+  doesn't error if abstract method is implemented by subclass
  doesn't error if abstract method is implemented by subclass
+  errors if implementation doesn't have keyword arguments
  errors if implementation doesn't have keyword arguments
+  double splat must match keyword argument type
  double splat must match keyword argument type
+  doesn't error if free var in arg restriction shadows another type (#10153)
  doesn't error if free var in arg restriction shadows another type (#10153)
+  doesn't error if implementation matches keyword argument
  doesn't error if implementation matches keyword argument
+  matches generic module
  matches generic module
+  errors if missing return type
  errors if missing return type
+  doesn't error if implements a NoReturn param
  doesn't error if implements a NoReturn param
+  errors if implementation doesn't have the same default value
  errors if implementation doesn't have the same default value
+  matches generic types
  matches generic types
+  errors if abstract method is not implemented by subclass (nested in module)
  errors if abstract method is not implemented by subclass (nested in module)
+  errors if can't find child return type
  errors if can't find child return type
+  doesn't error with splat
  doesn't error with splat
+  errors if abstract method with arguments is not implemented by subclass (wrong number of arguments)
  errors if abstract method with arguments is not implemented by subclass (wrong number of arguments)
+  errors if implementation doesn't have a splat
  errors if implementation doesn't have a splat
+Code gen: enum
+  codegens enum bitflags (2)
  codegens enum bitflags (2)
+  can use macro calls inside enum value (#424)
  can use macro calls inside enum value (#424)
+  adds a none? method to flags enum
  adds a none? method to flags enum
+  codegens enum All redefined
  codegens enum All redefined
+  uses enum value before declaration (hoisting)
  uses enum value before declaration (hoisting)
+  automatically defines question method for each enum member (flags, false case)
  automatically defines question method for each enum member (flags, false case)
+  can define flags enum : UInt64 with more than 32 values (#7268)
  can define flags enum : UInt64 with more than 32 values (#7268)
+  codegens enum value
  codegens enum value
+  codegens enum bitflags All
  codegens enum bitflags All
+  can define flags enum : UInt128 with 128 values
  can define flags enum : UInt128 with 128 values
+  automatically defines question method for each enum member (false case)
  automatically defines question method for each enum member (false case)
+  casts All value to base type
  casts All value to base type
+  codegens enum
  codegens enum
+  codegens enum bitflags (4)
  codegens enum bitflags (4)
+  can redefine Enum.new and use previous_def
  can redefine Enum.new and use previous_def
+  can use macro calls inside enum value, macro defined outside enum (#424)
  can use macro calls inside enum value, macro defined outside enum (#424)
+  codegens enum bitflags (1)
  codegens enum bitflags (1)
+  can define flags enum : UInt128 with compile-time interpreted values
  can define flags enum : UInt128 with compile-time interpreted values
+  codegens enum None redefined
  codegens enum None redefined
+  automatically defines question method for each enum member (flags, true case)
  automatically defines question method for each enum member (flags, true case)
+  codegens enum without explicit value
  codegens enum without explicit value
+  creates enum from value
  creates enum from value
+  does ~ at compile time for enum member
  does ~ at compile time for enum member
+  allows class vars in enum
  allows class vars in enum
+  codegens enum bitflags None
  codegens enum bitflags None
+  automatically defines question method for each enum member (true case)
  automatically defines question method for each enum member (true case)
+  can use macro calls inside enum value, with receiver (#424)
  can use macro calls inside enum value, with receiver (#424)
+Normalize: expressions
+  normalizes expressions with begin/end
  normalizes expressions with begin/end
+  normalizes an empty expression with begin/end
  normalizes an empty expression with begin/end
+  normalizes an expression
  normalizes an expression
+Code gen: or
+  codegens or with bool union as left node 3
  codegens or with bool union as left node 3
+  codegens or with primitive type other than bool
  codegens or with primitive type other than bool
+  codegens or with bool true and true
  codegens or with bool true and true
+  codegens or with bool union as left node 2
  codegens or with bool union as left node 2
+  codegens or with nil union as left node 2
  codegens or with nil union as left node 2
+  codegens or with non-false union as left node
  codegens or with non-false union as left node
+  codegens or with bool union as left node 2
  codegens or with bool union as left node 2
+  codegens or with bool union as left node 3
  codegens or with bool union as left node 3
+  codegens or with bool union as left node 1
  codegens or with bool union as left node 1
+  codegens or with bool union as left node 4
  codegens or with bool union as left node 4
+  codegens or with bool false and false
  codegens or with bool false and false
+  codegens or with bool union as left node 1
  codegens or with bool union as left node 1
+  codegens or with bool true and false
  codegens or with bool true and false
+  codegens or with nilable as left node 1
  codegens or with nilable as left node 1
+  codegens or with bool false and true
  codegens or with bool false and true
+  codegens or with bool and int 2
  codegens or with bool and int 2
+  codegens or with nil union as left node 1
  codegens or with nil union as left node 1
+  codegens or with primitive type other than bool with union
  codegens or with primitive type other than bool with union
+  codegens or with nilable as left node 2
  codegens or with nilable as left node 2
+  codegens or with primitive type other than bool
  codegens or with primitive type other than bool
+  codegens or with bool and int 1
  codegens or with bool and int 1
+Semantic: class
+  type def does not reopen type from parent namespace (#11181)
  type def does not reopen type from parent namespace (#11181)
+  doesn't mix classes on definition (#2352)
  doesn't mix classes on definition (#2352)
+  types generic of generic type
  types generic of generic type
+  types Const#new
  types Const#new
+  doesn't lookup new in supermetaclass
  doesn't lookup new in supermetaclass
+  types class and subclass as one type
  types class and subclass as one type
+  reports uninitialized constant
  reports uninitialized constant
+  errors if inheriting Gen(self) and there's no self (#2890)
  errors if inheriting Gen(self) and there's no self (#2890)
+  errors if using underscore in generic class
  errors if using underscore in generic class
+  correctly types #680
  correctly types #680
+  uses self as type var
  uses self as type var
+  says that instance vars are not allowed in metaclass
  says that instance vars are not allowed in metaclass
+  can invoke method on abstract generic type without subclasses nor instances
  can invoke method on abstract generic type without subclasses nor instances
+  reports unknown class when extending
  reports unknown class when extending
+  doesn't mark instance variable as nilable if calling another initialize
  doesn't mark instance variable as nilable if calling another initialize
+  errors if reading non-existent ivar
  errors if reading non-existent ivar
+  errors when creating Number
  errors when creating Number
+  errors when wrong arguments for new
  errors when wrong arguments for new
+  reads a virtual type instance var
  reads a virtual type instance var
+  says wrong number of arguments for abstract class new
  says wrong number of arguments for abstract class new
+  types type var union
  types type var union
+  types instance variable
  types instance variable
+  errors if reopening non-generic class as generic
  errors if reopening non-generic class as generic
+  types class inside class
  types class inside class
+  allows defining classes inside modules or classes with ::
  allows defining classes inside modules or classes with ::
+  errors if reopening generic class with different splat index (3)
  errors if reopening generic class with different splat index (3)
+  errors if reopening generic class with different splat index
  errors if reopening generic class with different splat index
+  allows using self in class scope
  allows using self in class scope
+  doesn't error on new on abstract virtual type class
  doesn't error on new on abstract virtual type class
+  infers generic type after instance was created with explicit type
  infers generic type after instance was created with explicit type
+  doesn't lookup type in parents' namespaces, and lookups and in program
  doesn't lookup type in parents' namespaces, and lookups and in program
+  can invoke method on abstract type without subclasses nor instances
  can invoke method on abstract type without subclasses nor instances
+  hoists instance variable initializer
  hoists instance variable initializer
+  can't reopen as module
  can't reopen as module
+  says wrong number of arguments for abstract class new (2)
  says wrong number of arguments for abstract class new (2)
+  reads an object instance var from a union type
  reads an object instance var from a union type
+  does automatic type inference of new for generic types 2
  does automatic type inference of new for generic types 2
+  doesn't crash with top-level initialize (#2601)
  doesn't crash with top-level initialize (#2601)
+  inherits self twice (#5495)
  inherits self twice (#5495)
+  reports undefined method when method inside a class
  reports undefined method when method inside a class
+  types as no return if calling method on abstract class with generic subclasses but no instances (#6996)
  types as no return if calling method on abstract class with generic subclasses but no instances (#6996)
+  can't use implicit initialize if defined in parent
  can't use implicit initialize if defined in parent
+  types as no return if calling method on abstract class with all abstract subclasses (#6996)
  types as no return if calling method on abstract class with all abstract subclasses (#6996)
+  types Const#allocate
  types Const#allocate
+  errors if reopening generic class with different type vars (2)
  errors if reopening generic class with different type vars (2)
+  says no overload matches for class new
  says no overload matches for class new
+  uses self as type var
  uses self as type var
+  reports undefined instance method
  reports undefined instance method
+  types class and subclass as one type
  types class and subclass as one type
+  inherits Gen(self) (#2890)
  inherits Gen(self) (#2890)
+  errors if inherits from metaclass
  errors if inherits from metaclass
+  uses number type var in class method
  uses number type var in class method
+  errors if inherits from module
  errors if inherits from module
+  finds in global scope if includes module
  finds in global scope if includes module
+  allows declaring a variable in an initialize and using it
  allows declaring a variable in an initialize and using it
+  types Const#new#method
  types Const#new#method
+  doesn't use initialize from base class
  doesn't use initialize from base class
+  does automatic inference of new for generic types
  does automatic inference of new for generic types
+  types virtual method of generic class
  types virtual method of generic class
+  reports superclass mismatch
  reports superclass mismatch
+  types instance variable on getter
  types instance variable on getter
+  types self inside method call without obj
  types self inside method call without obj
+  types class and subclass as one type
  types class and subclass as one type
+  doesn't crash on instance variable assigned a proc, and never instantiated (#923)
  doesn't crash on instance variable assigned a proc, and never instantiated (#923)
+  errors when creating Value
  errors when creating Value
+  errors if reading ivar from non-ivar container
  errors if reading ivar from non-ivar container
+  reports can't instantiate abstract class on allocate
  reports can't instantiate abstract class on allocate
+  does automatic type inference of new for nested generic type
  does automatic type inference of new for nested generic type
+  can mark initialize as private
  can mark initialize as private
+  types as no return if calling method on generic class with subclasses (#6996)
  types as no return if calling method on generic class with subclasses (#6996)
+  doesn't use initialize from base class with virtual type
  doesn't use initialize from base class with virtual type
+  can invoke method on abstract generic type with subclasses but no instances
  can invoke method on abstract generic type with subclasses but no instances
+  correctly types #680 (2)
  correctly types #680 (2)
+  reports wrong number of arguments for initialize
  reports wrong number of arguments for initialize
+  reads an object instance var
  reads an object instance var
+  types as no return if calling method on abstract generic class (#6996)
  types as no return if calling method on abstract generic class (#6996)
+  types recursive type
  types recursive type
+  errors if using read-instance-var with non-typed variable
  errors if using read-instance-var with non-typed variable
+  can't reopen as struct
  can't reopen as struct
+  inherits self (#2890)
  inherits self (#2890)
+  types bug #168 (it inherits instance var even if not mentioned in initialize)
  types bug #168 (it inherits instance var even if not mentioned in initialize)
+  reports can't instantiate abstract class on new
  reports can't instantiate abstract class on new
+  can use short name for top-level type
  can use short name for top-level type
+  errors if creating instance before typing instance variable
  errors if creating instance before typing instance variable
+  errors if reopening generic class with different type vars
  errors if reopening generic class with different type vars
+  errors if assigning superclass to declared instance var
  errors if assigning superclass to declared instance var
+  errors if declares class inside if
  errors if declares class inside if
+  errors on no method found on abstract class, class method (#2241)
  errors on no method found on abstract class, class method (#2241)
+  errors if reopening generic class with different splat index (2)
  errors if reopening generic class with different splat index (2)
+  allows instantiating generic class with number
  allows instantiating generic class with number
+  types instance variable
  types instance variable
+  preserves order of instance vars (#3050)
  preserves order of instance vars (#3050)
+Semantic: doc
+  :ditto:
+    amend previous doc (without empty line)
    amend previous doc (without empty line)
+    stores doc for macro
    stores doc for macro
+    stores doc for const
    stores doc for const
+    :ditto: references last non-ditto doc
    :ditto: references last non-ditto doc
+    stores doc for def
    stores doc for def
+    amend previous doc
    amend previous doc
+  overwrites doc for module when reopening
  overwrites doc for module when reopening
+  stores doc for enum with @[Flags]
  stores doc for enum with @[Flags]
+  stores doc for class
  stores doc for class
+  overwrites doc for def when redefining
  overwrites doc for def when redefining
+  stores doc for macro
  stores doc for macro
+  stores doc for abstract class
  stores doc for abstract class
+  doc before annotation
+    attached to struct/class
    attached to struct/class
+    attached to enum
    attached to enum
+    attached to constant
    attached to constant
+    attached to macro call
    attached to macro call
+    attached to module
    attached to module
+    attached to alias
    attached to alias
+    attached to macro call that produces multiple types
    attached to macro call that produces multiple types
+    attached to def
    attached to def
+    attached to macro
    attached to macro
+  attaches doc in double macro expansion (#8463)
  attaches doc in double macro expansion (#8463)
+  stores doc for constant
  stores doc for constant
+  stores doc for macro defined in macro call
  stores doc for macro defined in macro call
+  stores doc for alias
  stores doc for alias
+  overwrites doc for struct when reopening
  overwrites doc for struct when reopening
+  stores doc for enum when reopening
  stores doc for enum when reopening
+  stores doc for flags enum with base type
  stores doc for flags enum with base type
+  overwrites doc for enum when reopening
  overwrites doc for enum when reopening
+  stores doc for nodes defined in macro call (2)
  stores doc for nodes defined in macro call (2)
+  attaches doc to annotation in macro expansion (#9628)
  attaches doc to annotation in macro expansion (#9628)
+  stores doc for fun def
  stores doc for fun def
+  stores doc for enum member
  stores doc for enum member
+  stores location for implicit flag enum members
  stores location for implicit flag enum members
+  stores locations for auto-generated module
  stores locations for auto-generated module
+  stores doc for def with annotation
  stores doc for def with annotation
+  stores doc for abstract def
  stores doc for abstract def
+  stores doc for struct
  stores doc for struct
+  stores doc for class when reopening
  stores doc for class when reopening
+  stores doc for nodes defined in macro call
  stores doc for nodes defined in macro call
+  overwrites doc for class when reopening
  overwrites doc for class when reopening
+  stores doc for module when reopening
  stores doc for module when reopening
+  stores doc for module
  stores doc for module
+  stores doc for def
  stores doc for def
+  stores doc for def with annotation
  stores doc for def with annotation
+  stores doc for enum
  stores doc for enum
+  overwrites doc for macro when redefining
  overwrites doc for macro when redefining
+  stores doc for struct when reopening
  stores doc for struct when reopening
+  stores doc for enum and doesn't mix with value
  stores doc for enum and doesn't mix with value
+  stores doc for def with visibility
  stores doc for def with visibility
+Semantic: return
+  infers return type with many returns (2)
  infers return type with many returns (2)
+  flattens splats inside multiple return values
  flattens splats inside multiple return values
+  infers return type with many returns (1)
  infers return type with many returns (1)
+  errors on return in top level
  errors on return in top level
+  errors if non-type free var cannot be inferred
  errors if non-type free var cannot be inferred
+  can use type var as return type with an included generic module
  can use type var as return type with an included generic module
+  can use type var as return type with an inherited generic class
  can use type var as return type with an inherited generic class
+  types bug (#1823)
  types bug (#1823)
+  can use non-type free var in return type (#6543)
  can use non-type free var in return type (#6543)
+  infers return type
  infers return type
+  allows nilable return type to match subclasses (#1735)
  allows nilable return type to match subclasses (#1735)
+  can use type var as return type (#1226)
  can use type var as return type (#1226)
+  types return if true
  types return if true
+  can use non-type free var in return type (2) (#6543)
  can use non-type free var in return type (2) (#6543)
+  doesn't confuse return type from base class
  doesn't confuse return type from base class
+  can use free var in return type (#2492)
  can use free var in return type (#2492)
+  allows returning NoReturn instead of the wanted type
  allows returning NoReturn instead of the wanted type
+  forms a tuple from multiple return values
  forms a tuple from multiple return values
+Code gen: closure
+  codegens multiple nested blocks
  codegens multiple nested blocks
+  codegens closure with nested context without new closured vars but with block arg
  codegens closure with nested context without new closured vars but with block arg
+  codegens closure inside initialize inside block with self
  codegens closure inside initialize inside block with self
+  codegens closured nested in block
  codegens closured nested in block
+  codegens closure with struct
  codegens closure with struct
+  codegens super nested closure
  codegens super nested closure
+  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)  doesn't free closure memory (bug)
  doesn't free closure memory (bug)
+  codegens nested closure with nested closured variable
  codegens nested closure with nested closured variable
+  codegens closure with nested context without new closured vars
  codegens closure with nested context without new closured vars
+  codegens closure with block that declares same var
  codegens closure with block that declares same var
+  ensures it can raise from the closure check
  ensures it can raise from the closure check
+  codegens closure with instance var and var
  codegens closure with instance var and var
+  closures struct self
  closures struct self
+  allows giving less block args when transforming block to proc literal
  allows giving less block args when transforming block to proc literal
+  allows passing an external function along (2)
  allows passing an external function along (2)
+  codegens nested closure with block (1)
  codegens nested closure with block (1)
+  codegens closure with instance var and block
  codegens closure with instance var and block
+  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method  doesn't form a closure if invoking class method
  doesn't form a closure if invoking class method
+  transforms block to proc literal
  transforms block to proc literal
+  codegens simple closure in block
  codegens simple closure in block
+  doesn't incorrectly consider local as closured (#4948)
  doesn't incorrectly consider local as closured (#4948)
+  codegens simple closure in function with argument
  codegens simple closure in function with argument
+  allows mixing yield and block.call
  allows mixing yield and block.call
+  unifies types of closured var
  unifies types of closured var
+  codegens closure with block
  codegens closure with block
+  allows passing block as proc literal to new and to initialize
  allows passing block as proc literal to new and to initialize
+  codegens super nested closure with nested closured variable
  codegens super nested closure with nested closured variable
+  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self  doesn't form a closure if invoking class method with self
  doesn't form a closure if invoking class method with self
+  codegens simple closure in function
  codegens simple closure in function
+  allows passing an external function along
  allows passing an external function along
+  codegens closure with nested context without new closured vars
  codegens closure with nested context without new closured vars
+  codegens closure with self and var
  codegens closure with self and var
+  codegens closure with self and arguments
  codegens closure with self and arguments
+  codegens nested closure that mentions var in both contexts
  codegens nested closure that mentions var in both contexts
+  codegens closure with implicit self and var
  codegens closure with implicit self and var
+  codegens proc literal with struct
  codegens proc literal with struct
+  allows passing proc literal to def that captures block with &
  allows passing proc literal to def that captures block with &
+  transforms block to proc literal with free var
  transforms block to proc literal with free var
+  codegens closure with def that has an if
  codegens closure with def that has an if
+  codegens closured nested in block with a call with a closure with same names
  codegens closured nested in block with a call with a closure with same names
+  codegens nested closure with block (2)
  codegens nested closure with block (2)
+  codegens closure with instance var
  codegens closure with instance var
+  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)  captures block and accesses local variable (#2050)
  captures block and accesses local variable (#2050)
+  codegen closure in instance method without self closured
  codegen closure in instance method without self closured
+  codegens simple closure at global scope
  codegens simple closure at global scope
+  codegens nested closure
  codegens nested closure
+  codegens closured self in block (#3388)
  codegens closured self in block (#3388)
+Crystal::Repl::Interpreter
+  casts
+    casts nilable from mixed union type to primitive type (non-nil case)
    casts nilable from mixed union type to primitive type (non-nil case)
+    casts from mixed union type to another mixed union type for caller
    casts from mixed union type to another mixed union type for caller
+    does as? with no resulting type (#12327)
    does as? with no resulting type (#12327)
+    casts to filtered type, not type in as(...)
    casts to filtered type, not type in as(...)
+    upcasts to module type
    upcasts to module type
+    upcasts between tuple types
    upcasts between tuple types
+    upcasts mixed union with tuple to mixed union with compatible tuple (3) (#12331)
    upcasts mixed union with tuple to mixed union with compatible tuple (3) (#12331)
+    does is_a? with virtual metaclass
    does is_a? with virtual metaclass
+    casts from nilable type to mixed union type
    casts from nilable type to mixed union type
+    does is_a? with virtual type (struct)
    does is_a? with virtual type (struct)
+    upcasts between tuple types, respects alignment (#14036)
    upcasts between tuple types, respects alignment (#14036)
+    does as? with a type that can't match (#12346)
    does as? with a type that can't match (#12346)
+    raises when as fails
    raises when as fails
+    puts virtual metaclass into union (#12162)
    puts virtual metaclass into union (#12162)
+    casts from reference to pointer and back
    casts from reference to pointer and back
+    casts nil to Void*
    casts nil to Void*
+    discards cast
    discards cast
+    upcasts mixed union with tuple to mixed union with compatible tuple (1) (#12331)
    upcasts mixed union with tuple to mixed union with compatible tuple (1) (#12331)
+    upcasts virtual type to union
    upcasts virtual type to union
+    casts from nilable type to mixed union type (2)
    casts from nilable type to mixed union type (2)
+    upcasts between named tuple types, different order
    upcasts between named tuple types, different order
+    upcasts mixed union with tuple to mixed union with compatible tuple (2) (#12331)
    upcasts mixed union with tuple to mixed union with compatible tuple (2) (#12331)
+    upcasts between named tuple types, same order
    upcasts between named tuple types, same order
+    casts from mixed union type to primitive type
    casts from mixed union type to primitive type
+    casts from mixed union type to nilable proc type (#12283)
    casts from mixed union type to nilable proc type (#12283)
+    casts nilable from mixed union type to primitive type (nil case)
    casts nilable from mixed union type to primitive type (nil case)
+    puts tuple type inside union of different tuple type (#12243)
    puts tuple type inside union of different tuple type (#12243)
+    does as? with no resulting type, not from nil (#12327)
    does as? with no resulting type, not from nil (#12327)
+    upcasts in nilable cast (#12532)
    upcasts in nilable cast (#12532)
+    casts from reference to nilable reference
    casts from reference to nilable reference
+    upcasts between named tuple types, respects alignment (#14036)
    upcasts between named tuple types, respects alignment (#14036)
+    upcasts GenericClassInstanceMetaclassType to VirtualMetaclassType
    upcasts GenericClassInstanceMetaclassType to VirtualMetaclassType
+    puts named tuple type inside union of different named tuple type (#12243)
    puts named tuple type inside union of different named tuple type (#12243)
+Semantic: previous_def
+  types previous def with named arguments, def has bare splat parameter (#8895)
  types previous def with named arguments, def has bare splat parameter (#8895)
+  errors if there's no previous def
  errors if there's no previous def
+  types previous def with explicit arguments
  types previous def with explicit arguments
+  types previous def with forwarded arguments, def has parameters
  types previous def with forwarded arguments, def has parameters
+  types previous def with restrictions
  types previous def with restrictions
+  types previous def
  types previous def
+  types previous def when inside fun
  types previous def when inside fun
+  types previous def with named arguments, def has bare splat parameter (2) (#8895)
  types previous def with named arguments, def has bare splat parameter (2) (#8895)
+  says wrong number of arguments for previous_def (#1223)
  says wrong number of arguments for previous_def (#1223)
+  types previous def when inside fun and forwards args
  types previous def when inside fun and forwards args
+  types previous def with forwarded arguments, different internal names (#8895)
  types previous def with forwarded arguments, different internal names (#8895)
+  types previous def with forwarded arguments, def has bare splat parameter (#8895)
  types previous def with forwarded arguments, def has bare splat parameter (#8895)
+  types previous def in generic class
  types previous def in generic class
+  types previous def with named arguments, def has double splat parameter (#8895)
  types previous def with named arguments, def has double splat parameter (#8895)
+Semantic: exception
+  types var as nilable inside ensure (2)
  types var as nilable inside ensure (2)
+  types code with abstract exception that delegates method
  types code with abstract exception that delegates method
+  types a var after begin rescue as having all possible types in begin and rescue
  types a var after begin rescue as having all possible types in begin and rescue
+  errors if caught exception is a union but not all types are valid
  errors if caught exception is a union but not all types are valid
+  gets a non-nilable type if all rescue are unreachable (#8751)
  gets a non-nilable type if all rescue are unreachable (#8751)
+  correctly types #1988
  correctly types #1988
+  marks instance variable as nilable if assigned inside rescue inside initialize
  marks instance variable as nilable if assigned inside rescue inside initialize
+  doesn't infect type to variable before handler (#4002)
  doesn't infect type to variable before handler (#4002)
+  errors if caught exception is a nested union but not all types are valid
  errors if caught exception is a nested union but not all types are valid
+  type for exception handler for explicit types
  type for exception handler for explicit types
+  can't return from while inside ensure (#4470)
  can't return from while inside ensure (#4470)
+  marks proc literal as raises
  marks proc literal as raises
+  marks method that calls another method that raises as raises, recursively
  marks method that calls another method that raises as raises, recursively
+  marks method calling lib fun that raises as raises
  marks method calling lib fun that raises as raises
+  remains nilable after rescue
  remains nilable after rescue
+  types var as nilable if previously nilable (2)
  types var as nilable if previously nilable (2)
+  types a var after begin rescue with no-return in rescue
  types a var after begin rescue with no-return in rescue
+  can use break inside while inside ensure (#4470)
  can use break inside while inside ensure (#4470)
+  type is union of main and rescue blocks
  type is union of main and rescue blocks
+  types var as not nil if defined inside begin and defined inside rescue
  types var as not nil if defined inside begin and defined inside rescue
+  doesn't crash on break inside rescue, in while (#2441)
  doesn't crash on break inside rescue, in while (#2441)
+  can use next inside while inside ensure (#4470)
  can use next inside while inside ensure (#4470)
+  types var assignment inside block inside exception handler (#3324)
  types var assignment inside block inside exception handler (#3324)
+  types var as nilable if previously nilable (1)
  types var as nilable if previously nilable (1)
+  can't use break inside while inside ensure (#4470)
  can't use break inside while inside ensure (#4470)
+  transform nodes in else block
  transform nodes in else block
+  types a var after begin rescue as having all possible types and nil in begin if read (2)
  types a var after begin rescue as having all possible types and nil in begin if read (2)
+  can't use break inside block inside ensure (#4470)
  can't use break inside block inside ensure (#4470)
+  can't return from ensure (#4470)
  can't return from ensure (#4470)
+  shadows local variable (1)
  shadows local variable (1)
+  can't use next inside block inside ensure (#4470)
  can't use next inside block inside ensure (#4470)
+  types a var after rescue as being nilable
  types a var after rescue as being nilable
+  marks def as raises
  marks def as raises
+  type union with empty rescue block
  type union with empty rescue block
+  says syntax error on "begin; rescue ex; rescue ex : Foo; end; ex"
  says syntax error on "begin; rescue ex; rescue ex : Foo; end; ex"
+  doesn't type instance variable as nilable if assigned inside an exception handler after being assigned
  doesn't type instance variable as nilable if assigned inside an exception handler after being assigned
+  types exception var with no types
  types exception var with no types
+  type union with empty main block
  type union with empty main block
+  marks fun as raises
  marks fun as raises
+  types a var after begin rescue as having all possible types in begin and rescue (2)
  types a var after begin rescue as having all possible types in begin and rescue (2)
+  doesn't consider vars as nilable inside else (#610)
  doesn't consider vars as nilable inside else (#610)
+  says syntax error on "begin; else; 1; end"
  says syntax error on "begin; else; 1; end"
+  detects reading nil-if-read variable after exception handler (#4723)
  detects reading nil-if-read variable after exception handler (#4723)
+  correctly types variables inside conditional inside exception handler with no-return rescue (#8012)
  correctly types variables inside conditional inside exception handler with no-return rescue (#8012)
+  can use next inside block inside ensure (#4470)
  can use next inside block inside ensure (#4470)
+  correctly types variable assigned inside nested exception handler (#9769)
  correctly types variable assigned inside nested exception handler (#9769)
+  can't return from block inside ensure (#4470)
  can't return from block inside ensure (#4470)
+  errors if caught exception is not a subclass of Exception
  errors if caught exception is not a subclass of Exception
+  errors if caught exception is not a subclass of Exception without var
  errors if caught exception is not a subclass of Exception without var
+  assigns var inside ensure (2) (#3919)
  assigns var inside ensure (2) (#3919)
+  can't use next inside while inside ensure (#4470)
  can't use next inside while inside ensure (#4470)
+  types instance variable as nilable if assigned inside an exception handler (#1845)
  types instance variable as nilable if assigned inside an exception handler (#1845)
+  types var as nilable inside ensure (1)
  types var as nilable inside ensure (1)
+  can use break inside block inside ensure (#4470)
  can use break inside block inside ensure (#4470)
+  marks method calling method that raises as raises
  marks method calling method that raises as raises
+  assigns var inside ensure (1) (#3919)
  assigns var inside ensure (1) (#3919)
+  says syntax error on "begin; rescue ex; rescue; end; ex"
  says syntax error on "begin; rescue ex; rescue; end; ex"
+  types exception with type
  types exception with type
+Code gen: module
+  codegens pointer of module with method with two including types with one struct (2)
  codegens pointer of module with method with two including types with one struct (2)
+  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)  invokes method on yielded module that has no instances (#1079)
  invokes method on yielded module that has no instances (#1079)
+  codegens proc of a module that was never included
  codegens proc of a module that was never included
+  codegens cast to module with class and struct to nilable module
  codegens cast to module with class and struct to nilable module
+  can use generic module as instance variable type
  can use generic module as instance variable type
+  codegens cast to module that includes bool
  codegens cast to module that includes bool
+  expands modules to its including types (#1916)
  expands modules to its including types (#1916)
+  codegens pointer of module with method
  codegens pointer of module with method
+  codegens pointer of module and pass value to method
  codegens pointer of module and pass value to method
+  expands modules to its including types (3) (#1916)
  expands modules to its including types (3) (#1916)
+  can use generic module as instance variable type (2)
  can use generic module as instance variable type (2)
+  codegens pointer of module with method with two including types with one struct
  codegens pointer of module with method with two including types with one struct
+  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)  casts to union of module that is included in other module (#3323)
  casts to union of module that is included in other module (#3323)
+  expands modules to its including types (2) (#1916)
  expands modules to its including types (2) (#1916)
+  codegens pointer of module with method with two including types
  codegens pointer of module with method with two including types
+  declares proc with module type and invoke it with two different types that return themselves
  declares proc with module type and invoke it with two different types that return themselves
+  can instantiate generic module
  can instantiate generic module
+  declares and includes generic module, in macros T is a tuple literal
  declares and includes generic module, in macros T is a tuple literal
+  codegens module with virtual type
  codegens module with virtual type
+  codegens dispatch of union with module (#3647)
  codegens dispatch of union with module (#3647)
+  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)  casts to union of generic module that is included in other module (#3323)
  casts to union of generic module that is included in other module (#3323)
+  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block  codegens pointer of module with block
  codegens pointer of module with block
+  codegens proc of module when generic type includes it
  codegens proc of module when generic type includes it
+  declares proc with module type
  declares proc with module type
+Code gen: def
+  call functions defined in any order
  call functions defined in any order
+  uses previous argument in default value (#1062)
  uses previous argument in default value (#1062)
+  codegens with and without default arguments
  codegens with and without default arguments
+  looks up matches in super classes and merges them with subclasses
  looks up matches in super classes and merges them with subclasses
+  codegens recursive type with union
  codegens recursive type with union
+  codegens dispatch with single def when discarding unallocated ones (2)
  codegens dispatch with single def when discarding unallocated ones (2)
+  builds infinite recursive function
  builds infinite recursive function
+  puts union before single type in matches preferences
  puts union before single type in matches preferences
+  codegens with related types
  codegens with related types
+  codegens return nil when nilable type (2)
  codegens return nil when nilable type (2)
+  codegens union to union assignment of mutable arg (#3691)
  codegens union to union assignment of mutable arg (#3691)
+  codegens return nil when nilable type (1)
  codegens return nil when nilable type (1)
+  codegens call with args
  codegens call with args
+  codegens dispatch without obj, bug 1
  codegens dispatch without obj, bug 1
+  dispatches on virtual type implementing generic module (related to bug #165)
  dispatches on virtual type implementing generic module (related to bug #165)
+  codegens and doesn't break if obj is int and there's a mutation  codegens and doesn't break if obj is int and there's a mutation  codegens and doesn't break if obj is int and there's a mutation  codegens and doesn't break if obj is int and there's a mutation  codegens and doesn't break if obj is int and there's a mutation  codegens and doesn't break if obj is int and there's a mutation  codegens and doesn't break if obj is int and there's a mutation  codegens and doesn't break if obj is int and there's a mutation  codegens and doesn't break if obj is int and there's a mutation
  codegens and doesn't break if obj is int and there's a mutation
+  uses dispatch call type for phi (#3529)
  uses dispatch call type for phi (#3529)
+  unifies all calls to same def  unifies all calls to same def  unifies all calls to same def  unifies all calls to same def  unifies all calls to same def  unifies all calls to same def  unifies all calls to same def  unifies all calls to same def  unifies all calls to same def
  unifies all calls to same def
+  codegens dispatch without obj, bug 1
  codegens dispatch without obj, bug 1
+  codegens dispatch with single def when discarding unallocated ones (1)
  codegens dispatch with single def when discarding unallocated ones (1)
+  codegens recursive nasty code
  codegens recursive nasty code
+  use target def type as return type  use target def type as return type  use target def type as return type  use target def type as return type  use target def type as return type  use target def type as return type  use target def type as return type  use target def type as return type  use target def type as return type
  use target def type as return type
+  runs empty def
  runs empty def
+  codegens empty def
  codegens empty def
+  codegens dispatch on static method
  codegens dispatch on static method
+  can match N type argument of static array (#1203)
  can match N type argument of static array (#1203)
+  codegens dispatch with nilable reference union type
  codegens dispatch with nilable reference union type
+  codegens def which changes type of arg
  codegens def which changes type of arg
+  allows to change argument values
  allows to change argument values
+  codegens bug #119  codegens bug #119  codegens bug #119  codegens bug #119  codegens bug #119  codegens bug #119  codegens bug #119  codegens bug #119  codegens bug #119
  codegens bug #119
+  codegens with and without many default arguments
  codegens with and without many default arguments
+  codegens with interesting default argument
  codegens with interesting default argument
+  codegens call without args
  codegens call without args
+  doesn't crash on private def as last expression
  doesn't crash on private def as last expression
+  codegens yield with destructing tuple having unreachable element
  codegens yield with destructing tuple having unreachable element
+  call external function 'putchar'
  call external function 'putchar'
+  fixes #230: include original owner in mangled def
  fixes #230: include original owner in mangled def
+  uses self
  uses self
+  uses var after external
  uses var after external
+expand
+  expands macro control {% if %}
  expands macro control {% if %}
+  expands macro expression inside enum
  expands macro expression inside enum
+  doesn't expand normal call
  doesn't expand normal call
+  expands macro expression inside private struct
  expands macro expression inside private struct
+  expands macro expression inside def of private module
  expands macro expression inside def of private module
+  doesn't expand macro expression with cursor out of end
  doesn't expand macro expression with cursor out of end
+  expands macro control {% for %} with cursor at end of it
  expands macro control {% for %} with cursor at end of it
+  expands macro control {% for %} with cursor inside it
  expands macro control {% for %} with cursor inside it
+  expands macro of module with cursor at module name
  expands macro of module with cursor at module name
+  expands macros with 3 level
  expands macros with 3 level
+  expands macro expression {{ ... }} with cursor inside it
  expands macro expression {{ ... }} with cursor inside it
+  expands macro expression inside private def
  expands macro expression inside private def
+  expands macro expression inside C union
  expands macro expression inside C union
+  expands macro expression inside def of private struct
  expands macro expression inside def of private struct
+  doesn't expand macro expression
  doesn't expand macro expression
+  doesn't expand macro expression
  doesn't expand macro expression
+  expands simple macro with cursor inside it
  expands simple macro with cursor inside it
+  expands macro control {% if %} with indent
  expands macro control {% if %} with indent
+  expands macro expression {% ... %}
  expands macro expression {% ... %}
+  expands macro expression {{ ... }} with cursor end of it
  expands macro expression {{ ... }} with cursor end of it
+  expands macro expression inside def
  expands macro expression inside def
+  expands macro with doc
  expands macro with doc
+  expands macro expression inside module
  expands macro expression inside module
+  expands macro expression inside struct
  expands macro expression inside struct
+  expands macro control {% if %} with cursor inside it
  expands macro control {% if %} with cursor inside it
+  expands macro expression inside private module
  expands macro expression inside private module
+  expands macro of module with cursor at dot
  expands macro of module with cursor at dot
+  expands macro expression inside def of nested module
  expands macro expression inside def of nested module
+  expands macro expression inside C struct
  expands macro expression inside C struct
+  expands complex macro
  expands complex macro
+  expands macro expression inside C struct of private lib
  expands macro expression inside C struct of private lib
+  expands macro expression inside def of module
  expands macro expression inside def of module
+  expands macro control {% if %} with cursor at end of it
  expands macro control {% if %} with cursor at end of it
+  expands macro expression {% ... %} with cursor at end of it
  expands macro expression {% ... %} with cursor at end of it
+  expands macro expression inside lib
  expands macro expression inside lib
+  expands simple macro
  expands simple macro
+  expands macro expression inside private enum
  expands macro expression inside private enum
+  expands macro expression inside def of nested private module
  expands macro expression inside def of nested private module
+  expands macro expression inside fun
  expands macro expression inside fun
+  expands macro expression inside def of private enum
  expands macro expression inside def of private enum
+  expands macro expression inside class
  expands macro expression inside class
+  expands macro expression inside private lib
  expands macro expression inside private lib
+  expands macro of module
  expands macro of module
+  expands macro control {% for %} with indent
  expands macro control {% for %} with indent
+  expands macro of module inside module
  expands macro of module inside module
+  expands macro expression {{ ... }}
  expands macro expression {{ ... }}
+  expands macro control {% for %}
  expands macro control {% for %}
+  expands macros with 2 level
  expands macros with 2 level
+  expands macro expression inside C union of private lib
  expands macro expression inside C union of private lib
+  expands macro expression inside private class
  expands macro expression inside private class
+  expands macro expression inside def of private module
  expands macro expression inside def of private module
+  expands simple macro with cursor at end of it
  expands simple macro with cursor at end of it
+  expands macro expression inside def of private class
  expands macro expression inside def of private class
+Crystal::Repl::Interpreter
+  constants
+    returns nil in the assignment
    returns nil in the assignment
+    interprets self inside constant inside class
    interprets self inside constant inside class
+    hoists constants
    hoists constants
+    interprets complex constant
    interprets complex constant
+    interprets constant literal
    interprets constant literal
+  magic constants
+    does line number
    does line number
+Semantic: named args
+  matches specific overload with named arguments (2) (#2753)
  matches specific overload with named arguments (2) (#2753)
+  errors if named arg not found
  errors if named arg not found
+  matches specific overload with named arguments (#2753)
  matches specific overload with named arguments (#2753)
+  sends two regular arguments as named arguments in inverted position (2)
  sends two regular arguments as named arguments in inverted position (2)
+  uses bare splat in new
  uses bare splat in new
+  says no overload matches with named arg
  says no overload matches with named arg
+  doesn't include arguments with default values in missing arguments error
  doesn't include arguments with default values in missing arguments error
+  errors if named arg already specified
  errors if named arg already specified
+  errors if named arg matches splat argument
  errors if named arg matches splat argument
+  sends one regular argument as named argument
  sends one regular argument as named argument
+  errors if missing two arguments
  errors if missing two arguments
+  errors if missing one argument
  errors if missing one argument
+  says correct error when forwarding named args (#7491)
  says correct error when forwarding named args (#7491)
+  sends two regular arguments as named arguments
  sends two regular arguments as named arguments
+  errors if named arg already specified, but multiple overloads (#7281)
  errors if named arg already specified, but multiple overloads (#7281)
+  overloads based on required named args, with restrictions
  overloads based on required named args, with restrictions
+  errors if named arg matches single splat argument
  errors if named arg matches single splat argument
+  errors if doesn't pass named arg restriction
  errors if doesn't pass named arg restriction
+  overloads based on required named args
  overloads based on required named args
+  errors if named arg already specified
  errors if named arg already specified
+  errors if named arg not found in new
  errors if named arg not found in new
+  allows named arg if there's a splat
  allows named arg if there's a splat
+  gives correct error message with external names (#3934)
  gives correct error message with external names (#3934)
+  sends two regular arguments as named arguments in inverted position (1)
  sends two regular arguments as named arguments in inverted position (1)
+  passes #2696
  passes #2696
+  errors if named arg already specified but in same position
  errors if named arg already specified but in same position
+  gives correct error message for missing args after *
  gives correct error message for missing args after *
+  doesn't fail on named argument with NoReturn type (#7760)
  doesn't fail on named argument with NoReturn type (#7760)
+Semantic: responds_to?
+  restricts other types inside if else
  restricts other types inside if else
+  restricts type inside if scope 1
  restricts type inside if scope 1
+  is bool
  is bool
+  restricts virtual generic superclass to subtypes
  restricts virtual generic superclass to subtypes
+  restricts in assignment
  restricts in assignment
+  restricts virtual generic module to including types (#8334)
  restricts virtual generic module to including types (#8334)
+Code gen: struct
+  sets instance var to proc  sets instance var to proc  sets instance var to proc  sets instance var to proc  sets instance var to proc  sets instance var to proc  sets instance var to proc  sets instance var to proc����������������  sets instance var to proc
  sets instance var to proc
+  codegens struct property setter
  codegens struct property setter
+  can access member of uninitialized struct behind type (#8774)
  can access member of uninitialized struct behind type (#8774)
+  codegens struct access with -> and then .
  codegens struct access with -> and then .
+  codegens assign struct to union
  codegens assign struct to union
+  codegens struct set inside struct
  codegens struct set inside struct
+  codegens passing pointerof(struct) to fun
  codegens passing pointerof(struct) to fun
+  passes struct to method (2)
  passes struct to method (2)
+  automatically converts by invoking to_unsafe
  automatically converts by invoking to_unsafe
+  automatically converts numeric type in struct field assignment
  automatically converts numeric type in struct field assignment
+  codegens pointer malloc of struct
  codegens pointer malloc of struct
+  automatically converts numeric union type in struct field assignment
  automatically converts numeric union type in struct field assignment
+  can access instance var from the outside (#1092)
  can access instance var from the outside (#1092)
+  allows using named arguments for new
  allows using named arguments for new
+  passes struct to method (1)
  passes struct to method (1)
+  automatically converts nil to pointer
  automatically converts nil to pointer
+  codegens set struct value with constant
  codegens set struct value with constant
+  codegens struct property setter via pointer
  codegens struct property setter via pointer
+  builds struct setter with fun type (2)
  builds struct setter with fun type (2)
+  codegens struct property setter via pointer
  codegens struct property setter via pointer
+  codegens struct get inside struct
  codegens struct get inside struct
+  does to_s  does to_s  does to_s  does to_s  does to_s  does to_s  does to_s��������������  does to_s��  does to_s
  does to_s
+  codegens struct property default value
  codegens struct property default value
+  builds struct setter with fun type (1)
  builds struct setter with fun type (1)
+  codegens union inside struct
  codegens union inside struct
+  yields struct via ->
  yields struct via ->
+Code gen: pointer
+  codegens nilable pointer type (2)
  codegens nilable pointer type (2)
+  compares pointers through typedef
  compares pointers through typedef
+  generates correct code for Pointer.malloc(0) (#2905)
  generates correct code for Pointer.malloc(0) (#2905)
+  can assign nil to void pointer
  can assign nil to void pointer
+  can use typedef pointer value get and set (#630)
  can use typedef pointer value get and set (#630)
+  can pass any pointer to something expecting void* in lib call, with to_unsafe
  can pass any pointer to something expecting void* in lib call, with to_unsafe
+  codegens pointer as if condition inside union (1)
  codegens pointer as if condition inside union (1)
+  calculates pointer diff
  calculates pointer diff
+  codegens nilable pointer type dispatch (2)
  codegens nilable pointer type dispatch (2)
+  get pointer and value of it
  get pointer and value of it
+  sets value of pointer to struct
  sets value of pointer to struct
+  changes through var and reads from pointer
  changes through var and reads from pointer
+  get value of pointer to union
  get value of pointer to union
+  codegens nilable pointer type (1)
  codegens nilable pointer type (1)
+  set pointer value
  set pointer value
+  sets value of pointer to union
  sets value of pointer to union
+  does pointerof class variable
  does pointerof class variable
+  gets pointer to constant  gets pointer to constant  gets pointer to constant������  gets pointer to constant  gets pointer to constant����  gets pointer to constant��  gets pointer to constant  gets pointer to constant����  gets pointer to constant
  gets pointer to constant
+  assigns nil and pointer to nilable pointer type
  assigns nil and pointer to nilable pointer type
+  gets pointer of argument that is never assigned to
  gets pointer of argument that is never assigned to
+  codegens null pointer as if condition
  codegens null pointer as if condition
+  codegens nilable pointer type dispatch (1)
  codegens nilable pointer type dispatch (1)
+  codegens pointer cast
  codegens pointer cast
+  codegens realloc
  codegens realloc
+  increments pointer
  increments pointer
+  codegens pointer as if condition
  codegens pointer as if condition
+  can dereference pointer to func
  can dereference pointer to func
+  passes arguments correctly for typedef metaclass (#8544)
  passes arguments correctly for typedef metaclass (#8544)
+  gets pointer of instance variable in virtual type
  gets pointer of instance variable in virtual type
+  passes pointer of pointer to method
  passes pointer of pointer to method
+  does pointerof read variable
  does pointerof read variable
+  uses correct llvm module for typedef metaclass (#2877)
  uses correct llvm module for typedef metaclass (#2877)
+  takes pointerof lib external var  takes pointerof lib external var  takes pointerof lib external var  takes pointerof lib external var  takes pointerof lib external var����������  takes pointerof lib external var  takes pointerof lib external var����  takes pointerof lib external var��  takes pointerof lib external var
  takes pointerof lib external var
+  codegens pointer as if condition inside union (2)
  codegens pointer as if condition inside union (2)
+  creates pointer by address
  creates pointer by address
+  does pointerof class variable with class
  does pointerof class variable with class
+  can pass any pointer to something expecting void* in lib call
  can pass any pointer to something expecting void* in lib call
+  codegens pointer cast to Nil (#8015)
  codegens pointer cast to Nil (#8015)
+  get pointer of instance var
  get pointer of instance var
+  codegens malloc
  codegens malloc
+Crystal::Repl::Interpreter
+  typeof
+    interprets typeof instance type
    interprets typeof instance type
+    interprets typeof metaclass type
    interprets typeof metaclass type
+    interprets typeof virtual type
    interprets typeof virtual type
+Crystal::Repl::Interpreter
+  control flow
+    interprets if pointer, true
    interprets if pointer, true
+    interprets return Nil
    interprets return Nil
+    interprets break inside while inside block
    interprets break inside while inside block
+    interprets while, returns nil
    interprets while, returns nil
+    interprets if bool (false)
    interprets if bool (false)
+    interprets break inside while
    interprets break inside while
+    discards if
    discards if
+    interprets break with value inside while (through normal flow)
    interprets break with value inside while (through normal flow)
+    interprets if union type with nil, false
    interprets if union type with nil, false
+    interprets break inside nested while
    interprets break inside nested while
+    interprets if union type with bool, false
    interprets if union type with bool, false
+    interprets break with value inside while (through break)
    interprets break with value inside while (through break)
+    interprets until
    interprets until
+    interprets if (true literal)
    interprets if (true literal)
+    interprets if (int type)
    interprets if (int type)
+    interprets if (false literal)
    interprets if (false literal)
+    interprets while
    interprets while
+    interprets next inside while inside block
    interprets next inside while inside block
+    interprets if bool (true)
    interprets if bool (true)
+    discards while
    discards while
+    interprets return implicit nil and Int32
    interprets return implicit nil and Int32
+    interprets return
    interprets return
+    interprets if union type with bool, true
    interprets if union type with bool, true
+    interprets if (nil literal)
    interprets if (nil literal)
+    interprets unless
    interprets unless
+    interprets return Nil with explicit return (#12178)
    interprets return Nil with explicit return (#12178)
+    interprets if (nil type)
    interprets if (nil type)
+    interprets next inside while
    interprets next inside while
+    interprets if pointer, false
    interprets if pointer, false
+Semantic: module
+  calls super on included generic module and finds type var
  calls super on included generic module and finds type var
+  uses :Module name for modules in errors
  uses :Module name for modules in errors
+  errors if including generic module and not specifying type vars
  errors if including generic module and not specifying type vars
+  correctly types type var in included module, with a restriction with a free var (bug)
  correctly types type var in included module, with a restriction with a free var (bug)
+  includes but not a module
  includes but not a module
+  gives helpful error message when generic type var is missing
  gives helpful error message when generic type var is missing
+  instantiates generic variadic module, accesses T from instance method
  instantiates generic variadic module, accesses T from instance method
+  errors when extending module that defines instance vars (#4065)
  errors when extending module that defines instance vars (#4065)
+  extends generic module from generic class and calls class method (#7167)
  extends generic module from generic class and calls class method (#7167)
+  includes generic module with self (check argument superclass type, success)
  includes generic module with self (check argument superclass type, success)
+  includes generic module with self (check argument type, success)
  includes generic module with self (check argument type, success)
+  errors if reopening generic module with different type vars (2)
  errors if reopening generic module with different type vars (2)
+  errors when extending self and self defines instance vars (#9568)
  errors when extending self and self defines instance vars (#9568)
+  errors if reopening generic module with different splat index
  errors if reopening generic module with different splat index
+  uses type declaration inside module and gives error
  uses type declaration inside module and gives error
+  declares module automatically if not previously declared when declaring a class
  declares module automatically if not previously declared when declaring a class
+  gives helpful error message when generic type var is missing in block spec
  gives helpful error message when generic type var is missing in block spec
+  allows overloading with included generic module
  allows overloading with included generic module
+  gives error with cyclic include between non-generic and generic module
  gives error with cyclic include between non-generic and generic module
+  doesn't look up initialize past module that defines initialize (#7007)
  doesn't look up initialize past module that defines initialize (#7007)
+  includes generic module with self (check argument superclass type, success)
  includes generic module with self (check argument superclass type, success)
+  instantiates generic variadic module, accesses T from class method
  instantiates generic variadic module, accesses T from class method
+  includes generic module and errors in call
  includes generic module and errors in call
+  inherits instance var type annotation from generic to generic to concrete
  inherits instance var type annotation from generic to generic to concrete
+  gives error when trying to instantiate with new
  gives error when trying to instantiate with new
+  types pointer of module with generic type
  types pointer of module with generic type
+  instantiates generic variadic module, accesses T from instance method through generic include
  instantiates generic variadic module, accesses T from instance method through generic include
+  calls super on included generic module and finds type var (2)
  calls super on included generic module and finds type var (2)
+  works with range and map
  works with range and map
+  includes generic module with another generic type
  includes generic module with another generic type
+  gives error with cyclic include, generic module
  gives error with cyclic include, generic module
+  gives error when including instantiation of self, generic module
  gives error when including instantiation of self, generic module
+  errors when extending module that defines instance vars (2) (#4065)
  errors when extending module that defines instance vars (2) (#4065)
+  types union of module and class that includes it
  types union of module and class that includes it
+  reports can't use instance variables inside module
  reports can't use instance variables inside module
+  errors if reopening generic module with different splat index (2)
  errors if reopening generic module with different splat index (2)
+  uses type declaration inside module
  uses type declaration inside module
+  can restrict module with module (#3029)
  can restrict module with module (#3029)
+  includes generic module with type
  includes generic module with type
+  types pointer of module with method
  types pointer of module with method
+  includes module but wrong number of arguments
  includes module but wrong number of arguments
+  types proc of module with generic class
  types proc of module with generic class
+  includes module in a class
  includes module in a class
+  includes module in a module
  includes module in a module
+  types pointer of module with generic type
  types pointer of module with generic type
+  extends self
  extends self
+  initializes variable in module
  initializes variable in module
+  inherits instance var type annotation from generic to concrete with T
  inherits instance var type annotation from generic to concrete with T
+  errors when extending generic module that defines instance vars
  errors when extending generic module that defines instance vars
+  can't reopen as struct
  can't reopen as struct
+  gives error with cyclic include
  gives error with cyclic include
+  gives error with cyclic include between non-generic and generic module (2)
  gives error with cyclic include between non-generic and generic module (2)
+  includes generic module with self
  includes generic module with self
+  types pointer of module
  types pointer of module
+  errors when extending self and self defines instance vars (2) (#9568)
  errors when extending self and self defines instance vars (2) (#9568)
+  types proc of module after type changes
  types proc of module after type changes
+  can instantiate generic module
  can instantiate generic module
+  extends generic module from generic module and calls class method (#7167)
  extends generic module from generic module and calls class method (#7167)
+  includes generic module with self (check return type, error)
  includes generic module with self (check return type, error)
+  errors when recursively extending module that defines instance vars (2)
  errors when recursively extending module that defines instance vars (2)
+  can't pass module class to virtual metaclass (#6113)
  can't pass module class to virtual metaclass (#6113)
+  includes module with Union(T*)
  includes module with Union(T*)
+  extends module from generic class and calls class method (#7167)
  extends module from generic class and calls class method (#7167)
+  finds in module when included
  finds in module when included
+  types pointer of module with method with two including types
  types pointer of module with method with two including types
+  declares module automatically if not previously declared when declaring a module
  declares module automatically if not previously declared when declaring a module
+  finds types close to included module
  finds types close to included module
+  includes generic module explicitly and errors
  includes generic module explicitly and errors
+  includes generic module explicitly
  includes generic module explicitly
+  instantiates generic variadic module, accesses T from class method through generic extend
  instantiates generic variadic module, accesses T from class method through generic extend
+  errors when recursively extending module that defines instance vars
  errors when recursively extending module that defines instance vars
+  gives error when trying to instantiate with allocate
  gives error when trying to instantiate with allocate
+  errors if declares module inside if
  errors if declares module inside if
+  includes generic module with self (check return subclass type, error)
  includes generic module with self (check return subclass type, error)
+  gives error when including self
  gives error when including self
+  type def does not reopen type from parent namespace (#11181)
  type def does not reopen type from parent namespace (#11181)
+  includes generic module with self (check return type, success)
  includes generic module with self (check return type, success)
+  finds nested type inside method in block inside module
  finds nested type inside method in block inside module
+  finds constant in generic module included in another module
  finds constant in generic module included in another module
+  includes generic module with self, and inherits it
  includes generic module with self, and inherits it
+  can use generic module as instance variable type
  can use generic module as instance variable type
+  doesn't lookup type in ancestor when matches in current type (#2982)
  doesn't lookup type in ancestor when matches in current type (#2982)
+  initializes variable in module, recursive
  initializes variable in module, recursive
+  gives error when including self, generic module
  gives error when including self, generic module
+  calls super on included generic module
  calls super on included generic module
+  instantiates generic variadic module, accesses T from instance method through generic include, more args
  instantiates generic variadic module, accesses T from instance method through generic include, more args
+  works with int including enumerable
  works with int including enumerable
+  includes generic module with self (check return subclass type, success)
  includes generic module with self (check return subclass type, success)
+  errors if reopening non-generic module as generic
  errors if reopening non-generic module as generic
+  works ok in a case where a typed-def type has an underlying type that has an included generic module (bug)
  works ok in a case where a typed-def type has an underlying type that has an included generic module (bug)
+  can use generic module as instance variable type (2)
  can use generic module as instance variable type (2)
+  inherits instance var type annotation from generic to concrete
  inherits instance var type annotation from generic to concrete
+  can't reopen as class
  can't reopen as class
+  uses type declaration inside module, recursive, and gives error
  uses type declaration inside module, recursive, and gives error
+  extends a module
  extends a module
+  includes module but not generic
  includes module but not generic
+  errors when extending generic module that defines instance vars (2)
  errors when extending generic module that defines instance vars (2)
+  errors if reopening generic module with different type vars
  errors if reopening generic module with different type vars
+  instantiates generic variadic module, accesses T from instance method, more args
  instantiates generic variadic module, accesses T from instance method, more args
+  errors if reopening generic module with different splat index (3)
  errors if reopening generic module with different splat index (3)
+  includes generic module with self (check argument type, error)
  includes generic module with self (check argument type, error)
+  errors when extending self and self defines instance vars (3) (#9568)
  errors when extending self and self defines instance vars (3) (#9568)
+  finds class method in block
  finds class method in block
+  finds inner class from inherited one (#476)
  finds inner class from inherited one (#476)
+  includes module but can't access metaclass methods
  includes module but can't access metaclass methods
+Crystal::Repl::Interpreter
+  instance_alignof
+    interprets instance_alignof typeof
    interprets instance_alignof typeof
+  instance_sizeof
+    interprets instance_sizeof typeof
    interprets instance_sizeof typeof
+  alignof
+    interprets alignof typeof
    interprets alignof typeof
+  sizeof
+    interprets sizeof typeof
    interprets sizeof typeof
+Crystal::Repl::Interpreter
+  named tuple
+    interprets named tuple literal and access by known index
    interprets named tuple literal and access by known index
+    interprets named tuple metaclass indexer
    interprets named tuple metaclass indexer
+    discards named tuple (#12383)
    discards named tuple (#12383)
+Lexer
+  lexes "offsetof"
  lexes "offsetof"
+  says syntax error on "4f33"
  says syntax error on "4f33"
+  lexes "while!"
  lexes "while!"
+  lexes ":<="
  lexes ":<="
+  says syntax error on "9999999999999999999_i32"
  says syntax error on "9999999999999999999_i32"
+  says syntax error on "-0e_12"
  says syntax error on "-0e_12"
+  lexes ""
  lexes ""
+  lexes "\8"
  lexes "\8"
+  says syntax error on "4f22"
  says syntax error on "4f22"
+  says syntax error on "$0?"
  says syntax error on "$0?"
+  lexes "0_f32"
  lexes "0_f32"
+  says syntax error on "4i33"
  says syntax error on "4i33"
+  lexes "&*"
  lexes "&*"
+  lexes "0x3fffffffffffffff"
  lexes "0x3fffffffffffffff"
+  lexes "as?"
  lexes "as?"
+  says syntax error on "-0_u64"
  says syntax error on "-0_u64"
+  lexes "&-="
  lexes "&-="
+  says syntax error on "\"\\xz\""
  says syntax error on "\"\\xz\""
+  says syntax error on "-32769_i16"
  says syntax error on "-32769_i16"
+  lexes "}"
  lexes "}"
+  lexes "def!"
  lexes "def!"
+  says syntax error on "18446744073709551616_i32"
  says syntax error on "18446744073709551616_i32"
+  lexes "\xFF"
  lexes "\xFF"
+  lexes "0.5"
  lexes "0.5"
+  lexes ":&**"
  lexes ":&**"
+  lexes "else"
  lexes "else"
+  lexes "0x7fffffffffffffff"
  lexes "0x7fffffffffffffff"
+  lexes "0f32"
  lexes "0f32"
+  lexes "1.0"
  lexes "1.0"
+  says syntax error on "\"\\400\""
  says syntax error on "\"\\400\""
+  lexes "@["
  lexes "@["
+  lexes "-9223372036854775808"
  lexes "-9223372036854775808"
+  says syntax error on "0xFF_i8"
  says syntax error on "0xFF_i8"
+  lexes "return"
  lexes "return"
+  lexes "0o1000000000000000000000"
  lexes "0o1000000000000000000000"
+  lexes "="
  lexes "="
+  says syntax error on "\"hi\\"
  says syntax error on "\"hi\\"
+  lexes "9223372036854775807"
  lexes "9223372036854775807"
+  lexes "://"
  lexes "://"
+  lexes "0x1_i64"
  lexes "0x1_i64"
+  lexes "1.0f32"
  lexes "1.0f32"
+  lexes "&+="
  lexes "&+="
+  says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000"
  says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000"
+  says syntax error on "2147483648_i32"
  says syntax error on "2147483648_i32"
+  says syntax error on "0x1afafafafafafafafafafafi32"
  says syntax error on "0x1afafafafafafafafafafafi32"
+  says syntax error on "0o73_f64"
  says syntax error on "0o73_f64"
+  lexes regex after \n
  lexes regex after \n
+  says syntax error on "'\\u{DFFF}'"
  says syntax error on "'\\u{DFFF}'"
+  lexes "else!"
  lexes "else!"
+  lexes "/"
  lexes "/"
+  lexes "0o1000000000000000000000"
  lexes "0o1000000000000000000000"
+  lexes "\n\n\n"
  lexes "\n\n\n"
+  lexes "true"
  lexes "true"
+  lexes "*="
  lexes "*="
+  lexes "1_u16"
  lexes "1_u16"
+  lexes "0b100000000000000000000000000000000"
  lexes "0b100000000000000000000000000000000"
+  lexes __FILE__
  lexes __FILE__
+  lexes "+1.0f32"
  lexes "+1.0f32"
+  lexes ":<=>"
  lexes ":<=>"
+  says syntax error on "-0x80000000000000000000000000000000"
  says syntax error on "-0x80000000000000000000000000000000"
+  says syntax error on "4i12"
  says syntax error on "4i12"
+  lexes "alias"
  lexes "alias"
+  lexes "$10?"
  lexes "$10?"
+  lexes "1e+23_f32"
  lexes "1e+23_f32"
+  lexes "<=>"
  lexes "<=>"
+  lexes "+1_i128"
  lexes "+1_i128"
+  lexes ">>"
  lexes ">>"
+  lexes "+0.5"
  lexes "+0.5"
+  lexes "with"
  lexes "with"
+  says syntax error on "00"
  says syntax error on "00"
+  lexes "{%"
  lexes "{%"
+  lexes "1_000"
  lexes "1_000"
+  lexes "if"
  lexes "if"
+  lexes dot and ident
  lexes dot and ident
+  lexes "[]"
  lexes "[]"
+  lexes "\1"
  lexes "\1"
+  lexes "&*="
  lexes "&*="
+  lexes "-1_i64"
  lexes "-1_i64"
+  lexes "0b1111111111111111111111111111111"
  lexes "0b1111111111111111111111111111111"
+  says syntax error on "-2147483649_i32"
  says syntax error on "-2147483649_i32"
+  says syntax error on "0o200000_00000000_00000000_u64"
  says syntax error on "0o200000_00000000_00000000_u64"
+  lexes "||"
  lexes "||"
+  says syntax error on "128_i8"
  says syntax error on "128_i8"
+  lexes "0b001111111111111111111111111111111111111111111111111111111111111111"
  lexes "0b001111111111111111111111111111111111111111111111111111111111111111"
+  says syntax error on "2e"
  says syntax error on "2e"
+  says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
  says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+  says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
  says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+  lexes ":&*"
  lexes ":&*"
+  lexes "==="
  lexes "==="
+  lexes "$foo123"
  lexes "$foo123"
+  lexes "**"
  lexes "**"
+  lexes "1_i64"
  lexes "1_i64"
+  lexes "while"
  lexes "while"
+  lexes "nil?"
  lexes "nil?"
+  lexes "0x7fffffff"
  lexes "0x7fffffff"
+  says syntax error on "4i3"
  says syntax error on "4i3"
+  lexes "self"
  lexes "self"
+  lexes "yield!"
  lexes "yield!"
+  lexes "1_234.567_890"
  lexes "1_234.567_890"
+  lexes "lib"
  lexes "lib"
+  lexes "@@foo"
  lexes "@@foo"
+  lexes "1.2e+23_f64"
  lexes "1.2e+23_f64"
+  lexes "1i32"
  lexes "1i32"
+  lexes "of"
  lexes "of"
+  lexes "1_u32"
  lexes "1_u32"
+  says syntax error on "0o7777777777777777777777777777777777777777777777777"
  says syntax error on "0o7777777777777777777777777777777777777777777777777"
+  lexes "0i8"
  lexes "0i8"
+  lexes "1i8"
  lexes "1i8"
+  says syntax error on "18446744073709551616"
  says syntax error on "18446744073709551616"
+  says syntax error on "2e8i8"
  says syntax error on "2e8i8"
+  lexes symbol followed by ==
  lexes symbol followed by ==
+  says syntax error on "4i65"
  says syntax error on "4i65"
+  lexes "macro"
  lexes "macro"
+  says syntax error on "-1_u128"
  says syntax error on "-1_u128"
+  lexes "1_u8"
  lexes "1_u8"
+  lexes "0o123_i64"
  lexes "0o123_i64"
+  says syntax error on "0x8000000000000000i64"
  says syntax error on "0x8000000000000000i64"
+  lexes "private"
  lexes "private"
+  lexes "responds_to?"
  lexes "responds_to?"
+  says syntax error on "-1_u32"
  says syntax error on "-1_u32"
+  lexes "class?"
  lexes "class?"
+  lexes "module"
  lexes "module"
+  lexes "0b1010"
  lexes "0b1010"
+  lexes "do!"
  lexes "do!"
+  lexes "union"
  lexes "union"
+  says syntax error on "4F32"
  says syntax error on "4F32"
+  lexes "&-"
  lexes "&-"
+  lexes ">>="
  lexes ">>="
+  lexes "->"
  lexes "->"
+  invalid byte sequence
  invalid byte sequence
+  lexes "-1.0f32"
  lexes "-1.0f32"
+  lexes "1_234.567_890_f32"
  lexes "1_234.567_890_f32"
+  lexes "0xffff_ffff_ffff_ffff"
  lexes "0xffff_ffff_ffff_ffff"
+  lexes ":"
  lexes ":"
+  lexes "=~"
  lexes "=~"
+  lexes __DIR__
  lexes __DIR__
+  lexes ":[]="
  lexes ":[]="
+  lexes "0b11111111_11111111_11111111_11111111_11111111_11111111_11111111_11111111"
  lexes "0b11111111_11111111_11111111_11111111_11111111_11111111_11111111_11111111"
+  says syntax error on "65536_u16"
  says syntax error on "65536_u16"
+  lexes "-0.0f32"
  lexes "-0.0f32"
+  lexes "super"
  lexes "super"
+  says syntax error on "0o40000000000i32"
  says syntax error on "0o40000000000i32"
+  lexes "in"
  lexes "in"
+  lexes "unless!"
  lexes "unless!"
+  lexes "+1234"
  lexes "+1234"
+  lexes "class!"
  lexes "class!"
+  says syntax error on "-999999999999999999999999999999999999999"
  says syntax error on "-999999999999999999999999999999999999999"
+  lexes "return!"
  lexes "return!"
+  lexes "-0x80000000000000000000000000000000_i128"
  lexes "-0x80000000000000000000000000000000_i128"
+  lexes ":foo?"
  lexes ":foo?"
+  says syntax error on "2ef32"
  says syntax error on "2ef32"
+  lexes "1e-23"
  lexes "1e-23"
+  lexes "uninitialized"
  lexes "uninitialized"
+  says syntax error on "0o12345671234567_12345671234567_i8"
  says syntax error on "0o12345671234567_12345671234567_i8"
+  says syntax error on "'\\u{110000}'"
  says syntax error on "'\\u{110000}'"
+  says syntax error on "0b11_f32"
  says syntax error on "0b11_f32"
+  says syntax error on "/foo"
  says syntax error on "/foo"
+  lexes "1f32"
  lexes "1f32"
+  lexes ":!"
  lexes ":!"
+  lexes ">="
  lexes ">="
+  lexes "with_1"
  lexes "with_1"
+  lexes "0x3🔮"
  lexes "0x3🔮"
+  says syntax error on "-3_"
  says syntax error on "-3_"
+  lexes "<"
  lexes "<"
+  lexes ".."
  lexes ".."
+  lexes ">"
  lexes ">"
+  says syntax error on "1_.1"
  says syntax error on "1_.1"
+  lexes ":==="
  lexes ":==="
+  lexes "<<="
  lexes "<<="
+  lexes "0xFFFFFFFF"
  lexes "0xFFFFFFFF"
+  lexes ":>="
  lexes ":>="
+  lexes "as"
  lexes "as"
+  lexes '\a'
  lexes '\a'
+  lexes "%="
  lexes "%="
+  lexes "select"
  lexes "select"
+  lexes "unless?"
  lexes "unless?"
+  lexes "-0o123"
  lexes "-0o123"
+  lexes "pointerof"
  lexes "pointerof"
+  lexes '\0'
  lexes '\0'
+  says syntax error on "-0x80000000000000000000000000000001"
  says syntax error on "-0x80000000000000000000000000000001"
+  lexes symbol followed by !=
  lexes symbol followed by !=
+  says syntax error on "4i22"
  says syntax error on "4i22"
+  lexes "0xabcdef"
  lexes "0xabcdef"
+  lexes "+0"
  lexes "+0"
+  lexes '\r'
  lexes '\r'
+  lexes "1_i16"
  lexes "1_i16"
+  lexes "?"
  lexes "?"
+  lexes "with_underscores"
  lexes "with_underscores"
+  lexes ":&"
  lexes ":&"
+  lexes "0🔮"
  lexes "0🔮"
+  lexes ":>"
  lexes ":>"
+  lexes "@foo"
  lexes "@foo"
+  lexes "true?"
  lexes "true?"
+  says syntax error on "\"\\x1z\""
  says syntax error on "\"\\x1z\""
+  lexes "//"
  lexes "//"
+  says syntax error on ":+1"
  says syntax error on ":+1"
+  lexes "return?"
  lexes "return?"
+  lexes "1u64"
  lexes "1u64"
+  lexes "2147483648"
  lexes "2147483648"
+  lexes "-0xFFFF"
  lexes "-0xFFFF"
+  says syntax error on "0F32"
  says syntax error on "0F32"
+  lexes "verbatim"
  lexes "verbatim"
+  lexes "1i64"
  lexes "1i64"
+  says syntax error on "-9999999999999999999"
  says syntax error on "-9999999999999999999"
+  lexes "next?"
  lexes "next?"
+  says syntax error on "0_12"
  says syntax error on "0_12"
+  lexes "do"
  lexes "do"
+  lexes "14146167139683460000"
  lexes "14146167139683460000"
+  lexes space after keyword
  lexes space after keyword
+  lexes "0b111111111111111111111111111111111111111111111111111111111111111"
  lexes "0b111111111111111111111111111111111111111111111111111111111111111"
+  lexes "0o001777777777777777777777"
  lexes "0o001777777777777777777777"
+  lexes "!~"
  lexes "!~"
+  lexes "/="
  lexes "/="
+  lexes "next!"
  lexes "next!"
+  lexes "-2147483649"
  lexes "-2147483649"
+  says syntax error on "256_u8"
  says syntax error on "256_u8"
+  lexes "//="
  lexes "//="
+  lexes "]"
  lexes "]"
+  lexes "begin?"
  lexes "begin?"
+  lexes ":*"
  lexes ":*"
+  lexes ":かたな"
  lexes ":かたな"
+  lexes "Foo"
  lexes "Foo"
+  lexes "unless"
  lexes "unless"
+  lexes "1i128hello"
  lexes "1i128hello"
+  lexes "*"
  lexes "*"
+  lexes "%}"
  lexes "%}"
+  lexes ":\"foo\""
  lexes ":\"foo\""
+  lexes "-0x8000000000000000_i64"
  lexes "-0x8000000000000000_i64"
+  lexes 'a'
  lexes 'a'
+  lexes "=>"
  lexes "=>"
+  lexes "if?"
  lexes "if?"
+  lexes "1_i32"
  lexes "1_i32"
+  lexes "_"
  lexes "_"
+  lexes "class"
  lexes "class"
+  says syntax error on "-9223372036854775809_i64"
  says syntax error on "-9223372036854775809_i64"
+  lexes ":foo"
  lexes ":foo"
+  says syntax error on "0o1234567123456712345671234567u64"
  says syntax error on "0o1234567123456712345671234567u64"
+  lexes char with unicode codepoint
  lexes char with unicode codepoint
+  lexes "0o123"
  lexes "0o123"
+  says syntax error on "4u65"
  says syntax error on "4u65"
+  says syntax error on "-.42"
  says syntax error on "-.42"
+  lexes "1"
  lexes "1"
+  lexes "0o37777777777"
  lexes "0o37777777777"
+  says syntax error on "0x1afafafafafafafafafafaf"
  says syntax error on "0x1afafafafafafafafafafaf"
+  lexes heredoc start
  lexes heredoc start
+  says syntax error on "0x10000_0000_0000_0000"
  says syntax error on "0x10000_0000_0000_0000"
+  lexes "for"
  lexes "for"
+  lexes "<<"
  lexes "<<"
+  lexes "abstract"
  lexes "abstract"
+  lexes "1.0f32"
  lexes "1.0f32"
+  lexes "["
  lexes "["
+  lexes ":[]?"
  lexes ":[]?"
+  lexes symbol with quote
  lexes symbol with quote
+  lexes "9223372036854775808"
  lexes "9223372036854775808"
+  lexes ":<<"
  lexes ":<<"
+  lexes "ensure"
  lexes "ensure"
+  lexes regex after \r\n
  lexes regex after \r\n
+  lexes '\f'
  lexes '\f'
+  lexes "1.0f64"
  lexes "1.0f64"
+  lexes "require"
  lexes "require"
+  lexes "ident"
  lexes "ident"
+  lexes "1e+23"
  lexes "1e+23"
+  lexes "1_u128"
  lexes "1_u128"
+  lexes ";"
  lexes ";"
+  says syntax error on "0b🔮"
  says syntax error on "0b🔮"
+  lexes char with unicode codepoint and curly with six hex digits
  lexes char with unicode codepoint and curly with six hex digits
+  lexes "-1_i128"
  lexes "-1_i128"
+  lexes "fun"
  lexes "fun"
+  lexes "false"
  lexes "false"
+  says syntax error on "0o200_i8"
  says syntax error on "0o200_i8"
+  lexes "0o40000000000"
  lexes "0o40000000000"
+  lexes "fooBar"
  lexes "fooBar"
+  lexes "-9223372036854775809_i128"
  lexes "-9223372036854775809_i128"
+  lexes "def"
  lexes "def"
+  lexes "-0x80000001"
  lexes "-0x80000001"
+  lexes "$23?"
  lexes "$23?"
+  lexes "0o777777777777777777777"
  lexes "0o777777777777777777777"
+  lexes '\b'
  lexes '\b'
+  lexes "0o177777_77777777_77777777"
  lexes "0o177777_77777777_77777777"
+  lexes "1_i128"
  lexes "1_i128"
+  lexes "0xffffffff"
  lexes "0xffffffff"
+  lexes "false?"
  lexes "false?"
+  lexes "is_a?"
  lexes "is_a?"
+  lexes symbol followed by ===
  lexes symbol followed by ===
+  lexes "0b11111111111111111111111111111111"
  lexes "0b11111111111111111111111111111111"
+  says syntax error on "0x100000000i32"
  says syntax error on "0x100000000i32"
+  lexes "typeof"
  lexes "typeof"
+  lexes "\110"
  lexes "\110"
+  says syntax error on "2e+-2"
  says syntax error on "2e+-2"
+  says syntax error on "4294967296_u32"
  says syntax error on "4294967296_u32"
+  lexes "yield"
  lexes "yield"
+  lexes "0o17777777777"
  lexes "0o17777777777"
+  lexes "0xFFFF"
  lexes "0xFFFF"
+  lexes ":|"
  lexes ":|"
+  says syntax error on "'\\1'"
  says syntax error on "'\\1'"
+  lexes "$?"
  lexes "$?"
+  lexes "1u128"
  lexes "1u128"
+  lexes char with unicode codepoint and curly
  lexes char with unicode codepoint and curly
+  lexes '\v'
  lexes '\v'
+  says syntax error on "2e+f32"
  says syntax error on "2e+f32"
+  lexes "1.2e+23_f32"
  lexes "1.2e+23_f32"
+  lexes "340282366920938463463374607431768211455_u128"
  lexes "340282366920938463463374607431768211455_u128"
+  lexes "begin!"
  lexes "begin!"
+  lexes ":<"
  lexes ":<"
+  lexes "out"
  lexes "out"
+  lexes "0x80000001"
  lexes "0x80000001"
+  says syntax error on "0b1000000000000000000000000000000000000000000000000000000000000000i64"
  says syntax error on "0b1000000000000000000000000000000000000000000000000000000000000000i64"
+  lexes "bar!"
  lexes "bar!"
+  lexes "$FOO"
  lexes "$FOO"
+  lexes "9223372036854775808_i128"
  lexes "9223372036854775808_i128"
+  lexes "instance_sizeof"
  lexes "instance_sizeof"
+  says syntax error on "4.0_u32"
  says syntax error on "4.0_u32"
+  lexes '\''
  lexes '\''
+  lexes "struct"
  lexes "struct"
+  lexes "asm"
  lexes "asm"
+  lexes "0e40"
  lexes "0e40"
+  lexes "1u8"
  lexes "1u8"
+  says syntax error on "340282366920938463463374607431768211456"
  says syntax error on "340282366920938463463374607431768211456"
+  lexes comment at the end
  lexes comment at the end
+  lexes "1.2e+23"
  lexes "1.2e+23"
+  lexes "nil"
  lexes "nil"
+  says syntax error on "118446744073709551616"
  says syntax error on "118446744073709551616"
+  says syntax error on "-9223372036854775809"
  says syntax error on "-9223372036854775809"
+  lexes "0o17777777777_i32"
  lexes "0o17777777777_i32"
+  lexes "while?"
  lexes "while?"
+  doesn't raise if many slash r with slash n
  doesn't raise if many slash r with slash n
+  lexes ":=~"
  lexes ":=~"
+  lexes utf-8 char
  lexes utf-8 char
+  lexes "^="
  lexes "^="
+  lexes "$foo"
  lexes "$foo"
+  lexes "-@foo"
  lexes "-@foo"
+  says syntax error on "-0u64"
  says syntax error on "-0u64"
+  lexes "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_u128"
  lexes "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_u128"
+  lexes "$_foo"
  lexes "$_foo"
+  lexes "&+"
  lexes "&+"
+  lexes "break?"
  lexes "break?"
+  lexes "&="
  lexes "&="
+  lexes "-"
  lexes "-"
+  lexes "end"
  lexes "end"
+  lexes "{"
  lexes "{"
+  lexes != after identifier (#4815)
  lexes != after identifier (#4815)
+  lexes __LINE__
  lexes __LINE__
+  lexes utf-8 multibyte char
  lexes utf-8 multibyte char
+  lexes not instance var
  lexes not instance var
+  lexes "0x10000_0000_0000_0000_i128"
  lexes "0x10000_0000_0000_0000_i128"
+  lexes "0x00ffffffffffffffff"
  lexes "0x00ffffffffffffffff"
+  lexes ":!="
  lexes ":!="
+  lexes "=="
  lexes "=="
+  lexes "until"
  lexes "until"
+  lexes "|="
  lexes "|="
+  lexes " "
  lexes " "
+  lexes "protected"
  lexes "protected"
+  lexes "when"
  lexes "when"
+  lexes "2_e2"
  lexes "2_e2"
+  lexes "sizeof"
  lexes "sizeof"
+  lexes "1u32"
  lexes "1u32"
+  lexes ":&-"
  lexes ":&-"
+  lexes "next"
  lexes "next"
+  lexes "0x100000000"
  lexes "0x100000000"
+  lexes "&"
  lexes "&"
+  lexes "+"
  lexes "+"
+  lexes "118446744073709551616_u128"
  lexes "118446744073709551616_u128"
+  lexes "|"
  lexes "|"
+  lexes comment and token
  lexes comment and token
+  lexes "[]?"
  lexes "[]?"
+  lexes symbol with backslash (#2187)
  lexes symbol with backslash (#2187)
+  lexes "end!"
  lexes "end!"
+  lexes "2147483648.foo"
  lexes "2147483648.foo"
+  says syntax error on "/\\"
  says syntax error on "/\\"
+  says syntax error on ":\"foo"
  says syntax error on ":\"foo"
+  lexes "10000000000000000000_u64"
  lexes "10000000000000000000_u64"
+  lexes "1.0f32hello"
  lexes "1.0f32hello"
+  lexes "1f64"
  lexes "1f64"
+  lexes "0xFFFF_u64"
  lexes "0xFFFF_u64"
+  says syntax error on ".42"
  says syntax error on ".42"
+  lexes "\n"
  lexes "\n"
+  lexes "false!"
  lexes "false!"
+  lexes ":foo!"
  lexes ":foo!"
+  lexes "0b0_1"
  lexes "0b0_1"
+  lexes "include"
  lexes "include"
+  lexes "|"
  lexes "|"
+  lexes "$10"
  lexes "$10"
+  says syntax error on "-1_u16"
  says syntax error on "-1_u16"
+  says syntax error on "0o200000_00000000_00000000"
  says syntax error on "0o200000_00000000_00000000"
+  lexes "something"
  lexes "something"
+  lexes "1_i64"
  lexes "1_i64"
+  lexes "0xffffffffffffffff"
  lexes "0xffffffffffffffff"
+  lexes "~"
  lexes "~"
+  lexes ":+"
  lexes ":+"
+  lexes "nil!"
  lexes "nil!"
+  lexes float then zero (bug)
  lexes float then zero (bug)
+  lexes "break!"
  lexes "break!"
+  lexes "\t"
  lexes "\t"
+  lexes "0b1000000000000000000000000000000000000000000000000000000000000000"
  lexes "0b1000000000000000000000000000000000000000000000000000000000000000"
+  lexes "1i128"
  lexes "1i128"
+  says syntax error on "-11111111111111111111"
  says syntax error on "-11111111111111111111"
+  lexes "!="
  lexes "!="
+  lexes "else?"
  lexes "else?"
+  lexes "enum"
  lexes "enum"
+  lexes "-1234"
  lexes "-1234"
+  says syntax error on "1__1"
  says syntax error on "1__1"
+  lexes "1hello"
  lexes "1hello"
+  says syntax error on "-129_i8"
  says syntax error on "-129_i8"
+  lexes "\10"
  lexes "\10"
+  lexes "0i32"
  lexes "0i32"
+  lexes ","
  lexes ","
+  lexes "18446744073709551615"
  lexes "18446744073709551615"
+  doesn't raise if slash r with slash n
  doesn't raise if slash r with slash n
+  lexes "extend"
  lexes "extend"
+  lexes "annotation"
  lexes "annotation"
+  says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000"
  says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000"
+  lexes "def?"
  lexes "def?"
+  says syntax error on "0x1afafafafafafafafafafafu64"
  says syntax error on "0x1afafafafafafafafafafafu64"
+  lexes "[]="
  lexes "[]="
+  lexes "&**"
  lexes "&**"
+  says syntax error on "0b10000000_i8"
  says syntax error on "0b10000000_i8"
+  lexes "<="
  lexes "<="
+  lexes "+0xFFFF"
  lexes "+0xFFFF"
+  lexes ":=="
  lexes ":=="
+  lexes "-="
  lexes "-="
+  says syntax error on "4u12"
  says syntax error on "4u12"
+  lexes "0b1_i64"
  lexes "0b1_i64"
+  lexes ":&+"
  lexes ":&+"
+  lexes "2e01"
  lexes "2e01"
+  lexes "1i16"
  lexes "1i16"
+  lexes "0x8000000000000000"
  lexes "0x8000000000000000"
+  lexes "foo?"
  lexes "foo?"
+  lexes "+1"
  lexes "+1"
+  lexes "break"
  lexes "break"
+  lexes "0_i32"
  lexes "0_i32"
+  lexes "$1"
  lexes "$1"
+  lexes space after char
  lexes space after char
+  lexes "then"
  lexes "then"
+  says syntax error on "0b_10"
  says syntax error on "0b_10"
+  says syntax error on "0b100000000000000000000000000000000i32"
  says syntax error on "0b100000000000000000000000000000000i32"
+  lexes "-0xFFFFFFFF"
  lexes "-0xFFFFFFFF"
+  lexes "^"
  lexes "^"
+  lexes "&+@foo"
  lexes "&+@foo"
+  lexes "do?"
  lexes "do?"
+  says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000u64"
  says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000u64"
+  says syntax error on "'\\u{}'"
  says syntax error on "'\\u{}'"
+  lexes "$1?"
  lexes "$1?"
+  lexes "\x12"
  lexes "\x12"
+  lexes "elsif"
  lexes "elsif"
+  says syntax error on "0xfffffffffffffffff_u64"
  says syntax error on "0xfffffffffffffffff_u64"
+  lexes "1e23"
  lexes "1e23"
+  lexes "0o700000000000000000000"
  lexes "0o700000000000000000000"
+  lexes "rescue"
  lexes "rescue"
+  lexes "&&="
  lexes "&&="
+  says syntax error on "\r1"
  says syntax error on "\r1"
+  says syntax error on "'\\uD800'"
  says syntax error on "'\\uD800'"
+  lexes '\n'
  lexes '\n'
+  lexes "+@foo"
  lexes "+@foo"
+  says syntax error on "4u3"
  says syntax error on "4u3"
+  lexes "1i64hello"
  lexes "1i64hello"
+  lexes ":!~"
  lexes ":!~"
+  lexes "0"
  lexes "0"
+  lexes "!"
  lexes "!"
+  says syntax error on "-0o7777777777777777777777777777777777777777777777777"
  says syntax error on "-0o7777777777777777777777777777777777777777777777777"
+  says syntax error on "9223372036854775808_i64"
  says syntax error on "9223372036854775808_i64"
+  lexes "-0b1010"
  lexes "-0b1010"
+  lexes "true!"
  lexes "true!"
+  lexes ":**"
  lexes ":**"
+  says syntax error on "0123"
  says syntax error on "0123"
+  lexes ":%"
  lexes ":%"
+  lexes "1_i8"
  lexes "1_i8"
+  lexes "1E40"
  lexes "1E40"
+  lexes ":^"
  lexes ":^"
+  lexes "end?"
  lexes "end?"
+  says syntax error on "-99999999999999999999"
  says syntax error on "-99999999999999999999"
+  lexes "18446744073709551616_u128"
  lexes "18446744073709551616_u128"
+  lexes "**="
  lexes "**="
+  lexes "170141183460469231731687303715884105727_i128"
  lexes "170141183460469231731687303715884105727_i128"
+  lexes "0b1111111111111111111111111111111_i32"
  lexes "0b1111111111111111111111111111111_i32"
+  says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000_u64"
  says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000_u64"
+  lexes ":[]"
  lexes ":[]"
+  says syntax error on "2e+"
  says syntax error on "2e+"
+  says syntax error on "0x10000_0000_0000_0000_u64"
  says syntax error on "0x10000_0000_0000_0000_u64"
+  lexes "elsif?"
  lexes "elsif?"
+  lexes "1234"
  lexes "1234"
+  lexes "%"
  lexes "%"
+  lexes ":foo="
  lexes ":foo="
+  lexes "yield?"
  lexes "yield?"
+  lexes "+="
  lexes "+="
+  lexes ":-"
  lexes ":-"
+  lexes "0x7fffffff_i32"
  lexes "0x7fffffff_i32"
+  says syntax error on "'\\"
  says syntax error on "'\\"
+  lexes "1u16"
  lexes "1u16"
+  lexes "1.0hello"
  lexes "1.0hello"
+  lexes "1i64"
  lexes "1i64"
+  lexes "..."
  lexes "..."
+  lexes "||="
  lexes "||="
+  lexes "case"
  lexes "case"
+  lexes "+0o123"
  lexes "+0o123"
+  says syntax error on "18446744073709551616_u64"
  says syntax error on "18446744073709551616_u64"
+  lexes "begin"
  lexes "begin"
+  lexes '\0'
  lexes '\0'
+  lexes "-1"
  lexes "-1"
+  lexes "+1_i64"
  lexes "+1_i64"
+  lexes ")"
  lexes ")"
+  lexes "type"
  lexes "type"
+  says syntax error on "118446744073709551616_u64"
  says syntax error on "118446744073709551616_u64"
+  says syntax error on "0o1000000000000000000000i64"
  says syntax error on "0o1000000000000000000000i64"
+  lexes "-0.5"
  lexes "-0.5"
+  lexes "!@foo"
  lexes "!@foo"
+  says syntax error on "'\\u{D800}'"
  says syntax error on "'\\u{D800}'"
+  lexes "100_000"
  lexes "100_000"
+  says syntax error on "2e+_2"
  says syntax error on "2e+_2"
+  says syntax error on "$01"
  says syntax error on "$01"
+  says syntax error on "32768_i16"
  says syntax error on "32768_i16"
+  lexes "12341234🔮"
  lexes "12341234🔮"
+  says syntax error on "'"
  says syntax error on "'"
+  says syntax error on "4u33"
  says syntax error on "4u33"
+  lexes "\4"
  lexes "\4"
+  lexes "+1.0"
  lexes "+1.0"
+  says syntax error on "-1_u8"
  says syntax error on "-1_u8"
+  lexes ":>>"
  lexes ":>>"
+  lexes '\t'
  lexes '\t'
+  says syntax error on "4f65"
  says syntax error on "4f65"
+  says syntax error on "4u22"
  says syntax error on "4u22"
+  lexes "."
  lexes "."
+  lexes "$~"
  lexes "$~"
+  lexes char with unicode codepoint and curly with zeros
  lexes char with unicode codepoint and curly with zeros
+  says syntax error on "2e+e"
  says syntax error on "2e+e"
+  lexes "❨╯°□°❩╯︵┻━┻"
  lexes "❨╯°□°❩╯︵┻━┻"
+  says syntax error on "-170141183460469231731687303715884105729"
  says syntax error on "-170141183460469231731687303715884105729"
+  lexes "&&"
  lexes "&&"
+  lexes "elsif!"
  lexes "elsif!"
+  lexes "+0b1010"
  lexes "+0b1010"
+  says syntax error on "2e+@foo"
  says syntax error on "2e+@foo"
+  lexes "if!"
  lexes "if!"
+  lexes "-0"
  lexes "-0"
+  says syntax error on "10e_10"
  says syntax error on "10e_10"
+  says syntax error on "-1_u64"
  says syntax error on "-1_u64"
+  lexes '\\'
  lexes '\\'
+  lexes "{{"
  lexes "{{"
+  lexes "-1.0"
  lexes "-1.0"
+  lexes "1e23f64"
  lexes "1e23f64"
+  lexes "::"
  lexes "::"
+  says syntax error on "0o1234567123456712345671234567"
  says syntax error on "0o1234567123456712345671234567"
+  lexes "&-@foo"
  lexes "&-@foo"
+  says syntax error on "4F64"
  says syntax error on "4F64"
+  says syntax error on "01_i64"
  says syntax error on "01_i64"
+  lexes "170141183460469231731687303715884105728_u128"
  lexes "170141183460469231731687303715884105728_u128"
+  lexes ":~"
  lexes ":~"
+  lexes "1_u64"
  lexes "1_u64"
+  lexes "1.foo"
  lexes "1.foo"
+  says syntax error on "'\\uFEDZ'"
  says syntax error on "'\\uFEDZ'"
+  lexes ":/"
  lexes ":/"
+  lexes "("
  lexes "("
+  says syntax error on "'\\uDFFF'"
  says syntax error on "'\\uDFFF'"
 Semantic: macro
-  finds generic type argument of included module with self
  finds generic type argument of included module with self
-  can return class type in macro def
  can return class type in macro def
-  finds macro in inherited generic class
  finds macro in inherited generic class
-  allows named args after splat
  allows named args after splat
-  can access variable inside macro expansion (#2057)
  can access variable inside macro expansion (#2057)
+  can return virtual class type in macro def
  can return virtual class type in macro def
   doesn't error when adding macro call to constant (#2457)
  doesn't error when adding macro call to constant (#2457)
-  can specify tuple as return type
  can specify tuple as return type
-  types macro
  types macro
-  uses bare *
  uses bare *
-  errors if named arg matches single splat parameter
  errors if named arg matches single splat parameter
-  double splat and regular args
  double splat and regular args
+  errors if missing one argument
  errors if missing one argument
+  allows specifying self as macro def return type (2)
  allows specifying self as macro def return type (2)
+  finds metaclass instance of instance method (#4739)
  finds metaclass instance of instance method (#4739)
+  errors if named arg matches splat parameter
  errors if named arg matches splat parameter
+  solves named macro expression arguments before macro expansion (type) (#2423)
  solves named macro expression arguments before macro expansion (type) (#2423)
   solves macro expression arguments before macro expansion (type)
  solves macro expression arguments before macro expansion (type)
-  can define constant via macro included
  can define constant via macro included
-  uses uninitialized variable with macros
  uses uninitialized variable with macros
+  finds generic in macro code
  finds generic in macro code
+  @caller
+    provides access to the `Call` information
    provides access to the `Call` information
+    returns an array of each call
    returns an array of each call
+    returns nil if no stack is available
    returns nil if no stack is available
+  skip_file macro directive
+    skips expanding the rest of the current file
    skips expanding the rest of the current file
+    skips file inside an if macro expression
    skips file inside an if macro expression
+  finds generic in macro code using free var
  finds generic in macro code using free var
+  types macro def that calls another method
  types macro def that calls another method
+  executes MultiAssign with ArrayLiteral value
  executes MultiAssign with ArrayLiteral value
+  finds generic type argument of included module with self
  finds generic type argument of included module with self
+  doesn't die on && inside if (bug)
  doesn't die on && inside if (bug)
+  allows declaring class with macro if
  allows declaring class with macro if
+  solves macro expression arguments before macro expansion (constant)
  solves macro expression arguments before macro expansion (constant)
+  says missing argument because positional args don't match past splat
  says missing argument because positional args don't match past splat
+  doesn't crash on syntax error inside macro (regression, #8038)
  doesn't crash on syntax error inside macro (regression, #8038)
+  finds macro in included module at class level (#4639)
  finds macro in included module at class level (#4639)
+  can lookup type parameter when macro is called inside class (#5343)
  can lookup type parameter when macro is called inside class (#5343)
   raise
     inside method
       without node
         renders both frames (#7147)
        renders both frames (#7147)
     inside macro
-      with node
-        contains the message and not `expanding macro` (#5669)
        contains the message and not `expanding macro` (#5669)
-        points to caller when missing node location information (#7147)
        points to caller when missing node location information (#7147)
-        renders both frames (#7147)
        renders both frames (#7147)
-        pointing at the correct node in complex/nested macro (#7147)
        pointing at the correct node in complex/nested macro (#7147)
       without node
+        supports an empty message (#8631)
        supports an empty message (#8631)
+        renders both frames (#7147)
        renders both frames (#7147)
         does not contain `expanding macro`
        does not contain `expanding macro`
+      with node
         renders both frames (#7147)
        renders both frames (#7147)
-        supports an empty message (#8631)
        supports an empty message (#8631)
+        pointing at the correct node in complex/nested macro (#7147)
        pointing at the correct node in complex/nested macro (#7147)
+        points to caller when missing node location information (#7147)
        points to caller when missing node location information (#7147)
+        contains the message and not `expanding macro` (#5669)
        contains the message and not `expanding macro` (#5669)
+  finds macro and method at the same scope
  finds macro and method at the same scope
+  declares rescue variable inside for macro
  declares rescue variable inside for macro
+  errors if named arg matches single splat parameter
  errors if named arg matches single splat parameter
+  types macro
  types macro
+  checks if macro expansion returns (#821)
  checks if macro expansion returns (#821)
+  does macro verbatim inside macro
  does macro verbatim inside macro
+  show macro trace in errors (1)
  show macro trace in errors (1)
+  finds macro in inherited generic class
  finds macro in inherited generic class
+  expands macro with block
  expands macro with block
+  can use macro in instance var initializer (#7666)
  can use macro in instance var initializer (#7666)
+  types macro def with argument
  types macro def with argument
+  expands macro with block and argument to yield
  expands macro with block and argument to yield
+  errors if declares macro inside if
  errors if declares macro inside if
+  assigns to underscore in MultiAssign
  assigns to underscore in MultiAssign
+  allows union return types for macro def
  allows union return types for macro def
+  transforms with {{yield}} and call
  transforms with {{yield}} and call
+  preserves correct self in restriction when macro def is to be instantiated in subtypes (#5044)
  preserves correct self in restriction when macro def is to be instantiated in subtypes (#5044)
+  types macro def that calls another method inside a class
  types macro def that calls another method inside a class
+  looks up argument types in macro owner, not in subclass (#2395)
  looks up argument types in macro owner, not in subclass (#2395)
+  gives correct error when method is invoked but macro exists at the same scope
  gives correct error when method is invoked but macro exists at the same scope
+  can return class type in macro def
  can return class type in macro def
+  clones default value before expanding
  clones default value before expanding
+  can override macro (#2773)
  can override macro (#2773)
   finds metaclass instance of instance method (#4639)
  finds metaclass instance of instance method (#4639)
-  has correct location after expanding assignment after instance var
  has correct location after expanding assignment after instance var
   errors if using macro that is defined later
  errors if using macro that is defined later
-  clones default value before expanding
  clones default value before expanding
+  assigns to underscore
  assigns to underscore
   works inside proc literal (#2984)
  works inside proc literal (#2984)
-  doesn't die on && inside if (bug)
  doesn't die on && inside if (bug)
-  solves macro expression arguments before macro expansion (constant)
  solves macro expression arguments before macro expansion (constant)
-  uses bare *, doesn't let more args
  uses bare *, doesn't let more args
-  errors if find macros but wrong arguments
  errors if find macros but wrong arguments
+  can't define new variables (#466)
  can't define new variables (#466)
+  solves named macro expression arguments before macro expansion (constant) (#2423)
  solves named macro expression arguments before macro expansion (constant) (#2423)
   allows subclasses of return type for macro def
  allows subclasses of return type for macro def
-  assigns to underscore
  assigns to underscore
-  executes MultiAssign with ArrayLiteral value
  executes MultiAssign with ArrayLiteral value
-  unpacks block parameters inside macros (#13742)
  unpacks block parameters inside macros (#13742)
-  types macro def that calls another method inside a class
  types macro def that calls another method inside a class
-  can return virtual class type in macro def
  can return virtual class type in macro def
-  matches with default value after splat
  matches with default value after splat
-  doesn't affect self restrictions outside the macro def being instantiated in subtypes
  doesn't affect self restrictions outside the macro def being instantiated in subtypes
-  looks up argument types in macro owner, not in subclass (#2395)
  looks up argument types in macro owner, not in subclass (#2395)
-  types macro def with argument
  types macro def with argument
-  finds macro in included generic module
  finds macro in included generic module
-  types macro def that calls another method
  types macro def that calls another method
-  shows correct error message in macro expansion (#7083)
  shows correct error message in macro expansion (#7083)
-  cannot lookup type defined in caller class
  cannot lookup type defined in caller class
   allows declaring class with macro for
  allows declaring class with macro for
-  does macro verbatim inside macro
  does macro verbatim inside macro
-  can't define new variables (#466)
  can't define new variables (#466)
-  executes OpAssign (#9356)
  executes OpAssign (#9356)
-  finds macro in included module at class level (#4639)
  finds macro in included module at class level (#4639)
-  finds generic type argument of included module
  finds generic type argument of included module
-  assigns to underscore in MultiAssign
  assigns to underscore in MultiAssign
-  @caller
-    returns nil if no stack is available
    returns nil if no stack is available
-    returns an array of each call
    returns an array of each call
-    provides access to the `Call` information
    provides access to the `Call` information
+  can specify tuple as return type
  can specify tuple as return type
   finds method before macro (#236)
  finds method before macro (#236)
-  finds type for global path shared with free var
  finds type for global path shared with free var
-  doesn't crash on syntax error inside macro (regression, #8038)
  doesn't crash on syntax error inside macro (regression, #8038)
-  finds macro in module in Object
  finds macro in module in Object
-  allows union return types for macro def
  allows union return types for macro def
-  applies visibility modifier only to first level
  applies visibility modifier only to first level
+  finds var in proc for macros
  finds var in proc for macros
+  finds generic type argument of included module
  finds generic type argument of included module
+  has correct location after expanding assignment after instance var
  has correct location after expanding assignment after instance var
+  allows declaring class with inline macro expression (#1333)
  allows declaring class with inline macro expression (#1333)
+  double splat and regular args
  double splat and regular args
+  errors if missing two arguments
  errors if missing two arguments
+  declares variable for macro with out
  declares variable for macro with out
+  allows specifying self as macro def return type
  allows specifying self as macro def return type
+  errors if named arg already specified
  errors if named arg already specified
+  gets named arguments in double splat
  gets named arguments in double splat
+  uses bare *, doesn't let more args
  uses bare *, doesn't let more args
+  doesn't include parameters with default values in missing arguments error
  doesn't include parameters with default values in missing arguments error
   types macro def
  types macro def
+  uses bare *
  uses bare *
+  errors if applying protected modifier to macro
  errors if applying protected modifier to macro
+  errors if macro uses undefined variable
  errors if macro uses undefined variable
+  show macro trace in errors (2)
  show macro trace in errors (2)
   types macro def that calls another method inside a class
  types macro def that calls another method inside a class
-  finds metaclass instance of instance method (#4739)
  finds metaclass instance of instance method (#4739)
+  finds type for global path shared with free var
  finds type for global path shared with free var
+  expands multiline macro expression in verbatim (#6643)
  expands multiline macro expression in verbatim (#6643)
+  errors if find macros but missing argument
  errors if find macros but missing argument
+  finds macro in module in Object
  finds macro in module in Object
+  finds free type vars
  finds free type vars
+  errors if non-existent named arg
  errors if non-existent named arg
   errors if requires inside if through macro expansion
  errors if requires inside if through macro expansion
+  finds macro in included generic module
  finds macro in included generic module
+  uses uninitialized variable with macros
  uses uninitialized variable with macros
+  uses bare *, doesn't let more args
  uses bare *, doesn't let more args
+  cannot lookup type defined in caller class
  cannot lookup type defined in caller class
+  applies visibility modifier only to first level
  applies visibility modifier only to first level
+  unpacks to underscore within block parameters inside macros
  unpacks to underscore within block parameters inside macros
+  unpacks block parameters inside macros (#13742)
  unpacks block parameters inside macros (#13742)
+  can access variable inside macro expansion (#2057)
  can access variable inside macro expansion (#2057)
+  allows named args after splat
  allows named args after splat
+  doesn't affect self restrictions outside the macro def being instantiated in subtypes
  doesn't affect self restrictions outside the macro def being instantiated in subtypes
+  evaluates yield expression (#2924)
  evaluates yield expression (#2924)
+  can use macro in instance var initializer (just assignment) (#7666)
  can use macro in instance var initializer (just assignment) (#7666)
+  errors if macro def type not found
  errors if macro def type not found
   uses splat and double splat
  uses splat and double splat
-  allows specifying self as macro def return type (2)
  allows specifying self as macro def return type (2)
   finds macro through alias (#2706)
  finds macro through alias (#2706)
-  evaluates yield expression (#2924)
  evaluates yield expression (#2924)
-  show macro trace in errors (2)
  show macro trace in errors (2)
-  allows generic return types for macro def
  allows generic return types for macro def
-  declares rescue variable inside for macro
  declares rescue variable inside for macro
-  gets named arguments in double splat
  gets named arguments in double splat
-  finds generic in macro code
  finds generic in macro code
-  errors if missing one argument
  errors if missing one argument
-  expands macro with block
  expands macro with block
-  declares variable for macro with out
  declares variable for macro with out
   errors when trying to define def inside def with macro expansion
  errors when trying to define def inside def with macro expansion
+  shows correct error message in macro expansion (#7083)
  shows correct error message in macro expansion (#7083)
+  allows generic return types for macro def
  allows generic return types for macro def
+  finds macro in included module
  finds macro in included module
+  does macro verbatim outside macro
  does macro verbatim outside macro
   allows return values that include the return type of the macro def
  allows return values that include the return type of the macro def
-  skip_file macro directive
-    skips file inside an if macro expression
    skips file inside an if macro expression
-    skips expanding the rest of the current file
    skips expanding the rest of the current file
-  errors if non-existent named arg
  errors if non-existent named arg
-  finds var in proc for macros
  finds var in proc for macros
-  preserves correct self in restriction when macro def is to be instantiated in subtypes (#5044)
  preserves correct self in restriction when macro def is to be instantiated in subtypes (#5044)
-  errors if find macros but missing argument
  errors if find macros but missing argument
+  gives precise location info when doing yield inside macro
  gives precise location info when doing yield inside macro
+  can define constant via macro included
  can define constant via macro included
+  executes OpAssign (#9356)
  executes OpAssign (#9356)
+  declares multi-assign vars for macro
  declares multi-assign vars for macro
+  errors if find macros but wrong arguments
  errors if find macros but wrong arguments
   expands macro with break inside while (#1852)
  expands macro with break inside while (#1852)
   errors if macro def type doesn't match found
  errors if macro def type doesn't match found
-  can override macro (#2773)
  can override macro (#2773)
-  errors if named arg already specified
  errors if named arg already specified
-  uses bare *, doesn't let more args
  uses bare *, doesn't let more args
+  finds macro and method at the same scope inside included module
  finds macro and method at the same scope inside included module
   executes MultiAssign
  executes MultiAssign
-  finds free type vars
  finds free type vars
-  gives correct error when method is invoked but macro exists at the same scope
  gives correct error when method is invoked but macro exists at the same scope
-  errors if macro uses undefined variable
  errors if macro uses undefined variable
-  doesn't include parameters with default values in missing arguments error
  doesn't include parameters with default values in missing arguments error
-  show macro trace in errors (1)
  show macro trace in errors (1)
-  says missing argument because positional args don't match past splat
  says missing argument because positional args don't match past splat
-  checks if macro expansion returns (#821)
  checks if macro expansion returns (#821)
-  finds macro and method at the same scope
  finds macro and method at the same scope
-  finds generic in macro code using free var
  finds generic in macro code using free var
   errors if requires inside class through macro expansion
  errors if requires inside class through macro expansion
-  can use macro in instance var initializer (#7666)
  can use macro in instance var initializer (#7666)
-  errors if applying protected modifier to macro
  errors if applying protected modifier to macro
-  errors if missing two arguments
  errors if missing two arguments
-  does macro verbatim outside macro
  does macro verbatim outside macro
-  solves named macro expression arguments before macro expansion (type) (#2423)
  solves named macro expression arguments before macro expansion (type) (#2423)
-  unpacks to underscore within block parameters inside macros
  unpacks to underscore within block parameters inside macros
-  finds macro and method at the same scope inside included module
  finds macro and method at the same scope inside included module
-  allows specifying self as macro def return type
  allows specifying self as macro def return type
-  errors if declares macro inside if
  errors if declares macro inside if
-  errors if macro def type not found
  errors if macro def type not found
-  solves named macro expression arguments before macro expansion (constant) (#2423)
  solves named macro expression arguments before macro expansion (constant) (#2423)
-  errors if named arg matches splat parameter
  errors if named arg matches splat parameter
-  declares multi-assign vars for macro
  declares multi-assign vars for macro
-  transforms with {{yield}} and call
  transforms with {{yield}} and call
-  can use macro in instance var initializer (just assignment) (#7666)
  can use macro in instance var initializer (just assignment) (#7666)
-  allows declaring class with inline macro expression (#1333)
  allows declaring class with inline macro expression (#1333)
-  finds macro in included module
  finds macro in included module
-  gives precise location info when doing yield inside macro
  gives precise location info when doing yield inside macro
-  expands multiline macro expression in verbatim (#6643)
  expands multiline macro expression in verbatim (#6643)
-  can lookup type parameter when macro is called inside class (#5343)
  can lookup type parameter when macro is called inside class (#5343)
-  allows declaring class with macro if
  allows declaring class with macro if
-  expands macro with block and argument to yield
  expands macro with block and argument to yield
-file_exists?
-  with absolute path
-    returns false if file doesn't exist
    returns false if file doesn't exist
-    returns true if file exists
    returns true if file exists
+  matches with default value after splat
  matches with default value after splat
+Crystal::Doc::Generator
+  .anchor_link
+    generates the correct anchor link
    generates the correct anchor link
+Lexer doc
+  resets doc after non newline or space token
  resets doc after non newline or space token
+  lexes with doc enabled but without docs
  lexes with doc enabled but without docs
+  lexes with doc enabled and docs
  lexes with doc enabled and docs
+  lexes with doc enabled and docs, two line comment with leading whitespace
  lexes with doc enabled and docs, two line comment with leading whitespace
+  lexes without doc enabled
  lexes without doc enabled
+  lexes with doc enabled and docs, one line comment with two newlines and another comment
  lexes with doc enabled and docs, one line comment with two newlines and another comment
+  lexes with doc enabled and docs, two line comment
  lexes with doc enabled and docs, two line comment
+Semantic: concrete_types
+  VirtualType with concrete base
  VirtualType with concrete base
+  ModuleType
  ModuleType
+  GenericModuleInstanceType
  GenericModuleInstanceType
+  VirtualMetaclassType with abstract base
  VirtualMetaclassType with abstract base
+  UnionType of structs
  UnionType of structs
+  VirtualMetaclassType with concrete base
  VirtualMetaclassType with concrete base
+  VirtualType with abstract base
  VirtualType with abstract base
+Code gen: asm
+  codegens with two inputs
  codegens with two inputs
+  codegens with intel dialect
  codegens with intel dialect
+  codegens with one input
  codegens with one input
+  codegens without inputs
  codegens without inputs
+  passes correct string length to LLVM
  passes correct string length to LLVM
+  codegens with two outputs
  codegens with two outputs
+Semantic: sizeof
+  errors on sizeof uninstantiated generic type (#6415)
  errors on sizeof uninstantiated generic type (#6415)
+  gives error if using instance_sizeof on an abstract struct with multiple subtypes (#11855)
  gives error if using instance_sizeof on an abstract struct with multiple subtypes (#11855)
+  types instance_alignof
  types instance_alignof
+  types alignof
  types alignof
+  gives error if using instance_sizeof on a struct
  gives error if using instance_sizeof on a struct
+  types alignof NoReturn (missing type) (#5717)
  types alignof NoReturn (missing type) (#5717)
+  gives error if using instance_sizeof on an abstract struct (#11855)
  gives error if using instance_sizeof on an abstract struct (#11855)
+  types instance_sizeof
  types instance_sizeof
+  types sizeof
  types sizeof
+  gives error if using instance_sizeof on a generic type without type vars
  gives error if using instance_sizeof on a generic type without type vars
+  types sizeof NoReturn (missing type) (#5717)
  types sizeof NoReturn (missing type) (#5717)
+  gives error if using instance_sizeof on something that's not a class
  gives error if using instance_sizeof on something that's not a class
+  types instance_sizeof NoReturn (missing type) (#5717)
  types instance_sizeof NoReturn (missing type) (#5717)
+  types instance_alignof NoReturn (missing type) (#5717)
  types instance_alignof NoReturn (missing type) (#5717)
+  gives error if using instance_sizeof on a metaclass
  gives error if using instance_sizeof on a metaclass
+  gives error if using instance_sizeof on a union type (#8349)
  gives error if using instance_sizeof on a union type (#8349)
+  gives error if using instance_sizeof on a module
  gives error if using instance_sizeof on a module
+Code gen: struct
+  codegens virtual structs union (2)
  codegens virtual structs union (2)
+  allows assigning to struct argument (bug)
  allows assigning to struct argument (bug)
+  returns struct as a copy
  returns struct as a copy
+  creates structs with instance var
  creates structs with instance var
+  creates struct in def
  creates struct in def
+  uses nilable struct
  uses nilable struct
+  can cast virtual struct to specific struct  can cast virtual struct to specific struct  can cast virtual struct to specific struct  can cast virtual struct to specific struct  can cast virtual struct to specific struct  can cast virtual struct to specific struct������������  can cast virtual struct to specific struct��  can cast virtual struct to specific struct��  can cast virtual struct to specific struct
  can cast virtual struct to specific struct
+  casts virtual struct to base type, only one subclass (#2885)
  casts virtual struct to base type, only one subclass (#2885)
+  can call new on abstract struct with single child (#7309)
  can call new on abstract struct with single child (#7309)
+  codegens virtual struct metaclass (#2551) (3)
  codegens virtual struct metaclass (#2551) (3)
+  codegens virtual struct metaclass (#2551) (2)
  codegens virtual struct metaclass (#2551) (2)
+  assigning a struct makes a copy (1)
  assigning a struct makes a copy (1)
+  codegens virtual struct with pointer
  codegens virtual struct with pointer
+  returns self
  returns self
+  codegens virtual struct
  codegens virtual struct
+  passes a struct as a parameter makes a copy
  passes a struct as a parameter makes a copy
+  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)  codegens virtual struct metaclass (#2551) (4)������������  codegens virtual struct metaclass (#2551) (4)��  codegens virtual struct metaclass (#2551) (4)��  codegens virtual struct metaclass (#2551) (4)
  codegens virtual struct metaclass (#2551) (4)
+  passes a generic struct as a parameter makes a copy
  passes a generic struct as a parameter makes a copy
+  returns self with block
  returns self with block
+  assigning a struct makes a copy (2)
  assigning a struct makes a copy (2)
+  codegens virtual structs union (1)
  codegens virtual structs union (1)
+  codegens struct assigned to underscore (#1842)
  codegens struct assigned to underscore (#1842)
+  creates structs
  creates structs
+  codegens virtual struct metaclass (#2551) (1)
  codegens virtual struct metaclass (#2551) (1)
+  mutates a  virtual struct
  mutates a  virtual struct
+  declares const struct  declares const struct  declares const struct  declares const struct  declares const struct  declares const struct  declares const struct��������������  declares const struct��  declares const struct
  declares const struct
+  uses struct in if  uses struct in if  uses struct in if  uses struct in if  uses struct in if  uses struct in if  uses struct in if��������������  uses struct in if��  uses struct in if
  uses struct in if
+  does phi of struct
  does phi of struct
+Semantic: lib
+  errors if second argument is not a string
  errors if second argument is not a string
+  defines lib funs before funs with body
  defines lib funs before funs with body
+  types a varargs external
  types a varargs external
+  errors if defining incompatible funs with the same name in different libs (#3045)
  errors if defining incompatible funs with the same name in different libs (#3045)
+  can use out with named args
  can use out with named args
+  raises on undefined fun
  raises on undefined fun
+  reports error on fun argument type not primitive like, Nil (#2994)
  reports error on fun argument type not primitive like, Nil (#2994)
+  reports redefinition of fun with different signature
  reports redefinition of fun with different signature
+  types lib var get with forward declaration
  types lib var get with forward declaration
+  raises wrong argument type
  raises wrong argument type
+  errors if wrong number of arguments for CallConvention
  errors if wrong number of arguments for CallConvention
+  errors if assigning void lib call to var (#4414)
  errors if assigning void lib call to var (#4414)
+  errors if using named args with variadic function
  errors if using named args with variadic function
+  errors if invoking to_i32! and got error in that call
  errors if invoking to_i32! and got error in that call
+  errors if lib named arg is not a String
  errors if lib named arg is not a String
+  errors if CallConvention argument is not a string
  errors if CallConvention argument is not a string
+  types lib var set
  types lib var set
+  errors if third argument is not a bool
  errors if third argument is not a bool
+  errors if using out with varargs
  errors if using out with varargs
+  errors if unknown named arg
  errors if unknown named arg
+  errors if using void via typedef as parameter (related to #508)
  errors if using void via typedef as parameter (related to #508)
+  passes int as another integer type with literal
  passes int as another integer type with literal
+  defined fun with aliased type
  defined fun with aliased type
+  disallows passing nil or pointer to arg expecting pointer
  disallows passing nil or pointer to arg expecting pointer
+  gathers link annotations from macro expression
  gathers link annotations from macro expression
+  errors if defining incompatible funs with the same name in the same lib (#3045)
  errors if defining incompatible funs with the same name in the same lib (#3045)
+  reports error on struct field type not primitive like
  reports error on struct field type not primitive like
+  error if passing non primitive type as varargs invoking to_unsafe
  error if passing non primitive type as varargs invoking to_unsafe
+  errors if missing arguments
  errors if missing arguments
+  errors if parameter already specified
  errors if parameter already specified
+  supports forward references with struct inside struct (#399)
  supports forward references with struct inside struct (#399)
+  reports error on fun return type not primitive like
  reports error on fun return type not primitive like
+  reopens lib and adds more link annotations
  reopens lib and adds more link annotations
+  can use tuple as fun return
  can use tuple as fun return
+  reports error when changing instance var type and something breaks
  reports error when changing instance var type and something breaks
+  errors if invoking to_i32! and got wrong type
  errors if invoking to_i32! and got wrong type
+  error if passing non primitive type as varargs
  error if passing non primitive type as varargs
+  errors if missing argument
  errors if missing argument
+  errors if using void as parameter (related to #508)
  errors if using void as parameter (related to #508)
+  types fun returning nil as nil
  types fun returning nil as nil
+  allows invoking lib call without obj inside lib
  allows invoking lib call without obj inside lib
+  can use named args
  can use named args
+  errors if dll argument contains directory separators
  errors if dll argument contains directory separators
+  errors if too many link arguments
  errors if too many link arguments
+  reports error if using out with an already declared variable
  reports error if using out with an already declared variable
+  passes float as another integer type in variable
  passes float as another integer type in variable
+  passes int as another integer type in variable
  passes int as another integer type in variable
+  reports error when changing var type and something breaks
  reports error when changing var type and something breaks
+  supports forward references (#399)
  supports forward references (#399)
+  overrides definition of fun
  overrides definition of fun
+  types lib var get
  types lib var get
+  reports error out can only be used with lib funs
  reports error out can only be used with lib funs
+  errors if using unknown named param
  errors if using unknown named param
+  reports error on fun argument type not primitive like
  reports error on fun argument type not primitive like
+  errors if dll argument does not end with '.dll'
  errors if dll argument does not end with '.dll'
+  reports error out can only be used with lib funs in named argument
  reports error out can only be used with lib funs in named argument
+  reopens lib and adds same link annotations
  reopens lib and adds same link annotations
+  allows passing splat to LibC fun
  allows passing splat to LibC fun
+  errors if using out with non-pointer
  errors if using out with non-pointer
+  doesn't try to invoke unsafe for c struct/union (#1362)
  doesn't try to invoke unsafe for c struct/union (#1362)
+  errors if CallConvention argument is not a valid string
  errors if CallConvention argument is not a valid string
+  errors if using out with void pointer (#2424)
  errors if using out with void pointer (#2424)
+  can use macros inside struct
  can use macros inside struct
+  can use macros inside lib
  can use macros inside lib
+  errors if redefining fun with different signature (#2468)
  errors if redefining fun with different signature (#2468)
+  specifies a call convention
  specifies a call convention
+  errors if passing void lib call to call argument (#4414)
  errors if passing void lib call to call argument (#4414)
+  errors if missing link arguments
  errors if missing link arguments
+  can list lib functions at the top level (#12395)
  can list lib functions at the top level (#12395)
+  errors if defines def on lib
  errors if defines def on lib
+  error if passing type to LibC with to_unsafe but type doesn't match
  error if passing type to LibC with to_unsafe but type doesn't match
+  errors if first argument is not a string
  errors if first argument is not a string
+  warns if @[Link(static: true)] is specified
  warns if @[Link(static: true)] is specified
+  errors if using out with void pointer through type
  errors if using out with void pointer through type
+  allows passing double splat to LibC fun
  allows passing double splat to LibC fun
+  types fun returning void as nil
  types fun returning void as nil
+  types fun returning nothing as nil
  types fun returning nothing as nil
+  allows invoking out with underscore 
  allows invoking out with underscore 
+  clears annotations after lib
  clears annotations after lib
+  specifies a call convention to a lib
  specifies a call convention to a lib
+  errors if lib already specified with positional argument
  errors if lib already specified with positional argument
+  reports error on typedef type not primitive like
  reports error on typedef type not primitive like
+  warns if Link annotations use positional arguments
  warns if Link annotations use positional arguments
+  allows dll argument
  allows dll argument
+  raises wrong number of arguments
  raises wrong number of arguments
+  correctly attached link flags if there's a macro if
  correctly attached link flags if there's a macro if
+  errors if fourth argument is not a bool
  errors if fourth argument is not a bool
+  errors if lib fun call is part of dispatch
  errors if lib fun call is part of dispatch
+Code gen: macro
+  doesn't override local variable when using macro variable (2)
  doesn't override local variable when using macro variable (2)
+  codegens macro def with default arg (similar to #496)
  codegens macro def with default arg (similar to #496)
+  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added  recalculates method when virtual metaclass type is added����������������  recalculates method when virtual metaclass type is added
  recalculates method when virtual metaclass type is added
+  determines if overrides, through another class (true)
  determines if overrides, through another class (true)
+  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)  expands macro with op assign inside assign (#5568)��  expands macro with op assign inside assign (#5568)��������  expands macro with op assign inside assign (#5568)������  expands macro with op assign inside assign (#5568)
  expands macro with op assign inside assign (#5568)
+  expands macro as class method
  expands macro as class method
+  codegens macro with comment (bug) (#1396)
  codegens macro with comment (bug) (#1396)
+  expands @def in inline macro
  expands @def in inline macro
+  doesn't replace %s in string (#2178)
  doesn't replace %s in string (#2178)
+  expands macro that yields
  expands macro that yields
+  can use constants
  can use constants
+  can use macro inside array literal  can use macro inside array literal  can use macro inside array literal  can use macro inside array literal  can use macro inside array literal  can use macro inside array literal  can use macro inside array literal��������������  can use macro inside array literal��  can use macro inside array literal
  can use macro inside array literal
+  transforms hooks (bug)
  transforms hooks (bug)
+  determines if overrides, with macro method (false)
  determines if overrides, with macro method (false)
+  expands def macro with @type.instance_vars
  expands def macro with @type.instance_vars
+  expands def macro with var
  expands def macro with var
+  gets default value of instance variable
  gets default value of instance variable
+  keeps line number with no block
  keeps line number with no block
+  expands @type.name in virtual metaclass (2)
  expands @type.name in virtual metaclass (2)
+  executes with named arguments for positional arg (3)
  executes with named arguments for positional arg (3)
+  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)  replaces %s inside string inside interpolation (#2178)��������  replaces %s inside string inside interpolation (#2178)������  replaces %s inside string inside interpolation (#2178)��  replaces %s inside string inside interpolation (#2178)
  replaces %s inside string inside interpolation (#2178)
+  can refer to union (1)
  can refer to union (1)
+  codegens macro def with splat (#496)
  codegens macro def with splat (#496)
+  initializes instance var in macro
  initializes instance var in macro
+  determines if method exists (true)
  determines if method exists (true)
+  expands inline macro for
  expands inline macro for
+  surrounds {{yield}} with begin/end
  surrounds {{yield}} with begin/end
+  gets constant
  gets constant
+  keeps line number with a block
  keeps line number with a block
+  expands def macro with @type.instance_vars with virtual
  expands def macro with @type.instance_vars with virtual
+  expands macro and resolves type correctly
  expands macro and resolves type correctly
+  receives &block
  receives &block
+  determines if overrides (true)
  determines if overrides (true)
+  expands def macro with @type.name with virtual (2)
  expands def macro with @type.name with virtual (2)
+  expands def macro with instance var and method call (bug)
  expands def macro with instance var and method call (bug)
+  responds correctly to has_constant? with @top_level
  responds correctly to has_constant? with @top_level
+  expands macro defined in base class
  expands macro defined in base class
+  expands def macro with @type.name
  expands def macro with @type.name
+  determines if method exists (false)
  determines if method exists (false)
+  does block unpacking inside macro expression (#13707)
  does block unpacking inside macro expression (#13707)
+  can access type variables of a tuple
  can access type variables of a tuple
+  initializes class var in macro
  initializes class var in macro
+  correctly recomputes call (bug)
  correctly recomputes call (bug)
+  can access type variables of a module
  can access type variables of a module
+  expands macro defined in class
  expands macro defined in class
+  can refer to union (2)
  can refer to union (2)
+  expands def macro with @type.instance_vars with subclass
  expands def macro with @type.instance_vars with subclass
+  copies base macro def to sub-subtype even after it was copied to a subtype (#448)
  copies base macro def to sub-subtype even after it was copied to a subtype (#448)
+  expands macro def with return (#1040)
  expands macro def with return (#1040)
+  can refer to abstract (1)
  can refer to abstract (1)
+  executes all_subclasses
  executes all_subclasses
+  executes subclasses
  executes subclasses
+  runs macro with arg and splat
  runs macro with arg and splat
+  forwards file location
  forwards file location
+  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)  replaces %s inside string inside interpolation, with braces (#2178)��������������  replaces %s inside string inside interpolation, with braces (#2178)��  replaces %s inside string inside interpolation, with braces (#2178)
  replaces %s inside string inside interpolation, with braces (#2178)
+  gets default value of instance variable of inherited type that also includes module
  gets default value of instance variable of inherited type that also includes module
+  gets methods
  gets methods
+  passes #826
  passes #826
+  expands macro that invokes another macro
  expands macro that invokes another macro
+  executes with named arguments for positional arg (1)
  executes with named arguments for positional arg (1)
+  runs macro with splat
  runs macro with splat
+  determines if overrides (false)
  determines if overrides (false)
+  expands @type.name in virtual metaclass (1)
  expands @type.name in virtual metaclass (1)
+  forwards dir location
  forwards dir location
+  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal  can use macro inside hash literal����������������  can use macro inside hash literal
  can use macro inside hash literal
+  gets enum members with @type.constants
  gets enum members with @type.constants
+  gets correct class name when there are classes in the middle
  gets correct class name when there are classes in the middle
+  retains original yield expression (#2923)
  retains original yield expression (#2923)
+  access to the program with @top_level
  access to the program with @top_level
+  expands macro with default arg and splat (3) (#784)
  expands macro with default arg and splat (3) (#784)
+  expands macro with default arg and splat (#784)
  expands macro with default arg and splat (#784)
+  fixes empty types of macro expansions (#1379)
  fixes empty types of macro expansions (#1379)
+  expands macro
  expands macro
+  doesn't replace %q() (#2178)
  doesn't replace %q() (#2178)
+  can refer to @type
  can refer to @type
+  can refer to abstract (2)
  can refer to abstract (2)
+  declares constant in macro (#838)
  declares constant in macro (#838)
+  correctly resolves constant inside block in macro def
  correctly resolves constant inside block in macro def
+  errors if dynamic constant assignment after macro expansion
  errors if dynamic constant assignment after macro expansion
+  uses indexed macro variable
  uses indexed macro variable
+  uses invocation context
  uses invocation context
+  expands @def in macro
  expands @def in macro
+  expands macro with escaped quotes (#895)
  expands macro with escaped quotes (#895)
+  can iterate union types
  can iterate union types
+  gets default value of instance variable of generic type  gets default value of instance variable of generic type  gets default value of instance variable of generic type  gets default value of instance variable of generic type  gets default value of instance variable of generic type  gets default value of instance variable of generic type  gets default value of instance variable of generic type��������������  gets default value of instance variable of generic type��  gets default value of instance variable of generic type
  gets default value of instance variable of generic type
+  can refer to types
  can refer to types
+  expands inline macro if (true)
  expands inline macro if (true)
+  finds macro from virtual type
  finds macro from virtual type
+  uses indexed macro variable with many keys
  uses indexed macro variable with many keys
+  doesn't reuse macro nodes (bug)
  doesn't reuse macro nodes (bug)
+  devirtualizes @type
  devirtualizes @type
+  keeps heredoc contents inside macro
  keeps heredoc contents inside macro
+  gets enum members as constants
  gets enum members as constants
+  executes with named arguments
  executes with named arguments
+  accepts compile-time flags
  accepts compile-time flags
+  expands inline macro if (false)
  expands inline macro if (false)
+  expands def macro
  expands def macro
+  can access type variables
  can access type variables
+  expands inline macro
  expands inline macro
+  can access type variables of a generic type
  can access type variables of a generic type
+  types macro expansion bug (#1734)
  types macro expansion bug (#1734)
+  expands def macro with @type.name with virtual
  expands def macro with @type.name with virtual
+  expands macro with arguments
  expands macro with arguments
+  forwards line number
  forwards line number
+  says that enum has Flags annotation
  says that enum has Flags annotation
+  checks if macro expansion returns (#821)
  checks if macro expansion returns (#821)
+  implicitly marks method as macro def when using @type
  implicitly marks method as macro def when using @type
+  executes with named arguments for positional arg (2)
  executes with named arguments for positional arg (2)
+  allows overriding macro definition when redefining base class
  allows overriding macro definition when redefining base class
+  doesn't override local variable when using macro variable
  doesn't override local variable when using macro variable
+  expands Path with resolve method
  expands Path with resolve method
+  can access free variables
  can access free variables
+  determines if variable has default value
  determines if variable has default value
+  uses tuple T in method with free vars
  uses tuple T in method with free vars
+  doesn't skip abstract classes when defining macro methods
  doesn't skip abstract classes when defining macro methods
+  resolves alias in macro
  resolves alias in macro
+  finds macro in class
  finds macro in class
+  can access type variables that are not types
  can access type variables that are not types
+  determines if overrides, through module (true)
  determines if overrides, through module (true)
+  stringifies type without virtual marker
  stringifies type without virtual marker
+  expands macro with default arg and splat (2) (#784)
  expands macro with default arg and splat (2) (#784)
+  says that enum doesn't have Flags annotation
  says that enum doesn't have Flags annotation
+  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro  keeps heredoc contents with interpolation inside macro������������  keeps heredoc contents with interpolation inside macro��  keeps heredoc contents with interpolation inside macro��  keeps heredoc contents with interpolation inside macro
  keeps heredoc contents with interpolation inside macro
+  allows macro with default arguments
  allows macro with default arguments
+  expands macro as class method and accesses @type
  expands macro as class method and accesses @type
+read_file?
   with relative path
-    reads file (exists)
    reads file (exists)
     reads file (doesn't exist)
    reads file (doesn't exist)
-Semantic: closure
-  doesn't assign all types to metavar if closured but declared inside block and re-assigned inside the same context before the closure
  doesn't assign all types to metavar if closured but declared inside block and re-assigned inside the same context before the closure
-  does assign all types to metavar if closured but only assigned to once in a loop
  does assign all types to metavar if closured but only assigned to once in a loop
-  unifies types of closured var (2)
  unifies types of closured var (2)
-  marks variable as closured inside block in fun
  marks variable as closured inside block in fun
-  errors if forwarding block param doesn't match input type
  errors if forwarding block param doesn't match input type
-  doesn't mark var as closured if only used in two block
  doesn't mark var as closured if only used in two block
-  errors if sending closured proc pointer to C (3)
  errors if sending closured proc pointer to C (3)
-  transforms block to proc literal with void type
  transforms block to proc literal with void type
-  marks method as self closured if instance var is read
  marks method as self closured if instance var is read
-  unifies types of closured var (1)
  unifies types of closured var (1)
-  transforms block to proc literal
  transforms block to proc literal
-  doesn't closure typeof instance var (#9479)
  doesn't closure typeof instance var (#9479)
-  doesn't mark self var as closured, but marks method as self closured
  doesn't mark self var as closured, but marks method as self closured
-  errors if giving more block args when transforming block to proc literal
  errors if giving more block args when transforming block to proc literal
-  gives error when doing yield inside proc literal
  gives error when doing yield inside proc literal
-  errors if sending closured proc pointer to C (1)
  errors if sending closured proc pointer to C (1)
-  errors if sending closured proc pointer to C (2)
  errors if sending closured proc pointer to C (2)
-  doesn't assign all types to metavar if closured but declared inside block and never re-assigned
  doesn't assign all types to metavar if closured but declared inside block and never re-assigned
-  does assign all types to metavar if closured but only assigned to once in a loop through block
  does assign all types to metavar if closured but only assigned to once in a loop through block
-  gives error when doing yield inside proc literal
  gives error when doing yield inside proc literal
-  allows passing block as proc literal to new and to initialize
  allows passing block as proc literal to new and to initialize
-  transforms block to proc literal with free var
  transforms block to proc literal with free var
-  correctly captures type of closured block arg
  correctly captures type of closured block arg
-  errors if forwarding block param doesn't match input type size
  errors if forwarding block param doesn't match input type size
-  is considered as closure if assigned once but comes from a method arg
  is considered as closure if assigned once but comes from a method arg
-  allows giving less block args when transforming block to proc literal
  allows giving less block args when transforming block to proc literal
-  marks variable as closured in def
  marks variable as closured in def
-  errors if sending closured proc literal to C
  errors if sending closured proc literal to C
-  marks outer fun inside a block as closured
  marks outer fun inside a block as closured
-  marks variable as closured in program on assign
  marks variable as closured in program on assign
-  does assign all types to metavar if closured but only assigned to once in a loop through captured block
  does assign all types to metavar if closured but only assigned to once in a loop through captured block
-  marks method as self closured if instance var is written
  marks method as self closured if instance var is written
-  lookups return type in correct scope
  lookups return type in correct scope
-  doesn't mark var as closured if only used in block
  doesn't mark var as closured if only used in block
-  marks method as self closured if used inside a block
  marks method as self closured if used inside a block
-  marks outer fun as closured when using self
  marks outer fun as closured when using self
-  passes #227
  passes #227
-  transforms block to proc literal without parameters
  transforms block to proc literal without parameters
-  says can't send closure to C with captured block
  says can't send closure to C with captured block
-  says can't send closure to C with new notation
  says can't send closure to C with new notation
-  doesn't assign all types to metavar if closured but only assigned to once
  doesn't assign all types to metavar if closured but only assigned to once
-  correctly detects previous var as closured (#5609)
  correctly detects previous var as closured (#5609)
-  doesn't closure typeof local var
  doesn't closure typeof local var
-  marks method as self closured if implicit self call is made
  marks method as self closured if implicit self call is made
-  doesn't crash for non-existing variable (#3789)
  doesn't crash for non-existing variable (#3789)
-  can use fun typedef as block type
  can use fun typedef as block type
-  errors if sending closured proc pointer to C (1.2)
  errors if sending closured proc pointer to C (1.2)
-  considers var as closure-readonly if it was assigned multiple times before it was closured
  considers var as closure-readonly if it was assigned multiple times before it was closured
-  marks variable as closured in block
  marks variable as closured in block
-  marks variable as closured in program
  marks variable as closured in program
-  marks method as self closured if explicit self call is made
  marks method as self closured if explicit self call is made
-  errors when transforming block to proc literal if type mismatch
  errors when transforming block to proc literal if type mismatch
-Code gen: pointer
-  can pass any pointer to something expecting void* in lib call, with to_unsafe
  can pass any pointer to something expecting void* in lib call, with to_unsafe
-  codegens malloc
  codegens malloc
-  gets pointer to constant  gets pointer to constant  gets pointer to constant  gets pointer to constant  gets pointer to constant  gets pointer to constant������������  gets pointer to constant��  gets pointer to constant��  gets pointer to constant
  gets pointer to constant
-  codegens pointer cast
  codegens pointer cast
-  can use typedef pointer value get and set (#630)
  can use typedef pointer value get and set (#630)
-  can assign nil to void pointer
  can assign nil to void pointer
-  codegens nilable pointer type (2)
  codegens nilable pointer type (2)
-  can dereference pointer to func
  can dereference pointer to func
-  codegens null pointer as if condition
  codegens null pointer as if condition
-  codegens nilable pointer type (1)
  codegens nilable pointer type (1)
-  does pointerof class variable with class
  does pointerof class variable with class
-  can pass any pointer to something expecting void* in lib call
  can pass any pointer to something expecting void* in lib call
-  changes through var and reads from pointer
  changes through var and reads from pointer
-  sets value of pointer to struct
  sets value of pointer to struct
-  codegens pointer cast to Nil (#8015)
  codegens pointer cast to Nil (#8015)
-  codegens pointer as if condition inside union (1)
  codegens pointer as if condition inside union (1)
-  compares pointers through typedef
  compares pointers through typedef
-  codegens pointer as if condition
  codegens pointer as if condition
-  creates pointer by address
  creates pointer by address
-  uses correct llvm module for typedef metaclass (#2877)
  uses correct llvm module for typedef metaclass (#2877)
-  gets pointer of argument that is never assigned to
  gets pointer of argument that is never assigned to
-  sets value of pointer to union
  sets value of pointer to union
-  assigns nil and pointer to nilable pointer type
  assigns nil and pointer to nilable pointer type
-  codegens nilable pointer type dispatch (1)
  codegens nilable pointer type dispatch (1)
-  passes pointer of pointer to method
  passes pointer of pointer to method
-  codegens realloc
  codegens realloc
-  passes arguments correctly for typedef metaclass (#8544)
  passes arguments correctly for typedef metaclass (#8544)
-  does pointerof class variable
  does pointerof class variable
-  does pointerof read variable
  does pointerof read variable
-  get value of pointer to union
  get value of pointer to union
-  codegens pointer as if condition inside union (2)
  codegens pointer as if condition inside union (2)
-  generates correct code for Pointer.malloc(0) (#2905)
  generates correct code for Pointer.malloc(0) (#2905)
-  increments pointer
  increments pointer
-  calculates pointer diff
  calculates pointer diff
-  get pointer of instance var
  get pointer of instance var
-  takes pointerof lib external var  takes pointerof lib external var  takes pointerof lib external var  takes pointerof lib external var  takes pointerof lib external var  takes pointerof lib external var  takes pointerof lib external var��������������  takes pointerof lib external var��  takes pointerof lib external var
  takes pointerof lib external var
-  codegens nilable pointer type dispatch (2)
  codegens nilable pointer type dispatch (2)
-  gets pointer of instance variable in virtual type
  gets pointer of instance variable in virtual type
-  get pointer and value of it
  get pointer and value of it
-  set pointer value
  set pointer value
-Crystal::Doc::Type
-  #node_to_html
-    shows generic path with unnecessary colons
    shows generic path with unnecessary colons
-    shows relative path
    shows relative path
-    shows generic path with necessary colons
    shows generic path with necessary colons
-    shows relative generic
    shows relative generic
-    shows tuples
    shows tuples
-    shows named tuples
    shows named tuples
-  finds construct when searching class method (#8095)
  finds construct when searching class method (#8095)
-  #class_methods
-    sorts operators first
    sorts operators first
-  ASTNode has no superclass
  ASTNode has no superclass
-  ASTNode has no ancestors
  ASTNode has no ancestors
-  #instance_methods
-    sorts operators first
    sorts operators first
-  #macros
-    sorts operators first
    sorts operators first
-  doesn't show types for alias type
  doesn't show types for alias type
-Semantic: extern struct
-  errors if using non-primitive for field type via module
  errors if using non-primitive for field type via module
-  can include module
  can include module
-  declares extern union with no constructor
  declares extern union with no constructor
-  can new with named args
  can new with named args
-  can be passed to C fun
  can be passed to C fun
-  declares with constructor
  declares with constructor
-  declares extern struct with no constructor
  declares extern struct with no constructor
-  errors if using non-primitive type in constructor
  errors if using non-primitive type in constructor
-  errors if using non-primitive for field type
  errors if using non-primitive for field type
-  can use extern struct in lib
  can use extern struct in lib
-  overrides getter
  overrides getter
-Normalize: or
-  normalizes or with assignment on the left
  normalizes or with assignment on the left
-  normalizes or without variable
  normalizes or without variable
-  normalizes or with ! on var
  normalizes or with ! on var
-  normalizes or with ! on var.is_a?(...)
  normalizes or with ! on var.is_a?(...)
-  normalizes or with variable on the left
  normalizes or with variable on the left
-  normalizes or with is_a? on var
  normalizes or with is_a? on var
-Semantic: responds_to?
-  is bool
  is bool
-  restricts in assignment
  restricts in assignment
-  restricts other types inside if else
  restricts other types inside if else
-  restricts virtual generic module to including types (#8334)
  restricts virtual generic module to including types (#8334)
-  restricts type inside if scope 1
  restricts type inside if scope 1
-  restricts virtual generic superclass to subtypes
  restricts virtual generic superclass to subtypes
-Normalize: return next break
-  removes nodes after return
  removes nodes after return
-  doesn't remove after return when there's an unless
  doesn't remove after return when there's an unless
-  removes nodes after next
  removes nodes after next
-  removes nodes after if that returns in both branches
  removes nodes after if that returns in both branches
-  removes nodes after break
  removes nodes after break
-  doesn't remove nodes after if that returns in one branch
  doesn't remove nodes after if that returns in one branch
-
-Pending:
-  Crystal::Repl::Interpreter integration does XML
-  Semantic: multi assign strict_multi_assign errors if assigning tuple to more targets
-  Semantic: def overload restricts on generic type without type arg
-  Semantic: def overload restricts on generic type with free type arg
-  Semantic: recursive struct check errors on recursive abstract struct through module (#11384)
-  Code gen: lib codegens lib var set and get
-  Semantic: cast casts from union to incompatible union gives error
-  Semantic: instance var doesn't infer type to be nilable if using self.class in call in assign
-  Code gen: primitives sums two numbers out of an [] of Number
-  Code gen: primitives codegens pointer of int
-  Semantic: pointer allows using pointer with subclass
-  Semantic: primitives types pointer of int
-  Code gen: class codegens assignment of generic metaclasses (2) (#10394)
-  Code gen: class codegens assignment of generic metaclasses (1) (#10394)
-  Crystal::Doc::MarkdDocRenderer expand_code_links doesn't find wrong kind of methods
-  Crystal::Doc::MarkdDocRenderer expand_code_links doesn't find wrong kind of sibling methods
-
-Finished in 42:20 minutes
-12558 examples, 0 failures, 0 errors, 16 pending
-Randomized with seed: 68465
-��make[2]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg'
-make release=1 verbose=1 progress=1 threads=42 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 std_spec
-make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg'
-Using /usr/bin/llvm-config-19 [version=19.1.7]
-./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 42 --link-flags="-Wl,-z,relro"  --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/std_spec spec/std_spec.cr
-Using compiled compiler at .build/crystal
-[1/13] Parse                             
[1/13] Parse                             
[2/13] Semantic (top level)              
[2/13] Semantic (top level)              
[3/13] Semantic (new)                    
[3/13] Semantic (new)                    
[4/13] Semantic (type declarations)      
[4/13] Semantic (type declarations)      
[5/13] Semantic (abstract def check)     
[5/13] Semantic (abstract def check)     
[6/13] Semantic (restrictions augmenter) 
[6/13] Semantic (restrictions augmenter) 
[7/13] Semantic (ivars initializers)     
[7/13] Semantic (ivars initializers)     
[8/13] Semantic (cvars initializers)     
[8/13] Semantic (cvars initializers)     
[9/13] Semantic (main)                   
[9/13] Semantic (main)                   
[10/13] Semantic (cleanup)                
[10/13] Semantic (cleanup)                
[11/13] Semantic (recursive struct check) 
[11/13] Semantic (recursive struct check) 
[12/13] Codegen (crystal)                 
[12/13] Codegen (crystal)                 
[13/13] Codegen (bc+obj)                  
[13/13] [0/1] Codegen (bc+obj)                  
[13/13] [1/1] Codegen (bc+obj)                  
[13/13] [1/1] Codegen (bc+obj)                  
[14/13] Codegen (linking)                 
[14/13] Codegen (linking)                 
                                       
.build/std_spec -v --order=random   
-0.2.5
-Randomized with seed: 89008
-String
-  #each_grapheme
-    string.dump iterator
    string.dump iterator
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump yielding
    string.dump yielding
-    string.dump yielding
    string.dump yielding
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump yielding
    string.dump yielding
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump iterator
    string.dump iterator
-    string.dump iterator
    string.dump iterator
-    string.dump yielding
    string.dump yielding
-    string.dump yielding
    string.dump yielding
-    string.dump iterator
    string.dump iterator
-    string.dump iterator
    string.dump iterator
-  #grapheme_size
  #grapheme_size
-  #graphemes
  #graphemes
-YAML serialization
-  to_yaml
-    does for Tuple
    does for Tuple
-    does for utc time with nanoseconds
    does for utc time with nanoseconds
-    does for Set
    does for Set
-    does for Float32
    does for Float32
-    serializes recursive data structures
    serializes recursive data structures
-    does for Float64 (infinity)
    does for Float64 (infinity)
-    does for String with stars (#3353)
    does for String with stars (#3353)
-    Enum::ValueConverter
-      flag enum
      flag enum
-      normal enum
      normal enum
-    does for Float32 (-infinity)
    does for Float32 (-infinity)
-    does for BigDecimal
    does for BigDecimal
-    Enum
-      flag enum
      flag enum
-      normal enum
      normal enum
-    writes to a stream
    writes to a stream
-    does for Hash
    does for Hash
-    does for String with slash
    does for String with slash
-    does for Nil (empty string)
    does for Nil (empty string)
-    quotes string if reserved
    quotes string if reserved
-    does for Bool
    does for Bool
-    does for BigFloat
    does for BigFloat
-    does for Float64
    does for Float64
-    does for BigInt
    does for BigInt
-    does for Float64 (nan)
    does for Float64 (nan)
-    does for NamedTuple
    does for NamedTuple
-    does for time at date
    does for time at date
-    does for Int32
    does for Int32
-    does for Array
    does for Array
-    does for String with quote
    does for String with quote
-    does for Nil
    does for Nil
-    does for utc time
    does for utc time
-    does for String
    does for String
-    does for Float32 (infinity)
    does for Float32 (infinity)
-    does for bytes
    does for bytes
-    does for Float32 (nan)
    does for Float32 (nan)
-    does a full document
    does a full document
-    does for Hash with symbol keys
    does for Hash with symbol keys
-    does for Path
    does for Path
-    does for Float64 (-infinity)
    does for Float64 (-infinity)
-    does for String with unicode characters (#8131)
    does for String with unicode characters (#8131)
-  from_yaml
-    raises if UInt64.from_yaml overflows
    raises if UInt64.from_yaml overflows
-    does for named tuple with nilable fields and null (#8089)
    does for named tuple with nilable fields and null (#8089)
-    does UInt128.from_yaml
    does UInt128.from_yaml
-    does for named tuple with spaces in key and quote char (#10918)
    does for named tuple with spaces in key and quote char (#10918)
-    does for tuple with file-private type
    does for tuple with file-private type
-    does Path.from_yaml
    does Path.from_yaml
-    does for empty tuple
    does for empty tuple
-    does for named tuple with nilable fields (#8089)
    does for named tuple with nilable fields (#8089)
-    does Time::Format#from_yaml
    does Time::Format#from_yaml
-    does UInt32.from_yaml
    does UInt32.from_yaml
-    raises if UInt32.from_yaml overflows
    raises if UInt32.from_yaml overflows
-    does for named tuple with spaces in key (#10918)
    does for named tuple with spaces in key (#10918)
-    does Int32.from_yaml
    does Int32.from_yaml
-    does Nil#from_yaml
    does Nil#from_yaml
-    does for empty named tuple
    does for empty named tuple
-    does Int64.from_yaml
    does Int64.from_yaml
-    does Hash#from_yaml with merge
    does Hash#from_yaml with merge
-    does UInt16.from_yaml
    does UInt16.from_yaml
-    does Array#from_yaml
    does Array#from_yaml
-    can parse string that looks like a number
    can parse string that looks like a number
-    raises if UInt16.from_yaml overflows
    raises if UInt16.from_yaml overflows
-    does Float32#from_yaml
    does Float32#from_yaml
-    parse exceptions
-      has correct location when raises in NamedTuple#from_yaml
      has correct location when raises in NamedTuple#from_yaml
-      has correct location when raises in Int32#from_yaml
      has correct location when raises in Int32#from_yaml
-      has correct location when raises in Union#from_yaml
      has correct location when raises in Union#from_yaml
-      has correct location when raises in Nil#from_yaml
      has correct location when raises in Nil#from_yaml
-    does for named tuple with file-private type
    does for named tuple with file-private type
-    does Int.from_yaml with prefixes
    does Int.from_yaml with prefixes
-    does Set#from_yaml
    does Set#from_yaml
-    does Array#from_yaml with block
    does Array#from_yaml with block
-    raises if Int8.from_yaml overflows
    raises if Int8.from_yaml overflows
-    does for BigFloat
    does for BigFloat
-    raises if Int16.from_yaml overflows
    raises if Int16.from_yaml overflows
-    does Bool#from_yaml
    does Bool#from_yaml
-    does Array#from_yaml from IO
    does Array#from_yaml from IO
-    does String#from_yaml
    does String#from_yaml
-    does for named tuple
    does for named tuple
-    does Int8.from_yaml
    does Int8.from_yaml
-    raises if Int128.from_yaml overflows
    raises if Int128.from_yaml overflows
-    does for BigInt
    does for BigInt
-    Enum::ValueConverter.from_yaml
-      flag enum
      flag enum
-      normal enum
      normal enum
-    does UInt64.from_yaml
    does UInt64.from_yaml
-    deserializes union with nil, string and int (#7936)
    deserializes union with nil, string and int (#7936)
-    deserializes time
    deserializes time
-    deserializes bytes
    deserializes bytes
-    does Hash#from_yaml
    does Hash#from_yaml
-    does for BigDecimal
    does for BigDecimal
-    raises if UInt8.from_yaml overflows
    raises if UInt8.from_yaml overflows
-    raises if Int32.from_yaml overflows
    raises if Int32.from_yaml overflows
-    does Int.from_yaml with underscores
    does Int.from_yaml with underscores
-    does Float64#from_yaml
    does Float64#from_yaml
-    Enum
-      flag enum
      flag enum
-      normal enum
      normal enum
-    does Int128.from_yaml
    does Int128.from_yaml
-    does for tuple
    does for tuple
-    does Int16.from_yaml
    does Int16.from_yaml
-    does Hash#from_yaml with merge (recursive)
    does Hash#from_yaml with merge (recursive)
-    does String#from_yaml (empty string)
    does String#from_yaml (empty string)
-    does UInt8.from_yaml
    does UInt8.from_yaml
-    raises if Int64.from_yaml overflows
    raises if Int64.from_yaml overflows
-    raises if UInt128.from_yaml overflows
    raises if UInt128.from_yaml overflows
-Socket::Address
-  .parse
-    accepts URI
    accepts URI
-    parses UNIX
    parses UNIX
-    parses UDP
    parses UDP
-    fails with unknown scheme
    fails with unknown scheme
-    parses TCP
    parses TCP
-Array
-  rejects!
  rejects!
-  does map_with_index
  does map_with_index
-  "#each_index" yielding
  "#each_index" yielding
-  does compact_map with false
  does compact_map with false
-  []?
-    gets with index
    gets with index
-    gets with range without end
    gets with range without end
-    gets with start and count
    gets with start and count
-    gets with range
    gets with range
-    gets with range without beginning
    gets with range without beginning
-  does clear
  does clear
-  uniq
-    uniqs without block
    uniqs without block
-    uniqs with block
    uniqs with block
-    uniqs with true
    uniqs with true
-    uniqs large array
    uniqs large array
-  zip
-    when a block is provided
-      works with iterator
      works with iterator
-      works with iterable
      works with iterable
-      yields pairs of self's elements and passed array
      yields pairs of self's elements and passed array
-    when no block is provided
-      and the arrays have different typed elements
-        returns an array of paired elements (tuples)
        returns an array of paired elements (tuples)
-        zips three things
        zips three things
-        works with iterable
        works with iterable
-        works with iterator
        works with iterator
-        zips union type (#8608)
        zips union type (#8608)
-  does each_index
  does each_index
-  size
-    has size 2
    has size 2
-    has size 0
    has size 0
-  first?
-    gets first? when non empty
    gets first? when non empty
-    gives nil when empty
    gives nil when empty
-  "#each" iterator
  "#each" iterator
-  uniq!
-    uniqs with block
    uniqs with block
-    uniqs large array
    uniqs large array
-    uniqs with true
    uniqs with true
-    uniqs without block
    uniqs without block
-  does clone with recursive array
  does clone with recursive array
-  "#each_index" iterator
  "#each_index" iterator
-  "#cycle" iterator
  "#cycle" iterator
-  sort
-    #sort!
-      stable sort with a block
      stable sort with a block
-      stable sort without a block
      stable sort without a block
-      without block
      without block
-      with a block
      with a block
-    #sort
-      without block
      without block
-      stable sort without a block
      stable sort without a block
-      stable sort with a block
      stable sort with a block
-      with a block
      with a block
-    #unstable_sort!
-      without block
      without block
-      with a block
      with a block
-    #unstable_sort
-      without block
      without block
-      with a block
      with a block
-    #unstable_sort_by
-      sorts
      sorts
-      unpacks tuple
      unpacks tuple
-    #unstable_sort_by!
-      calls given block exactly once for each element
      calls given block exactly once for each element
-      sorts
      sorts
-    #sort_by
-      sorts
      sorts
-      stable sort
      stable sort
-      unpacks tuple
      unpacks tuple
-    #sort_by!
-      stable sort
      stable sort
-      sorts
      sorts
-      calls given block exactly once for each element
      calls given block exactly once for each element
-  transpose
-    transposes array of tuples
    transposes array of tuples
-    transposes empty array
    transposes empty array
-    transposes union of arrays
    transposes union of arrays
-    raises IndexError error when size of element is invalid
    raises IndexError error when size of element is invalid
-    transposes elements
    transposes elements
-  "#cycle" yielding
  "#cycle" yielding
-  #fill
-    replaces values in a subrange
    replaces values in a subrange
-  does product without block
  does product without block
-  last
-    raises when empty
    raises when empty
-    gets last when non empty
    gets last when non empty
-    returns a sub array with given number of elements
    returns a sub array with given number of elements
-  |
-    large arrays
    large arrays
-    small arrays
    small arrays
-  push
-    pushes multiple elements to an empty array
    pushes multiple elements to an empty array
-    has the << alias
    has the << alias
-    pushes one element
    pushes one element
-    pushes multiple elements
    pushes multiple elements
-  values_at
-    works with mixed types
    works with mixed types
-    raises when passed an invalid index
    raises when passed an invalid index
-    returns the given indexes
    returns the given indexes
-  "#reverse_each" iterator
  "#reverse_each" iterator
-  does *
  does *
-  ==
-    compares elements
    compares elements
-    compares empty
    compares empty
-    compares other
    compares other
-  rotate
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    rotate!
    rotate!
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    rotate
    rotate
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  insert_all
-    inserts indexable
    inserts indexable
-    raises with negative index greater than size
    raises with negative index greater than size
-    inserts when other is empty
    inserts when other is empty
-    raises with index greater than size
    raises with index greater than size
-    inserts with index of #size
    inserts with index of #size
-    inserts with index 0
    inserts with index 0
-    inserts with positive index
    inserts with positive index
-    inserts with negative index
    inserts with negative index
-    inserts with negative index (2)
    inserts with negative index (2)
-    inserts when empty
    inserts when empty
-  does dup
  does dup
-  does reverse! with an odd number of elements
  does reverse! with an odd number of elements
-  pop
-    pops many elements
    pops many elements
-    raises when empty
    raises when empty
-    pops negative count raises
    pops negative count raises
-    pops more elements that what is available
    pops more elements that what is available
-    pops when non empty
    pops when non empty
-  flattens
  flattens
-  insert
-    inserts out of range
    inserts out of range
-    inserts with positive index
    inserts with positive index
-    inserts with negative index (2)
    inserts with negative index (2)
-    inserts with negative index
    inserts with negative index
-  does +
  does +
-  does map
  does map
-  does compact!
  does compact!
-  does map_with_index!
  does map_with_index!
-  first
-    returns a sub array with given number of elements
    returns a sub array with given number of elements
-    raises when empty
    raises when empty
-    gets first when non empty
    gets first when non empty
-  []=
-    concats a new array with []=(...)
    concats a new array with []=(...)
-    reuses the buffer if possible
    reuses the buffer if possible
-    sets on positive index
    sets on positive index
-    replaces a subrange with a single value
    replaces a subrange with a single value
-    replaces entire range with an array for empty array (#8341)
    replaces entire range with an array for empty array (#8341)
-    sets on negative index
    sets on negative index
-    optimizes when index is 0
    optimizes when index is 0
-    pushes a new value with []=(...)
    pushes a new value with []=(...)
-    replaces a subrange with an array
    replaces a subrange with an array
-    replaces entire range with a value for empty array (#8341)
    replaces entire range with a value for empty array (#8341)
-    resizes the buffer if capacity is not enough
    resizes the buffer if capacity is not enough
-  does hash
  does hash
-  does product with block
  does product with block
-  does map!
  does map!
-  index
-    performs without a block
    performs without a block
-    raises if out of bounds
    raises if out of bounds
-    performs with a block
    performs with a block
-    performs without a block and offset
    performs without a block and offset
-    performs with a block and offset
    performs with a block and offset
-  does map_with_index, with offset
  does map_with_index, with offset
-  "#each" yielding
  "#each" yielding
-  find the element by using binary search
  find the element by using binary search
-  "#cycle(limit)" yielding
  "#cycle(limit)" yielding
-  concat
-    concats a union of arrays
    concats a union of arrays
-    concats enumerable to empty array (#2047)
    concats enumerable to empty array (#2047)
-    concats enumerable
    concats enumerable
-    concats small arrays
    concats small arrays
-    concats indexable
    concats indexable
-    concats large arrays
    concats large arrays
-  does each index while modifying array
  does each index while modifying array
-  does + with different types (#568)
  does + with different types (#568)
-  does reverse! with an even number of elements
  does reverse! with an even number of elements
-  new
-    raises on negative count
    raises on negative count
-    raises on negative capacity
    raises on negative capacity
-    creates with default value in block
    creates with default value in block
-    creates with default value
    creates with default value
-  Array.each_product
-    2 arrays
    2 arrays
-    with splat
    with splat
-    one empty array
    one empty array
-    2 arrays different types
    2 arrays different types
-    more arrays
    more arrays
-    single array
    single array
-    more arrays, reuse = true
    more arrays, reuse = true
-  does clone
  does clone
-  doesn't overflow buffer with Array.new(size, value) (#1209)
  doesn't overflow buffer with Array.new(size, value) (#1209)
-  find the index by using binary search
  find the index by using binary search
-  rejects! with pattern
  rejects! with pattern
-  zip?
-    when no block is provided
-      and the arrays have different typed elements
-        and size of an arg is less than receiver
-          zips three things
          zips three things
-          returns an array of paired elements (tuples with nil)
          returns an array of paired elements (tuples with nil)
-          works with iterable
          works with iterable
-          zips union type (#8608)
          zips union type (#8608)
-          works with iterator
          works with iterator
-    when a block is provided
-      and size of an arg is less than receiver
-        works with iterator
        works with iterator
-        works with iterable
        works with iterable
-        yields pairs of self's elements and passed array (with nil)
        yields pairs of self's elements and passed array (with nil)
-  #replace
-    clears unused elements if new size is smaller
    clears unused elements if new size is smaller
-    resizes the buffer if capacity is not enough
    resizes the buffer if capacity is not enough
-    reuses the buffer if possible
    reuses the buffer if possible
-    replaces all elements
    replaces all elements
-  does compact_map
  does compact_map
-  to_s
-    does to_s
    does to_s
-    does with recursive
    does with recursive
-  "#cycle(limit)" iterator
  "#cycle(limit)" iterator
-  unshift
-    repeated unshift/clear does not exhaust memory
    repeated unshift/clear does not exhaust memory
-    repeated unshift/shift does not exhaust memory
    repeated unshift/shift does not exhaust memory
-    unshifts one element
    unshifts one element
-    unshifts one elements three times
    unshifts one elements three times
-    unshifts one element multiple times
    unshifts one element multiple times
-    unshifts after shift
    unshifts after shift
-    unshifts multiple elements
    unshifts multiple elements
-    unshifts multiple elements to an empty array
    unshifts multiple elements to an empty array
-    unshift of large array does not corrupt elements
    unshift of large array does not corrupt elements
-    unshifts many after many shifts
    unshifts many after many shifts
-    repeated unshift/pop does not exhaust memory (#10748)
    repeated unshift/pop does not exhaust memory (#10748)
-  does <=>
  does <=>
-  rindex
-    performs without a block and an offset
    performs without a block and an offset
-    performs with a block and offset
    performs with a block and offset
-    performs with a block
    performs with a block
-    performs without a block
    performs without a block
-  does + with empty tuple converted to array (#909)
  does + with empty tuple converted to array (#909)
-  "#reverse_each" yielding
  "#reverse_each" yielding
-  repeated_permutations
-    yields with reuse = true
    yields with reuse = true
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    yielding dup of arrays
    yielding dup of arrays
-    assert
    assert
-    assert
    assert
-    accepts a block
    accepts a block
-    yields with reuse = array
    yields with reuse = array
-  shuffle
-    shuffle with random
    shuffle with random
-    shuffle!
    shuffle!
-    shuffle! with random
    shuffle! with random
-    shuffle
    shuffle
-  swap
-    swaps with negative indices
    swaps with negative indices
-    swaps but raises out of bounds on left
    swaps but raises out of bounds on left
-    swaps
    swaps
-    swaps but raises out of bounds on right
    swaps but raises out of bounds on right
-  selects!
  selects!
-  selects! with pattern
  selects! with pattern
-  shift
-    shifts all after pop
    shifts all after pop
-    shifts more than what is available
    shifts more than what is available
-    shifts when non empty
    shifts when non empty
-    shifts all
    shifts all
-    shifts and then concats Enumerable
    shifts and then concats Enumerable
-    pops after shift
    pops after shift
-    shifts many elements
    shifts many elements
-    shifts and then concats Array
    shifts and then concats Array
-    shifts negative count raises
    shifts negative count raises
-    shifts one and resizes
    shifts one and resizes
-    shifts almost all and then avoid resize
    shifts almost all and then avoid resize
-    raises when empty
    raises when empty
-    shifts all with shift(n)
    shifts all with shift(n)
-  &
-    small arrays
    small arrays
-    big arrays
    big arrays
-  inspect
-    assert
    assert
-  does update
  does update
-  builds from buffer
  builds from buffer
-  does map_with_index!, with offset
  does map_with_index!, with offset
-  does equals? with custom block
  does equals? with custom block
-  Array.product
-    with splat
    with splat
-    with array
    with array
-  empty
-    is not empty
    is not empty
-    is empty
    is empty
-  does each while modifying array
  does each while modifying array
-  #truncate
-    truncates with index < 0 and count
    truncates with index < 0 and count
-    truncates with index == size and count
    truncates with index == size and count
-    truncates with range
    truncates with range
-    raises on out of bound index
    raises on out of bound index
-    truncates with index and count
    truncates with index and count
-    raises on negative count
    raises on negative count
-    truncates with index and count, not enough elements
    truncates with index and count, not enough elements
-    truncates with index and count == 0
    truncates with index and count == 0
-  does compact
  does compact
-  delete_at
-    deletes negative index with range, out of bounds
    deletes negative index with range, out of bounds
-    deletes negative index
    deletes negative index
-    deletes negative index with range
    deletes negative index with range
-    deletes with index and count
    deletes with index and count
-    deletes use range
    deletes use range
-    returns empty if at end
    returns empty if at end
-    deletes positive index
    deletes positive index
-    deletes at beginning is same as shift
    deletes at beginning is same as shift
-    deletes out of bounds
    deletes out of bounds
-  []
-    gets on inclusive range with negative indices
    gets on inclusive range with negative indices
-    raises on negative count on empty Array
    raises on negative count on empty Array
-    raises on index out of bounds with range without end
    raises on index out of bounds with range without end
-    gets with negative start
    gets with negative start
-    gets on positive index
    gets on positive index
-    gets 0, 0 on empty array
    gets 0, 0 on empty array
-    raises on index out of bounds with range
    raises on index out of bounds with range
-    returns empty if at end
    returns empty if at end
-    raises on index out of bounds
    raises on index out of bounds
-    gets 0 ... 0 on empty array
    gets 0 ... 0 on empty array
-    raises on too negative left bound
    raises on too negative left bound
-    gets on exclusive range
    gets on exclusive range
-    gets on inclusive range
    gets on inclusive range
-    gets on range with start higher than end
    gets on range with start higher than end
-    doesn't exceed limits
    doesn't exceed limits
-    gets with start and count
    gets with start and count
-    gets on negative index
    gets on negative index
-    gets on range without begin
    gets on range without begin
-    gets on range with start higher than negative end
    gets on range with start higher than negative end
-    gets with start and count exceeding size
    gets with start and count exceeding size
-    gets on range without end
    gets on range without end
-    raises on index out of bounds with start and count
    raises on index out of bounds with start and count
-    raises on negative count
    raises on negative count
-    gets on exclusive range with negative indices
    gets on exclusive range with negative indices
-    raises on negative count
    raises on negative count
-  -
-    does with larger array coming second
    does with larger array coming second
-    with different types
-      small array
      small array
-      big array
      big array
-    does it
    does it
-    does with even larger arrays
    does with even larger arrays
-  #skip
  #skip
-  does reverse with an odd number of elements
  does reverse with an odd number of elements
-  does reverse with an even number of elements
  does reverse with an even number of elements
-  delete
-    delete not found
    delete not found
-    deletes many
    deletes many
-  capacity re-sizing
-    initializes an array capacity to INITIAL_CAPACITY
    initializes an array capacity to INITIAL_CAPACITY
-    doubles capacity for arrays smaller than CAPACITY_THRESHOLD
    doubles capacity for arrays smaller than CAPACITY_THRESHOLD
-    uses slow growth heuristic for arrays larger than CAPACITY_THRESHOLD
    uses slow growth heuristic for arrays larger than CAPACITY_THRESHOLD
-Log::SyncDispatcher
-  dispatches entry
  dispatches entry
-HTTP::Server::Response
-  changes status and others after headers sent
  changes status and others after headers sent
-  closes when it fails to write
  closes when it fails to write
-  does not automatically add the `content-length` header if the response is a 204
  does not automatically add the `content-length` header if the response is a 204
-  closes gracefully with replaced output that syncs close (#11389)
  closes gracefully with replaced output that syncs close (#11389)
-  sets status code
  sets status code
-  prints with content length
  prints with content length
-  prints with content length (method)
  prints with content length (method)
-  flushes
  flushes
-  does not automatically add the `content-length` header if the response is informational
  does not automatically add the `content-length` header if the response is informational
-  writes cookie headers
  writes cookie headers
-  prints less then buffer's size
  prints less then buffer's size
-  prints less then buffer's size to output
  prints less then buffer's size to output
-  prints more then buffer's size
  prints more then buffer's size
-  resets and clears headers and cookies
  resets and clears headers and cookies
-  sets content type after headers sent
  sets content type after headers sent
-  wraps output
  wraps output
-  changes status and others
  changes status and others
-  sets content type
  sets content type
-  #redirect
-    String location
    String location
-    encodes special characters
    encodes special characters
-    with header
    with header
-    fails if headers already sent
    fails if headers already sent
-    doesn't encode URIs twice
    doesn't encode URIs twice
-    permanent redirect
    permanent redirect
-    URI location
    URI location
-    fails if closed
    fails if closed
-  retrieves status code
  retrieves status code
-  doesn't override content-length when there's no body
  doesn't override content-length when there's no body
-  adds header
  adds header
-  changes status message
  changes status message
-  allows specifying the content-length header explicitly
  allows specifying the content-length header explicitly
-  does not automatically add the `content-length` header if the response is a 304
  does not automatically add the `content-length` header if the response is a 304
-  #respond_with_status
-    raises when response is closed
    raises when response is closed
-    sends custom code and message
    sends custom code and message
-    sends HTTP::Status
    sends HTTP::Status
-    raises when headers written
    raises when headers written
-    uses default values
    uses default values
-    sends HTTP::Status and custom message
    sends HTTP::Status and custom message
-  writes and flushes with HTTP 1.0
  writes and flushes with HTTP 1.0
-  closes
  closes
-Float64 boundaries
-  boundaries min float64
  boundaries min float64
-  boundaries 1.0
  boundaries 1.0
-  boundaries min normal f64
  boundaries min normal f64
-  boundaries max denormal f64
  boundaries max denormal f64
-  boundaries max f64
  boundaries max f64
-  boundaries 1.5
  boundaries 1.5
-String
-  .char_bytesize_at
  .char_bytesize_at
-__udivti3
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-HTTP::LogHandler
-  logs to custom logger
  logs to custom logger
-  log failed request
  log failed request
-  logs
  logs
-Math
-  Bessel functions
-    bessely0
    bessely0
-    besselj0
    besselj0
-    besselj1
    besselj1
-    bessely
    bessely
-    bessely1
    bessely1
-    besselj
    besselj
-  Inverse hyperbolic functions
-    asinh
    asinh
-    atanh
    atanh
-    acosh
    acosh
-  fma
  fma
-  Exponents
-    frexp
    frexp
-    exp
    exp
-    logb
    logb
-    scalbn
    scalbn
-    exp2
    exp2
-    expm1
    expm1
-    scalbln
    scalbln
-    ldexp
    ldexp
-    ilogb
    ilogb
-  Roots
-    sqrt
    sqrt
-    cbrt
    cbrt
-    isqrt
    isqrt
-  Gauss error functions
-    erfc
    erfc
-    erf
    erf
-  Hyperbolic functions
-    sinh
    sinh
-    tanh
    tanh
-    cosh
    cosh
-  Functions for computing quotient and remainder
  Functions for computing quotient and remainder
-  Logarithms
-    log10
    log10
-    log1p
    log1p
-    log2
    log2
-    log
    log
-  .pw2ceil
-    Int64
    Int64
-    UInt32
    UInt32
-    Int16
    Int16
-    UInt16
    UInt16
-    Int32
    Int32
-    UInt8
    UInt8
-    UInt128
    UInt128
-    Int128
    Int128
-    UInt64
    UInt64
-    Int8
    Int8
-  Inverse trigonometric functions
-    asin
    asin
-    acos
    acos
-    atan2
    atan2
-    atan
    atan
-  Mathematical constants
-    LOG10
    LOG10
-    E
    E
-    LOG2
    LOG2
-  Trigonometric functions
-    hypot
    hypot
-    cos
    cos
-    sin
    sin
-    tan
    tan
-  Order-related functions
-    assert
    assert
-    assert
    assert
-  Functions manipulating signs
-    copysign
    copysign
-  Gamma functions
-    lgamma
    lgamma
-    gamma
    gamma
-Process.find_executable
-  fails to find 'not_exe'
  fails to find 'not_exe'
-  fails to find 'sub'
  fails to find 'sub'
-  finds './inbase' as 'inbase'
  finds './inbase' as 'inbase'
-  fails to find '.'
  fails to find '.'
-  finds 'sub/insub' as 'sub/insub'
  finds 'sub/insub' as 'sub/insub'
-  fails to find './inpath'
  fails to find './inpath'
-  fails to find 'inbase/'
  fails to find 'inbase/'
-  fails to find 'sub/not_exe'
  fails to find 'sub/not_exe'
-  finds '../base/inbase' as 'inbase'
  finds '../base/inbase' as 'inbase'
-  fails to find './not_exe'
  fails to find './not_exe'
-  finds 'inpath' as '../path/inpath'
  finds 'inpath' as '../path/inpath'
-  fails to find '/tmp/cr-spec-35d4c215/find_executable/base/sub'
  fails to find '/tmp/cr-spec-35d4c215/find_executable/base/sub'
-  fails to find './sub'
  fails to find './sub'
-  fails to find 'sub/insub/'
  fails to find 'sub/insub/'
-  fails to find ''
  fails to find ''
-  finds '/tmp/cr-spec-35d4c215/find_executable/base/inbase' as 'inbase'
  finds '/tmp/cr-spec-35d4c215/find_executable/base/inbase' as 'inbase'
-  fails to find 'inbase'
  fails to find 'inbase'
-  fails to find '/tmp/cr-spec-35d4c215/find_executable/base/inbase/'
  fails to find '/tmp/cr-spec-35d4c215/find_executable/base/inbase/'
-__fixsfti
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-YAML::Schema::Core
-  parses "true"
  parses "true"
-  parses "No"
  parses "No"
-  parses "-.INF"
  parses "-.INF"
-  parses "2002-1-2T10:11:12+03x"
  parses "2002-1-2T10:11:12+03x"
-  parses ".inf"
  parses ".inf"
-  parses "-123"
  parses "-123"
-  raises on parse "!!pairs 1"
  raises on parse "!!pairs 1"
-  parses "0b10110"
  parses "0b10110"
-  parses "2002-1-2T10:11:12Zx"
  parses "2002-1-2T10:11:12Zx"
-  parses "2002-1-2"
  parses "2002-1-2"
-  raises on parse "!!null 1"
  raises on parse "!!null 1"
-  parses "!!int 0o123"
  parses "!!int 0o123"
-  parses "0o123"
  parses "0o123"
-  parses "+.5"
  parses "+.5"
-  parses "-.5"
  parses "-.5"
-  parses "NULL"
  parses "NULL"
-  parses "+.INF"
  parses "+.INF"
-  parses "-2E+05"
  parses "-2E+05"
-  parses "!!str 1"
  parses "!!str 1"
-  parses "2002-12-14"
  parses "2002-12-14"
-  parses "!!int 0755"
  parses "!!int 0755"
-  raises on parse "!!seq 1"
  raises on parse "!!seq 1"
-  parses nan
  parses nan
-  parses "no"
  parses "no"
-  raises on parse "!!map 1"
  raises on parse "!!map 1"
-  parses "!!map {1: 2}"
  parses "!!map {1: 2}"
-  parses "2002-1-2   1:11:12"
  parses "2002-1-2   1:11:12"
-  parses "null"
  parses "null"
-  parses "False"
  parses "False"
-  parses "2002-1-2T10:11:12.345"
  parses "2002-1-2T10:11:12.345"
-  parses "+123"
  parses "+123"
-  parses ".5"
  parses ".5"
-  parses "!!set { 1, 2, 3 }"
  parses "!!set { 1, 2, 3 }"
-  raises on parse "!!timestamp foo"
  raises on parse "!!timestamp foo"
-  parses "0755"
  parses "0755"
-  parses "-0x123abc"
  parses "-0x123abc"
-  parses "off"
  parses "off"
-  parses "-0.0"
  parses "-0.0"
-  parses "2002-1-2T10:11:12.3"
  parses "2002-1-2T10:11:12.3"
-  parses "Null"
  parses "Null"
-  parses "TRUE"
  parses "TRUE"
-  parses "2002-1-2T10:11:12-03:31"
  parses "2002-1-2T10:11:12-03:31"
-  parses "!!float '1_234.2'"
  parses "!!float '1_234.2'"
-  parses "!!int 0b10"
  parses "!!int 0b10"
-  parses "!!float 2.3e4"
  parses "!!float 2.3e4"
-  parses "\"1\""
  parses "\"1\""
-  parses "0x123abc"
  parses "0x123abc"
-  parses "2002-1-2T10:11:12.34"
  parses "2002-1-2T10:11:12.34"
-  parses "Y"
  parses "Y"
-  parses !!float .nan
  parses !!float .nan
-  parses "0"
  parses "0"
-  parses "false"
  parses "false"
-  raises on parse "!!binary [1]"
  raises on parse "!!binary [1]"
-  parses ".INF"
  parses ".INF"
-  raises on parse "!!bool 1"
  raises on parse "!!bool 1"
-  parses "!!null ~"
  parses "!!null ~"
-  parses "Yes"
  parses "Yes"
-  parses "!!bool yes"
  parses "!!bool yes"
-  parses "2002-34-45"
  parses "2002-34-45"
-  parses "!!int -123"
  parses "!!int -123"
-  parses "On"
  parses "On"
-  parses "0o0"
  parses "0o0"
-  raises on parse "!!int 'hello'"
  raises on parse "!!int 'hello'"
-  parses "2002-1-2T10:11:12 -03:00"
  parses "2002-1-2T10:11:12 -03:00"
-  parses "NO"
  parses "NO"
-  parses "!!int 123"
  parses "!!int 123"
-  parses "!!int 0"
  parses "!!int 0"
-  parses "0.815"
  parses "0.815"
-  parses "00"
  parses "00"
-  parses "y"
  parses "y"
-  parses "2002-1-2T10:11:12 -03:31"
  parses "2002-1-2T10:11:12 -03:31"
-  parses "N"
  parses "N"
-  parses "1_234.2"
  parses "1_234.2"
-  parses "!!float '0.5'"
  parses "!!float '0.5'"
-  parses "2002-1-2T10:11:12x"
  parses "2002-1-2T10:11:12x"
-  parses "2002-1-2T10:11:12 +3"
  parses "2002-1-2T10:11:12 +3"
-  parses "1.2"
  parses "1.2"
-  parses "0b0"
  parses "0b0"
-  parses "2002-1-2T10:11:12 +03:00"
  parses "2002-1-2T10:11:12 +03:00"
-  parses "OFF"
  parses "OFF"
-  parses "!!float -1"
  parses "!!float -1"
-  parses "!!omap {1: 2}"
  parses "!!omap {1: 2}"
-  parses "123"
  parses "123"
-  raises on parse "!!pairs [{1: 2, 3: 4}]"
  raises on parse "!!pairs [{1: 2, 3: 4}]"
-  parses "FALSE"
  parses "FALSE"
-  raises on parse "!!str [1]"
  raises on parse "!!str [1]"
-  raises on parse "!!float 'hello'"
  raises on parse "!!float 'hello'"
-  parses "!!binary aGVsbG8="
  parses "!!binary aGVsbG8="
-  parses "True"
  parses "True"
-  parses "+12.3"
  parses "+12.3"
-  parses "~"
  parses "~"
-  parses "2002-1-2T10:11:12.3456"
  parses "2002-1-2T10:11:12.3456"
-  parses "+.inf"
  parses "+.inf"
-  parses "2002-1-2   10:11:12"
  parses "2002-1-2   10:11:12"
-  parses "-.inf"
  parses "-.inf"
-  .parse_null_or
  .parse_null_or
-  parses "!!float .inf"
  parses "!!float .inf"
-  parses "on"
  parses "on"
-  parses "-.Inf"
  parses "-.Inf"
-  parses "0x0"
  parses "0x0"
-  parses "+.Inf"
  parses "+.Inf"
-  parses "2002-1-2T10:11:12 Z"
  parses "2002-1-2T10:11:12 Z"
-  raises on parse "!!binary 1"
  raises on parse "!!binary 1"
-  parses "n"
  parses "n"
-  parses "!!pairs [{1: 2}, {3: 4}]"
  parses "!!pairs [{1: 2}, {3: 4}]"
-  parses "Off"
  parses "Off"
-  raises on parse "!!set 1"
  raises on parse "!!set 1"
-  parses "!!timestamp 2010-01-02"
  parses "!!timestamp 2010-01-02"
-  parses "2002-1-2T10:11:12 +0300"
  parses "2002-1-2T10:11:12 +0300"
-  parses "2002-1-2T10:11:12Z"
  parses "2002-1-2T10:11:12Z"
-  parses "!!int 0xabc"
  parses "!!int 0xabc"
-  parses "ON"
  parses "ON"
-  parses "2002-1-2T10:11:12"
  parses "2002-1-2T10:11:12"
-  parses "!!float 0"
  parses "!!float 0"
-  parses "YES"
  parses "YES"
-  parses ".Inf"
  parses ".Inf"
-  parses "2002-12-14 x"
  parses "2002-12-14 x"
-  parses "!!float '1.2'"
  parses "!!float '1.2'"
-  parses "yes"
  parses "yes"
-  raises on parse "!!omap 1"
  raises on parse "!!omap 1"
-  parses "0."
  parses "0."
-  parses "!!seq [ 1, 2, 3 ]"
  parses "!!seq [ 1, 2, 3 ]"
-__fixunsdfti
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-WeakRef(T)
-  FinalizeState counts released objects
  FinalizeState counts released objects
-  should not crash with object in data section during GC
  should not crash with object in data section during GC
-  Referenced object should not be released
  Referenced object should not be released
-  should get dereferenced object in data section
  should get dereferenced object in data section
-  Weak referenced object should be released if no other reference
  Weak referenced object should be released if no other reference
-  should get dereferenced object
  should get dereferenced object
-System::User
-  #id
-    is the same as the source ID
    is the same as the source ID
-  #shell
-    calls without raising
    calls without raising
-  #name
-    calls without raising
    calls without raising
-  #to_s
-    returns a string representation
    returns a string representation
-  #username
-    is the same as the source name
    is the same as the source name
-  .find_by?(*, name)
-    returns a user by name
    returns a user by name
-    returns nil on nonexistent user
    returns nil on nonexistent user
-  .find_by?(*, id)
-    returns nil on nonexistent user id
    returns nil on nonexistent user id
-    returns a user by id
    returns a user by id
-  #home_directory
-    calls without raising
    calls without raising
-  .find_by(*, id)
-    returns a user by id
    returns a user by id
-    raises on nonexistent user id
    raises on nonexistent user id
-  .find_by(*, name)
-    raises on a nonexistent user
    raises on a nonexistent user
-    returns a user by name
    returns a user by name
-  #group_id
-    calls without raising
    calls without raising
-Compress::Deflate::Writer
-  can be closed without sync
  can be closed without sync
-  should be able to write
  should be able to write
-  can be closed with sync (2)
  can be closed with sync (2)
-  can be closed with sync (1)
  can be closed with sync (1)
-  .open
-    yields itself to block
    yields itself to block
-Number
-  #humanize
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    using custom prefixes
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  #format
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    does not perform double rounding when decimal places are given
    does not perform double rounding when decimal places are given
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    extracts integer part correctly (#12997)
    extracts integer part correctly (#12997)
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-__mulosi4
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-Log::DirectDispatcher
-  dispatches entry
  dispatches entry
-String
-  #byte_slice?
-    gets byte_slice with negative index
    gets byte_slice with negative index
-    gets byte_slice with negative count
    gets byte_slice with negative count
-    gets byte_slice with large count
    gets byte_slice with large count
-    gets byte_slice(Int) with start out of bounds
    gets byte_slice(Int) with start out of bounds
-    gets byte_slice with start out of bounds
    gets byte_slice with start out of bounds
-    gets byte_slice with negative count at last
    gets byte_slice with negative count at last
-    gets byte_slice
    gets byte_slice
-  rchop?
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  interpolation
-    of char and string
    of char and string
-    of multiple strings
    of multiple strings
-    of a single non-string
    of a single non-string
-    of multiple possibly non-strings
    of multiple possibly non-strings
-    of string and char
    of string and char
-    of a single string
    of a single string
-  builds with write_byte
  builds with write_byte
-  #match_full!
  #match_full!
-  succ
-    returns the successor by increasing the rightmost alphanumeric (digit => digit, letter => letter with same case)
    returns the successor by increasing the rightmost alphanumeric (digit => digit, letter => letter with same case)
-    increases non-alphanumerics (via ascii rules) if there are no alphanumerics
    increases non-alphanumerics (via ascii rules) if there are no alphanumerics
-    increases the next best alphanumeric (jumping over non-alphanumerics) if there is a carry
    increases the next best alphanumeric (jumping over non-alphanumerics) if there is a carry
-    adds an additional character (just left to the last increased one) if there is a carry and no character left to increase
    adds an additional character (just left to the last increased one) if there is a carry and no character left to increase
-    returns an empty string for empty strings
    returns an empty string for empty strings
-  interpolates string
  interpolates string
-  split
-    by regex
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      keeps groups
      keeps groups
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    by whitespace
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    by char
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    by string
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-  "#each_char with empty string" yielding
  "#each_char with empty string" yielding
-  "#each_line" yielding
  "#each_line" yielding
-  multiplies with size one
  multiplies with size one
-  rpartition
-    by char
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    by string
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    by regex
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-  center
-    assert
    assert
-    assert
    assert
-    to io
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-  #upcase
-    assert
    assert
-    does not touch invalid code units in an otherwise ascii string
    does not touch invalid code units in an otherwise ascii string
-    assert
    assert
-    with IO
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  dups
  dups
-  gets each_line
  gets each_line
-  delete_at
-    range
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    start, count
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      raises on negative count
      raises on negative count
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      raises on negative count
      raises on negative count
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    char
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-  to_i
-    assert
    assert
-    assert
    assert
-    to_u8
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    to_i16
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    to_i8
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    to_u128
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    to_i128
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    to_u64
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    to_u16
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    to_i32
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    to_u32
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    to_i64
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-  "#each_byte" iterator
  "#each_byte" iterator
-  char_index_to_byte_index
-    with ascii
    with ascii
-    with utf-8
    with utf-8
-  #byte_slice
-    gets byte_slice with large count
    gets byte_slice with large count
-    gets byte_slice with start out of bounds
    gets byte_slice with start out of bounds
-    gets byte_slice with negative index
    gets byte_slice with negative index
-    gets byte_slice with negative count at last
    gets byte_slice with negative count at last
-    gets byte_slice with negative count
    gets byte_slice with negative count
-    gets byte_slice
    gets byte_slice
-    gets byte_slice(Int) with start out of bounds
    gets byte_slice(Int) with start out of bounds
-  #index
-    by regex
-      assert
      assert
-      with offset
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    by char
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      with offset
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-      assert
      assert
-    by string
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      with offset
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-  chomp
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  escapes with unicode
  escapes with unicode
-  compares strings: same object
  compares strings: same object
-  byte_index
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    gets byte index of string
    gets byte index of string
-    assert
    assert
-  "#each_codepoint" yielding
  "#each_codepoint" yielding
-  squeeze
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  ljust
-    to io
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  #matches_full?
  #matches_full?
-  =~
-    returns nil with regex and regex
    returns nil with regex and regex
-    matches with group
    matches with group
-    returns nil with string
    returns nil with string
-  #compare
-    compares case-sensitive
    compares case-sensitive
-    compares case-insensitive, multiple chars after case conversion (#4513)
    compares case-insensitive, multiple chars after case conversion (#4513)
-    treats invalid code units as replacement char in an otherwise ascii string
    treats invalid code units as replacement char in an otherwise ascii string
-    compares case-insensitive
    compares case-insensitive
-  lstrip
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    does not touch invalid code units in an otherwise ascii string
    does not touch invalid code units in an otherwise ascii string
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  invalid UTF-8 byte sequence
-    gets chars (2)
    gets chars (2)
-    gets size (2)
    gets size (2)
-    valid_encoding?
    valid_encoding?
-    gets size
    gets size
-    gets chars
    gets chars
-    scrubs
    scrubs
-  #index!
-    by regex
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      with offset
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-    by string
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      with offset
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-      assert
      assert
-    by char
-      assert
      assert
-      assert
      assert
-      with offset
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-  raises if String.build capacity too big
  raises if String.build capacity too big
-  #camelcase
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    handles multi-character mappings correctly (#13533)
    handles multi-character mappings correctly (#13533)
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  empty?
-    assert
    assert
-    assert
    assert
-  lchop?
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  #rindex
-    by regex
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      with offset
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-      assert
      assert
-      which matches empty string
-        assert
        assert
-        assert
        assert
-        assert
        assert
-    by char
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      with offset
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    by string
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      with offset
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-        assert
        assert
-      assert
      assert
-  gets lines
  gets lines
-  gets lines with chomp = false
  gets lines with chomp = false
-  "#each_byte" yielding
  "#each_byte" yielding
-  strip
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  has match
  has match
-  delete
-    assert
    assert
-    deletes one char
    deletes one char
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  hexbytes
  hexbytes
-  compare
-    compares with == when different strings same contents
    compares with == when different strings same contents
-    compares with == when different contents
    compares with == when different contents
-    sorts strings
    sorts strings
-    compares with == when same string
    compares with == when same string
-  starts_with?
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    treats first char as replacement char if invalid in an otherwise ascii string
    treats first char as replacement char if invalid in an otherwise ascii string
-    assert
    assert
-    assert
    assert
-  does byte_at?
  does byte_at?
-  byte_index_to_char_index
-    with utf-8
    with utf-8
-    with ascii
    with ascii
-  ends_with?
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    treats last char as replacement char if invalid in an otherwise ascii string
    treats last char as replacement char if invalid in an otherwise ascii string
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  does to_f64
  does to_f64
-  partition
-    by char
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    by regex
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    by string
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-  inserts
  inserts
-  escapes chars
  escapes chars
-  hexbytes?
  hexbytes?
-  "#each_line" iterator
  "#each_line" iterator
-  #scan
-    does with utf-8
    does with utf-8
-    options parameter
    options parameter
-    works when match is empty, multibyte char
    works when match is empty, multibyte char
-    works when match is empty
    works when match is empty
-    works with strings with block
    works with strings with block
-    does with number and string
    does with number and string
-    does without block
    does without block
-    works with strings
    works with strings
-    does with block
    does with block
-  clones
  clones
-  encode
-    raises if wrong encoding
    raises if wrong encoding
-    doesn't raise on invalid byte sequence
    doesn't raise on invalid byte sequence
-    encodes
    encodes
-    flushes the shift state (#11992)
    flushes the shift state (#11992)
-    raises if incomplete byte sequence
    raises if incomplete byte sequence
-    doesn't raise if incomplete byte sequence
    doesn't raise if incomplete byte sequence
-    raises if wrong encoding with skip
    raises if wrong encoding with skip
-    decodes with skip
    decodes with skip
-    decodes with shift state
    decodes with shift state
-    decodes
    decodes
-    raises if illegal byte sequence
    raises if illegal byte sequence
-  matches empty string
  matches empty string
-  #dump
  #dump
-  #capitalize
-    assert
    assert
-    assert
    assert
-    handles multi-character mappings correctly (#13533)
    handles multi-character mappings correctly (#13533)
-    assert
    assert
-    does not touch invalid code units in an otherwise ascii string
    does not touch invalid code units in an otherwise ascii string
-    assert
    assert
-  blank?
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  "#each_codepoint" iterator
  "#each_codepoint" iterator
-  #titleize
-    handles multi-character mappings correctly (#13533)
    handles multi-character mappings correctly (#13533)
-    assert
    assert
-    with IO
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    does not touch invalid code units in an otherwise ascii string
    does not touch invalid code units in an otherwise ascii string
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  does char_at
  does char_at
-  count
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
+  with absolute path
+    reads file (doesn't exist)
    reads file (doesn't exist)
+Semantic: warnings
+  abstract def positional parameter name mismatch
+    respects external names of positional parameters (1)
    respects external names of positional parameters (1)
+    detects mismatch with single parameter
    detects mismatch with single parameter
+    detects multiple mismatches
    detects multiple mismatches
+    respects external names of positional parameters (2)
    respects external names of positional parameters (2)
+    continues warning if implementation with matching parameters is not found (#12150)
+      single splat
      single splat
+      double splat
      double splat
+      not a full implementation
      not a full implementation
+    doesn't warn if current type is a module (#12266)
    doesn't warn if current type is a module (#12266)
+    doesn't compare positional parameters to single splat
    doesn't compare positional parameters to single splat
+    doesn't compare single splats
    doesn't compare single splats
+    detects mismatch within many parameters
    detects mismatch within many parameters
+    doesn't warn if external parameter name matches (1)
    doesn't warn if external parameter name matches (1)
+    informs warnings once per matching overload (1)
    informs warnings once per matching overload (1)
+    doesn't warn if current type is abstract (#12266)
    doesn't warn if current type is abstract (#12266)
+    stops warning after implementation with matching parameters is found (#12150)
+      different single splats
      different single splats
+      contravariant restrictions
      contravariant restrictions
+      exact match
      exact match
+      reordered named parameters
      reordered named parameters
+    informs warnings once per matching overload (2)
    informs warnings once per matching overload (2)
+    doesn't warn if external parameter name matches (2)
    doesn't warn if external parameter name matches (2)
+  deprecated macros
+    detects deprecated generic class macros
    detects deprecated generic class macros
+    detects deprecated macros with named arguments
    detects deprecated macros with named arguments
+    detects deprecated module macros
    detects deprecated module macros
+    deprecation reason is optional
    deprecation reason is optional
+    informs warnings once per call site location (a)
    informs warnings once per call site location (a)
+    informs warnings once per call site location (b)
    informs warnings once per call site location (b)
+    errors if too many arguments
    errors if too many arguments
+    ignore deprecation excluded locations
    ignore deprecation excluded locations
+    detects deprecated class macros
    detects deprecated class macros
+    errors if invalid argument type
    errors if invalid argument type
+    detects top-level deprecated macros
    detects top-level deprecated macros
+    errors if invalid named argument
    errors if invalid named argument
+  deprecated constants
+    detects deprecated constants in type declarations (1)
    detects deprecated constants in type declarations (1)
+    detects deprecated constants in type declarations (3)
    detects deprecated constants in type declarations (3)
+    detects deprecated constants inside macros
    detects deprecated constants inside macros
+    detects deprecated constants
    detects deprecated constants
+    detects deprecated constants in type declarations (2)
    detects deprecated constants in type declarations (2)
+  exposes syntax warnings
  exposes syntax warnings
+  exposes syntax warnings after macro interpolation
  exposes syntax warnings after macro interpolation
+  deprecated methods
+    ignore deprecation excluded locations
    ignore deprecation excluded locations
+    detects deprecated class methods
    detects deprecated class methods
+    informs warnings once per call site location (a)
    informs warnings once per call site location (a)
+    detects deprecated initialize with named arguments
    detects deprecated initialize with named arguments
+    informs warnings once per yield
    informs warnings once per yield
+    errors if too many arguments
    errors if too many arguments
+    detects deprecated instance methods
    detects deprecated instance methods
+    deprecation reason is optional
    deprecation reason is optional
+    detects deprecated initialize
    detects deprecated initialize
+    detects deprecated generic instance methods
    detects deprecated generic instance methods
+    errors if invalid named arguments
    errors if invalid named arguments
+    detects deprecated module methods
    detects deprecated module methods
+    ignores nested calls to deprecated methods
    ignores nested calls to deprecated methods
+    detects deprecated methods with named arguments
    detects deprecated methods with named arguments
+    errors if invalid argument type
    errors if invalid argument type
+    detects deprecated generic class methods
    detects deprecated generic class methods
+    informs warnings once per call site location (b)
    informs warnings once per call site location (b)
+    informs warnings once per target type
    informs warnings once per target type
+    detects top-level deprecated methods
    detects top-level deprecated methods
+  deprecated annotations
+    detects deprecated annotations
    detects deprecated annotations
+    detects deprecated namespaced annotations
    detects deprecated namespaced annotations
+Crystal::Repl::Interpreter
+  multidispatch
+    does multidispatch on virtual metaclass type (1)
    does multidispatch on virtual metaclass type (1)
+    doesn't compile block if it's not used (no yield)
    doesn't compile block if it's not used (no yield)
+    does multidispatch with captured block (#12217)
    does multidispatch with captured block (#12217)
+    downcasts self from union to struct (pass pointer to self)
    downcasts self from union to struct (pass pointer to self)
+    does multidispatch on virtual metaclass type (2)
    does multidispatch on virtual metaclass type (2)
+    passes self as pointer when doing multidispatch
    passes self as pointer when doing multidispatch
+    does dispatch on one argument with struct receiver, and modifies it
    does dispatch on one argument with struct receiver, and modifies it
+    does dispatch on one argument with block
    does dispatch on one argument with block
+    passes self as pointer when doing multidispatch (2)
    passes self as pointer when doing multidispatch (2)
+    initialize multidispatch
    initialize multidispatch
+    does dispatch on receiver type and argument type
    does dispatch on receiver type and argument type
+    does multidispatch with mandatory named arguments
    does multidispatch with mandatory named arguments
+    does dispatch on one argument inside module with explicit receiver
    does dispatch on one argument inside module with explicit receiver
+    casts multidispatch argument to the def's arg type
    casts multidispatch argument to the def's arg type
+    does dispatch on virtual type
    does dispatch on virtual type
+    does dispatch on receiver type
    does dispatch on receiver type
+    does dispatch on one argument
    does dispatch on one argument
+    does dispatch on receiver type and argument type, multiple times
    does dispatch on receiver type and argument type, multiple times
+    does dispatch on one argument inside module with implicit self
    does dispatch on one argument inside module with implicit self
+Normalize: range literal
+  normalizes not exclusive
  normalizes not exclusive
+  normalizes exclusive
  normalizes exclusive
+Semantic: pointer
+  detects recursive pointerof expansion (2) (#1654)
  detects recursive pointerof expansion (2) (#1654)
+  create pointer by address
  create pointer by address
+  types realloc
  types realloc
+  doesn't crash if pointerof expansion type has generic splat parameter (#11808)
  doesn't crash if pointerof expansion type has generic splat parameter (#11808)
+  types pointer of constant
  types pointer of constant
+  errors with non-matching generic value with value=, union of generic types (#10544)
  errors with non-matching generic value with value=, union of generic types (#10544)
+  type pointer casting of object type
  type pointer casting of object type
+  can pass any pointer to something expecting void* in lib call
  can pass any pointer to something expecting void* in lib call
+  pointer of value error
  pointer of value error
+  type pointer casting
  type pointer casting
+  allows using pointer with subclass
  allows using pointer with subclass
+  types int pointer
  types int pointer
+  can assign nil to void pointer
  can assign nil to void pointer
+  detects recursive pointerof expansion (#551) (#553)
  detects recursive pointerof expansion (#551) (#553)
+  errors with non-matching generic value with value= (#10211)
  errors with non-matching generic value with value= (#10211)
+  can't do Pointer.malloc without type var
  can't do Pointer.malloc without type var
+  detects recursive pointerof expansion (3)
  detects recursive pointerof expansion (3)
+  takes pointerof lib external var
  takes pointerof lib external var
+  pointer of class raises error
  pointer of class raises error
+  types pointer add
  types pointer add
+  errors if doing Pointer.allocate
  errors if doing Pointer.allocate
+  can assign pointerof virtual type (#8216)
  can assign pointerof virtual type (#8216)
+  types Pointer.malloc
  types Pointer.malloc
+  types pointer diff
  types pointer diff
+  says undefined variable (#7556)
  says undefined variable (#7556)
+  pointer malloc creates new type
  pointer malloc creates new type
+  can pass any pointer to something expecting void* in lib call, with to_unsafe
  can pass any pointer to something expecting void* in lib call, with to_unsafe
+  detects recursive pointerof expansion (4)
  detects recursive pointerof expansion (4)
+  types pointer value on typedef
  types pointer value on typedef
+  errors with non-matching generic value with value=, generic type (#10211)
  errors with non-matching generic value with value=, generic type (#10211)
+  types pointer value
  types pointer value
+
+Pending:
+  Code gen: class codegens assignment of generic metaclasses (2) (#10394)
+  Code gen: class codegens assignment of generic metaclasses (1) (#10394)
+  Code gen: primitives sums two numbers out of an [] of Number
+  Code gen: primitives codegens pointer of int
+  Semantic: cast casts from union to incompatible union gives error
+  Semantic: primitives types pointer of int
+  Semantic: multi assign strict_multi_assign errors if assigning tuple to more targets
+  Semantic: instance var doesn't infer type to be nilable if using self.class in call in assign
+  Crystal::Repl::Interpreter integration does XML
+  Semantic: recursive struct check errors on recursive abstract struct through module (#11384)
+  Code gen: lib codegens lib var set and get
+  Semantic: def overload restricts on generic type without type arg
+  Semantic: def overload restricts on generic type with free type arg
+  Crystal::Doc::MarkdDocRenderer expand_code_links doesn't find wrong kind of sibling methods
+  Crystal::Doc::MarkdDocRenderer expand_code_links doesn't find wrong kind of methods
+  Semantic: pointer allows using pointer with subclass
+
+Finished in 44:46 minutes
+12558 examples, 0 failures, 0 errors, 16 pending
+Randomized with seed: 76473
+��make[2]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg'
+make release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 std_spec
+make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg'
+Using /usr/bin/llvm-config-19 [version=19.1.7]
+./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 20 --link-flags="-Wl,-z,relro"  --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/std_spec spec/std_spec.cr
+Using compiled compiler at .build/crystal
+[1/13] Parse                             
[1/13] Parse                             
[2/13] Semantic (top level)              
[2/13] Semantic (top level)              
[3/13] Semantic (new)                    
[3/13] Semantic (new)                    
[4/13] Semantic (type declarations)      
[4/13] Semantic (type declarations)      
[5/13] Semantic (abstract def check)     
[5/13] Semantic (abstract def check)     
[6/13] Semantic (restrictions augmenter) 
[6/13] Semantic (restrictions augmenter) 
[7/13] Semantic (ivars initializers)     
[7/13] Semantic (ivars initializers)     
[8/13] Semantic (cvars initializers)     
[8/13] Semantic (cvars initializers)     
[9/13] Semantic (main)                   
[9/13] Semantic (main)                   
[10/13] Semantic (cleanup)                
[10/13] Semantic (cleanup)                
[11/13] Semantic (recursive struct check) 
[11/13] Semantic (recursive struct check) 
[12/13] Codegen (crystal)                 
[12/13] Codegen (crystal)                 
[13/13] Codegen (bc+obj)                  
[13/13] [0/1] Codegen (bc+obj)                  
[13/13] [1/1] Codegen (bc+obj)                  
[13/13] [1/1] Codegen (bc+obj)                  
[14/13] Codegen (linking)                 
[14/13] Codegen (linking)                 
                                       
.build/std_spec -v --order=random   
+0.2.5
+Randomized with seed: 26192
+Number
+  converts from Int64 to Float64
  converts from Int64 to Float64
+  converts from Float32 to UInt64
  converts from Float32 to UInt64
+  converts from Int64 to UInt8
  converts from Int64 to UInt8
+  converts from Float64 to UInt8
  converts from Float64 to UInt8
+  converts from Int128 to UInt16
  converts from Int128 to UInt16
+  converts from Int32 to UInt128
  converts from Int32 to UInt128
+  converts from UInt32 to Int64
  converts from UInt32 to Int64
+  converts from Int128 to Int16
  converts from Int128 to Int16
+  converts from Int16 to Int16
  converts from Int16 to Int16
+  division between Float64 / Float64 returns Float64
  division between Float64 / Float64 returns Float64
+  converts from Int8 to UInt8
  converts from Int8 to UInt8
+  division between Int8 / UInt8 returns Float64
  division between Int8 / UInt8 returns Float64
+  floor_division UInt8 // Int8 returns UInt8
  floor_division UInt8 // Int8 returns UInt8
+  converts from Float32 to UInt16
  converts from Float32 to UInt16
+  floor_division UInt16 // Int16 returns UInt16
  floor_division UInt16 // Int16 returns UInt16
+  converts from UInt128 to Int16
  converts from UInt128 to Int16
+  converts from UInt64 to UInt128
  converts from UInt64 to UInt128
+  #round_away
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  match!
-    with options
-      Regex::Match options
      Regex::Match options
-    returns matchdata
    returns matchdata
-    raises on non-match
    raises on non-match
-    assigns captures
    assigns captures
-  compares strings: same size, different string
  compares strings: same size, different string
-  #dump_unquoted
  #dump_unquoted
-  []?
-    gets with range without end
    gets with range without end
-    gets with a string
    gets with a string
-    gets with start and count
    gets with start and count
-    gets with index
    gets with index
-    gets with a char
    gets with a char
-    gets with range
    gets with range
-    gets with range without beginning
    gets with range without beginning
-    returns nil if pointing after last char which is non-ASCII
    returns nil if pointing after last char which is non-ASCII
-  "#each_line(chomp: false)" iterator
  "#each_line(chomp: false)" iterator
-  "#each_char" yielding
  "#each_char" yielding
-  matches with position
  matches with position
-  #underscore
     assert
    assert
     assert
    assert
     assert
    assert
@@ -16053,167 +14100,617 @@
     assert
    assert
     assert
    assert
     assert
    assert
-    handles multi-character mappings correctly
    handles multi-character mappings correctly
     assert
    assert
     assert
    assert
+  floor_division Float64 // UInt16 returns Float64
  floor_division Float64 // UInt16 returns Float64
+  converts from Int32 to Int32
  converts from Int32 to Int32
+  converts from Int32 to Int8
  converts from Int32 to Int8
+  converts from Int64 to UInt16
  converts from Int64 to UInt16
+  floor_division Int32 // UInt8 returns Int32
  floor_division Int32 // UInt8 returns Int32
+  converts from Int64 to Float32
  converts from Int64 to Float32
+  floor_division Int128 // Int32 returns Int128
  floor_division Int128 // Int32 returns Int128
+  converts from UInt128 to Int64
  converts from UInt128 to Int64
+  converts from UInt64 to Int128
  converts from UInt64 to Int128
+  floor_division UInt64 // Float32 returns UInt64
  floor_division UInt64 // Float32 returns UInt64
+  floor_division Int128 // UInt128 returns Int128
  floor_division Int128 // UInt128 returns Int128
+  converts from UInt64 to Int16
  converts from UInt64 to Int16
+  converts from UInt32 to Int32
  converts from UInt32 to Int32
+  converts from UInt8 to Int32
  converts from UInt8 to Int32
+  converts from Int16 to UInt64
  converts from Int16 to UInt64
+  converts from Int64 to Int64
  converts from Int64 to Int64
+  converts from Int16 to UInt8
  converts from Int16 to UInt8
+  converts from UInt8 to Int16
  converts from UInt8 to Int16
+  converts from Float32 to UInt128
  converts from Float32 to UInt128
+  converts from UInt32 to UInt32
  converts from UInt32 to UInt32
+  division between Int128 / Int128 returns Float64
  division between Int128 / Int128 returns Float64
+  converts from UInt8 to Float32
  converts from UInt8 to Float32
+  converts from Int128 to UInt32
  converts from Int128 to UInt32
+  converts from Int16 to UInt64
  converts from Int16 to UInt64
+  division between Int64 / Float32 returns Float32
  division between Int64 / Float32 returns Float32
+  converts from UInt128 to Float64
  converts from UInt128 to Float64
+  floor_division Float32 // Float32 returns Float32
  floor_division Float32 // Float32 returns Float32
+  gives the square of a value
  gives the square of a value
+  floor_division UInt32 // Int16 returns UInt32
  floor_division UInt32 // Int16 returns UInt32
+  unchecked initialize from value to UInt64
  unchecked initialize from value to UInt64
+  division between UInt128 / UInt64 returns Float64
  division between UInt128 / UInt64 returns Float64
+  floor_division UInt8 // Float32 returns UInt8
  floor_division UInt8 // Float32 returns UInt8
+  floor_division Int128 // Float32 returns Int128
  floor_division Int128 // Float32 returns Int128
+  initialize from value to Int32
  initialize from value to Int32
+  floor_division Float32 // Int32 returns Float32
  floor_division Float32 // Int32 returns Float32
+  converts from UInt16 to Int8
  converts from UInt16 to Int8
+  division between Int64 / Int128 returns Float64
  division between Int64 / Int128 returns Float64
+  division between Int16 / Int128 returns Float64
  division between Int16 / Int128 returns Float64
+  converts from UInt128 to UInt32
  converts from UInt128 to UInt32
+  converts from Int8 to UInt16
  converts from Int8 to UInt16
+  floor_division UInt128 // UInt8 returns UInt128
  floor_division UInt128 // UInt8 returns UInt128
+  floor_division Int16 // UInt64 returns Int16
  floor_division Int16 // UInt64 returns Int16
+  converts from Float64 to Int64
  converts from Float64 to Int64
+  unchecked initialize from value to Float32
  unchecked initialize from value to Float32
+  division between Int32 / UInt16 returns Float64
  division between Int32 / UInt16 returns Float64
+  floor_division UInt64 // UInt128 returns UInt64
  floor_division UInt64 // UInt128 returns UInt64
+  compare the numbers
  compare the numbers
+  converts from UInt64 to Float64
  converts from UInt64 to Float64
+  converts from UInt64 to UInt32
  converts from UInt64 to UInt32
+  converts from UInt8 to Float64
  converts from UInt8 to Float64
+  unchecked initialize from value to Int128
  unchecked initialize from value to Int128
+  converts from UInt64 to UInt8
  converts from UInt64 to UInt8
+  division between Int64 / Int16 returns Float64
  division between Int64 / Int16 returns Float64
+  division between Int128 / UInt16 returns Float64
  division between Int128 / UInt16 returns Float64
+  division between Float64 / Int16 returns Float64
  division between Float64 / Int16 returns Float64
+  converts from UInt32 to Int8
  converts from UInt32 to Int8
+  converts from UInt32 to UInt16
  converts from UInt32 to UInt16
+  converts from UInt16 to Int128
  converts from UInt16 to Int128
+  converts from UInt64 to Float32
  converts from UInt64 to Float32
+  division between UInt32 / UInt32 returns Float64
  division between UInt32 / UInt32 returns Float64
+  floor_division UInt8 // UInt64 returns UInt8
  floor_division UInt8 // UInt64 returns UInt8
+  floor_division UInt128 // Int8 returns UInt128
  floor_division UInt128 // Int8 returns UInt128
+  converts from UInt64 to Int64
  converts from UInt64 to Int64
+  converts from UInt32 to Int32
  converts from UInt32 to Int32
+  converts from Float32 to Float64
  converts from Float32 to Float64
+  converts from Int16 to Float64
  converts from Int16 to Float64
+  converts from UInt8 to UInt8
  converts from UInt8 to UInt8
+  division between Float64 / Int8 returns Float64
  division between Float64 / Int8 returns Float64
+  converts from Int128 to Int128
  converts from Int128 to Int128
+  floor_division UInt32 // Float64 returns UInt32
  floor_division UInt32 // Float64 returns UInt32
+  converts from Float32 to UInt8
  converts from Float32 to UInt8
+  division between Int64 / UInt128 returns Float64
  division between Int64 / UInt128 returns Float64
+  converts from UInt16 to Int32
  converts from UInt16 to Int32
+  converts from Int8 to UInt32
  converts from Int8 to UInt32
+  division between Float32 / Int32 returns Float32
  division between Float32 / Int32 returns Float32
+  converts from Float32 to UInt32
  converts from Float32 to UInt32
+  #round
+    rounds to nearest integer
    rounds to nearest integer
+    rounding modes
+      ties_away
      ties_away
+      ties_even
      ties_even
+      to_negative
      to_negative
+      to_positive
      to_positive
+      default (=ties_even)
      default (=ties_even)
+      to_zero
      to_zero
+    infinity Float32
    infinity Float32
     assert
    assert
-  +
-    does for both unicode
    does for both unicode
-    does when left is empty
    does when left is empty
-    does with unicode char
    does with unicode char
-    does for both ascii
    does for both ascii
-    does with ascii char
    does with ascii char
-    does when right is empty
    does when right is empty
-  #rindex!
-    by char
-      assert
      assert
-      with offset
-        assert
        assert
-        assert
        assert
-      assert
      assert
-      assert
      assert
-    by regex
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      with offset
-        assert
        assert
-        assert
        assert
-        assert
        assert
-    by string
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      with offset
-        assert
        assert
-        assert
        assert
-        assert
        assert
-  creating from a slice
-    allows creating from an empty slice
    allows creating from an empty slice
-  does byte_at
  does byte_at
-  does pretty_inspect
  does pretty_inspect
-  String.new(&)
-    raises if string capacity is negative
    raises if string capacity is negative
-    raises if capacity too big with UInt32::MAX - String::HEADER_SIZE - 1
    raises if capacity too big with UInt32::MAX - String::HEADER_SIZE - 1
-    raises if capacity too big with UInt32::MAX
    raises if capacity too big with UInt32::MAX
-    raises if capacity too big with UInt64::MAX
    raises if capacity too big with UInt64::MAX
-    creates with matching capacity
    creates with matching capacity
-    allocates buffer of correct size (#3332)
    allocates buffer of correct size (#3332)
-    raises if returned bytesize is greater than capacity
    raises if returned bytesize is greater than capacity
-    creates with excess capacity
    creates with excess capacity
-  sub
-    subs range with string, non-ascii
    subs range with string, non-ascii
-    subs with regex and block
    subs with regex and block
-    subs endless range with string
    subs endless range with string
-    subs at index with char
    subs at index with char
-    subs beginless range with string
    subs beginless range with string
-    subs char with string
    subs char with string
-    subs using with \
    subs using with \
-    replaces with incomplete named back-reference (1)
    replaces with incomplete named back-reference (1)
-    subs with string and string (#3258)
    subs with string and string (#3258)
-    replaces with numeric back-reference
    replaces with numeric back-reference
-    subs with regex and string (utf-8)
    subs with regex and string (utf-8)
-    subs with empty regex
    subs with empty regex
-    replaces with \\\1
    replaces with \\\1
-    subs with string and string (utf-8)
    subs with string and string (utf-8)
-    subs with string and string return self if no match
    subs with string and string return self if no match
-    subs null character
    subs null character
-    subs at index with string
    subs at index with string
-    subs with string and string
    subs with string and string
-    subs beginless range with char
    subs beginless range with char
-    subs using with z\w
    subs using with z\w
-    subs range with char, non-ascii
    subs range with char, non-ascii
-    subs with regex and string, returns self if no match
    subs with regex and string, returns self if no match
-    replaces with multiple named back-reference
    replaces with multiple named back-reference
-    subs at index with char, non-ascii
    subs at index with char, non-ascii
-    subs at negative index with string
    subs at negative index with string
-    replaces with named back-reference
    replaces with named back-reference
-    subs with string and block
    subs with string and block
-    subs at negative index with char
    subs at negative index with char
-    subs range with char
    subs range with char
-    subs with regex and string
    subs with regex and string
-    subs char with char
    subs char with char
-    subs with regex and named tuple
    subs with regex and named tuple
-    subs char with string
    subs char with string
-    subs with regex and hash
    subs with regex and hash
-    ignores if backreferences: false
    ignores if backreferences: false
-    subs using $~
    subs using $~
-    raises if index is out of bounds
    raises if index is out of bounds
-    replaces with \a
    replaces with \a
-    subs range with string
    subs range with string
-    subs at index with string, non-ascii
    subs at index with string, non-ascii
-    subs the last char
    subs the last char
-    replaces with incomplete named back-reference (2)
    replaces with incomplete named back-reference (2)
-    subs with char hash
    subs with char hash
-    subs endless range with char
    subs endless range with char
-    subs with regex and block with group
    subs with regex and block with group
-    subs with empty string
    subs with empty string
-  []
-    raises index out of bound on index out of range with range and utf-8
    raises index out of bound on index out of range with range and utf-8
-    gets when index is last and count is negative at last
    gets when index is last and count is negative at last
-    raises index out of bound on index out of range with range
    raises index out of bound on index out of range with range
-    gets with exclusive with start and count
    gets with exclusive with start and count
-    gets with inclusive range with negative indices
    gets with inclusive range with negative indices
-    gets with a char
    gets with a char
-    gets with negative index
    gets with negative index
-    gets when index is last and count is negative at last with utf-8
    gets when index is last and count is negative at last with utf-8
-    raises if count is negative with utf-8
    raises if count is negative with utf-8
-    gets when index is last and count is positive
    gets when index is last and count is positive
-    gets with exclusive with start and count to end
    gets with exclusive with start and count to end
-    gets with positive index
    gets with positive index
-    with a regex
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
+    edge cases
    edge cases
+    handle medium amount of digits
    handle medium amount of digits
+    accepts unsigned precision
    accepts unsigned precision
+    negative digits
    negative digits
+    rounds to digits
    rounds to digits
+    base
+      8
      8
+      2
      2
+    with digits
+      ties_even
      ties_even
+      to_zero
      to_zero
+      ties_away
      ties_away
+      to_negative
      to_negative
+      to_positive
      to_positive
+    preserves type
    preserves type
+    infinity Float64
    infinity Float64
+    nan
    nan
+  converts from Float32 to Float32
  converts from Float32 to Float32
+  division between UInt32 / Float32 returns Float32
  division between UInt32 / Float32 returns Float32
+  converts from UInt128 to Int64
  converts from UInt128 to Int64
+  converts from Int8 to Int128
  converts from Int8 to Int128
+  floor_division UInt32 // UInt8 returns UInt32
  floor_division UInt32 // UInt8 returns UInt32
+  converts from Int32 to Int32
  converts from Int32 to Int32
+  converts from Int128 to Int16
  converts from Int128 to Int16
+  floor_division Float64 // Int8 returns Float64
  floor_division Float64 // Int8 returns Float64
+  division between Int32 / Int32 returns Float64
  division between Int32 / Int32 returns Float64
+  floor_division Int16 // Int8 returns Int16
  floor_division Int16 // Int8 returns Int16
+  converts from UInt32 to UInt16
  converts from UInt32 to UInt16
+  floor_division Int32 // UInt32 returns Int32
  floor_division Int32 // UInt32 returns Int32
+  division between UInt8 / Int128 returns Float64
  division between UInt8 / Int128 returns Float64
+  converts from Float64 to Int64
  converts from Float64 to Int64
+  division between Int8 / Int8 returns Float64
  division between Int8 / Int8 returns Float64
+  floor_division UInt32 // Float32 returns UInt32
  floor_division UInt32 // Float32 returns UInt32
+  converts from Float64 to UInt128
  converts from Float64 to UInt128
+  division between UInt8 / UInt64 returns Float64
  division between UInt8 / UInt64 returns Float64
+  converts from UInt32 to Int64
  converts from UInt32 to Int64
+  converts from UInt64 to Float32
  converts from UInt64 to Float32
+  converts from Float64 to UInt16
  converts from Float64 to UInt16
+  unchecked initialize from value to UInt128
  unchecked initialize from value to UInt128
+  floor_division UInt32 // UInt16 returns UInt32
  floor_division UInt32 // UInt16 returns UInt32
+  converts from Int8 to UInt64
  converts from Int8 to UInt64
+  initialize from value to Int64
  initialize from value to Int64
+  converts from Int64 to UInt8
  converts from Int64 to UInt8
+  converts from Int16 to Float32
  converts from Int16 to Float32
+  floor_division Int8 // Int8 returns Int8
  floor_division Int8 // Int8 returns Int8
+  converts from Int64 to Int16
  converts from Int64 to Int16
+  floor_division UInt128 // Int128 returns UInt128
  floor_division UInt128 // Int128 returns UInt128
+  converts from Float32 to Int32
  converts from Float32 to Int32
+  converts from UInt64 to Int8
  converts from UInt64 to Int8
+  converts from Int16 to UInt32
  converts from Int16 to UInt32
+  floor_division UInt16 // UInt16 returns UInt16
  floor_division UInt16 // UInt16 returns UInt16
+  floor_division Int32 // Int16 returns Int32
  floor_division Int32 // Int16 returns Int32
+  division between UInt128 / Float64 returns Float64
  division between UInt128 / Float64 returns Float64
+  division between Float64 / UInt32 returns Float64
  division between Float64 / UInt32 returns Float64
+  floor_division UInt32 // UInt128 returns UInt32
  floor_division UInt32 // UInt128 returns UInt32
+  converts from Float64 to Int8
  converts from Float64 to Int8
+  division between UInt8 / Float32 returns Float32
  division between UInt8 / Float32 returns Float32
+  converts from Float64 to Int32
  converts from Float64 to Int32
+  converts from Int32 to Int128
  converts from Int32 to Int128
+  division between UInt16 / UInt128 returns Float64
  division between UInt16 / UInt128 returns Float64
+  converts from UInt32 to Float32
  converts from UInt32 to Float32
+  converts from Int32 to UInt64
  converts from Int32 to UInt64
+  converts from Int128 to UInt8
  converts from Int128 to UInt8
+  converts from Int64 to UInt128
  converts from Int64 to UInt128
+  converts from Float64 to Float32
  converts from Float64 to Float32
+  converts from UInt8 to UInt16
  converts from UInt8 to UInt16
+  initialize from value to UInt64
  initialize from value to UInt64
+  divides and calculates the modulo
  divides and calculates the modulo
+  floor_division UInt128 // Float64 returns UInt128
  floor_division UInt128 // Float64 returns UInt128
+  division between UInt16 / UInt16 returns Float64
  division between UInt16 / UInt16 returns Float64
+  division between UInt64 / UInt32 returns Float64
  division between UInt64 / UInt32 returns Float64
+  converts from Int128 to UInt128
  converts from Int128 to UInt128
+  #step
+    "Float by Int" iterator
    "Float by Int" iterator
+    by zero yielding
    by zero yielding
+    by zero iterator
    by zero iterator
+    "towards limit [max-3, max-1, max)" iterator
    "towards limit [max-3, max-1, max)" iterator
+    "at max Int" yielding
    "at max Int" yielding
+    "single value Float" yielding
    "single value Float" yielding
+    "missing end Int" iterator
    "missing end Int" iterator
+    whole range
+      "UInt8 upwards" iterator
      "UInt8 upwards" iterator
+      "Int8 upwards" iterator
      "Int8 upwards" iterator
+      "Int8 downwards" iterator
      "Int8 downwards" iterator
+      "Int16 upwards" iterator
      "Int16 upwards" iterator
+      "UInt8 downwards" yielding
      "UInt8 downwards" yielding
       assert
      assert
+      "UInt8 upwards" yielding
      "UInt8 upwards" yielding
+      "Int16 upwards" yielding
      "Int16 upwards" yielding
+      "Int8 downwards" yielding
      "Int8 downwards" yielding
+      "Int16 downwards" yielding
      "Int16 downwards" yielding
+      "Int8 upwards" yielding
      "Int8 upwards" yielding
+      "Int16 downwards" iterator
      "Int16 downwards" iterator
       assert
      assert
+      "UInt8 downwards" iterator
      "UInt8 downwards" iterator
       assert
      assert
-    raises IndexError if pointing after last char which is non-ASCII
    raises IndexError if pointing after last char which is non-ASCII
-    gets with a string
    gets with a string
-    gets with range without beginning
    gets with range without beginning
-    gets with exclusive range with unicode
    gets with exclusive range with unicode
-    gets with exclusive range
    gets with exclusive range
-    raises if index out of bounds
    raises if index out of bounds
-    gets with single char
    gets with single char
-    assert
    assert
-    gets when index is last and count is zero
    gets when index is last and count is zero
-    gets when index is last and count is positive in utf-8
    gets when index is last and count is positive in utf-8
-    raises on too negative left bound
    raises on too negative left bound
-    gets with inclusive range
    gets with inclusive range
-    raises if index out of bounds with utf-8
    raises if index out of bounds with utf-8
-    gets with start and count
    gets with start and count
-    gets with start and count with negative start
    gets with start and count with negative start
-    gets with range without end
    gets with range without end
-    gets when index is last and count is zero in utf-8
    gets when index is last and count is zero in utf-8
-    raises if count is negative
    raises if count is negative
-  does each_char_with_index
  does each_char_with_index
-  "#each_char" iterator
  "#each_char" iterator
-  matches, but returns Bool
  matches, but returns Bool
-  gets each_line with chomp = false
  gets each_line with chomp = false
-  ascii_only?
-    answers ascii_only?
    answers ascii_only?
-    broken UTF-8 is not ascii_only
    broken UTF-8 is not ascii_only
-  #downcase
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    does not touch invalid code units in an otherwise ascii string
    does not touch invalid code units in an otherwise ascii string
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  rchop
-    assert
    assert
-    assert
    assert
-    assert
    assert
+    "downto UInt" yielding
    "downto UInt" yielding
+    "empty if `self` can't be compared" yielding
    "empty if `self` can't be compared" yielding
+    "Int by Float" yielding
    "Int by Float" yielding
+    "by Float" iterator
    "by Float" iterator
+    "negative by Int" iterator
    "negative by Int" iterator
+    "by Float" yielding
    "by Float" yielding
+    "Float by Int" yielding
    "Float by Int" yielding
+    "negative Int" iterator
    "negative Int" iterator
+    "downto Int" iterator
    "downto Int" iterator
+    "downto Float by" yielding
    "downto Float by" yielding
+    "negative by Float" iterator
    "negative by Float" iterator
+    "single value Int by Float" yielding
    "single value Int by Float" yielding
+    "negative Int" yielding
    "negative Int" yielding
+    "over min Int" iterator
    "over min Int" iterator
+    "Float to Int by" iterator
    "Float to Int by" iterator
+    "downto UInt by" yielding
    "downto UInt by" yielding
+    "negative by Float" yielding
    "negative by Float" yielding
+    "negative Float" yielding
    "negative Float" yielding
+    "over zero Int" yielding
    "over zero Int" yielding
+    "missing end UInt" iterator
    "missing end UInt" iterator
+    "Int to Float" iterator
    "Int to Float" iterator
+    "Float to Int by" yielding
    "Float to Int by" yielding
+    "downto Int" yielding
    "downto Int" yielding
+    "single value by Float" yielding
    "single value by Float" yielding
+    "missing end Float" yielding
    "missing end Float" yielding
+    "single value by Int" iterator
    "single value by Int" iterator
+    "at min Int" iterator
    "at min Int" iterator
+    "single value Int" iterator
    "single value Int" iterator
+    "Int to Float by" iterator
    "Int to Float by" iterator
+    "at min Int" yielding
    "at min Int" yielding
+    "negative by Float half" iterator
    "negative by Float half" iterator
+    "over max Int" yielding
    "over max Int" yielding
+    "empty if `to` can't be compared" iterator
    "empty if `to` can't be compared" iterator
+    "empty if `by` and `to` are opposed" iterator
    "empty if `by` and `to` are opposed" iterator
+    "downto Float by" iterator
    "downto Float by" iterator
+    "missing end Float" iterator
    "missing end Float" iterator
+    "downto UInt" iterator
    "downto UInt" iterator
+    "Int to Float by" yielding
    "Int to Float by" yielding
+    "over min Int" yielding
    "over min Int" yielding
+    "downto Int by" yielding
    "downto Int by" yielding
+    "empty if `to` can't be compared by" yielding
    "empty if `to` can't be compared by" yielding
+    "by Float half" iterator
    "by Float half" iterator
+    "downto Float" yielding
    "downto Float" yielding
+    "single value Float by Int" yielding
    "single value Float by Int" yielding
+    "by Int" iterator
    "by Int" iterator
+    "empty if `self` can't be compared by" iterator
    "empty if `self` can't be compared by" iterator
+    "single value Float by Int" iterator
    "single value Float by Int" iterator
+    "basic Int" iterator
    "basic Int" iterator
+    "Int to Float" yielding
    "Int to Float" yielding
+    "basic Float" iterator
    "basic Float" iterator
+    "by Int" yielding
    "by Int" yielding
+    "single value by Int" yielding
    "single value by Int" yielding
+    "empty if `to` can't be compared" yielding
    "empty if `to` can't be compared" yielding
+    "missing end UInt" yielding
    "missing end UInt" yielding
+    "downto Int by" iterator
    "downto Int by" iterator
+    "over zero Int" iterator
    "over zero Int" iterator
+    "single value by Float" iterator
    "single value by Float" iterator
+    "at max Int" iterator
    "at max Int" iterator
+    "by Float half" yielding
    "by Float half" yielding
+    without limit
+      iterator
+        raises overflow error
        raises overflow error
+        basic
        basic
+      yielding
+        basic
        basic
+        raises overflow error
        raises overflow error
+    "basic Int" yielding
    "basic Int" yielding
+    "over zero Float" iterator
    "over zero Float" iterator
+    "single value Float" iterator
    "single value Float" iterator
+    "single value Int by Float" iterator
    "single value Int by Float" iterator
+    "over max Int" iterator
    "over max Int" iterator
+    exclusive
+      "single value Float" yielding
      "single value Float" yielding
+      "single value Int" iterator
      "single value Int" iterator
+      "basic Float" iterator
      "basic Float" iterator
+      "basic Int" yielding
      "basic Int" yielding
+      "basic Float" yielding
      "basic Float" yielding
+      "basic Int" iterator
      "basic Int" iterator
+      "single value Float" iterator
      "single value Float" iterator
+      "single value Int" yielding
      "single value Int" yielding
+    "missing end Int" yielding
    "missing end Int" yielding
+    "towards limit [max-4, max-2, max)" iterator
    "towards limit [max-4, max-2, max)" iterator
+    "negative Float" iterator
    "negative Float" iterator
+    "downto Float" iterator
    "downto Float" iterator
+    "empty if `self` can't be compared by" yielding
    "empty if `self` can't be compared by" yielding
+    "towards limit [max-4, max-2, max)" yielding
    "towards limit [max-4, max-2, max)" yielding
+    "Float to Int" iterator
    "Float to Int" iterator
+    "single value Int" yielding
    "single value Int" yielding
+    "empty if `self` can't be compared" iterator
    "empty if `self` can't be compared" iterator
+    "towards limit [max-4, max-2, max]" yielding
    "towards limit [max-4, max-2, max]" yielding
+    "over zero Float" yielding
    "over zero Float" yielding
+    "towards limit [max-3, max-1, max)" yielding
    "towards limit [max-3, max-1, max)" yielding
+    "Float to Int" yielding
    "Float to Int" yielding
+    "basic Float" yielding
    "basic Float" yielding
+    "empty if `by` and `to` are opposed" yielding
    "empty if `by` and `to` are opposed" yielding
+    "negative by Int" yielding
    "negative by Int" yielding
+    "negative by Float half" yielding
    "negative by Float half" yielding
+    "towards limit [max-4, max-2, max]" iterator
    "towards limit [max-4, max-2, max]" iterator
+    "empty if `to` can't be compared by" iterator
    "empty if `to` can't be compared by" iterator
+    "downto UInt by" iterator
    "downto UInt by" iterator
+    "Int by Float" iterator
    "Int by Float" iterator
+  division between Float64 / Int64 returns Float64
  division between Float64 / Int64 returns Float64
+  converts from Int64 to UInt32
  converts from Int64 to UInt32
+  converts from UInt64 to UInt32
  converts from UInt64 to UInt32
+  division between Int16 / UInt64 returns Float64
  division between Int16 / UInt64 returns Float64
+  converts from UInt16 to Int64
  converts from UInt16 to Int64
+  converts from UInt64 to Int16
  converts from UInt64 to Int16
+  division between Int128 / Int16 returns Float64
  division between Int128 / Int16 returns Float64
+  division between UInt64 / UInt128 returns Float64
  division between UInt64 / UInt128 returns Float64
+  converts from Float32 to Int8
  converts from Float32 to Int8
+  floor_division Float64 // Int64 returns Float64
  floor_division Float64 // Int64 returns Float64
+  division between UInt16 / Float64 returns Float64
  division between UInt16 / Float64 returns Float64
+  converts from UInt32 to Float64
  converts from UInt32 to Float64
+  creates a slice
  creates a slice
+  division between Int16 / UInt8 returns Float64
  division between Int16 / UInt8 returns Float64
+  floor_division Int64 // UInt16 returns Int64
  floor_division Int64 // UInt16 returns Int64
+  division between Float64 / UInt16 returns Float64
  division between Float64 / UInt16 returns Float64
+  division between UInt16 / Float32 returns Float32
  division between UInt16 / Float32 returns Float32
+  converts from UInt128 to UInt16
  converts from UInt128 to UInt16
+  division between Int32 / Int16 returns Float64
  division between Int32 / Int16 returns Float64
+  unchecked initialize from value to UInt32
  unchecked initialize from value to UInt32
+  #positive?
  #positive?
+  converts from Float64 to Int32
  converts from Float64 to Int32
+  division between UInt16 / Int8 returns Float64
  division between UInt16 / Int8 returns Float64
+  floor_division Int64 // Int8 returns Int64
  floor_division Int64 // Int8 returns Int64
+  division between Int32 / Float32 returns Float32
  division between Int32 / Float32 returns Float32
+  division between UInt128 / UInt16 returns Float64
  division between UInt128 / UInt16 returns Float64
+  division between UInt8 / Float64 returns Float64
  division between UInt8 / Float64 returns Float64
+  division between UInt16 / UInt8 returns Float64
  division between UInt16 / UInt8 returns Float64
+  floor_division UInt8 // Int128 returns UInt8
  floor_division UInt8 // Int128 returns UInt8
+  division between Int32 / UInt128 returns Float64
  division between Int32 / UInt128 returns Float64
+  division between Int16 / UInt16 returns Float64
  division between Int16 / UInt16 returns Float64
+  floor_division UInt8 // Int64 returns UInt8
  floor_division UInt8 // Int64 returns UInt8
+  division between Float32 / Int64 returns Float32
  division between Float32 / Int64 returns Float32
+  converts from UInt16 to Int16
  converts from UInt16 to Int16
+  converts from Int8 to Float64
  converts from Int8 to Float64
+  division between Int8 / Int128 returns Float64
  division between Int8 / Int128 returns Float64
+  floor_division UInt16 // Int128 returns UInt16
  floor_division UInt16 // Int128 returns UInt16
+  converts from Int128 to Int128
  converts from Int128 to Int128
+  converts from UInt64 to Int32
  converts from UInt64 to Int32
+  converts from UInt64 to Int32
  converts from UInt64 to Int32
+  converts from Float32 to Float32
  converts from Float32 to Float32
+  division between UInt64 / Int8 returns Float64
  division between UInt64 / Int8 returns Float64
+  division between UInt64 / Int64 returns Float64
  division between UInt64 / Int64 returns Float64
+  division between Int64 / Int32 returns Float64
  division between Int64 / Int32 returns Float64
+  floor_division Int32 // UInt16 returns Int32
  floor_division Int32 // UInt16 returns Int32
+  floor_division Float32 // UInt128 returns Float32
  floor_division Float32 // UInt128 returns Float32
+  converts from Int32 to Float32
  converts from Int32 to Float32
+  division between UInt16 / Int32 returns Float64
  division between UInt16 / Int32 returns Float64
+  floor_division Int64 // Int32 returns Int64
  floor_division Int64 // Int32 returns Int64
+  division between Int8 / UInt32 returns Float64
  division between Int8 / UInt32 returns Float64
+  converts from UInt128 to Float32
  converts from UInt128 to Float32
+  converts from Float32 to Int16
  converts from Float32 to Int16
+  converts from UInt64 to UInt64
  converts from UInt64 to UInt64
+  division between Float64 / Float64 returns Float64
  division between Float64 / Float64 returns Float64
+  floor_division UInt128 // UInt128 returns UInt128
  floor_division UInt128 // UInt128 returns UInt128
+  converts from UInt16 to UInt64
  converts from UInt16 to UInt64
+  converts from Int16 to Int16
  converts from Int16 to Int16
+  converts from UInt64 to Int64
  converts from UInt64 to Int64
+  converts from UInt8 to Int8
  converts from UInt8 to Int8
+  division between UInt32 / Int8 returns Float64
  division between UInt32 / Int8 returns Float64
+  floor_division Int32 // Int8 returns Int32
  floor_division Int32 // Int8 returns Int32
+  division between UInt16 / Int64 returns Float64
  division between UInt16 / Int64 returns Float64
+  division between UInt64 / Float32 returns Float32
  division between UInt64 / Float32 returns Float32
+  floor_division Float32 // Int8 returns Float32
  floor_division Float32 // Int8 returns Float32
+  converts from Float32 to Float64
  converts from Float32 to Float64
+  #zero?
  #zero?
+  division between Int64 / UInt8 returns Float64
  division between Int64 / UInt8 returns Float64
+  converts from UInt32 to Int16
  converts from UInt32 to Int16
+  division between Float64 / UInt128 returns Float64
  division between Float64 / UInt128 returns Float64
+  converts from Int16 to UInt16
  converts from Int16 to UInt16
+  converts from UInt128 to UInt128
  converts from UInt128 to UInt128
+  converts from UInt8 to Int8
  converts from UInt8 to Int8
+  floor_division UInt32 // UInt32 returns UInt32
  floor_division UInt32 // UInt32 returns UInt32
+  division between Int16 / Int64 returns Float64
  division between Int16 / Int64 returns Float64
+  division between UInt128 / UInt8 returns Float64
  division between UInt128 / UInt8 returns Float64
+  division between Int16 / Int8 returns Float64
  division between Int16 / Int8 returns Float64
+  converts from UInt8 to Int16
  converts from UInt8 to Int16
+  division between UInt64 / Float64 returns Float64
  division between UInt64 / Float64 returns Float64
+  floor_division UInt64 // UInt8 returns UInt64
  floor_division UInt64 // UInt8 returns UInt64
+  converts from UInt128 to Int128
  converts from UInt128 to Int128
+  converts from Int128 to Int8
  converts from Int128 to Int8
+  converts from Float64 to UInt32
  converts from Float64 to UInt32
+  converts from Int64 to Int8
  converts from Int64 to Int8
+  floor_division UInt32 // Int64 returns UInt32
  floor_division UInt32 // Int64 returns UInt32
+  converts from Int64 to Int64
  converts from Int64 to Int64
+  floor_division UInt16 // Float32 returns UInt16
  floor_division UInt16 // Float32 returns UInt16
+  division between Int8 / Float32 returns Float32
  division between Int8 / Float32 returns Float32
+  floor_division Float32 // UInt64 returns Float32
  floor_division Float32 // UInt64 returns Float32
+  converts from UInt16 to UInt16
  converts from UInt16 to UInt16
+  division between Int32 / Float64 returns Float64
  division between Int32 / Float64 returns Float64
+  division between UInt8 / Int64 returns Float64
  division between UInt8 / Int64 returns Float64
+  converts from Int128 to Int64
  converts from Int128 to Int64
+  converts from Int128 to UInt32
  converts from Int128 to UInt32
+  floor_division UInt32 // Int128 returns UInt32
  floor_division UInt32 // Int128 returns UInt32
+  floor_division Int32 // Int32 returns Int32
  floor_division Int32 // Int32 returns Int32
+  unchecked initialize from value to Int32
  unchecked initialize from value to Int32
+  converts from UInt8 to Int128
  converts from UInt8 to Int128
+  division between Float32 / Int8 returns Float32
  division between Float32 / Int8 returns Float32
+  floor_division Float64 // UInt32 returns Float64
  floor_division Float64 // UInt32 returns Float64
+  floor_division Int32 // UInt128 returns Int32
  floor_division Int32 // UInt128 returns Int32
+  floor_division UInt64 // Int128 returns UInt64
  floor_division UInt64 // Int128 returns UInt64
+  converts from Int16 to Int8
  converts from Int16 to Int8
+  converts from Int128 to UInt64
  converts from Int128 to UInt64
+  converts from UInt64 to UInt16
  converts from UInt64 to UInt16
+  division between UInt128 / Float32 returns Float32
  division between UInt128 / Float32 returns Float32
+  division between Float32 / Float64 returns Float64
  division between Float32 / Float64 returns Float64
+  floor_division UInt64 // Int8 returns UInt64
  floor_division UInt64 // Int8 returns UInt64
+  converts from Float32 to Int64
  converts from Float32 to Int64
+  floor_division Int128 // UInt64 returns Int128
  floor_division Int128 // UInt64 returns Int128
+  converts from Int8 to Float32
  converts from Int8 to Float32
+  floor_division Float32 // Int64 returns Float32
  floor_division Float32 // Int64 returns Float32
+  division between UInt64 / Int128 returns Float64
  division between UInt64 / Int128 returns Float64
+  floor_division Int16 // Int32 returns Int16
  floor_division Int16 // Int32 returns Int16
+  converts from UInt128 to Int8
  converts from UInt128 to Int8
+  converts from Float64 to Float32
  converts from Float64 to Float32
+  floor_division Int16 // UInt8 returns Int16
  floor_division Int16 // UInt8 returns Int16
+  floor_division UInt16 // UInt32 returns UInt16
  floor_division UInt16 // UInt32 returns UInt16
+  converts from Int128 to Int32
  converts from Int128 to Int32
+  converts from UInt16 to Int8
  converts from UInt16 to Int8
+  division between Float32 / Float32 returns Float32
  division between Float32 / Float32 returns Float32
+  floor_division Int8 // UInt16 returns Int8
  floor_division Int8 // UInt16 returns Int8
+  converts from Float64 to Float64
  converts from Float64 to Float64
+  converts from Int64 to Float64
  converts from Int64 to Float64
+  division between UInt32 / Int128 returns Float64
  division between UInt32 / Int128 returns Float64
+  converts from UInt64 to Int128
  converts from UInt64 to Int128
+  division between UInt32 / UInt16 returns Float64
  division between UInt32 / UInt16 returns Float64
+  converts from Int32 to UInt16
  converts from Int32 to UInt16
+  division between Int128 / UInt8 returns Float64
  division between Int128 / UInt8 returns Float64
+  converts from UInt32 to UInt64
  converts from UInt32 to UInt64
+  initialize from value to Int128
  initialize from value to Int128
+  floor_division Float32 // UInt16 returns Float32
  floor_division Float32 // UInt16 returns Float32
+  converts from Int32 to Int128
  converts from Int32 to Int128
+  converts from Int8 to Int8
  converts from Int8 to Int8
+  division between UInt32 / Int16 returns Float64
  division between UInt32 / Int16 returns Float64
+  converts from Int64 to Float32
  converts from Int64 to Float32
+  division between Float32 / Int16 returns Float32
  division between Float32 / Int16 returns Float32
+  converts from Int128 to Int32
  converts from Int128 to Int32
+  division between Int8 / UInt16 returns Float64
  division between Int8 / UInt16 returns Float64
+  division between UInt64 / Int32 returns Float64
  division between UInt64 / Int32 returns Float64
+  converts from UInt128 to UInt16
  converts from UInt128 to UInt16
+  converts from Int32 to UInt8
  converts from Int32 to UInt8
+  creates an array with [] and some elements
  creates an array with [] and some elements
+  division between Int16 / UInt32 returns Float64
  division between Int16 / UInt32 returns Float64
+  converts from Int16 to UInt32
  converts from Int16 to UInt32
+  converts from UInt32 to Int16
  converts from UInt32 to Int16
+  division between Int64 / Int8 returns Float64
  division between Int64 / Int8 returns Float64
+  converts from UInt128 to UInt8
  converts from UInt128 to UInt8
+  floor_division UInt16 // UInt8 returns UInt16
  floor_division UInt16 // UInt8 returns UInt16
+  floor_division Int128 // Int128 returns Int128
  floor_division Int128 // Int128 returns Int128
+  floor_division Int8 // UInt32 returns Int8
  floor_division Int8 // UInt32 returns Int8
+  converts from UInt64 to UInt8
  converts from UInt64 to UInt8
+  converts from UInt16 to UInt128
  converts from UInt16 to UInt128
+  floor_division Int64 // UInt128 returns Int64
  floor_division Int64 // UInt128 returns Int64
+  converts from UInt128 to Int128
  converts from UInt128 to Int128
+  converts from Float64 to UInt128
  converts from Float64 to UInt128
+  gives the sign
  gives the sign
+  unchecked initialize from value to Int8
  unchecked initialize from value to Int8
+  converts from UInt8 to UInt32
  converts from UInt8 to UInt32
+  floor_division Int128 // UInt32 returns Int128
  floor_division Int128 // UInt32 returns Int128
+  converts from UInt128 to UInt8
  converts from UInt128 to UInt8
+  floor_division Int128 // Int64 returns Int128
  floor_division Int128 // Int64 returns Int128
+  creates a static array
  creates a static array
+  unchecked initialize from value to UInt8
  unchecked initialize from value to UInt8
+  converts from Int32 to UInt128
  converts from Int32 to UInt128
+  division between UInt8 / Int16 returns Float64
  division between UInt8 / Int16 returns Float64
+  converts from Int64 to Int16
  converts from Int64 to Int16
+  converts from Int8 to Int16
  converts from Int8 to Int16
+  division between Int64 / UInt16 returns Float64
  division between Int64 / UInt16 returns Float64
+  converts from Int32 to UInt32
  converts from Int32 to UInt32
+  floor_division Float32 // Float64 returns Float32
  floor_division Float32 // Float64 returns Float32
+  division between Int8 / UInt64 returns Float64
  division between Int8 / UInt64 returns Float64
+  converts from UInt16 to UInt32
  converts from UInt16 to UInt32
+  converts from UInt16 to UInt16
  converts from UInt16 to UInt16
+  converts from UInt128 to UInt64
  converts from UInt128 to UInt64
+  division between Int16 / Float32 returns Float32
  division between Int16 / Float32 returns Float32
+  converts from Int128 to Float32
  converts from Int128 to Float32
+  converts from UInt32 to UInt64
  converts from UInt32 to UInt64
+  converts from Int128 to UInt16
  converts from Int128 to UInt16
+  floor_division UInt16 // Int8 returns UInt16
  floor_division UInt16 // Int8 returns UInt16
+  floor_division UInt64 // Int64 returns UInt64
  floor_division UInt64 // Int64 returns UInt64
+  division between Int64 / Int64 returns Float64
  division between Int64 / Int64 returns Float64
+  division between Int128 / UInt32 returns Float64
  division between Int128 / UInt32 returns Float64
+  division between Int8 / UInt128 returns Float64
  division between Int8 / UInt128 returns Float64
+  division between Int8 / Float64 returns Float64
  division between Int8 / Float64 returns Float64
+  division between Int8 / Int32 returns Float64
  division between Int8 / Int32 returns Float64
+  converts from Int8 to Int128
  converts from Int8 to Int128
+  converts from UInt32 to Float64
  converts from UInt32 to Float64
+  converts from UInt16 to Float32
  converts from UInt16 to Float32
+  converts from Int8 to Int32
  converts from Int8 to Int32
+  initialize from value to Float32
  initialize from value to Float32
+  floor_division Int128 // Int8 returns Int128
  floor_division Int128 // Int8 returns Int128
+  converts from Int16 to Float32
  converts from Int16 to Float32
+  converts from Float32 to Int8
  converts from Float32 to Int8
+  converts from UInt32 to UInt32
  converts from UInt32 to UInt32
+  floor_division Int8 // Int128 returns Int8
  floor_division Int8 // Int128 returns Int8
+  floor_division Float64 // Int16 returns Float64
  floor_division Float64 // Int16 returns Float64
+  division between Float64 / Float32 returns Float64
  division between Float64 / Float32 returns Float64
+  converts from UInt32 to Int128
  converts from UInt32 to Int128
+  division between UInt16 / UInt32 returns Float64
  division between UInt16 / UInt32 returns Float64
+  converts from Int128 to Float64
  converts from Int128 to Float64
+  floor_division UInt8 // Int16 returns UInt8
  floor_division UInt8 // Int16 returns UInt8
+  converts from Int32 to Int16
  converts from Int32 to Int16
+  floor_division Int64 // Float64 returns Int64
  floor_division Int64 // Float64 returns Int64
+  floor_division Int64 // UInt32 returns Int64
  floor_division Int64 // UInt32 returns Int64
+  converts from UInt16 to Float64
  converts from UInt16 to Float64
+  division between Int64 / Float64 returns Float64
  division between Int64 / Float64 returns Float64
+  floor_division Int16 // Int64 returns Int16
  floor_division Int16 // Int64 returns Int16
+  division between Float64 / UInt8 returns Float64
  division between Float64 / UInt8 returns Float64
+  division between Int16 / Int16 returns Float64
  division between Int16 / Int16 returns Float64
+  converts from Int128 to UInt8
  converts from Int128 to UInt8
+  converts from UInt128 to Int16
  converts from UInt128 to Int16
+  division between Int128 / Int64 returns Float64
  division between Int128 / Int64 returns Float64
+  converts from Int64 to Int128
  converts from Int64 to Int128
+  creates an array with [] and no elements
  creates an array with [] and no elements
+  converts from Int32 to Float32
  converts from Int32 to Float32
+  division between Int16 / Int32 returns Float64
  division between Int16 / Int32 returns Float64
+  converts from UInt128 to UInt64
  converts from UInt128 to UInt64
+  converts from Int32 to Int8
  converts from Int32 to Int8
+  converts from UInt64 to UInt64
  converts from UInt64 to UInt64
+  division between UInt128 / UInt32 returns Float64
  division between UInt128 / UInt32 returns Float64
+  floor_division Int8 // UInt128 returns Int8
  floor_division Int8 // UInt128 returns Int8
+  converts from UInt8 to UInt16
  converts from UInt8 to UInt16
+  division between Float32 / UInt128 returns Float32
  division between Float32 / UInt128 returns Float32
+  division between Float32 / UInt32 returns Float32
  division between Float32 / UInt32 returns Float32
+  unchecked initialize from value to UInt16
  unchecked initialize from value to UInt16
+  division between UInt32 / UInt128 returns Float64
  division between UInt32 / UInt128 returns Float64
+  floor_division Int16 // Int128 returns Int16
  floor_division Int16 // Int128 returns Int16
+  unchecked initialize from value to Int64
  unchecked initialize from value to Int64
+  converts from Float64 to UInt32
  converts from Float64 to UInt32
+  #negative?
  #negative?
+  converts from Int16 to Float64
  converts from Int16 to Float64
+  converts from Float32 to Int128
  converts from Float32 to Int128
+  floor_division Int32 // UInt64 returns Int32
  floor_division Int32 // UInt64 returns Int32
+  converts from Int32 to UInt8
  converts from Int32 to UInt8
+  floor_division Float64 // Int32 returns Float64
  floor_division Float64 // Int32 returns Float64
+  converts from Int128 to Float64
  converts from Int128 to Float64
+  converts from Float64 to Int16
  converts from Float64 to Int16
+  converts from UInt16 to Int64
  converts from UInt16 to Int64
+  division between UInt64 / Int16 returns Float64
  division between UInt64 / Int16 returns Float64
+  converts from UInt16 to Int32
  converts from UInt16 to Int32
+  converts from Int16 to Int32
  converts from Int16 to Int32
+  converts from Int128 to UInt64
  converts from Int128 to UInt64
+  floor_division Float64 // Float32 returns Float64
  floor_division Float64 // Float32 returns Float64
+  unchecked initialize from value to Int16
  unchecked initialize from value to Int16
+  converts from UInt32 to UInt8
  converts from UInt32 to UInt8
+  converts from Float64 to UInt64
  converts from Float64 to UInt64
+  floor_division UInt16 // UInt64 returns UInt16
  floor_division UInt16 // UInt64 returns UInt16
+  division between Int128 / Float32 returns Float32
  division between Int128 / Float32 returns Float32
+  floor_division Int16 // Float64 returns Int16
  floor_division Int16 // Float64 returns Int16
+  converts from Int16 to UInt128
  converts from Int16 to UInt128
+  converts from Float32 to Int128
  converts from Float32 to Int128
+  division between Float32 / UInt16 returns Float32
  division between Float32 / UInt16 returns Float32
+  division between Float64 / Int128 returns Float64
  division between Float64 / Int128 returns Float64
+  initialize from value to UInt32
  initialize from value to UInt32
+  converts from Int16 to Int64
  converts from Int16 to Int64
+  converts from UInt16 to Int128
  converts from UInt16 to Int128
+  converts from UInt16 to Int16
  converts from UInt16 to Int16
+  floor_division UInt16 // Int32 returns UInt16
  floor_division UInt16 // Int32 returns UInt16
+  converts from UInt8 to Int64
  converts from UInt8 to Int64
+  converts from Int128 to Int8
  converts from Int128 to Int8
+  converts from Int64 to Int128
  converts from Int64 to Int128
+  converts from Int8 to UInt8
  converts from Int8 to UInt8
+  converts from Float32 to UInt128
  converts from Float32 to UInt128
+  division between UInt8 / UInt8 returns Float64
  division between UInt8 / UInt8 returns Float64
+  division between Int16 / Float64 returns Float64
  division between Int16 / Float64 returns Float64
+  floor_division Float64 // UInt128 returns Float64
  floor_division Float64 // UInt128 returns Float64
+  division between UInt8 / UInt16 returns Float64
  division between UInt8 / UInt16 returns Float64
+  floor_division Int64 // Float32 returns Int64
  floor_division Int64 // Float32 returns Int64
+  floor_division Float64 // UInt8 returns Float64
  floor_division Float64 // UInt8 returns Float64
+  floor_division UInt16 // Int64 returns UInt16
  floor_division UInt16 // Int64 returns UInt16
+  converts from Int8 to Int16
  converts from Int8 to Int16
+  floor_division Int16 // Int16 returns Int16
  floor_division Int16 // Int16 returns Int16
+  converts from Int8 to Int8
  converts from Int8 to Int8
+  floor_division Int8 // Int64 returns Int8
  floor_division Int8 // Int64 returns Int8
+  floor_division Float32 // UInt8 returns Float32
  floor_division Float32 // UInt8 returns Float32
+  floor_division Int8 // Int16 returns Int8
  floor_division Int8 // Int16 returns Int8
+  division between Float64 / Int32 returns Float64
  division between Float64 / Int32 returns Float64
+  division between UInt32 / Int64 returns Float64
  division between UInt32 / Int64 returns Float64
+  floor_division UInt8 // UInt128 returns UInt8
  floor_division UInt8 // UInt128 returns UInt8
+  floor_division UInt8 // UInt16 returns UInt8
  floor_division UInt8 // UInt16 returns UInt8
+  division between UInt16 / UInt64 returns Float64
  division between UInt16 / UInt64 returns Float64
+  division between UInt8 / Int32 returns Float64
  division between UInt8 / Int32 returns Float64
+  converts from UInt32 to Float32
  converts from UInt32 to Float32
+  gives the absolute value
  gives the absolute value
+  converts from Float32 to UInt8
  converts from Float32 to UInt8
+  converts from Int8 to UInt32
  converts from Int8 to UInt32
+  floor_division UInt128 // Float32 returns UInt128
  floor_division UInt128 // Float32 returns UInt128
+  converts from Int8 to Int64
  converts from Int8 to Int64
+  converts from UInt32 to UInt128
  converts from UInt32 to UInt128
+  initialize from value to Float64
  initialize from value to Float64
+  converts from Int16 to Int32
  converts from Int16 to Int32
+  converts from Int16 to UInt8
  converts from Int16 to UInt8
+  division between Int16 / UInt128 returns Float64
  division between Int16 / UInt128 returns Float64
+  converts from UInt32 to UInt128
  converts from UInt32 to UInt128
+  converts from Int16 to Int8
  converts from Int16 to Int8
+  converts from Float32 to Int64
  converts from Float32 to Int64
+  floor_division Int16 // Float32 returns Int16
  floor_division Int16 // Float32 returns Int16
+  converts from Int128 to Int64
  converts from Int128 to Int64
+  converts from UInt128 to Float64
  converts from UInt128 to Float64
+  floor_division Float32 // UInt32 returns Float32
  floor_division Float32 // UInt32 returns Float32
+  converts from UInt64 to UInt128
  converts from UInt64 to UInt128
+  converts from Int64 to Int32
  converts from Int64 to Int32
+  converts from Int32 to UInt32
  converts from Int32 to UInt32
+  division between Int128 / Float64 returns Float64
  division between Int128 / Float64 returns Float64
+  division between UInt32 / UInt8 returns Float64
  division between UInt32 / UInt8 returns Float64
+  floor_division UInt128 // Int32 returns UInt128
  floor_division UInt128 // Int32 returns UInt128
+  division between Float32 / UInt8 returns Float32
  division between Float32 / UInt8 returns Float32
+  converts from UInt64 to Float64
  converts from UInt64 to Float64
+  division between UInt64 / UInt64 returns Float64
  division between UInt64 / UInt64 returns Float64
+  floor_division UInt64 // UInt32 returns UInt64
  floor_division UInt64 // UInt32 returns UInt64
+  division between UInt8 / Int8 returns Float64
  division between UInt8 / Int8 returns Float64
+  floor_division UInt8 // Float64 returns UInt8
  floor_division UInt8 // Float64 returns UInt8
+  division between UInt32 / Float64 returns Float64
  division between UInt32 / Float64 returns Float64
+  converts from Int8 to Float32
  converts from Int8 to Float32
+  floor_division UInt64 // Float64 returns UInt64
  floor_division UInt64 // Float64 returns UInt64
+  converts from UInt16 to Float32
  converts from UInt16 to Float32
+  division between Int8 / Int64 returns Float64
  division between Int8 / Int64 returns Float64
+  division between UInt32 / UInt64 returns Float64
  division between UInt32 / UInt64 returns Float64
+  floor_division UInt64 // Int32 returns UInt64
  floor_division UInt64 // Int32 returns UInt64
+  division between UInt8 / UInt128 returns Float64
  division between UInt8 / UInt128 returns Float64
+  converts from Int16 to Int128
  converts from Int16 to Int128
+  floor_division Int64 // UInt64 returns Int64
  floor_division Int64 // UInt64 returns Int64
+  floor_division UInt128 // UInt64 returns UInt128
  floor_division UInt128 // UInt64 returns UInt128
+  floor_division Float64 // Int128 returns Float64
  floor_division Float64 // Int128 returns Float64
+  #round_even
     assert
    assert
     assert
    assert
     assert
    assert
@@ -16225,27 +14722,172 @@
     assert
    assert
     assert
    assert
     assert
    assert
-  does *
  does *
-  rjust
     assert
    assert
     assert
    assert
     assert
    assert
-    to io
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
     assert
    assert
-  compares strings: same size, same string
  compares strings: same size, same string
-  compares strings: different size
  compares strings: different size
-  does to_f
  does to_f
-  multiplies with negative size
  multiplies with negative size
-  rstrip
     assert
    assert
     assert
    assert
+  converts from Float32 to UInt16
  converts from Float32 to UInt16
+  converts from Int32 to Int64
  converts from Int32 to Int64
+  converts from UInt16 to UInt8
  converts from UInt16 to UInt8
+  floor_division Int16 // UInt32 returns Int16
  floor_division Int16 // UInt32 returns Int16
+  converts from Float64 to Int128
  converts from Float64 to Int128
+  converts from UInt128 to Int32
  converts from UInt128 to Int32
+  converts from Float64 to Int8
  converts from Float64 to Int8
+  floor_division Float64 // Float64 returns Float64
  floor_division Float64 // Float64 returns Float64
+  converts from UInt8 to Int32
  converts from UInt8 to Int32
+  division between Int32 / UInt32 returns Float64
  division between Int32 / UInt32 returns Float64
+  division between Int8 / Int16 returns Float64
  division between Int8 / Int16 returns Float64
+  converts from Int64 to Int32
  converts from Int64 to Int32
+  floor_division UInt16 // UInt128 returns UInt16
  floor_division UInt16 // UInt128 returns UInt16
+  floor_division UInt64 // UInt64 returns UInt64
  floor_division UInt64 // UInt64 returns UInt64
+  floor_division UInt32 // Int8 returns UInt32
  floor_division UInt32 // Int8 returns UInt32
+  division between UInt32 / Int32 returns Float64
  division between UInt32 / Int32 returns Float64
+  floor_division UInt8 // Int32 returns UInt8
  floor_division UInt8 // Int32 returns UInt8
+  initialize from value to Int16
  initialize from value to Int16
+  division between Float32 / UInt64 returns Float32
  division between Float32 / UInt64 returns Float32
+  converts from Int64 to UInt64
  converts from Int64 to UInt64
+  converts from Int8 to Float64
  converts from Int8 to Float64
+  floor_division Int8 // UInt8 returns Int8
  floor_division Int8 // UInt8 returns Int8
+  division between Int32 / Int128 returns Float64
  division between Int32 / Int128 returns Float64
+  converts from UInt16 to UInt32
  converts from UInt16 to UInt32
+  floor_division Float32 // Int128 returns Float32
  floor_division Float32 // Int128 returns Float32
+  significant
+    10 base
    10 base
+    8 base
    8 base
+    preserves type
    preserves type
+    2 base
    2 base
+  converts from Float64 to UInt64
  converts from Float64 to UInt64
+  converts from UInt8 to Float32
  converts from UInt8 to Float32
+  division between UInt128 / Int128 returns Float64
  division between UInt128 / Int128 returns Float64
+  division between Float64 / UInt64 returns Float64
  division between Float64 / UInt64 returns Float64
+  floor_division UInt128 // Int64 returns UInt128
  floor_division UInt128 // Int64 returns UInt128
+  converts from UInt8 to UInt64
  converts from UInt8 to UInt64
+  floor_division UInt8 // UInt8 returns UInt8
  floor_division UInt8 // UInt8 returns UInt8
+  converts from UInt8 to Int64
  converts from UInt8 to Int64
+  division between Int128 / UInt128 returns Float64
  division between Int128 / UInt128 returns Float64
+  converts from UInt16 to Float64
  converts from UInt16 to Float64
+  floor_division Int128 // Float64 returns Int128
  floor_division Int128 // Float64 returns Int128
+  division between UInt128 / Int8 returns Float64
  division between UInt128 / Int8 returns Float64
+  division between UInt16 / Int128 returns Float64
  division between UInt16 / Int128 returns Float64
+  floor_division Int64 // UInt8 returns Int64
  floor_division Int64 // UInt8 returns Int64
+  converts from UInt128 to UInt128
  converts from UInt128 to UInt128
+  converts from UInt8 to UInt64
  converts from UInt8 to UInt64
+  floor_division Int128 // UInt8 returns Int128
  floor_division Int128 // UInt8 returns Int128
+  division between Int32 / UInt64 returns Float64
  division between Int32 / UInt64 returns Float64
+  converts from Int32 to Float64
  converts from Int32 to Float64
+  floor_division UInt64 // Int16 returns UInt64
  floor_division UInt64 // Int16 returns UInt64
+  converts from Int32 to Int16
  converts from Int32 to Int16
+  converts from UInt32 to UInt8
  converts from UInt32 to UInt8
+  floor_division UInt128 // UInt32 returns UInt128
  floor_division UInt128 // UInt32 returns UInt128
+  division between UInt128 / Int16 returns Float64
  division between UInt128 / Int16 returns Float64
+  converts from Int64 to UInt128
  converts from Int64 to UInt128
+  converts from UInt128 to Int8
  converts from UInt128 to Int8
+  converts from Int32 to UInt64
  converts from Int32 to UInt64
+  floor_division Int128 // Int16 returns Int128
  floor_division Int128 // Int16 returns Int128
+  initialize from value to UInt128
  initialize from value to UInt128
+  converts from Int8 to UInt128
  converts from Int8 to UInt128
+  converts from UInt16 to UInt8
  converts from UInt16 to UInt8
+  division between Float32 / Int128 returns Float32
  division between Float32 / Int128 returns Float32
+  division between Int64 / UInt64 returns Float64
  division between Int64 / UInt64 returns Float64
+  converts from Float32 to UInt64
  converts from Float32 to UInt64
+  floor_division Int32 // Int128 returns Int32
  floor_division Int32 // Int128 returns Int32
+  initialize from value to Int8
  initialize from value to Int8
+  converts from Float64 to Int16
  converts from Float64 to Int16
+  floor_division UInt16 // Float64 returns UInt16
  floor_division UInt16 // Float64 returns UInt16
+  floor_division Int16 // UInt128 returns Int16
  floor_division Int16 // UInt128 returns Int16
+  converts from UInt128 to Int32
  converts from UInt128 to Int32
+  converts from Int8 to Int64
  converts from Int8 to Int64
+  division between Int32 / UInt8 returns Float64
  division between Int32 / UInt8 returns Float64
+  division between Int64 / UInt32 returns Float64
  division between Int64 / UInt32 returns Float64
+  floor_division UInt64 // UInt16 returns UInt64
  floor_division UInt64 // UInt16 returns UInt64
+  converts from Int16 to UInt16
  converts from Int16 to UInt16
+  converts from Int64 to Int8
  converts from Int64 to Int8
+  converts from Float32 to Int16
  converts from Float32 to Int16
+  unchecked initialize from value to Float64
  unchecked initialize from value to Float64
+  converts from Float32 to Int32
  converts from Float32 to Int32
+  converts from UInt8 to UInt128
  converts from UInt8 to UInt128
+  converts from Int64 to UInt16
  converts from Int64 to UInt16
+  floor_division Int8 // Float64 returns Int8
  floor_division Int8 // Float64 returns Int8
+  floor_division Int16 // UInt16 returns Int16
  floor_division Int16 // UInt16 returns Int16
+  initialize from value to UInt8
  initialize from value to UInt8
+  converts from Int32 to Float64
  converts from Int32 to Float64
+  floor_division Int128 // UInt16 returns Int128
  floor_division Int128 // UInt16 returns Int128
+  converts from Int8 to UInt16
  converts from Int8 to UInt16
+  floor_division Float32 // Int16 returns Float32
  floor_division Float32 // Int16 returns Float32
+  converts from Float64 to UInt16
  converts from Float64 to UInt16
+  converts from UInt8 to UInt8
  converts from UInt8 to UInt8
+  converts from Int128 to UInt128
  converts from Int128 to UInt128
+  converts from Int32 to Int64
  converts from Int32 to Int64
+  converts from Int64 to UInt32
  converts from Int64 to UInt32
+  division between UInt128 / Int32 returns Float64
  division between UInt128 / Int32 returns Float64
+  converts from UInt64 to Int8
  converts from UInt64 to Int8
+  floor_division Int32 // Int64 returns Int32
  floor_division Int32 // Int64 returns Int32
+  converts from UInt32 to Int128
  converts from UInt32 to Int128
+  converts from Int8 to UInt128
  converts from Int8 to UInt128
+  floor_division UInt128 // Int16 returns UInt128
  floor_division UInt128 // Int16 returns UInt128
+  converts from Int128 to Float32
  converts from Int128 to Float32
+  converts from Int16 to Int128
  converts from Int16 to Int128
+  converts from UInt16 to UInt128
  converts from UInt16 to UInt128
+  converts from Int8 to UInt64
  converts from Int8 to UInt64
+  division between UInt64 / UInt16 returns Float64
  division between UInt64 / UInt16 returns Float64
+  division between UInt128 / Int64 returns Float64
  division between UInt128 / Int64 returns Float64
+  division between Int32 / Int8 returns Float64
  division between Int32 / Int8 returns Float64
+  converts from UInt128 to UInt32
  converts from UInt128 to UInt32
+  converts from Int16 to Int64
  converts from Int16 to Int64
+  division between Int32 / Int64 returns Float64
  division between Int32 / Int64 returns Float64
+  floor_division UInt32 // UInt64 returns UInt32
  floor_division UInt32 // UInt64 returns UInt32
+  converts from Int64 to UInt64
  converts from Int64 to UInt64
+  converts from Float32 to UInt32
  converts from Float32 to UInt32
+  converts from Int16 to UInt128
  converts from Int16 to UInt128
+  floor_division Int64 // Int128 returns Int64
  floor_division Int64 // Int128 returns Int64
+  floor_division Int32 // Float64 returns Int32
  floor_division Int32 // Float64 returns Int32
+  converts from UInt8 to UInt32
  converts from UInt8 to UInt32
+  converts from Float64 to Int128
  converts from Float64 to Int128
+  floor_division Int8 // Float32 returns Int8
  floor_division Int8 // Float32 returns Int8
+  converts from Float64 to UInt8
  converts from Float64 to UInt8
+  floor_division Int8 // UInt64 returns Int8
  floor_division Int8 // UInt64 returns Int8
+  division between Int128 / Int8 returns Float64
  division between Int128 / Int8 returns Float64
+  converts from UInt32 to Int8
  converts from UInt32 to Int8
+  division between UInt128 / UInt128 returns Float64
  division between UInt128 / UInt128 returns Float64
+  converts from Int32 to UInt16
  converts from Int32 to UInt16
+  floor_division UInt32 // Int32 returns UInt32
  floor_division UInt32 // Int32 returns UInt32
+  division between Int128 / UInt64 returns Float64
  division between Int128 / UInt64 returns Float64
+  floor_division Int32 // Float32 returns Int32
  floor_division Int32 // Float32 returns Int32
+  division between UInt64 / UInt8 returns Float64
  division between UInt64 / UInt8 returns Float64
+  converts from UInt128 to Float32
  converts from UInt128 to Float32
+  converts from Int8 to Int32
  converts from Int8 to Int32
+  floor_division UInt128 // UInt16 returns UInt128
  floor_division UInt128 // UInt16 returns UInt128
+  floor_division Int8 // Int32 returns Int8
  floor_division Int8 // Int32 returns Int8
+  floor_division UInt8 // UInt32 returns UInt8
  floor_division UInt8 // UInt32 returns UInt8
+  converts from UInt8 to Int128
  converts from UInt8 to Int128
+  converts from UInt8 to Float64
  converts from UInt8 to Float64
+  floor_division Float64 // UInt64 returns Float64
  floor_division Float64 // UInt64 returns Float64
+  division between UInt8 / UInt32 returns Float64
  division between UInt8 / UInt32 returns Float64
+  converts from UInt8 to UInt128
  converts from UInt8 to UInt128
+  floor_division Int64 // Int16 returns Int64
  floor_division Int64 // Int16 returns Int64
+  division between UInt16 / Int16 returns Float64
  division between UInt16 / Int16 returns Float64
+  division between Int128 / Int32 returns Float64
  division between Int128 / Int32 returns Float64
+  floor_division Int64 // Int64 returns Int64
  floor_division Int64 // Int64 returns Int64
+  converts from UInt16 to UInt64
  converts from UInt16 to UInt64
+  converts from Float64 to Float64
  converts from Float64 to Float64
+  converts from UInt64 to UInt16
  converts from UInt64 to UInt16
+  initialize from value to UInt16
  initialize from value to UInt16
+OAuth2::AccessToken::Bearer
+  dumps to json
  dumps to json
+  builds from json
  builds from json
+  authenticates request
  authenticates request
+  builds from json with unknown key (#4437)
  builds from json with unknown key (#4437)
+  builds from json without token_type, assumes Bearer (#4503)
  builds from json without token_type, assumes Bearer (#4503)
+  builds from json without expires_in (#4041)
  builds from json without expires_in (#4041)
+Benchmark::IPS::Entry
+  #set_cycles
+    sets the number of cycles needed to make 100ms
    sets the number of cycles needed to make 100ms
+    sets the cycles to 1 no matter what
    sets the cycles to 1 no matter what
+  #human_mean
     assert
    assert
     assert
    assert
-    does not touch invalid code units in an otherwise ascii string
    does not touch invalid code units in an otherwise ascii string
     assert
    assert
     assert
    assert
     assert
    assert
@@ -16257,54 +14899,10 @@
     assert
    assert
     assert
    assert
     assert
    assert
-  #reverse
-    reverses string
    reverses string
-    converts invalid code units to replacement char
    converts invalid code units to replacement char
-    reverses taking grapheme clusters into account
    reverses taking grapheme clusters into account
-    reverses utf-8 string
    reverses utf-8 string
-  multiplies
  multiplies
-  does to_f32
  does to_f32
-  raises if String.build negative capacity
  raises if String.build negative capacity
-  #match_full
  #match_full
-  has size (same as size)
  has size (same as size)
-  "#each_line(chomp: false)" yielding
  "#each_line(chomp: false)" yielding
-  #gsub
-    gsubs with regex and string
    gsubs with regex and string
-    gsubs char with string (nop)
    gsubs char with string (nop)
-    gsubs with regex and string, returns self if no match
    gsubs with regex and string, returns self if no match
-    gsubs with char named tuple
    gsubs with char named tuple
-    replaces with numeric back-reference
    replaces with numeric back-reference
-    gsubs with regex and string (utf-8)
    gsubs with regex and string (utf-8)
-    gsubs null character
    gsubs null character
-    gsubs with regex and block
    gsubs with regex and block
-    replaces with back-reference to missing capture group
    replaces with back-reference to missing capture group
-    gsubs with empty regex
    gsubs with empty regex
-    gsubs with empty string
    gsubs with empty string
-    ignores if backreferences: false
    ignores if backreferences: false
-    gsubs with regex and named tuple
    gsubs with regex and named tuple
-    gsubs with char hash
    gsubs with char hash
-    gsubs char with string
    gsubs char with string
-    gsubs char with string depending on the char
    gsubs char with string depending on the char
-    gsubs with regex and block with group
    gsubs with regex and block with group
-    raises with incomplete back-reference (1)
    raises with incomplete back-reference (1)
-    gsubs with string and block
    gsubs with string and block
-    gsubs with string and string return self if no match
    gsubs with string and string return self if no match
-    raises with incomplete back-reference (2)
    raises with incomplete back-reference (2)
-    empty match
    empty match
-    gsubs with regex and hash
    gsubs with regex and hash
-    gsubs with string and string
    gsubs with string and string
-    replaces with incomplete back-reference (2)
    replaces with incomplete back-reference (2)
-    replaces with escaped back-reference
    replaces with escaped back-reference
-    replaces with named back-reference
    replaces with named back-reference
-    gsubs using $~
    gsubs using $~
-    gsubs char with char
    gsubs char with char
-    replaces with incomplete back-reference (3)
    replaces with incomplete back-reference (3)
-    replaces with incomplete back-reference (1)
    replaces with incomplete back-reference (1)
-    empty string
    empty string
-    gsubs with string and string (utf-8)
    gsubs with string and string (utf-8)
-    gsubs char with char in non-ascii string
    gsubs char with char in non-ascii string
-  lchop
     assert
    assert
+  #calculate_stats
+    correctly calculates basic stats
    correctly calculates basic stats
+  #human_iteration_time
     assert
    assert
     assert
    assert
     assert
    assert
@@ -16316,597 +14914,389 @@
     assert
    assert
     assert
    assert
     assert
    assert
-  does chars
  does chars
-  does each_char
  does each_char
-  presence
     assert
    assert
     assert
    assert
     assert
    assert
-  escapes with octal
  escapes with octal
-  #inspect_unquoted
  #inspect_unquoted
-  does each_char_with_index, with offset
  does each_char_with_index, with offset
-  has codepoints
  has codepoints
-  tr
-    given no replacement characters
-      acts as #delete
      acts as #delete
-    translates
    translates
-  creating from a pointer
-    raises when creating from a null pointer with a nonzero size
    raises when creating from a null pointer with a nonzero size
-    allows creating a string with zeros
    allows creating a string with zeros
-    doesn't raise creating from a null pointer with size 0
    doesn't raise creating from a null pointer with size 0
-    raises an exception when creating a string with a null pointer and no size
    raises an exception when creating a string with a null pointer and no size
-  gets size of \0 string
  gets size of \0 string
-  "#each_char with empty string" iterator
  "#each_char with empty string" iterator
-  includes?
-    by char
-      assert
      assert
-      assert
      assert
-    by string
-      assert
      assert
-      assert
      assert
-      assert
      assert
-  #inspect
  #inspect
-  scans using $~
  scans using $~
-  does %
  does %
-JSON::Lexer
-  lexes "\uD840\uDC00" from IO
  lexes "\uD840\uDC00" from IO
-  lexes 0.1e1 from String
  lexes 0.1e1 from String
-  lexes 6000000000000000000.0 from String
  lexes 6000000000000000000.0 from String
-  lexes 1E2 from IO
  lexes 1E2 from IO
-  lexes -1.23e4 from String
  lexes -1.23e4 from String
-  lexes "hello\rworld" from String
  lexes "hello\rworld" from String
-  lexes 0e+12 from String
  lexes 0e+12 from String
-  lexes 9876543212345678987654321e20 from IO
  lexes 9876543212345678987654321e20 from IO
-  lexes : from IO
  lexes : from IO
-  lexes 1 from String
  lexes 1 from String
-  lexes  
-	
 : from IO
  lexes  
-	
 : from IO
-  lexes 0e+12 from IO
  lexes 0e+12 from IO
-  lexes -1 from IO
  lexes -1 from IO
-  lexes 1000000000000000000.0 from IO
  lexes 1000000000000000000.0 from IO
-  errors if lexing "\uDC00" from IO
  errors if lexing "\uDC00" from IO
-  lexes "hello\"world" from String
  lexes "hello\"world" from String
-  lexes "\uD800\uDC00" from IO
  lexes "\uD800\uDC00" from IO
-  lexes  
-	
 : from string
  lexes  
-	
 : from string
-  lexes "hello" from IO
  lexes "hello" from IO
-  lexes "hello\nworld" from String
  lexes "hello\nworld" from String
-  lexes 9000000000000000000.0 from IO
  lexes 9000000000000000000.0 from IO
-  lexes "hello\fworld" from String
  lexes "hello\fworld" from String
-  lexes 0 from String
  lexes 0 from String
-  lexes -1.23 from String
  lexes -1.23 from String
-  lexes [ from IO
  lexes [ from IO
-  lexes , from IO
  lexes , from IO
-  errors if lexing "\uDC00" from String
  errors if lexing "\uDC00" from String
-  lexes "hello" from String
  lexes "hello" from String
-  lexes { from string
  lexes { from string
-  lexes "\u201chello world\u201d" from String
  lexes "\u201chello world\u201d" from String
-  lexes "hello\"world" from IO
  lexes "hello\"world" from IO
-  lexes -1.23 from IO
  lexes -1.23 from IO
-  errors if lexing "\uD800\u0020" from IO
  errors if lexing "\uD800\u0020" from IO
-  lexes  from IO
  lexes  from IO
-  lexes true from string
  lexes true from string
-  lexes -1.23e4 from IO
  lexes -1.23e4 from IO
-  lexes  from string
  lexes  from string
-  lexes false from string
  lexes false from string
-  lexes 1e2 from String
  lexes 1e2 from String
-  lexes ] from IO
  lexes ] from IO
-  lexes } from IO
  lexes } from IO
-  lexes 9.91343313498688 from String
  lexes 9.91343313498688 from String
-  lexes true from IO
  lexes true from IO
-  lexes "hello\/world" from String
  lexes "hello\/world" from String
-  lexes "\uD834\uDD1E" from IO
  lexes "\uD834\uDD1E" from IO
-  lexes 0e-12 from IO
  lexes 0e-12 from IO
-  lexes "hello\\world" from IO
  lexes "hello\\world" from IO
-  lexes 1.2e-3 from String
  lexes 1.2e-3 from String
-  lexes "hello\fworld" from IO
  lexes "hello\fworld" from IO
-  errors if lexing "\uD800\u0020" from String
  errors if lexing "\uD800\u0020" from String
-  lexes null from string
  lexes null from string
-  lexes 0.1e1 from IO
  lexes 0.1e1 from IO
-  lexes -1.23e4 from IO
  lexes -1.23e4 from IO
-  lexes [ from string
  lexes [ from string
-  lexes 0E1 from IO
  lexes 0E1 from IO
-  lexes 1234 from IO
  lexes 1234 from IO
-  lexes 9876543212345678987654321.0 from String
  lexes 9876543212345678987654321.0 from String
-  lexes 9000000000000000000.0 from String
  lexes 9000000000000000000.0 from String
-  lexes 1e+12 from String
  lexes 1e+12 from String
-  lexes 6000000000000000000.0 from IO
  lexes 6000000000000000000.0 from IO
-  lexes 1234 from String
  lexes 1234 from String
-  lexes 0.123 from IO
  lexes 0.123 from IO
-  lexes 9.91343313498688 from IO
  lexes 9.91343313498688 from IO
-  lexes 0e-12 from String
  lexes 0e-12 from String
-  lexes null from IO
  lexes null from IO
-  lexes "\uD840\uDC00" from String
  lexes "\uD840\uDC00" from String
-  lexes 1234.567 from String
  lexes 1234.567 from String
-  lexes "\uDBFF\uDFFF" from String
  lexes "\uDBFF\uDFFF" from String
-  lexes "\uDBFF\uDFFF" from IO
  lexes "\uDBFF\uDFFF" from IO
-  lexes 1 from IO
  lexes 1 from IO
-  lexes 10.100000000000000000000 from String
  lexes 10.100000000000000000000 from String
-  lexes false from IO
  lexes false from IO
-  lexes 1234.567 from IO
  lexes 1234.567 from IO
-  lexes -1.23e4 from String
  lexes -1.23e4 from String
-  lexes : from string
  lexes : from string
-  lexes "hello\nworld" from IO
  lexes "hello\nworld" from IO
-  lexes 1E2 from String
  lexes 1E2 from String
-  lexes -1 from String
  lexes -1 from String
-  errors if lexing "\uD800" from IO
  errors if lexing "\uD800" from IO
-  lexes 1e2 from IO
  lexes 1e2 from IO
-  lexes "hello\\world" from String
  lexes "hello\\world" from String
-  lexes 10.100000000000000000000 from IO
  lexes 10.100000000000000000000 from IO
-  lexes 0e1 from IO
  lexes 0e1 from IO
-  lexes "\uD800\uDC00" from String
  lexes "\uD800\uDC00" from String
-  lexes 1e+12 from IO
  lexes 1e+12 from IO
-  lexes "hello\rworld" from IO
  lexes "hello\rworld" from IO
-  lexes 0 from IO
  lexes 0 from IO
-  lexes "\u201chello world\u201d" from IO
  lexes "\u201chello world\u201d" from IO
-  lexes "\uD834\uDD1E" from String
  lexes "\uD834\uDD1E" from String
-  lexes , from string
  lexes , from string
-  lexes 0.123 from String
  lexes 0.123 from String
-  lexes 9876543212345678987654321.0 from IO
  lexes 9876543212345678987654321.0 from IO
-  lexes "hello\bworld" from String
  lexes "hello\bworld" from String
-  lexes "hello\bworld" from IO
  lexes "hello\bworld" from IO
-  lexes 1.2e-3 from IO
  lexes 1.2e-3 from IO
-  lexes "hello\tworld" from String
  lexes "hello\tworld" from String
-  lexes ] from string
  lexes ] from string
-  lexes 0E1 from String
  lexes 0E1 from String
-  lexes { from IO
  lexes { from IO
-  lexes 0e1 from String
  lexes 0e1 from String
-  lexes "hello\/world" from IO
  lexes "hello\/world" from IO
-  lexes } from string
  lexes } from string
-  lexes 1000000000000000000.0 from String
  lexes 1000000000000000000.0 from String
-  lexes 9876543212345678987654321e20 from String
  lexes 9876543212345678987654321e20 from String
-  lexes "hello\tworld" from IO
  lexes "hello\tworld" from IO
-  errors if lexing "\uD800" from String
  errors if lexing "\uD800" from String
-Compress::Zip
-  reads file from file system
  reads file from file system
-  reads zip file with different extra in local file header and central directory header
  reads zip file with different extra in local file header and central directory header
-  reads file from memory
  reads file from memory
-  writes comment
  writes comment
-  reads zip comment
  reads zip comment
-  reads big file
  reads big file
-  writes over int16 files to make sure we can parse
  writes over int16 files to make sure we can parse
-IO::Sized
-  gets
  gets
-  read_byte
  read_byte
-  #close
-    stops reading
    stops reading
-    closes the underlying stream if sync_close is true
    closes the underlying stream if sync_close is true
-  doesn't peek when remaining = 0 (#4261)
  doesn't peek when remaining = 0 (#4261)
-  peeks
  peeks
-  gets with chomp = false
  gets with chomp = false
-  #write
-    raises
    raises
-  #read
-    doesn't read past the limit when reading the correct size
    doesn't read past the limit when reading the correct size
-    allows extending the size
    allows extending the size
-    raises on negative numbers
    raises on negative numbers
-    reads partially when supplied with a larger slice
    reads partially when supplied with a larger slice
-    doesn't read past the limit when reading char-by-char
    doesn't read past the limit when reading char-by-char
-  skips
  skips
-Spec::TAPFormatter
-  reports failures
  reports failures
-  reports successful results
  reports successful results
-  reports errors
  reports errors
-  reports mixed results
  reports mixed results
-  reports pending
  reports pending
+HTTP::FormData::Parser
+  parses formdata
  parses formdata
+__umodti3
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+HTML
+  .escape
+    escapes dangerous characters from a string
    escapes dangerous characters from a string
+    does not change a safe string
    does not change a safe string
+  .unescape
+    unescapes javascript example from a string
    unescapes javascript example from a string
+    invalid utf-8
    invalid utf-8
+    identity
    identity
+    named entities
+      multi codepoint
      multi codepoint
+      invalid entities
      invalid entities
+      end of string
      end of string
+      without trailing semicolon
      without trailing semicolon
+      entity with numerical characters
      entity with numerical characters
+      simple named entities
      simple named entities
+    empty entity
    empty entity
+    numeric entities
+      hex
      hex
+      does not escape unicode surrogate characters
      does not escape unicode surrogate characters
+      decimal
      decimal
+      does not escape noncharacter codepoints
      does not escape noncharacter codepoints
+      space characters
      space characters
+      does not unescape characters above Char::MAX_CODEPOINT
      does not unescape characters above Char::MAX_CODEPOINT
+      ISO-8859-1 replacement
      ISO-8859-1 replacement
+      does not escape non-space unicode control characters
      does not escape non-space unicode control characters
+      early termination
      early termination
+      does not unescape Char::MAX_CODEPOINT
      does not unescape Char::MAX_CODEPOINT
+      ignores leading zeros
      ignores leading zeros
+HTTP::Params
+  is alias for URI::Params
  is alias for URI::Params
 PrettyPrint
-  pretty prints hello 13..13
  pretty prints hello 13..13
-  pretty prints width 7 indent 20
  pretty prints width 7 indent 20
-  pretty prints fill 7..10
  pretty prints fill 7..10
+  pretty prints fill 23..26
  pretty prints fill 23..26
+  pretty prints tree alt 19..20
  pretty prints tree alt 19..20
+  tail group
  tail group
+  pretty prints tree 20..22
  pretty prints tree 20..22
+  pretty prints hello 0..6
  pretty prints hello 0..6
   pretty prints width 0 indent 23
  pretty prints width 0 indent 23
+  pretty prints width 5 indent 20
  pretty prints width 5 indent 20
   pretty prints strict pretty 6..6
  pretty prints strict pretty 6..6
+  pretty prints tree alt 50..50
  pretty prints tree alt 50..50
+  pretty prints strict pretty 10..10
  pretty prints strict pretty 10..10
+  pretty prints tree 23..43
  pretty prints tree 23..43
+  pretty prints tree alt 0..18
  pretty prints tree alt 0..18
+  pretty prints strict pretty 8..8
  pretty prints strict pretty 8..8
+  pretty prints strict pretty 0..4
  pretty prints strict pretty 0..4
+  pretty prints strict pretty 11..31
  pretty prints strict pretty 11..31
+  pretty prints fill 7..10
  pretty prints fill 7..10
   pretty prints strict pretty 9..9
  pretty prints strict pretty 9..9
-  pretty prints strict pretty 7..7
  pretty prints strict pretty 7..7
-  pretty prints fill 11..14
  pretty prints fill 11..14
   pretty prints strict pretty 5..5
  pretty prints strict pretty 5..5
-  pretty prints width 6 indent 20
  pretty prints width 6 indent 20
-  pretty prints strict pretty 11..31
  pretty prints strict pretty 11..31
-  pretty prints hello 7..8
  pretty prints hello 7..8
-  pretty prints tree alt 0..18
  pretty prints tree alt 0..18
-  pretty prints width 5 indent 20
  pretty prints width 5 indent 20
-  pretty prints strict pretty 32..32
  pretty prints strict pretty 32..32
-  pretty prints hello 0..6
  pretty prints hello 0..6
+  pretty prints tree alt 21..49
  pretty prints tree alt 21..49
   pretty prints hello 11..12
  pretty prints hello 11..12
+  pretty prints fill 0..6
  pretty prints fill 0..6
   pretty prints fill 19..22
  pretty prints fill 19..22
-  pretty prints strict pretty 0..4
  pretty prints strict pretty 0..4
-  pretty prints strict pretty 8..8
  pretty prints strict pretty 8..8
-  pretty prints tree alt 50..50
  pretty prints tree alt 50..50
-  pretty prints tree alt 19..20
  pretty prints tree alt 19..20
-  pretty prints tree 0..19
  pretty prints tree 0..19
-  pretty prints tree 44..44
  pretty prints tree 44..44
-  pretty prints tree 20..22
  pretty prints tree 20..22
-  pretty prints tree alt 21..49
  pretty prints tree alt 21..49
-  tail group
  tail group
-  pretty prints fill 15..18
  pretty prints fill 15..18
-  pretty prints fill 23..26
  pretty prints fill 23..26
-  pretty prints tree 23..43
  pretty prints tree 23..43
+  pretty prints strict pretty 32..32
  pretty prints strict pretty 32..32
   pretty prints hello 9..10
  pretty prints hello 9..10
-  pretty prints strict pretty 10..10
  pretty prints strict pretty 10..10
-  pretty prints fill 0..6
  pretty prints fill 0..6
+  pretty prints strict pretty 7..7
  pretty prints strict pretty 7..7
   pretty prints fill 27..27
  pretty prints fill 27..27
-Spec
-  list_tags
-    lists the count of all tags
    lists the count of all tags
-    lists the count of slow tags
    lists the count of slow tags
-    does nothing if there are no examples
    does nothing if there are no examples
-.__multi3
.__multi3
-IO::ByteFormat
-  little endian
-    encode
-      to slice
-        writes int8
        writes int8
-        writes int16 to larger slice
        writes int16 to larger slice
-        writes int16
        writes int16
-      to io
-        writes int16
        writes int16
-        writes uint16
        writes uint16
-        writes int32
        writes int32
-        writes float32
        writes float32
-        writes int8
        writes int8
-        writes float64
        writes float64
-        writes int64
        writes int64
-    decode
-      from slice
-        reads int16 from larger slice
        reads int16 from larger slice
-        reads float64
        reads float64
-        reads float32
        reads float32
-        reads int16
        reads int16
-        reads int8
        reads int8
-      from io
-        reads int32
        reads int32
-        reads int64
        reads int64
-        reads unt16
        reads unt16
-        reads int8
        reads int8
-        reads int16
        reads int16
-        reads float32
        reads float32
-        reads float64
        reads float64
-  big endian
-    decode
-      from slice
-        reads float64
        reads float64
-        reads int16
        reads int16
-        reads float32
        reads float32
-        reads int8
        reads int8
-      from io
-        reads float32
        reads float32
-        reads int16
        reads int16
-        reads int32
        reads int32
-        reads unt16
        reads unt16
-        reads int8
        reads int8
-        reads float64
        reads float64
-        reads int64
        reads int64
-    encode
-      writes float64
      writes float64
-      writes int64
      writes int64
-      writes int16
      writes int16
-      writes int8
      writes int8
-      writes float32
      writes float32
-      writes int32
      writes int32
-Log::Metadata::Value
-  accessors
  accessors
-  initialize
  initialize
-  json
  json
-LLVM::ABI::AVR
-  size
-    for array
    for array
-    for struct
    for struct
-    for pointer
    for pointer
-    for packed struct
    for packed struct
-    for integer
    for integer
-    for float
    for float
-    for double
    for double
-  align
-    for integer
    for integer
-    for packed struct
    for packed struct
-    for pointer
    for pointer
-    for float
    for float
-    for double
    for double
-    for array
    for array
-    for struct
    for struct
-  abi_info
-    struct args over 18 bytes
    struct args over 18 bytes
-    int1
    int1
-    int16
    int16
-    int8
    int8
-    struct args within 18 bytes
    struct args within 18 bytes
-    int32
    int32
-    multiple arguments above registers
    multiple arguments above registers
-    returns struct within 8 bytes
    returns struct within 8 bytes
-    int64
    int64
-    float
    float
-    multiple arguments
    multiple arguments
-    returns struct over 8 bytes
    returns struct over 8 bytes
-    double
    double
-Struct
-  does dup
  does dup
-  should retrieve multiple descendants from hashed data structure
  should retrieve multiple descendants from hashed data structure
-  does to_s
  does to_s
-  does hash
  does hash
-  clones with def_clone
  clones with def_clone
-  does ==
  does ==
-  does hash for struct wrapper (#1940)
  does hash for struct wrapper (#1940)
-OAuth::AccessToken
-  creates from response body
  creates from response body
-Log::AsyncDispatcher
-  wait for entries to flush before closing
  wait for entries to flush before closing
-  can be closed twice
  can be closed twice
-  dispatches entry
  dispatches entry
-BigFloat
-  #to_f
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  #round
-    rounding modes
-      ties_away
      ties_away
-      ties_even
      ties_even
-      default (=ties_even)
      default (=ties_even)
-      to_zero
      to_zero
-      to_positive
      to_positive
-      to_negative
      to_negative
-  #/
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  to_s
-    converts to 150.0
    converts to 150.0
-    converts to 2.2250738585072014e-308
    converts to 2.2250738585072014e-308
-    converts to -0.01
    converts to -0.01
-    assert
    assert
-    converts to 1.0e-234
    converts to 1.0e-234
-    converts to 0.1
    converts to 0.1
-    assert
    assert
-    converts to 9.000000000000987
    converts to 9.000000000000987
-    converts to -0.1
    converts to -0.1
-    converts to 1.2345678901234567e+16
    converts to 1.2345678901234567e+16
-    assert
    assert
-    converts to 0.0
    converts to 0.0
-    assert
    assert
-    converts to 1.0e-6
    converts to 1.0e-6
-    converts to 1.234567890123456789e+18
    converts to 1.234567890123456789e+18
-    converts to 10.0
    converts to 10.0
-    converts to 100.0
    converts to 100.0
-    converts to 3.0
    converts to 3.0
-    converts to 0.01
    converts to 0.01
-    assert
    assert
-    converts to -3.0
    converts to -3.0
-    converts to -1.0
    converts to -1.0
-    converts to 48600000.0
    converts to 48600000.0
-    converts to 12345678.87654321
    converts to 12345678.87654321
-    converts to 1.23e+45
    converts to 1.23e+45
-    converts to 12345678.87654
    converts to 12345678.87654
-    assert
    assert
-    converts to 1.0
    converts to 1.0
-    assert
    assert
-    converts to 3.0
    converts to 3.0
-    converts to 1.7976931348623157e+308
    converts to 1.7976931348623157e+308
-    assert
    assert
-    assert
    assert
-    converts to 0.0
    converts to 0.0
-  #to_u
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  #to_u64!
-    basic
    basic
-    doesn't raise on overflow
    doesn't raise on overflow
-  #//
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  #to_i
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  clones
  clones
-  #to_u!
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  #abs
-    assert
    assert
-    assert
    assert
-    assert
    assert
+  pretty prints fill 15..18
  pretty prints fill 15..18
+  pretty prints hello 7..8
  pretty prints hello 7..8
+  pretty prints hello 13..13
  pretty prints hello 13..13
+  pretty prints tree 0..19
  pretty prints tree 0..19
+  pretty prints width 7 indent 20
  pretty prints width 7 indent 20
+  pretty prints width 6 indent 20
  pretty prints width 6 indent 20
+  pretty prints fill 11..14
  pretty prints fill 11..14
+  pretty prints tree 44..44
  pretty prints tree 44..44
+Process::Status
+  #signal_exit?
  #signal_exit?
+  #exit_reason
+    returns Aborted
    returns Aborted
+    returns TerminalDisconnected
    returns TerminalDisconnected
+    returns Breakpoint
    returns Breakpoint
+    returns BadInstruction
    returns BadInstruction
+    returns Normal
    returns Normal
+    returns AccessViolation
    returns AccessViolation
+    returns SessionEnded
    returns SessionEnded
+    returns Interrupted
    returns Interrupted
+    returns FloatException
    returns FloatException
+    returns BadMemoryAccess
    returns BadMemoryAccess
+  #exit_code
  #exit_code
+  equality
  equality
+  #inspect
+    with exit signal
    with exit signal
+    with exit status
    with exit status
+  #success?
  #success?
+  #signal_exit? with signal code
  #signal_exit? with signal code
+  #to_s
+    with exit status
    with exit status
+    with exit signal
    with exit signal
+  #normal_exit?
  #normal_exit?
+  #exit_signal
  #exit_signal
+  #normal_exit? with signal code
  #normal_exit? with signal code
+Double
+  **
     assert
    assert
-  #to_u64
-    basic
    basic
     assert
    assert
     assert
    assert
+Socket::UNIXAddress
+  transforms into a C struct and back
  transforms into a C struct and back
+  to_s
  to_s
+  #==
  #==
+  .parse
+    parses absolute
    parses absolute
+    fails with missing path
    fails with missing path
+    parses relative subpath
    parses relative subpath
+    relative with
    relative with
+    parses relative dot
    parses relative dot
+    parses relative
    parses relative
+    ignores params
    ignores params
+  raises when path is too long
  raises when path is too long
+HTTP::Handler
+  responds with not found if there's no next handler
  responds with not found if there's no next handler
+URI
+  .reserved?
  .reserved?
+  .from_json
  .from_json
+  .set_default_port
+    treats scheme case insensitively
    treats scheme case insensitively
+    unregisters port for scheme
    unregisters port for scheme
+    registers port for scheme
    registers port for scheme
+  #normalize
+    removes default port
    removes default port
+    prefixes relative path with colon with `./`
    prefixes relative path with colon with `./`
+    normalizes scheme
    normalizes scheme
+    doesn't modify instance
    doesn't modify instance
+    removes dot notation from path
    removes dot notation from path
+    normalizes host
    normalizes host
+  #normalize!
+    modifies the instance
    modifies the instance
+  #query_params
+    when there is no query parameters
+      returns an empty instance of URI::Params
      returns an empty instance of URI::Params
+    returns a URI::Params instance based on the query parameters
    returns a URI::Params instance based on the query parameters
+  .default_port
+    returns nil for unknown schemes
    returns nil for unknown schemes
+    treats scheme case insensitively
    treats scheme case insensitively
+    returns default port for well known schemes
    returns default port for well known schemes
+  #relativize
+    fragment
    fragment
+    opaque base
    opaque base
+    ignore base path with dot-segments
    ignore base path with dot-segments
+    path relative references
    path relative references
+    RFC 3986: 5.4.2. Abnormal Examples
    RFC 3986: 5.4.2. Abnormal Examples
+    RFC 3986: 5.4.1. Normal Examples
    RFC 3986: 5.4.1. Normal Examples
+    identical
    identical
+    relative base
    relative base
+    encoded characters
    encoded characters
+    ...
    ...
+    absolute URI references
    absolute URI references
+  #hash
     assert
    assert
-  #**
+  #query_params=
+    params with values
    params with values
+    empty
    empty
+  .parse
+    unescaped @ in user/password should not confuse host
    unescaped @ in user/password should not confuse host
+    `https://alice@www.example.com`
    `https://alice@www.example.com`
     assert
    assert
+    `test:/test`
    `test:/test`
+    `/foo`
    `/foo`
+    `http://[::1]:81/`
    `http://[::1]:81/`
+    `http://:8000/foo`
    `http://:8000/foo`
+    `foo/another@url/[]and{}`
    `foo/another@url/[]and{}`
+    `http://[fe80::1%25en0]:8080/`
    `http://[fe80::1%25en0]:8080/`
+    `file:///C:/FooBar/Baz.txt`
    `file:///C:/FooBar/Baz.txt`
+    `/foo?q=1`
    `/foo?q=1`
+    `http:?`
    `http:?`
+    `https://alice:pa55w0rd@www.example.com`
    `https://alice:pa55w0rd@www.example.com`
+    `magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn`
    `magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn`
+    `tcp://[2020::2020:20:2020:2020%25Windows%20Loves%20Spaces]:2020`
    `tcp://[2020::2020:20:2020:2020%25Windows%20Loves%20Spaces]:2020`
+    `http://?`
    `http://?`
     assert
    assert
+    `http://www.example.com`
    `http://www.example.com`
     assert
    assert
+    `tel:+1-816-555-1212`
    `tel:+1-816-555-1212`
+    `http://user@`
    `http://user@`
+    `http://www.example.com:81`
    `http://www.example.com:81`
     assert
    assert
+    `https://alice:@www.example.com`
    `https://alice:@www.example.com`
+    `?a+b=c%2Bd`
    `?a+b=c%2Bd`
+    `///foo`
    `///foo`
+    `http://#`
    `http://#`
+    `?query=http://example.com`
    `?query=http://example.com`
+    `telnet://192.0.2.16:80/`
    `telnet://192.0.2.16:80/`
+    `news:comp.infosystems.www.servers.unix`
    `news:comp.infosystems.www.servers.unix`
+    `//user@foo/path?q=b`
    `//user@foo/path?q=b`
+    `http://192.0.2.16:81/`
    `http://192.0.2.16:81/`
+    `http:`
    `http:`
+    `http://www.example.com/foo?`
    `http://www.example.com/foo?`
+    `http://:8000`
    `http://:8000`
+    `http:#`
    `http:#`
+    `http://www.example.com/foo?q=1`
    `http://www.example.com/foo?q=1`
+    `?q=1`
    `?q=1`
+    `https://%3AD:%40_%40@www.example.com`
    `https://%3AD:%40_%40@www.example.com`
+    `http://www.foo-bar.example.com`
    `http://www.foo-bar.example.com`
+    `mysql://a,b,c/bar`
    `mysql://a,b,c/bar`
+    `http:?#`
    `http:?#`
+    `http://www.example.com:81/`
    `http://www.example.com:81/`
+    `file://localhost/etc/fstab`
    `file://localhost/etc/fstab`
+    `file:///etc/fstab`
    `file:///etc/fstab`
+    `https://example.com./`
    `https://example.com./`
+    `?q=1?`
    `?q=1?`
+    `http://[::1]:81`
    `http://[::1]:81`
+    `scheme://!$&'()*+,;=hello!:12/path`
    `scheme://!$&'()*+,;=hello!:12/path`
+    `mailto:foo@example.org`
    `mailto:foo@example.org`
+    `//foo`
    `//foo`
+    `//user:pass@bitfission.com:8080/path?a=b#frag`
    `//user:pass@bitfission.com:8080/path?a=b#frag`
+    `http://www.example.com/foo`
    `http://www.example.com/foo`
+    `http:`
    `http:`
+    `http://www.example.com/`
    `http://www.example.com/`
+    `https://example.com.:8443/`
    `https://example.com.:8443/`
+    `ldap://[2001:db8::7]/c=GB?objectClass?one`
    `ldap://[2001:db8::7]/c=GB?objectClass?one`
+    `http://?#`
    `http://?#`
+    `https://www.example.com/#top`
    `https://www.example.com/#top`
+    bad urls
+      assert
      assert
+    `http://192.0.2.16:81`
    `http://192.0.2.16:81`
+    `/path?a=b#frag`
    `/path?a=b#frag`
+    `http://`
    `http://`
+    `urn:oasis:names:specification:docbook:dtd:xml:4.1.2`
    `urn:oasis:names:specification:docbook:dtd:xml:4.1.2`
+    `http://user@/foo`
    `http://user@/foo`
+    `http://host/!$&'()*+,;=:@[hello]`
    `http://host/!$&'()*+,;=:@[hello]`
+    `http://user:pass@bitfission.com:8080/path?a=b#frag`
    `http://user:pass@bitfission.com:8080/path?a=b#frag`
+    `http:.`
    `http:.`
+    `http:example.com/?q=foo`
    `http:example.com/?q=foo`
+    `http:..`
    `http:..`
+    `http://example.com//foo`
    `http://example.com//foo`
+  .unreserved?
  .unreserved?
+  .encode_www_form
+    encodes "10%"
    encodes "10%"
+    encodes " ?&=#+%!<>#\"{}|\\^[]`☺\t:/@$'()*,;"
    encodes " ?&=#+%!<>#\"{}|\\^[]`☺\t:/@$'()*,;"
+    encodes ""
    encodes ""
+    encodes "a b+"
    encodes "a b+"
+    encodes "abc"
    encodes "abc"
+    encodes "a b+"
    encodes "a b+"
+    encodes "* foo=bar baz&hello/"
    encodes "* foo=bar baz&hello/"
+    encodes "1%41"
    encodes "1%41"
+  #opaque?
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+  #to_json
  #to_json
+  .encode_path
  .encode_path
+  #absolute?
     assert
    assert
     assert
    assert
     assert
    assert
-  #+
     assert
    assert
     assert
    assert
     assert
    assert
+  #to_s
     assert
    assert
-  #to_i!
     assert
    assert
     assert
    assert
     assert
    assert
-  #-
+    preserves non-default port
    preserves non-default port
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  #to_i64!
-    basic
    basic
-    doesn't raise on overflow
    doesn't raise on overflow
-  #trunc
     assert
    assert
     assert
    assert
     assert
    assert
-  #to_i64
     assert
    assert
-    basic
    basic
+    preserves port for unknown scheme
    preserves port for unknown scheme
     assert
    assert
     assert
    assert
-  #<=>
-    compares against NaNs
    compares against NaNs
-  #to_f!
+    preserves port for nil scheme
    preserves port for nil scheme
     assert
    assert
     assert
    assert
+  #request_target
     assert
    assert
-  #hash
  #hash
-  #*
+    does not add '?' to the end if the query params are empty
    does not add '?' to the end if the query params are empty
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  unary #-
     assert
    assert
     assert
    assert
     assert
    assert
-  #inspect
     assert
    assert
-  #integer?
     assert
    assert
     assert
    assert
     assert
    assert
+  .from_yaml
  .from_yaml
   .new
-    raises if creating from infinity
    raises if creating from infinity
-    raises if creating from NaN
    raises if creating from NaN
-    new(BigFloat)
    new(BigFloat)
-    new(Int)
    new(Int)
-    new(BigInt)
    new(BigInt)
-    new(BigRational)
    new(BigRational)
-    new(String)
    new(String)
-    raises an ArgumentError unless string denotes valid float
    raises an ArgumentError unless string denotes valid float
-  #floor
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  #ceil
-    assert
    assert
-    assert
    assert
-    assert
    assert
-Log
-  .with_context
-    assigns context via a hash with symbol keys
    assigns context via a hash with symbol keys
-    assigns context via a named tuple
    assigns context via a named tuple
-    with arguments restores context after the block
    with arguments restores context after the block
-    restores context after the block
    restores context after the block
-  #with_context
-    with arguments restores context after the block
    with arguments restores context after the block
-    restores context after the block
    restores context after the block
-  .context
-    existing keys are overwritten by set
    existing keys are overwritten by set
-    is per fiber
    is per fiber
-    is assignable from a named tuple
    is assignable from a named tuple
-    can be set and cleared
    can be set and cleared
-    is extended by set
    is extended by set
-    is assignable from a hash with symbol keys
    is assignable from a hash with symbol keys
-grisu3
-  float32
-    largest denormal
    largest denormal
-    general with rounding down
    general with rounding down
-    small number
    small number
-    general whole number, rounding
    general whole number, rounding
-    general whole number, rounding
    general whole number, rounding
-    general no rounding
    general no rounding
-    large number, rounding
    large number, rounding
-    general with rounding up
    general with rounding up
-    min
    min
-    max
    max
-    smallest normal
    smallest normal
-  float64
-    small number
    small number
-    smallest normal
    smallest normal
-    point at end
    point at end
-    largest denormal
    largest denormal
-    failure case
    failure case
-    another no point move
    another no point move
-    max float
    max float
-    min float
    min float
-    large number
    large number
-HTTP::FormData
-  .build(IO, String)
-    builds a message
    builds a message
-  .parse_content_disposition(String)
-    parses all Content-Disposition fields
    parses all Content-Disposition fields
-  .parse(HTTP::Request)
-    raises on empty body
    raises on empty body
-    raises on no Content-Type
    raises on no Content-Type
-    raises on invalid Content-Type
    raises on invalid Content-Type
-    parses formdata
    parses formdata
-  .parse(IO, String)
-    parses formdata
    parses formdata
-  .build(HTTP::Server::Response, String)
-    builds a message
    builds a message
-Digest::Adler32
-  #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
-  digest with file content
  digest with file content
-  can't call final twice
  can't call final twice
-  resets
  resets
-  calculates hash from UInt8 slices
  calculates hash from UInt8 slices
-  calculates digest from string
  calculates digest from string
-  return the digest size
  return the digest size
-  calculates hash of #to_slice
  calculates hash of #to_slice
-  calculates base64'd hash from string
  calculates base64'd hash from string
-  calculates hash from unicode string
  calculates hash from unicode string
-  should be able to calculate adler32
  should be able to calculate adler32
-  context are independent
  context are independent
-  .dup
-    leads to deterministic updates
    leads to deterministic updates
-    preserves type
    preserves type
-    leads to not sharing state
    leads to not sharing state
-    preserves value
    preserves value
-  should be able to calculate adler32 combined
  should be able to calculate adler32 combined
-  can take a block
  can take a block
-  calculates hash from string
  calculates hash from string
-  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
-Float32 boundaries
-  smallest normal 32
  smallest normal 32
-  boundaries 1.0
  boundaries 1.0
-  largest denormal 32
  largest denormal 32
-  min Float32
  min Float32
-  boundaries 1.5
  boundaries 1.5
-  max Float32
  max Float32
-Benchmark::IPS::Entry
-  #set_cycles
-    sets the cycles to 1 no matter what
    sets the cycles to 1 no matter what
-    sets the number of cycles needed to make 100ms
    sets the number of cycles needed to make 100ms
-  #human_mean
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
+    with query params
    with query params
+  .decode
+    decodes "hello+world"
    decodes "hello+world"
+    decodes "+%2B %20"
    decodes "+%2B %20"
+    decodes "hello%2%2Bworld"
    decodes "hello%2%2Bworld"
+    decodes "hello%2"
    decodes "hello%2"
+    does not decode string when block returns true
    does not decode string when block returns true
+    decodes "hello"
    decodes "hello"
+    decodes "hello%2Bworld"
    decodes "hello%2Bworld"
+    decodes "%27Stop%21%27+said+Fred"
    decodes "%27Stop%21%27+said+Fred"
+    decodes "%e3%81%aa%e3%81%aa"
    decodes "%e3%81%aa%e3%81%aa"
+    decodes "hello%"
    decodes "hello%"
+    decodes "hello+world"
    decodes "hello+world"
+    decodes "hello%2B"
    decodes "hello%2B"
+    decodes "hello%20world"
    decodes "hello%20world"
+    decodes "%E3%81%AA%E3%81%AA"
    decodes "%E3%81%AA%E3%81%AA"
+  .unwrap_ipv6
  .unwrap_ipv6
+  #hostname
     assert
    assert
     assert
    assert
     assert
    assert
+  #==
     assert
    assert
+  .encode_path_segment
  .encode_path_segment
+  #resolve
+    opaque URIs
    opaque URIs
+    path relative references
    path relative references
+    RFC 3986: 5.4.1. Normal Examples
    RFC 3986: 5.4.1. Normal Examples
+    ...
    ...
+    removes dot-segments
    removes dot-segments
+    encoded characters
    encoded characters
+    absolute URI references
    absolute URI references
+    fragment
    fragment
+    multiple slashes
    multiple slashes
+    Extras
    Extras
+    scheme-relative
    scheme-relative
+    RFC 3986: 5.4.2. Abnormal Examples
    RFC 3986: 5.4.2. Abnormal Examples
+    path-absolute URI references
    path-absolute URI references
+    relative base
    relative base
+  #userinfo
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  #calculate_stats
-    correctly calculates basic stats
    correctly calculates basic stats
-  #human_iteration_time
+  #relative?
     assert
    assert
+  .encode
+    encodes "https://en.wikipedia.org/wiki/Crystal (programming language)"
    encodes "https://en.wikipedia.org/wiki/Crystal (programming language)"
+    encodes "hello%2"
    encodes "hello%2"
+    encodes "\n"
    encodes "\n"
+    encodes "\xFF"
    encodes "\xFF"
+    encodes "hello world"
    encodes "hello world"
+    does not encode character when block returns true
    does not encode character when block returns true
+    encodes "hello+world"
    encodes "hello+world"
+    encodes "'Stop!' said Fred"
    encodes "'Stop!' said Fred"
+    encodes "'Stop!' said Fred"
    encodes "'Stop!' said Fred"
+    encodes "hello%"
    encodes "hello%"
+    encodes "hello world"
    encodes "hello world"
+    encodes "hello+"
    encodes "hello+"
+    encodes "なな"
    encodes "なな"
+    encodes "hello%2+world"
    encodes "hello%2+world"
+    encodes "hello"
    encodes "hello"
+  #to_yaml
  #to_yaml
+  .decode_www_form
+    decodes "1%41%42%43"
    decodes "1%41%42%43"
+    decodes "abc"
    decodes "abc"
+    decodes ""
    decodes ""
+    encodes "hello+"
    encodes "hello+"
+    encodes "'Stop!' said Fred"
    encodes "'Stop!' said Fred"
+    decodes "a+b"
    decodes "a+b"
+    decodes "123%45%6"
    decodes "123%45%6"
+    encodes "hello+world"
    encodes "hello+world"
+    decodes "%1"
    decodes "%1"
+    decodes "%"
    decodes "%"
+    decodes "1%41"
    decodes "1%41"
+    decodes "+%2B %20"
    decodes "+%2B %20"
+    encodes "hello%2+world"
    encodes "hello%2+world"
+    decodes "a%20b"
    decodes "a%20b"
+    decodes "%zzzzz"
    decodes "%zzzzz"
+    decodes "%4a"
    decodes "%4a"
+    decodes "%20%3F%26%3D%23%2B%25%21%3C%3E%23%22%7B%7D%7C%5C%5E%5B%5D%60%E2%98%BA%09%3A%2F%40%24%27%28%29%2A%2C%3B"
    decodes "%20%3F%26%3D%23%2B%25%21%3C%3E%23%22%7B%7D%7C%5C%5E%5B%5D%60%E2%98%BA%09%3A%2F%40%24%27%28%29%2A%2C%3B"
+  #update_query_params
+    commits changes to the URI::Object
    commits changes to the URI::Object
+    returns self
    returns self
+  #authority
     assert
    assert
     assert
    assert
     assert
    assert
@@ -16920,1582 +15310,2367 @@
     assert
    assert
     assert
    assert
     assert
    assert
-record
-  can clone record with parent type
  can clone record with parent type
-  defines record with assignments
  defines record with assignments
-  can copy_with record with parent type
  can copy_with record with parent type
-  defines record with type declarations
  defines record with type declarations
-  defines record with type declaration and initialization
  defines record with type declaration and initialization
-  uses the default values on the ivars
  uses the default values on the ivars
-OpenSSL::SSL::Server
-  detects SNI hostname
  detects SNI hostname
-  sync_close
  sync_close
-  #accept?
-    accepts
    accepts
-  .open
  .open
-  #accept
-    doesn't to SSL handshake with start_immediately = false
    doesn't to SSL handshake with start_immediately = false
-    accepts and do handshake
    accepts and do handshake
-  .new
  .new
-  don't sync_close
  don't sync_close
-Class
-  getter
-    defines lazy getter with block returning false
    defines lazy getter with block returning false
-    uses getter with assignment
    uses getter with assignment
-    defines lazy getter with block
    defines lazy getter with block
-    uses getter with type declaration
    uses getter with type declaration
-    uses simple getter
    uses simple getter
-    uses getter with type declaration and default value
    uses getter with type declaration and default value
-  def_hash
-    should return same hash for equal property values
    should return same hash for equal property values
-    shouldn't return same hash for different property values
    shouldn't return same hash for different property values
-  setter
-    uses setter with type declaration and default value
    uses setter with type declaration and default value
-    uses setter with default value
    uses setter with default value
-    uses setter
    uses setter
-    uses setter with type declaration
    uses setter with type declaration
-  #in?
-    works with splatted arguments
    works with splatted arguments
-    works with other objects implementing #includes?
    works with other objects implementing #includes?
-    works with Enumerable-s
    works with Enumerable-s
-  getter?
-    uses getter? with type declaration
    uses getter? with type declaration
-    uses getter? with block
    uses getter? with block
-    uses getter? with type declaration and block
    uses getter? with type declaration and block
-    uses getter? with type declaration and default value
    uses getter? with type declaration and default value
-    uses getter?
    uses getter?
-    uses getter? with default value
    uses getter? with default value
-  delegate
-    forwards #{{ op.id }} with multiple parameters
    forwards #{{ op.id }} with multiple parameters
-    forwards #{{ op.id }} with multiple parameters and block parameter
    forwards #{{ op.id }} with multiple parameters and block parameter
-    forwards #{{ op.id }} with multiple parameters and block parameter
    forwards #{{ op.id }} with multiple parameters and block parameter
-    forwards #{{ op.id }} with multiple parameters and block parameter
    forwards #{{ op.id }} with multiple parameters and block parameter
-    forwards #{{ op.id }} with multiple parameters and block parameter
    forwards #{{ op.id }} with multiple parameters and block parameter
-    forwards #{{ op.id }} with multiple parameters
    forwards #{{ op.id }} with multiple parameters
-    delegates
    delegates
-    delegates []=
    delegates []=
-    forwards #{{ op.id }} with multiple parameters
    forwards #{{ op.id }} with multiple parameters
-    forwards #{{ op.id }} with multiple parameters
    forwards #{{ op.id }} with multiple parameters
-    delegates setter
    delegates setter
-    forwards #{{ op.id }} with multiple parameters and block parameter
    forwards #{{ op.id }} with multiple parameters and block parameter
-    forwards #{{ op.id }} with multiple parameters and block parameter
    forwards #{{ op.id }} with multiple parameters and block parameter
-    forwards #{{ op.id }} with multiple parameters
    forwards #{{ op.id }} with multiple parameters
-    forwards #{{ op.id }} with multiple parameters
    forwards #{{ op.id }} with multiple parameters
-  .set_crystal_type_id
  .set_crystal_type_id
-  applies annotation to lazy property (#9139)
  applies annotation to lazy property (#9139)
-  property
-    defines lazy property with block returning false
    defines lazy property with block returning false
-    defines lazy property with block
    defines lazy property with block
-    uses property with type declaration and default value
    uses property with type declaration and default value
-    uses property with type declaration
    uses property with type declaration
-    uses property
    uses property
-    uses property with default value
    uses property with default value
-  property?
-    uses property? with type declaration and default value
    uses property? with type declaration and default value
-    uses property? with block
    uses property? with block
-    uses property? with type declaration and block
    uses property? with type declaration and block
-    uses property? with default value
    uses property? with default value
-    uses property? with type declaration
    uses property? with type declaration
-    uses property?
    uses property?
-  #not_nil!
-    with message
    with message
-    basic
    basic
-    raises NilAssertionError
    raises NilAssertionError
-    does not copy its receiver when it is a value (#13263)
    does not copy its receiver when it is a value (#13263)
-    removes Nil type
    removes Nil type
-  calls #finalize on #clone'd objects
  calls #finalize on #clone'd objects
-  def_equals
-    compares by reference
    compares by reference
-  property!
-    uses property! with type declaration
    uses property! with type declaration
-    uses property!
    uses property!
-  getter!
-    uses getter!
    uses getter!
-    uses getter! with type declaration
    uses getter! with type declaration
-  #unsafe_as
  #unsafe_as
-URI::Punycode
-  encodes Hello-Another-Way-それぞれ to Hello-Another-Way--fc4qua97gba
  encodes Hello-Another-Way-それぞれ to Hello-Another-Way--fc4qua97gba
-  decodes MajiKoi5-783gue6qz075azm5e to MajiでKoiする5秒前
  decodes MajiKoi5-783gue6qz075azm5e to MajiでKoiする5秒前
-  encodes ひとつ屋根の下2 to 2-u9tlzr9756bt3uc0v
  encodes ひとつ屋根の下2 to 2-u9tlzr9756bt3uc0v
-  encodes そのスピードで to d9juau41awczczp
  encodes そのスピードで to d9juau41awczczp
-  translate to ascii only host name
  translate to ascii only host name
-  encodes MajiでKoiする5秒前 to MajiKoi5-783gue6qz075azm5e
  encodes MajiでKoiする5秒前 to MajiKoi5-783gue6qz075azm5e
-  decodes Hello-Another-Way--fc4qua05auwb3674vfr0b to Hello-Another-Way-それぞれの場所
  decodes Hello-Another-Way--fc4qua05auwb3674vfr0b to Hello-Another-Way-それぞれの場所
-  encodes Hello-Another-Way-それぞれの場所 to Hello-Another-Way--fc4qua05auwb3674vfr0b
  encodes Hello-Another-Way-それぞれの場所 to Hello-Another-Way--fc4qua05auwb3674vfr0b
-  decodes de-jg4avhby1noc0d to パフィーdeルンバ
  decodes de-jg4avhby1noc0d to パフィーdeルンバ
-  decodes 2-u9tlzr9756bt3uc0v to ひとつ屋根の下2
  decodes 2-u9tlzr9756bt3uc0v to ひとつ屋根の下2
-  decodes Hello-Another-Way--fc4qua97gba to Hello-Another-Way-それぞれ
  decodes Hello-Another-Way--fc4qua97gba to Hello-Another-Way-それぞれ
-  encodes 安室奈美恵-with-SUPER-MONKEYS to -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n
  encodes 安室奈美恵-with-SUPER-MONKEYS to -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n
-  decodes -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n to 安室奈美恵-with-SUPER-MONKEYS
  decodes -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n to 安室奈美恵-with-SUPER-MONKEYS
-  decodes d9juau41awczczp to そのスピードで
  decodes d9juau41awczczp to そのスピードで
-  encodes パフィーdeルンバ to de-jg4avhby1noc0d
  encodes パフィーdeルンバ to de-jg4avhby1noc0d
-  encodes 3年B組金八先生 to 3B-ww4c5e180e575a65lsy2b
  encodes 3年B組金八先生 to 3B-ww4c5e180e575a65lsy2b
-  decodes 3B-ww4c5e180e575a65lsy2b to 3年B組金八先生
  decodes 3B-ww4c5e180e575a65lsy2b to 3年B組金八先生
-OpenSSL::SSL::Socket
-  returns the cipher that is currently in use
  returns the cipher that is currently in use
-  returns the TLS version
  returns the TLS version
-  interprets graceful EOF of underlying socket as SSL termination
  interprets graceful EOF of underlying socket as SSL termination
-  returns selected alpn protocol
  returns selected alpn protocol
-  accepts clients that only write then close the connection
  accepts clients that only write then close the connection
-  returns the peer certificate
  returns the peer certificate
-  closes connection to server that doesn't properly terminate SSL session
  closes connection to server that doesn't properly terminate SSL session
-Random::PCG32
-  can jump ahead
  can jump ahead
-  generates random numbers as generated official implementation
  generates random numbers as generated official implementation
-  can jump back
  can jump back
-  can be initialized without explicit seed
  can be initialized without explicit seed
-Channel(T)
-  .select
-    receive nil-on-close single-channel
-      types nilable channel
      types nilable channel
-      returns nil if channel was closed
      returns nil if channel was closed
-      types
      types
-      awakes all waiting selects
      awakes all waiting selects
-      returns nil channel is closed while waiting
      returns nil channel is closed while waiting
-    receive raise-on-close single-channel
-      types
      types
-      awakes all waiting selects
      awakes all waiting selects
-      raises if channel was closed
      raises if channel was closed
-      types nilable channel
      types nilable channel
-      raises if channel is closed while waiting
      raises if channel is closed while waiting
-    timeout
-      types
      types
-      negative amounts should not trigger timeout
      negative amounts should not trigger timeout
-      triggers timeout (reverse order)
      triggers timeout (reverse order)
-      triggers timeout
      triggers timeout
-      allows receiving while waiting (same fiber multiple times)
      allows receiving while waiting (same fiber multiple times)
-      allows receiving while waiting (reverse order)
      allows receiving while waiting (reverse order)
-      receive raise-on-close raises if channel was closed while waiting
      receive raise-on-close raises if channel was closed while waiting
-      allows receiving while waiting
      allows receiving while waiting
-      send raise-on-close raises if channel was closed while waiting
      send raise-on-close raises if channel was closed while waiting
-      triggers timeout (same fiber multiple times)
      triggers timeout (same fiber multiple times)
-      receive nil-on-close returns index of closed while waiting
      receive nil-on-close returns index of closed while waiting
-    receive raise-on-close multi-channel
-      types
      types
-    receive nil-on-close multi-channel
-      types
      types
-      returns index of closed channel
      returns index of closed channel
-    send raise-on-close single-channel
-      raises if channel is closed while waiting
      raises if channel is closed while waiting
-      types nilable channel
      types nilable channel
-      raises if channel was closed
      raises if channel was closed
-      types
      types
-      awakes all waiting selects
      awakes all waiting selects
-    send raise-on-close multi-channel
-      types
      types
-    mix of receive and receive? multi-channel
-      returns nil if receive channel was not ready and receive? channel was closed
      returns nil if receive channel was not ready and receive? channel was closed
-      raises if receive channel was closed and receive? channel was not ready
      raises if receive channel was closed and receive? channel was not ready
-  does not raise or change its status when it is closed more than once
  does not raise or change its status when it is closed more than once
-  does send_first
  does send_first
-  creates unbuffered with no arguments
  creates unbuffered with no arguments
-  does receive_first
  does receive_first
-  send returns channel
  send returns channel
-  creates buffered with capacity argument
  creates buffered with capacity argument
-  .non_blocking_select
-    returns correct index for array argument
    returns correct index for array argument
-    receive raise-on-close multi-channel
-      types
      types
-    send raise-on-close multi-channel
-      types
      types
-    mix of receive and receive? multi-channel
-      raises if receive channel was close and receive? channel was not ready
      raises if receive channel was close and receive? channel was not ready
-      returns nil if receive channel was not ready and receive? channel was closed
      returns nil if receive channel was not ready and receive? channel was closed
-    send raise-on-close single-channel
-      types
      types
-    receive nil-on-close single-channel
-      types
      types
-      returns nil if channel was closed
      returns nil if channel was closed
-    receive raise-on-close single-channel
-      types
      types
-    timeout
-      receive nil-on-close returns index of closed while waiting
      receive nil-on-close returns index of closed while waiting
-      types
      types
-      send raise-on-close raises if channel was closed while waiting
      send raise-on-close raises if channel was closed while waiting
-      negative amounts should not trigger timeout
      negative amounts should not trigger timeout
-      should not trigger timeout
      should not trigger timeout
-      receive raise-on-close raises if channel was closed while waiting
      receive raise-on-close raises if channel was closed while waiting
+UInt
+  compares with <=>
  compares with <=>
+  &-
+    returns the wrapped negation
    returns the wrapped negation
+__mulodi4
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+LLVM::ABI::X86_64
+  size
+    for pointer
    for pointer
+    for integer
    for integer
+    for struct
    for struct
+    for array
    for array
+    for float
    for float
+    for double
    for double
+    for packed struct
    for packed struct
+  align
+    for packed struct
    for packed struct
+    for array
    for array
+    for integer
    for integer
+    for pointer
    for pointer
+    for struct
    for struct
+    for double
    for double
+    for float
    for float
+  abi_info
+    does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
+    does with structs less than 64 bits
    does with structs less than 64 bits
+    does with structs larger than 128 bits
    does with structs larger than 128 bits
+    does with primitives
    does with primitives
+log/spec
+  can get the entry matched by next
  can get the entry matched by next
+  fails on non-consecutive logs
  fails on non-consecutive logs
+  can capture from all sources
  can capture from all sources
+  can capture with source pattern
  can capture with source pattern
+  yield and returns the dsl
  yield and returns the dsl
+  allows matching with regex
  allows matching with regex
+  allows matching logs strictly
  allows matching logs strictly
+  entries can be cleared
  entries can be cleared
+  can capture in different checkers
  can capture in different checkers
+  allows matching non-consecutive logs
  allows matching non-consecutive logs
+  allows matching logs
  allows matching logs
+  can get the entry matched by check
  can get the entry matched by check
+  it does not capture below level
  it does not capture below level
+  fails on non-empty logs
  fails on non-empty logs
 MIME::Multipart::Builder
+  generates valid multipart messages
  generates valid multipart messages
   .preamble
     accepts different data types
    accepts different data types
     raises when called after starting the body
    raises when called after starting the body
   #content_type
     calculates the content type
    calculates the content type
-  .finish
-    raises if no body exists
    raises if no body exists
-    raises if already finished
    raises if already finished
-  .body_part
-    raises when called after epilogue
    raises when called after epilogue
-    accepts different data types
    accepts different data types
-    raises when called after finishing
    raises when called after finishing
-  generates valid multipart messages with preamble and epilogue
  generates valid multipart messages with preamble and epilogue
-  generates valid multipart messages
  generates valid multipart messages
   .epilogue
     raises when called after finishing
    raises when called after finishing
     accepts different data types
    accepts different data types
     raises when called with no body parts
    raises when called with no body parts
-Crystal::System
-  .printf
-    supports %d
    supports %d
-    works
    works
-    supports %x
    supports %x
-    supports %p
    supports %p
-    supports %s
    supports %s
-    supports %u
    supports %u
-    supports %l width
    supports %l width
-Log::ShortFormat
-  shows the context data
  shows the context data
-  formats an entry
  formats an entry
-  hides the source if empty
  hides the source if empty
-  shows context and entry data
  shows context and entry data
-  appends the exception
  appends the exception
-HTTP::Server
-  lists addresses
  lists addresses
-  #bind
-    fails after listen
    fails after listen
-    with URI
-      parses SSL
      parses SSL
-      fails SSL with invalid params
      fails SSL with invalid params
-      parses TCP
      parses TCP
-      fails with unknown scheme
      fails with unknown scheme
-      accepts URI
      accepts URI
-      accepts String
      accepts String
-    fails after close
    fails after close
-  handles Expect: 100-continue correctly when body is read
  handles Expect: 100-continue correctly when body is read
-  doesn't raise on accept after close #2692
  doesn't raise on accept after close #2692
-  can process simultaneous SSL handshakes
  can process simultaneous SSL handshakes
-  #max_request_line_size
-    sets and gets size
    sets and gets size
-    respects size on request
    respects size on request
-  handles Expect: 100-continue correctly when body isn't read
  handles Expect: 100-continue correctly when body isn't read
-  #max_request_line_size
-    respects size on request
    respects size on request
-    sets and gets size
    sets and gets size
-  #bind_unix
-    binds to different unix sockets
    binds to different unix sockets
-  #close
-    closes gracefully
    closes gracefully
-  #max_headers_size
-    sets and gets size
    sets and gets size
-    respects size on request
    respects size on request
-  reuses the TCP port (SO_REUSEPORT)
  reuses the TCP port (SO_REUSEPORT)
-  #bind_tls
-    binds SSL server context
    binds SSL server context
-  #remote_address / #local_address
-    for https server
    for https server
-    for http server
    for http server
-  binds to unused port
  binds to unused port
-  #listen
-    fails after close
    fails after close
-    fails after listen
    fails after listen
-  closes the server
  closes the server
-  handles exception during SSL handshake (#6577)
  handles exception during SSL handshake (#6577)
-  binds to different ports
  binds to different ports
-Enumerable
-  all? without block
-    returns false
    returns false
-    returns true
    returns true
-  min_of?
-    returns nil if empty
    returns nil if empty
-  reduce?
-    allows block return type to be different from element type
    allows block return type to be different from element type
-    assert
    assert
-    returns nil if empty
    returns nil if empty
-  none? without block
-    assert
    assert
-    assert
    assert
-  none?
-    assert
    assert
-    assert
    assert
-  in slices of
-    assert
    assert
-    assert
    assert
-    raises argument error if size is less than 0
    raises argument error if size is less than 0
-    assert
    assert
-    assert
    assert
-  one?
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  min?
-    returns nil if empty
    returns nil if empty
-  min
-    assert
    assert
-    raises if not comparable in min(n)
    raises if not comparable in min(n)
-    raises if not comparable
    raises if not comparable
-    assert
    assert
-    assert
    assert
-    raises if n is negative
    raises if n is negative
-    assert
    assert
-    assert
    assert
-    does not modify the array
    does not modify the array
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    raises if empty
    raises if empty
-  partition
-    assert
    assert
-    assert
    assert
-    with mono type on mono type
    with mono type on mono type
-    with missing type on union type
    with missing type on union type
-    with union type on union type
    with union type on union type
-    with mono type on union type
    with mono type on union type
-  minmax_of?
-    returns two nils if empty
    returns two nils if empty
-  any? with block
-    returns false if all elements does not fulfill the condition
    returns false if all elements does not fulfill the condition
-    returns true if at least one element fulfills the condition
    returns true if at least one element fulfills the condition
-  index_by
-    overrides values if a value is returned twice
    overrides values if a value is returned twice
-    creates a hash indexed by the value returned by the block
    creates a hash indexed by the value returned by the block
-  to_a
-    converts to an Array
    converts to an Array
-  sample
-    multiple-element
-      samples k elements out of n
      samples k elements out of n
-      samples k elements out of n, where k > n
      samples k elements out of n, where k > n
-      samples k elements out of n, with random
      samples k elements out of n, with random
-      samples 1 element
      samples 1 element
-      raises on k < 0
      raises on k < 0
-      samples 0 elements
      samples 0 elements
-    single-element
-      raises on empty self
      raises on empty self
-      samples without random
      samples without random
-      samples with random
      samples with random
-  #join
-    (separator, &)
    (separator, &)
-    (io, separator)
    (io, separator)
-    (io, &)
    (io, &)
-    ()
    ()
-    (separator, io, &) (deprecated)
    (separator, io, &) (deprecated)
-    (separator, io) (deprecated)
    (separator, io) (deprecated)
-    (io)
    (io)
-    (separator)
    (separator)
-    (&)
    (&)
-    (io, separator, &)
    (io, separator, &)
-  min_by
-    assert
    assert
-  max_of
-    assert
    assert
-    raises if not comparable
    raises if not comparable
-  flat_map
-    accepts mixed element types
    accepts mixed element types
-    does example 1
    does example 1
-    does example 4
    does example 4
-    does example 2
    does example 2
-    does example 3
    does example 3
-    flattens iterators
    flattens iterators
-  each_slice
-    reuses with true
    reuses with true
-    reuses with existing array
    reuses with existing array
-    returns full slices
    returns full slices
-    returns each_slice iterator
    returns each_slice iterator
-    returns partial slices
    returns partial slices
-  skip
-    returns an array without the skipped elements
    returns an array without the skipped elements
-    raises if count is negative
    raises if count is negative
-    returns an empty array when skipping more elements than array size
    returns an empty array when skipping more elements than array size
-  max
-    assert
    assert
-    raises if not comparable in max(n)
    raises if not comparable in max(n)
-    raises if n is negative
    raises if n is negative
-    raises if not comparable
    raises if not comparable
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    does not modify the array
    does not modify the array
-    raises if empty
    raises if empty
-    assert
    assert
-    assert
    assert
-  tally
-    returns a hash with counts according to the value
    returns a hash with counts according to the value
-    with hash
-      updates existing hash with counts according to the value
      updates existing hash with counts according to the value
-      ignores the default value
      ignores the default value
-      returns a hash with counts according to the value
      returns a hash with counts according to the value
-      tallies an interface type
      tallies an interface type
-      returns a hash with Int64 counts according to the value
      returns a hash with Int64 counts according to the value
-  tally_by
-    with hash
-      returns a hash with counts according to the value returned by the block
      returns a hash with counts according to the value returned by the block
-    returns a hash with counts according to the value returned by the block
    returns a hash with counts according to the value returned by the block
-  index with an object
-    returns nil if the object was not found
    returns nil if the object was not found
-    returns the index of that object if found
    returns the index of that object if found
-  index! with an object
-    returns the index of that object if found
    returns the index of that object if found
-    raises if not found
    raises if not found
-  to_h
-    with block
    with block
-    for tuples
    for tuples
-    for array
    for array
-  each_with_object
-    yields the element and the given object
    yields the element and the given object
-    gets each_with_object iterator
    gets each_with_object iterator
-  size without block
-    returns the number of elements in the Enumerable
    returns the number of elements in the Enumerable
-  each_with_index
-    accepts an optional offset parameter
    accepts an optional offset parameter
-    yields the element and the index
    yields the element and the index
-    gets each_with_index iterator
    gets each_with_index iterator
-  group_by
-    assert
    assert
-    groups can group by size (like the doc example)
    groups can group by size (like the doc example)
-  #accumulate
-    generic cumulative fold, with init
-      assert
      assert
-      assert
      assert
-      preserves initial type
      preserves initial type
-    prefix sums
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    prefix sums, with init
-      preserves initial type
      preserves initial type
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    generic cumulative fold
-      assert
      assert
-      assert
      assert
-  max?
-    returns nil if empty
    returns nil if empty
-  each_step
-    doesn't accept a step of 0
    doesn't accept a step of 0
-    doesn't accept a negative offset
    doesn't accept a negative offset
-    "yields every 2nd element" iterator
    "yields every 2nd element" iterator
-    doesn't accept a negative step
    doesn't accept a negative step
-    "accepts an offset larger then the enumerable size" yielding
    "accepts an offset larger then the enumerable size" yielding
-    "accepts a step larger then the enumerable size" iterator
    "accepts a step larger then the enumerable size" iterator
-    "yields every 2nd element" yielding
    "yields every 2nd element" yielding
-    "accepts an offset larger then the step size" yielding
    "accepts an offset larger then the step size" yielding
-    "accepts a step larger then the enumerable size" yielding
    "accepts a step larger then the enumerable size" yielding
-    "accepts an optional offset parameter" iterator
    "accepts an optional offset parameter" iterator
-    "accepts an offset of 0" iterator
    "accepts an offset of 0" iterator
-    "accepts an optional offset parameter" yielding
    "accepts an optional offset parameter" yielding
-    "accepts an offset of 0" yielding
    "accepts an offset of 0" yielding
-    "accepts an offset larger then the enumerable size" iterator
    "accepts an offset larger then the enumerable size" iterator
-    "accepts an offset larger then the step size" iterator
    "accepts an offset larger then the step size" iterator
-  all? with block
-    returns false
    returns false
-    returns true
    returns true
-  includes?
-    is true if the object exists in the collection
    is true if the object exists in the collection
-    is false if the object is not part of the collection
    is false if the object is not part of the collection
-  compact map
-    assert
    assert
-  index! with a block
-    raises if not found
    raises if not found
-    returns the index of the first element where the block returns true
    returns the index of the first element where the block returns true
-  take_while
-    keeps elements while the block returns true
    keeps elements while the block returns true
-    does not call the block again once it returned false
    does not call the block again once it returned false
-    returns an empty Array if the block is false for the first element
    returns an empty Array if the block is false for the first element
-    returns the full Array if the condition is always true
    returns the full Array if the condition is always true
-  first
-    gets first
    gets first
-    raises if enumerable empty
    raises if enumerable empty
-    assert
    assert
-    calls block if empty
    calls block if empty
-  count with block
-    returns the number of the times the item is present
    returns the number of the times the item is present
-  #each_cons
-    yield
-      yields running pairs with reuse = array
      yields running pairs with reuse = array
-      returns running pairs
      returns running pairs
-      returns running triples
      returns running triples
-      yields running pairs with reuse = deque
      yields running pairs with reuse = deque
-      yields running pairs with reuse = true
      yields running pairs with reuse = true
-    iterator
-      iterates with reuse = true
      iterates with reuse = true
-      iterates with reuse = deque
      iterates with reuse = deque
-      iterates with reuse = array
      iterates with reuse = array
-      iterates
      iterates
-  #each_cons_pair
-    returns running pairs
    returns running pairs
-  min_of
-    raises if not comparable
    raises if not comparable
-    assert
    assert
-  in_groups_of
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    reuses with existing array
    reuses with existing array
-    reuses with true
    reuses with true
-    assert
    assert
-    raises argument error if size is less than 0
    raises argument error if size is less than 0
-    assert
    assert
-    takes a block
    takes a block
-  index with a block
-    returns the index of the first element where the block returns true
    returns the index of the first element where the block returns true
-    returns nil if no object could be found
    returns nil if no object could be found
-  minmax?
-    raises if not comparable
    raises if not comparable
-    returns two nils if empty
    returns two nils if empty
-  min_by?
-    returns nil if empty
    returns nil if empty
-  chunk
-    does not return elements for which the block returns Enumerable::Chunk::Drop
    does not return elements for which the block returns Enumerable::Chunk::Drop
-    nil allowed as value
    nil allowed as value
-    returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays
    returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays
-    works
    works
-    work with class
    work with class
-    returns elements of the Enumerable in an Array of Tuple, {v, ary}, where 'ary' contains the consecutive elements for which the block returned the value 'v'
    returns elements of the Enumerable in an Array of Tuple, {v, ary}, where 'ary' contains the consecutive elements for which the block returned the value 'v'
-    drop all
    drop all
-    rewind
    rewind
-    reuses true
    reuses true
-    alone all
    alone all
-    works with block
    works with block
-    nil 2 case
    nil 2 case
-  #empty?
-    assert
    assert
-    assert
    assert
-  to_a
-    with a block
    with a block
-    without a block
    without a block
-    without a block of an interface type
    without a block of an interface type
-  chunks
-    work with pure enumerable
    work with pure enumerable
-    works
    works
-    nil 2 case
    nil 2 case
-    nil allowed as value
    nil allowed as value
-    work with class
    work with class
-    alone all
    alone all
-    drop all
    drop all
-    returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays
    returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays
-    does not return elements for which the block returns Enumerable::Chunk::Drop
    does not return elements for which the block returns Enumerable::Chunk::Drop
-  max_by?
-    returns nil if empty
    returns nil if empty
-  all? with pattern
-    returns false
    returns false
-    returns true
    returns true
-  sum
-    strings
    strings
-    array of arrays
    array of arrays
-    assert
    assert
-    float
    float
-    assert
    assert
-    slices
    slices
-    uses additive_identity from type
    uses additive_identity from type
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  first
-    raises if count is negative
    raises if count is negative
-    assert
    assert
-    assert
    assert
-  map_with_index
-    yields the element and the index of an iterator
    yields the element and the index of an iterator
-    yields the element and the index
    yields the element and the index
-  minmax_by?
-    returns two nils if empty
    returns two nils if empty
-  none? with pattern
-    assert
    assert
-    assert
    assert
-  skip_while
-    returns the full Array if the first check is false
    returns the full Array if the first check is false
-    returns an empty array if the condition is always true
    returns an empty array if the condition is always true
-    does not yield to the block anymore once it returned false
    does not yield to the block anymore once it returned false
-    skips elements while the condition holds true
    skips elements while the condition holds true
-  minmax
-    raises if empty
    raises if empty
-    assert
    assert
-  minmax_by
-    assert
    assert
-  zip?
-    works for Iterators as receiver
    works for Iterators as receiver
-  reduce
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    allows block return type to be different from element type
    allows block return type to be different from element type
-    does not raise if empty if there is a memo argument
    does not raise if empty if there is a memo argument
-    raises if empty
    raises if empty
-  minmax_of
-    raises if not comparable
    raises if not comparable
-    assert
    assert
-  cycle
-    calls forever if we don't break
    calls forever if we don't break
-    calls the block n times given the optional argument
    calls the block n times given the optional argument
-  select
-    with type
    with type
-    with pattern
    with pattern
-    selects the values for which the block returns true
    selects the values for which the block returns true
-  first?
-    gets first?
    gets first?
-    returns nil if enumerable empty
    returns nil if enumerable empty
-  #to_set
-    with block
-      creates a Set from running the block against the collection's elements
      creates a Set from running the block against the collection's elements
-    without block
-      creates a Set from the unique elements of the collection
      creates a Set from the unique elements of the collection
-  map
-    leaves the original unmodified
    leaves the original unmodified
-    applies the function to each element and returns a new array
    applies the function to each element and returns a new array
-  any? with pattern
-    returns true
    returns true
-    returns false
    returns false
-  max_of?
-    returns nil if empty
    returns nil if empty
-  find
-    doesn't find with default value
    doesn't find with default value
-    doesn't find
    doesn't find
-    finds
    finds
-  reject
-    with type
    with type
-    rejects with pattern
    rejects with pattern
-    with type, for tuples
    with type, for tuples
-    rejects the values for which the block returns true
    rejects the values for which the block returns true
-  find!
-    finds
    finds
-    raises if not found
    raises if not found
-  max_by
-    assert
    assert
-  zip
-    works for Iterators as receiver
    works for Iterators as receiver
-  product
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    uses zero from type
    uses zero from type
+  generates valid multipart messages with preamble and epilogue
  generates valid multipart messages with preamble and epilogue
+  .body_part
+    raises when called after epilogue
    raises when called after epilogue
+    raises when called after finishing
    raises when called after finishing
+    accepts different data types
    accepts different data types
+  .finish
+    raises if already finished
    raises if already finished
+    raises if no body exists
    raises if no body exists
+select
+  select many receivers
  select many receivers
+  non-blocking nil-on-close multi-channel
+    types and exec when with nil if channel is closed while waiting (2)
    types and exec when with nil if channel is closed while waiting (2)
+    exec else if no message was ready
    exec else if no message was ready
+    types and exec when (1)
    types and exec when (1)
+    types and exec when with nil if channel is closed while waiting (1)
    types and exec when with nil if channel is closed while waiting (1)
+    types and exec when with nil if channel was closed (1)
    types and exec when with nil if channel was closed (1)
+    types and exec when with nil if channel was closed (2)
    types and exec when with nil if channel was closed (2)
+    types and exec when (2)
    types and exec when (2)
+  select should work with send which started before receive, fixed #3862
  select should work with send which started before receive, fixed #3862
+  non-blocking raise-on-close single-channel
+    raises if channel was closed
    raises if channel was closed
+    types and exec when if message was ready
    types and exec when if message was ready
+    exec else if no message was ready
    exec else if no message was ready
+  stress select with send/receive in multiple fibers
  stress select with send/receive in multiple fibers
+  blocking nil-on-close multi-channel
+    types and exec when with nil if channel was closed (2)
    types and exec when with nil if channel was closed (2)
+    types and exec when with nil if channel is closed while waiting (1)
    types and exec when with nil if channel is closed while waiting (1)
+    types and exec when (1)
    types and exec when (1)
+    types and exec when (2)
    types and exec when (2)
+    types and exec when with nil if channel is closed while waiting (2)
    types and exec when with nil if channel is closed while waiting (2)
+    types and exec when with nil if channel was closed (1)
    types and exec when with nil if channel was closed (1)
+  prioritize by order when entering in a select
  prioritize by order when entering in a select
+  blocking raise-on-close multi-channel
+    raises if channel was closed (1)
    raises if channel was closed (1)
+    types and exec when (2)
    types and exec when (2)
+    types and exec when (1)
    types and exec when (1)
+    raises if channel was closed (2)
    raises if channel was closed (2)
+  non-blocking nil-on-close single-channel
+    types and exec when with nil if channel was closed
    types and exec when with nil if channel was closed
+    types and exec when
    types and exec when
+    exec else if no message was ready
    exec else if no message was ready
+  non-blocking raise-on-close multi-channel
+    types and exec when (1)
    types and exec when (1)
+    types and exec when (2)
    types and exec when (2)
+    exec else if no message was ready
    exec else if no message was ready
+    raises if channel was closed (1)
    raises if channel was closed (1)
+    raises if channel was closed (2)
    raises if channel was closed (2)
+  select many senders
  select many senders
+  select same channel multiple times
  select same channel multiple times
+  select many receivers, senders
  select many receivers, senders
+  blocking raise-on-close single-channel
+    raises if channel was closed
    raises if channel was closed
+    types and exec when
    types and exec when
+  select fiber has one chance to be enqueued into scheduler (2)
  select fiber has one chance to be enqueued into scheduler (2)
+  select fiber has one chance to be enqueued into scheduler (1)
  select fiber has one chance to be enqueued into scheduler (1)
+  blocking nil-on-close single-channel
+    types and exec when with nil if channel was closed
    types and exec when with nil if channel was closed
+    types and exec when
    types and exec when
+GC
+  .stats
  .stats
+  raises if calling enable when not disabled
  raises if calling enable when not disabled
+  .prof_stats
  .prof_stats
+  compiles GC.stats
  compiles GC.stats
+JUnit Formatter
+  reports successful results
  reports successful results
+  encodes class names from the relative file path
  encodes class names from the relative file path
+  report failure stacktrace if present
  report failure stacktrace if present
+  outputs timestamp according to RFC 3339
  outputs timestamp according to RFC 3339
+  reports mixed results
  reports mixed results
+  reports skipped
  reports skipped
+  report error stacktrace if present
  report error stacktrace if present
+  escapes spec names
  escapes spec names
+  reports errors
  reports errors
+  reports failures
  reports failures
+Complex
+  to_s
  to_s
+  Math
+    log10
    log10
+    exp
    exp
+    sqrt
    sqrt
+    log
    log
+    log2
    log2
+  clones
  clones
+  polar
  polar
+  test multiplicative_identity
  test multiplicative_identity
+  i
  i
+  /
+    complex / number
    complex / number
+    number / complex
    number / complex
+    complex / complex
    complex / complex
+  phase
  phase
+  test zero?
  test zero?
+  inv
  inv
+  cis
  cis
+  inspect
  inspect
+  sign
+    infinity
    infinity
+    real zero
    real zero
+    imaginary zero
    imaginary zero
+    complex zero
    complex zero
+    finite, non-zero
    finite, non-zero
+    not-a-number
    not-a-number
+  conj
  conj
+  -
+    complex - complex
    complex - complex
+    complex - number
    complex - number
+    - complex
    - complex
+    number - complex
    number - complex
+  ==
+    complex == number
    complex == number
+    complex == complex
    complex == complex
+    number == complex
    number == complex
+  *
+    complex * complex
    complex * complex
+    number * complex
    number * complex
+    complex * number
    complex * number
+  test additive_identity
  test additive_identity
+  abs2
  abs2
+  hashes real without imag like real only
  hashes real without imag like real only
+  abs
  abs
+  test zero
  test zero
+  +
+    number + complex
    number + complex
+    complex + number
    complex + number
+    complex + complex
    complex + complex
+    + complex
    + complex
+  rounds
  rounds
+  as numbers
+    division between Complex / UInt64 returns Complex
    division between Complex / UInt64 returns Complex
+    division between UInt16 / Complex returns Complex
    division between UInt16 / Complex returns Complex
+    converts from UInt8 to Complex
    converts from UInt8 to Complex
+    division between Int8 / Complex returns Complex
    division between Int8 / Complex returns Complex
+    division between Complex / UInt128 returns Complex
    division between Complex / UInt128 returns Complex
+    converts from Int32 to Complex
    converts from Int32 to Complex
+    converts from Complex to Int16
    converts from Complex to Int16
+    converts from Float32 to Complex
    converts from Float32 to Complex
+    converts from Complex to Int128
    converts from Complex to Int128
+    converts from Float32 to Complex
    converts from Float32 to Complex
+    converts from Complex to Int32
    converts from Complex to Int32
+    converts from Complex to Float64
    converts from Complex to Float64
+    converts from Complex to UInt64
    converts from Complex to UInt64
+    converts from Int128 to Complex
    converts from Int128 to Complex
+    division between Complex / Int128 returns Complex
    division between Complex / Int128 returns Complex
+    converts from Complex to Int64
    converts from Complex to Int64
+    division between Complex / Int32 returns Complex
    division between Complex / Int32 returns Complex
+    division between Float64 / Complex returns Complex
    division between Float64 / Complex returns Complex
+    converts from Complex to UInt8
    converts from Complex to UInt8
+    division between Int128 / Complex returns Complex
    division between Int128 / Complex returns Complex
+    converts from Int8 to Complex
    converts from Int8 to Complex
+    division between Complex / Int16 returns Complex
    division between Complex / Int16 returns Complex
+    division between Complex / UInt8 returns Complex
    division between Complex / UInt8 returns Complex
+    division between Complex / Complex returns Complex
    division between Complex / Complex returns Complex
+    division between Complex / UInt32 returns Complex
    division between Complex / UInt32 returns Complex
+    converts from UInt64 to Complex
    converts from UInt64 to Complex
+    converts from Complex to Int128
    converts from Complex to Int128
+    converts from UInt64 to Complex
    converts from UInt64 to Complex
+    converts from Int8 to Complex
    converts from Int8 to Complex
+    converts from Int64 to Complex
    converts from Int64 to Complex
+    converts from Complex to Float32
    converts from Complex to Float32
+    converts from UInt8 to Complex
    converts from UInt8 to Complex
+    division between Complex / UInt16 returns Complex
    division between Complex / UInt16 returns Complex
+    converts from Complex to UInt128
    converts from Complex to UInt128
+    division between Complex / Int8 returns Complex
    division between Complex / Int8 returns Complex
+    converts from UInt16 to Complex
    converts from UInt16 to Complex
+    division between Complex / Float32 returns Complex
    division between Complex / Float32 returns Complex
+    division between Int16 / Complex returns Complex
    division between Int16 / Complex returns Complex
+    converts from Complex to Int64
    converts from Complex to Int64
+    converts from Complex to Int8
    converts from Complex to Int8
+    division between Int64 / Complex returns Complex
    division between Int64 / Complex returns Complex
+    converts from Int16 to Complex
    converts from Int16 to Complex
+    converts from Complex to Int16
    converts from Complex to Int16
+    converts from Complex to UInt8
    converts from Complex to UInt8
+    division between Complex / Int64 returns Complex
    division between Complex / Int64 returns Complex
+    division between UInt128 / Complex returns Complex
    division between UInt128 / Complex returns Complex
+    converts from Complex to UInt16
    converts from Complex to UInt16
+    converts from Int16 to Complex
    converts from Int16 to Complex
+    division between Int32 / Complex returns Complex
    division between Int32 / Complex returns Complex
+    converts from Complex to Complex
    converts from Complex to Complex
+    converts from Complex to UInt32
    converts from Complex to UInt32
+    converts from UInt128 to Complex
    converts from UInt128 to Complex
+    converts from UInt16 to Complex
    converts from UInt16 to Complex
+    division between UInt64 / Complex returns Complex
    division between UInt64 / Complex returns Complex
+    converts from Int32 to Complex
    converts from Int32 to Complex
+    division between Complex / Float64 returns Complex
    division between Complex / Float64 returns Complex
+    converts from Int128 to Complex
    converts from Int128 to Complex
+    converts from Complex to Int32
    converts from Complex to Int32
+    converts from Float64 to Complex
    converts from Float64 to Complex
+    division between Float32 / Complex returns Complex
    division between Float32 / Complex returns Complex
+    converts from Float64 to Complex
    converts from Float64 to Complex
+    converts from Complex to UInt64
    converts from Complex to UInt64
+    converts from UInt32 to Complex
    converts from UInt32 to Complex
+    converts from UInt128 to Complex
    converts from UInt128 to Complex
+    converts from Complex to Float64
    converts from Complex to Float64
+    converts from Complex to Int8
    converts from Complex to Int8
+    converts from Complex to Complex
    converts from Complex to Complex
+    converts from Int64 to Complex
    converts from Int64 to Complex
+    converts from UInt32 to Complex
    converts from UInt32 to Complex
+    division between UInt8 / Complex returns Complex
    division between UInt8 / Complex returns Complex
+    converts from Complex to UInt16
    converts from Complex to UInt16
+    division between UInt32 / Complex returns Complex
    division between UInt32 / Complex returns Complex
+    converts from Complex to UInt32
    converts from Complex to UInt32
+    converts from Complex to UInt128
    converts from Complex to UInt128
+    converts from Complex to Float32
    converts from Complex to Float32
+Big* as numbers
+  floor_division BigInt // BigDecimal returns BigInt
  floor_division BigInt // BigDecimal returns BigInt
+  floor_division UInt32 // BigFloat returns UInt32
  floor_division UInt32 // BigFloat returns UInt32
+  floor_division UInt8 // BigInt returns UInt8
  floor_division UInt8 // BigInt returns UInt8
+  converts from BigDecimal to Float64
  converts from BigDecimal to Float64
+  division between BigFloat / Int64 returns BigFloat
  division between BigFloat / Int64 returns BigFloat
+  converts from UInt32 to BigInt
  converts from UInt32 to BigInt
+  converts from Float32 to BigDecimal
  converts from Float32 to BigDecimal
+  division between UInt32 / BigRational returns BigRational
  division between UInt32 / BigRational returns BigRational
+  division between Int64 / BigInt returns BigFloat
  division between Int64 / BigInt returns BigFloat
+  converts from Float64 to BigFloat
  converts from Float64 to BigFloat
+  converts from BigDecimal to UInt64
  converts from BigDecimal to UInt64
+  converts from Int64 to BigDecimal
  converts from Int64 to BigDecimal
+  floor_division BigRational // Float32 returns BigRational
  floor_division BigRational // Float32 returns BigRational
+  floor_division Float64 // BigInt returns Float64
  floor_division Float64 // BigInt returns Float64
+  division between Int32 / BigFloat returns BigFloat
  division between Int32 / BigFloat returns BigFloat
+  division between BigDecimal / UInt128 returns BigDecimal
  division between BigDecimal / UInt128 returns BigDecimal
+  converts from BigFloat to BigRational
  converts from BigFloat to BigRational
+  converts from BigInt to UInt16
  converts from BigInt to UInt16
+  division between BigInt / UInt32 returns BigFloat
  division between BigInt / UInt32 returns BigFloat
+  converts from BigDecimal to Int16
  converts from BigDecimal to Int16
+  converts from BigInt to BigInt
  converts from BigInt to BigInt
+  floor_division BigInt // UInt32 returns BigInt
  floor_division BigInt // UInt32 returns BigInt
+  converts from BigFloat to BigFloat
  converts from BigFloat to BigFloat
+  converts from UInt64 to BigDecimal
  converts from UInt64 to BigDecimal
+  division between Int128 / BigInt returns BigFloat
  division between Int128 / BigInt returns BigFloat
+  converts from BigDecimal to BigFloat
  converts from BigDecimal to BigFloat
+  division between Float64 / BigRational returns BigRational
  division between Float64 / BigRational returns BigRational
+  division between BigRational / UInt16 returns BigRational
  division between BigRational / UInt16 returns BigRational
+  division between BigDecimal / BigInt returns BigDecimal
  division between BigDecimal / BigInt returns BigDecimal
+  division between BigRational / BigRational returns BigRational
  division between BigRational / BigRational returns BigRational
+  floor_division BigDecimal // BigDecimal returns BigDecimal
  floor_division BigDecimal // BigDecimal returns BigDecimal
+  converts from BigInt to Float64
  converts from BigInt to Float64
+  converts from Int8 to BigFloat
  converts from Int8 to BigFloat
+  converts from BigRational to BigRational
  converts from BigRational to BigRational
+  converts from BigRational to Float32
  converts from BigRational to Float32
+  division between BigRational / BigInt returns BigRational
  division between BigRational / BigInt returns BigRational
+  division between Float32 / BigDecimal returns BigDecimal
  division between Float32 / BigDecimal returns BigDecimal
+  converts from BigDecimal to Int8
  converts from BigDecimal to Int8
+  converts from UInt32 to BigFloat
  converts from UInt32 to BigFloat
+  division between BigInt / Int128 returns BigFloat
  division between BigInt / Int128 returns BigFloat
+  converts from UInt64 to BigInt
  converts from UInt64 to BigInt
+  converts from Int32 to BigDecimal
  converts from Int32 to BigDecimal
+  division between BigDecimal / Int8 returns BigDecimal
  division between BigDecimal / Int8 returns BigDecimal
+  converts from BigDecimal to UInt32
  converts from BigDecimal to UInt32
+  division between BigRational / UInt8 returns BigRational
  division between BigRational / UInt8 returns BigRational
+  floor_division BigRational // BigFloat returns BigRational
  floor_division BigRational // BigFloat returns BigRational
+  converts from BigFloat to Int16
  converts from BigFloat to Int16
+  division between UInt128 / BigRational returns BigRational
  division between UInt128 / BigRational returns BigRational
+  converts from BigFloat to Int32
  converts from BigFloat to Int32
+  division between BigRational / UInt32 returns BigRational
  division between BigRational / UInt32 returns BigRational
+  floor_division BigFloat // UInt16 returns BigFloat
  floor_division BigFloat // UInt16 returns BigFloat
+  converts from BigDecimal to Int32
  converts from BigDecimal to Int32
+  converts from Int64 to BigFloat
  converts from Int64 to BigFloat
+  division between BigInt / BigFloat returns BigFloat
  division between BigInt / BigFloat returns BigFloat
+  converts from BigInt to UInt8
  converts from BigInt to UInt8
+  converts from Int16 to BigRational
  converts from Int16 to BigRational
+  initialize from value to BigFloat
  initialize from value to BigFloat
+  division between BigFloat / Float64 returns BigFloat
  division between BigFloat / Float64 returns BigFloat
+  floor_division BigRational // BigRational returns BigRational
  floor_division BigRational // BigRational returns BigRational
+  floor_division BigRational // BigDecimal returns BigRational
  floor_division BigRational // BigDecimal returns BigRational
+  floor_division UInt8 // BigRational returns UInt8
  floor_division UInt8 // BigRational returns UInt8
+  converts from BigDecimal to BigInt
  converts from BigDecimal to BigInt
+  converts from BigRational to BigFloat
  converts from BigRational to BigFloat
+  division between BigInt / Int16 returns BigFloat
  division between BigInt / Int16 returns BigFloat
+  floor_division BigFloat // Int64 returns BigFloat
  floor_division BigFloat // Int64 returns BigFloat
+  division between UInt64 / BigRational returns BigRational
  division between UInt64 / BigRational returns BigRational
+  converts from BigInt to BigInt
  converts from BigInt to BigInt
+  division between BigDecimal / Int64 returns BigDecimal
  division between BigDecimal / Int64 returns BigDecimal
+  converts from BigInt to BigDecimal
  converts from BigInt to BigDecimal
+  converts from BigDecimal to Float64
  converts from BigDecimal to Float64
+  converts from Int16 to BigFloat
  converts from Int16 to BigFloat
+  converts from UInt8 to BigInt
  converts from UInt8 to BigInt
+  converts from BigDecimal to BigFloat
  converts from BigDecimal to BigFloat
+  converts from Int32 to BigFloat
  converts from Int32 to BigFloat
+  division between BigInt / BigDecimal returns BigDecimal
  division between BigInt / BigDecimal returns BigDecimal
+  division between BigDecimal / UInt64 returns BigDecimal
  division between BigDecimal / UInt64 returns BigDecimal
+  floor_division BigInt // Float64 returns BigInt
  floor_division BigInt // Float64 returns BigInt
+  division between BigFloat / Int32 returns BigFloat
  division between BigFloat / Int32 returns BigFloat
+  division between BigFloat / BigFloat returns BigFloat
  division between BigFloat / BigFloat returns BigFloat
+  floor_division BigDecimal // Int16 returns BigDecimal
  floor_division BigDecimal // Int16 returns BigDecimal
+  converts from BigFloat to UInt8
  converts from BigFloat to UInt8
+  division between BigFloat / UInt16 returns BigFloat
  division between BigFloat / UInt16 returns BigFloat
+  floor_division UInt16 // BigInt returns UInt16
  floor_division UInt16 // BigInt returns UInt16
+  division between Int16 / BigInt returns BigFloat
  division between Int16 / BigInt returns BigFloat
+  floor_division BigDecimal // UInt64 returns BigDecimal
  floor_division BigDecimal // UInt64 returns BigDecimal
+  converts from UInt64 to BigFloat
  converts from UInt64 to BigFloat
+  floor_division UInt32 // BigDecimal returns UInt32
  floor_division UInt32 // BigDecimal returns UInt32
+  floor_division Int16 // BigDecimal returns Int16
  floor_division Int16 // BigDecimal returns Int16
+  division between Int32 / BigDecimal returns BigDecimal
  division between Int32 / BigDecimal returns BigDecimal
+  division between UInt128 / BigDecimal returns BigDecimal
  division between UInt128 / BigDecimal returns BigDecimal
+  floor_division BigInt // Int64 returns BigInt
  floor_division BigInt // Int64 returns BigInt
+  converts from UInt8 to BigRational
  converts from UInt8 to BigRational
+  division between BigDecimal / Int128 returns BigDecimal
  division between BigDecimal / Int128 returns BigDecimal
+  converts from Int8 to BigFloat
  converts from Int8 to BigFloat
+  division between BigFloat / Float32 returns BigFloat
  division between BigFloat / Float32 returns BigFloat
+  converts from BigDecimal to UInt8
  converts from BigDecimal to UInt8
+  converts from UInt64 to BigDecimal
  converts from UInt64 to BigDecimal
+  converts from BigRational to BigDecimal
  converts from BigRational to BigDecimal
+  converts from Int32 to BigInt
  converts from Int32 to BigInt
+  converts from BigDecimal to UInt32
  converts from BigDecimal to UInt32
+  converts from BigRational to UInt16
  converts from BigRational to UInt16
+  floor_division BigFloat // Float64 returns BigFloat
  floor_division BigFloat // Float64 returns BigFloat
+  floor_division BigFloat // Int16 returns BigFloat
  floor_division BigFloat // Int16 returns BigFloat
+  converts from BigFloat to Float64
  converts from BigFloat to Float64
+  converts from BigRational to UInt8
  converts from BigRational to UInt8
+  division between UInt32 / BigDecimal returns BigDecimal
  division between UInt32 / BigDecimal returns BigDecimal
+  floor_division BigFloat // UInt8 returns BigFloat
  floor_division BigFloat // UInt8 returns BigFloat
+  floor_division BigFloat // UInt64 returns BigFloat
  floor_division BigFloat // UInt64 returns BigFloat
+  converts from BigFloat to Int8
  converts from BigFloat to Int8
+  converts from UInt32 to BigInt
  converts from UInt32 to BigInt
+  floor_division BigDecimal // Float32 returns BigDecimal
  floor_division BigDecimal // Float32 returns BigDecimal
+  floor_division Float64 // BigFloat returns Float64
  floor_division Float64 // BigFloat returns Float64
+  division between Int32 / BigRational returns BigRational
  division between Int32 / BigRational returns BigRational
+  division between BigDecimal / BigRational returns BigRational
  division between BigDecimal / BigRational returns BigRational
+  floor_division UInt64 // BigFloat returns UInt64
  floor_division UInt64 // BigFloat returns UInt64
+  division between Int32 / BigInt returns BigFloat
  division between Int32 / BigInt returns BigFloat
+  floor_division Int8 // BigDecimal returns Int8
  floor_division Int8 // BigDecimal returns Int8
+  converts from BigDecimal to UInt16
  converts from BigDecimal to UInt16
+  division between Float32 / BigRational returns BigRational
  division between Float32 / BigRational returns BigRational
+  converts from BigRational to Int32
  converts from BigRational to Int32
+  converts from BigFloat to Int16
  converts from BigFloat to Int16
+  converts from UInt16 to BigFloat
  converts from UInt16 to BigFloat
+  division between UInt16 / BigRational returns BigRational
  division between UInt16 / BigRational returns BigRational
+  converts from Int32 to BigInt
  converts from Int32 to BigInt
+  division between BigInt / Int64 returns BigFloat
  division between BigInt / Int64 returns BigFloat
+  converts from Float32 to BigDecimal
  converts from Float32 to BigDecimal
+  converts from BigInt to UInt16
  converts from BigInt to UInt16
+  floor_division Int32 // BigInt returns Int32
  floor_division Int32 // BigInt returns Int32
+  division between BigRational / BigDecimal returns BigRational
  division between BigRational / BigDecimal returns BigRational
+  floor_division UInt64 // BigDecimal returns UInt64
  floor_division UInt64 // BigDecimal returns UInt64
+  division between Int64 / BigRational returns BigRational
  division between Int64 / BigRational returns BigRational
+  division between BigFloat / Int8 returns BigFloat
  division between BigFloat / Int8 returns BigFloat
+  converts from Float32 to BigRational
  converts from Float32 to BigRational
+  converts from BigFloat to UInt32
  converts from BigFloat to UInt32
+  converts from BigFloat to Int64
  converts from BigFloat to Int64
+  division between Int16 / BigDecimal returns BigDecimal
  division between Int16 / BigDecimal returns BigDecimal
+  converts from Int16 to BigRational
  converts from Int16 to BigRational
+  converts from Float64 to BigRational
  converts from Float64 to BigRational
+  converts from BigRational to BigInt
  converts from BigRational to BigInt
+  converts from BigRational to Int8
  converts from BigRational to Int8
+  converts from BigInt to Int16
  converts from BigInt to Int16
+  converts from BigFloat to Float32
  converts from BigFloat to Float32
+  converts from Int64 to BigRational
  converts from Int64 to BigRational
+  converts from Int16 to BigInt
  converts from Int16 to BigInt
+  converts from Int64 to BigDecimal
  converts from Int64 to BigDecimal
+  converts from BigFloat to UInt8
  converts from BigFloat to UInt8
+  converts from UInt32 to BigFloat
  converts from UInt32 to BigFloat
+  floor_division BigDecimal // Float64 returns BigDecimal
  floor_division BigDecimal // Float64 returns BigDecimal
+  converts from Int32 to BigFloat
  converts from Int32 to BigFloat
+  converts from Float32 to BigInt
  converts from Float32 to BigInt
+  converts from Int64 to BigFloat
  converts from Int64 to BigFloat
+  division between BigRational / Int64 returns BigRational
  division between BigRational / Int64 returns BigRational
+  division between BigRational / Float32 returns BigRational
  division between BigRational / Float32 returns BigRational
+  floor_division Int64 // BigInt returns Int64
  floor_division Int64 // BigInt returns Int64
+  division between UInt16 / BigDecimal returns BigDecimal
  division between UInt16 / BigDecimal returns BigDecimal
+  floor_division Int32 // BigRational returns Int32
  floor_division Int32 // BigRational returns Int32
+  division between BigDecimal / BigDecimal returns BigDecimal
  division between BigDecimal / BigDecimal returns BigDecimal
+  floor_division BigDecimal // Int64 returns BigDecimal
  floor_division BigDecimal // Int64 returns BigDecimal
+  converts from Int64 to BigInt
  converts from Int64 to BigInt
+  floor_division UInt64 // BigInt returns UInt64
  floor_division UInt64 // BigInt returns UInt64
+  converts from Int16 to BigInt
  converts from Int16 to BigInt
+  floor_division BigFloat // BigRational returns BigFloat
  floor_division BigFloat // BigRational returns BigFloat
+  division between Int16 / BigFloat returns BigFloat
  division between Int16 / BigFloat returns BigFloat
+  division between UInt64 / BigDecimal returns BigDecimal
  division between UInt64 / BigDecimal returns BigDecimal
+  division between BigRational / UInt128 returns BigRational
  division between BigRational / UInt128 returns BigRational
+  division between BigDecimal / UInt8 returns BigDecimal
  division between BigDecimal / UInt8 returns BigDecimal
+  converts from UInt8 to BigInt
  converts from UInt8 to BigInt
+  floor_division Int8 // BigRational returns Int8
  floor_division Int8 // BigRational returns Int8
+  floor_division Float32 // BigFloat returns Float32
  floor_division Float32 // BigFloat returns Float32
+  division between BigDecimal / Float32 returns BigDecimal
  division between BigDecimal / Float32 returns BigDecimal
+  converts from UInt8 to BigRational
  converts from UInt8 to BigRational
+  converts from BigDecimal to BigDecimal
  converts from BigDecimal to BigDecimal
+  floor_division BigInt // UInt64 returns BigInt
  floor_division BigInt // UInt64 returns BigInt
+  converts from BigInt to Int16
  converts from BigInt to Int16
+  converts from Int16 to BigDecimal
  converts from Int16 to BigDecimal
+  converts from BigInt to Int8
  converts from BigInt to Int8
+  division between UInt64 / BigInt returns BigFloat
  division between UInt64 / BigInt returns BigFloat
+  floor_division UInt16 // BigFloat returns UInt16
  floor_division UInt16 // BigFloat returns UInt16
+  division between BigInt / UInt64 returns BigFloat
  division between BigInt / UInt64 returns BigFloat
+  floor_division BigRational // Int64 returns BigRational
  floor_division BigRational // Int64 returns BigRational
+  converts from BigRational to BigFloat
  converts from BigRational to BigFloat
+  converts from BigInt to BigRational
  converts from BigInt to BigRational
+  division between BigRational / Float64 returns BigRational
  division between BigRational / Float64 returns BigRational
+  converts from BigRational to Int64
  converts from BigRational to Int64
+  converts from UInt8 to BigDecimal
  converts from UInt8 to BigDecimal
+  division between BigDecimal / BigFloat returns BigDecimal
  division between BigDecimal / BigFloat returns BigDecimal
+  floor_division BigRational // Int8 returns BigRational
  floor_division BigRational // Int8 returns BigRational
+  floor_division Int16 // BigFloat returns Int16
  floor_division Int16 // BigFloat returns Int16
+  floor_division BigDecimal // UInt16 returns BigDecimal
  floor_division BigDecimal // UInt16 returns BigDecimal
+  converts from BigDecimal to BigRational
  converts from BigDecimal to BigRational
+  floor_division UInt16 // BigRational returns UInt16
  floor_division UInt16 // BigRational returns UInt16
+  floor_division BigRational // BigInt returns BigRational
  floor_division BigRational // BigInt returns BigRational
+  floor_division UInt8 // BigFloat returns UInt8
  floor_division UInt8 // BigFloat returns UInt8
+  division between Int8 / BigDecimal returns BigDecimal
  division between Int8 / BigDecimal returns BigDecimal
+  floor_division Int64 // BigDecimal returns Int64
  floor_division Int64 // BigDecimal returns Int64
+  floor_division BigRational // UInt16 returns BigRational
  floor_division BigRational // UInt16 returns BigRational
+  converts from Float64 to BigDecimal
  converts from Float64 to BigDecimal
+  converts from BigInt to UInt64
  converts from BigInt to UInt64
+  floor_division BigDecimal // UInt32 returns BigDecimal
  floor_division BigDecimal // UInt32 returns BigDecimal
+  floor_division Int16 // BigRational returns Int16
  floor_division Int16 // BigRational returns Int16
+  converts from BigInt to Int8
  converts from BigInt to Int8
+  converts from BigInt to UInt32
  converts from BigInt to UInt32
+  converts from BigDecimal to UInt64
  converts from BigDecimal to UInt64
+  division between BigFloat / UInt8 returns BigFloat
  division between BigFloat / UInt8 returns BigFloat
+  floor_division UInt8 // BigDecimal returns UInt8
  floor_division UInt8 // BigDecimal returns UInt8
+  floor_division UInt16 // BigDecimal returns UInt16
  floor_division UInt16 // BigDecimal returns UInt16
+  floor_division BigFloat // UInt32 returns BigFloat
  floor_division BigFloat // UInt32 returns BigFloat
+  division between BigInt / Int8 returns BigFloat
  division between BigInt / Int8 returns BigFloat
+  converts from UInt16 to BigRational
  converts from UInt16 to BigRational
+  initialize from value to BigInt
  initialize from value to BigInt
+  converts from Int64 to BigInt
  converts from Int64 to BigInt
+  floor_division BigDecimal // BigRational returns BigDecimal
  floor_division BigDecimal // BigRational returns BigDecimal
+  converts from Int32 to BigRational
  converts from Int32 to BigRational
+  converts from Int16 to BigFloat
  converts from Int16 to BigFloat
+  converts from BigRational to Int8
  converts from BigRational to Int8
+  converts from BigInt to BigRational
  converts from BigInt to BigRational
+  converts from BigDecimal to Int16
  converts from BigDecimal to Int16
+  converts from BigRational to UInt64
  converts from BigRational to UInt64
+  converts from Int32 to BigDecimal
  converts from Int32 to BigDecimal
+  converts from BigFloat to BigInt
  converts from BigFloat to BigInt
+  converts from BigFloat to BigDecimal
  converts from BigFloat to BigDecimal
+  converts from BigInt to BigFloat
  converts from BigInt to BigFloat
+  floor_division BigDecimal // UInt8 returns BigDecimal
  floor_division BigDecimal // UInt8 returns BigDecimal
+  converts from Float64 to BigFloat
  converts from Float64 to BigFloat
+  floor_division BigRational // Float64 returns BigRational
  floor_division BigRational // Float64 returns BigRational
+  division between Float32 / BigInt returns BigFloat
  division between Float32 / BigInt returns BigFloat
+  floor_division BigFloat // Float32 returns BigFloat
  floor_division BigFloat // Float32 returns BigFloat
+  division between UInt8 / BigDecimal returns BigDecimal
  division between UInt8 / BigDecimal returns BigDecimal
+  division between BigFloat / UInt32 returns BigFloat
  division between BigFloat / UInt32 returns BigFloat
+  floor_division Int64 // BigRational returns Int64
  floor_division Int64 // BigRational returns Int64
+  converts from Float64 to BigDecimal
  converts from Float64 to BigDecimal
+  converts from BigRational to Int32
  converts from BigRational to Int32
+  converts from BigRational to Float64
  converts from BigRational to Float64
+  division between BigRational / BigRational returns BigRational
  division between BigRational / BigRational returns BigRational
+  floor_division BigInt // BigRational returns BigInt
  floor_division BigInt // BigRational returns BigInt
+  floor_division Float32 // BigInt returns Float32
  floor_division Float32 // BigInt returns Float32
+  division between BigInt / Float64 returns BigFloat
  division between BigInt / Float64 returns BigFloat
+  converts from BigInt to Float64
  converts from BigInt to Float64
+  converts from BigDecimal to UInt16
  converts from BigDecimal to UInt16
+  converts from BigInt to UInt64
  converts from BigInt to UInt64
+  converts from Int8 to BigDecimal
  converts from Int8 to BigDecimal
+  converts from Int8 to BigRational
  converts from Int8 to BigRational
+  division between Int128 / BigDecimal returns BigDecimal
  division between Int128 / BigDecimal returns BigDecimal
+  converts from BigFloat to BigFloat
  converts from BigFloat to BigFloat
+  converts from Int8 to BigRational
  converts from Int8 to BigRational
+  converts from BigFloat to Int64
  converts from BigFloat to Int64
+  floor_division BigInt // Int8 returns BigInt
  floor_division BigInt // Int8 returns BigInt
+  converts from UInt16 to BigFloat
  converts from UInt16 to BigFloat
+  converts from BigRational to UInt16
  converts from BigRational to UInt16
+  floor_division BigRational // Int16 returns BigRational
  floor_division BigRational // Int16 returns BigRational
+  floor_division BigFloat // BigFloat returns BigFloat
  floor_division BigFloat // BigFloat returns BigFloat
+  converts from BigInt to Float32
  converts from BigInt to Float32
+  division between BigFloat / Int128 returns BigFloat
  division between BigFloat / Int128 returns BigFloat
+  converts from BigInt to Int64
  converts from BigInt to Int64
+  converts from UInt32 to BigDecimal
  converts from UInt32 to BigDecimal
+  converts from Float32 to BigInt
  converts from Float32 to BigInt
+  converts from BigDecimal to Float32
  converts from BigDecimal to Float32
+  converts from BigFloat to Float32
  converts from BigFloat to Float32
+  floor_division Int32 // BigDecimal returns Int32
  floor_division Int32 // BigDecimal returns Int32
+  division between UInt8 / BigFloat returns BigFloat
  division between UInt8 / BigFloat returns BigFloat
+  division between BigInt / UInt8 returns BigFloat
  division between BigInt / UInt8 returns BigFloat
+  converts from BigDecimal to Int32
  converts from BigDecimal to Int32
+  division between BigDecimal / Int32 returns BigDecimal
  division between BigDecimal / Int32 returns BigDecimal
+  converts from BigInt to Int64
  converts from BigInt to Int64
+  converts from BigFloat to BigRational
  converts from BigFloat to BigRational
+  converts from Float32 to BigRational
  converts from Float32 to BigRational
+  division between Int64 / BigDecimal returns BigDecimal
  division between Int64 / BigDecimal returns BigDecimal
+  floor_division Int16 // BigInt returns Int16
  floor_division Int16 // BigInt returns Int16
+  division between BigRational / UInt64 returns BigRational
  division between BigRational / UInt64 returns BigRational
+  converts from BigInt to Int32
  converts from BigInt to Int32
+  converts from BigRational to Int64
  converts from BigRational to Int64
+  initialize from value to BigRational
  initialize from value to BigRational
+  converts from BigRational to UInt32
  converts from BigRational to UInt32
+  converts from UInt64 to BigRational
  converts from UInt64 to BigRational
+  floor_division BigInt // UInt16 returns BigInt
  floor_division BigInt // UInt16 returns BigInt
+  division between UInt8 / BigRational returns BigRational
  division between UInt8 / BigRational returns BigRational
+  division between BigRational / BigFloat returns BigRational
  division between BigRational / BigFloat returns BigRational
+  division between BigFloat / BigDecimal returns BigDecimal
  division between BigFloat / BigDecimal returns BigDecimal
+  division between Int64 / BigFloat returns BigFloat
  division between Int64 / BigFloat returns BigFloat
+  converts from BigRational to Int16
  converts from BigRational to Int16
+  floor_division BigRational // Int32 returns BigRational
  floor_division BigRational // Int32 returns BigRational
+  division between BigRational / Int128 returns BigRational
  division between BigRational / Int128 returns BigRational
+  converts from BigDecimal to BigInt
  converts from BigDecimal to BigInt
+  division between UInt128 / BigFloat returns BigFloat
  division between UInt128 / BigFloat returns BigFloat
+  converts from BigFloat to UInt64
  converts from BigFloat to UInt64
+  division between UInt32 / BigInt returns BigFloat
  division between UInt32 / BigInt returns BigFloat
+  division between BigInt / BigRational returns BigRational
  division between BigInt / BigRational returns BigRational
+  converts from BigFloat to UInt64
  converts from BigFloat to UInt64
+  division between UInt64 / BigFloat returns BigFloat
  division between UInt64 / BigFloat returns BigFloat
+  converts from Int8 to BigInt
  converts from Int8 to BigInt
+  division between BigFloat / UInt64 returns BigFloat
  division between BigFloat / UInt64 returns BigFloat
+  converts from UInt32 to BigDecimal
  converts from UInt32 to BigDecimal
+  division between BigFloat / UInt128 returns BigFloat
  division between BigFloat / UInt128 returns BigFloat
+  converts from BigDecimal to BigRational
  converts from BigDecimal to BigRational
+  converts from UInt64 to BigInt
  converts from UInt64 to BigInt
+  converts from BigDecimal to UInt8
  converts from BigDecimal to UInt8
+  converts from BigFloat to Float64
  converts from BigFloat to Float64
+  floor_division BigRational // UInt64 returns BigRational
  floor_division BigRational // UInt64 returns BigRational
+  converts from BigFloat to BigDecimal
  converts from BigFloat to BigDecimal
+  floor_division BigInt // Int16 returns BigInt
  floor_division BigInt // Int16 returns BigInt
+  floor_division Int32 // BigFloat returns Int32
  floor_division Int32 // BigFloat returns Int32
+  converts from Int8 to BigInt
  converts from Int8 to BigInt
+  converts from BigFloat to UInt32
  converts from BigFloat to UInt32
+  division between BigInt / Int32 returns BigFloat
  division between BigInt / Int32 returns BigFloat
+  converts from BigDecimal to BigDecimal
  converts from BigDecimal to BigDecimal
+  converts from BigInt to Float32
  converts from BigInt to Float32
+  converts from Float64 to BigInt
  converts from Float64 to BigInt
+  converts from UInt16 to BigDecimal
  converts from UInt16 to BigDecimal
+  division between Float64 / BigDecimal returns BigDecimal
  division between Float64 / BigDecimal returns BigDecimal
+  floor_division BigFloat // Int32 returns BigFloat
  floor_division BigFloat // Int32 returns BigFloat
+  division between Int8 / BigInt returns BigFloat
  division between Int8 / BigInt returns BigFloat
+  converts from UInt16 to BigRational
  converts from UInt16 to BigRational
+  division between Int128 / BigRational returns BigRational
  division between Int128 / BigRational returns BigRational
+  converts from BigFloat to Int8
  converts from BigFloat to Int8
+  converts from UInt8 to BigDecimal
  converts from UInt8 to BigDecimal
+  division between Int8 / BigFloat returns BigFloat
  division between Int8 / BigFloat returns BigFloat
+  converts from UInt8 to BigFloat
  converts from UInt8 to BigFloat
+  division between BigRational / Int8 returns BigRational
  division between BigRational / Int8 returns BigRational
+  division between Int16 / BigRational returns BigRational
  division between Int16 / BigRational returns BigRational
+  converts from BigInt to UInt8
  converts from BigInt to UInt8
+  converts from Float64 to BigInt
  converts from Float64 to BigInt
+  floor_division BigFloat // BigDecimal returns BigFloat
  floor_division BigFloat // BigDecimal returns BigFloat
+  floor_division BigDecimal // Int8 returns BigDecimal
  floor_division BigDecimal // Int8 returns BigDecimal
+  division between BigDecimal / UInt32 returns BigDecimal
  division between BigDecimal / UInt32 returns BigDecimal
+  converts from BigInt to Int32
  converts from BigInt to Int32
+  converts from BigInt to BigDecimal
  converts from BigInt to BigDecimal
+  division between UInt128 / BigInt returns BigFloat
  division between UInt128 / BigInt returns BigFloat
+  converts from BigRational to Float64
  converts from BigRational to Float64
+  division between BigFloat / Int16 returns BigFloat
  division between BigFloat / Int16 returns BigFloat
+  floor_division BigRational // UInt8 returns BigRational
  floor_division BigRational // UInt8 returns BigRational
+  floor_division BigFloat // BigInt returns BigFloat
  floor_division BigFloat // BigInt returns BigFloat
+  division between BigInt / BigInt returns BigFloat
  division between BigInt / BigInt returns BigFloat
+  division between Float64 / BigFloat returns BigFloat
  division between Float64 / BigFloat returns BigFloat
+  floor_division BigDecimal // BigFloat returns BigDecimal
  floor_division BigDecimal // BigFloat returns BigDecimal
+  converts from Float32 to BigFloat
  converts from Float32 to BigFloat
+  division between UInt32 / BigFloat returns BigFloat
  division between UInt32 / BigFloat returns BigFloat
+  converts from BigInt to UInt32
  converts from BigInt to UInt32
+  converts from UInt16 to BigDecimal
  converts from UInt16 to BigDecimal
+  initialize from value to BigDecimal
  initialize from value to BigDecimal
+  division between Float32 / BigFloat returns BigFloat
  division between Float32 / BigFloat returns BigFloat
+  division between BigDecimal / Float64 returns BigDecimal
  division between BigDecimal / Float64 returns BigDecimal
+  floor_division BigInt // Int32 returns BigInt
  floor_division BigInt // Int32 returns BigInt
+  converts from BigDecimal to Int64
  converts from BigDecimal to Int64
+  converts from BigDecimal to Int64
  converts from BigDecimal to Int64
+  converts from BigRational to Int16
  converts from BigRational to Int16
+  division between BigDecimal / Int16 returns BigDecimal
  division between BigDecimal / Int16 returns BigDecimal
+  floor_division UInt32 // BigInt returns UInt32
  floor_division UInt32 // BigInt returns UInt32
+  floor_division BigFloat // Int8 returns BigFloat
  floor_division BigFloat // Int8 returns BigFloat
+  floor_division BigInt // BigInt returns BigInt
  floor_division BigInt // BigInt returns BigInt
+  floor_division Float64 // BigDecimal returns Float64
  floor_division Float64 // BigDecimal returns Float64
+  division between UInt16 / BigInt returns BigFloat
  division between UInt16 / BigInt returns BigFloat
+  division between Float64 / BigInt returns BigFloat
  division between Float64 / BigInt returns BigFloat
+  converts from UInt64 to BigFloat
  converts from UInt64 to BigFloat
+  division between BigDecimal / BigDecimal returns BigDecimal
  division between BigDecimal / BigDecimal returns BigDecimal
+  floor_division Float32 // BigDecimal returns Float32
  floor_division Float32 // BigDecimal returns Float32
+  converts from UInt32 to BigRational
  converts from UInt32 to BigRational
+  converts from BigRational to UInt32
  converts from BigRational to UInt32
+  converts from BigFloat to Int32
  converts from BigFloat to Int32
+  division between BigInt / UInt16 returns BigFloat
  division between BigInt / UInt16 returns BigFloat
+  floor_division Int8 // BigInt returns Int8
  floor_division Int8 // BigInt returns Int8
+  converts from BigRational to UInt64
  converts from BigRational to UInt64
+  converts from UInt8 to BigFloat
  converts from UInt8 to BigFloat
+  division between UInt8 / BigInt returns BigFloat
  division between UInt8 / BigInt returns BigFloat
+  converts from BigRational to BigDecimal
  converts from BigRational to BigDecimal
+  converts from BigRational to BigInt
  converts from BigRational to BigInt
+  converts from UInt16 to BigInt
  converts from UInt16 to BigInt
+  converts from BigDecimal to Float32
  converts from BigDecimal to Float32
+  converts from BigFloat to UInt16
  converts from BigFloat to UInt16
+  converts from UInt16 to BigInt
  converts from UInt16 to BigInt
+  converts from BigRational to BigRational
  converts from BigRational to BigRational
+  converts from BigRational to UInt8
  converts from BigRational to UInt8
+  division between BigRational / Int16 returns BigRational
  division between BigRational / Int16 returns BigRational
+  converts from BigDecimal to Int8
  converts from BigDecimal to Int8
+  converts from Float64 to BigRational
  converts from Float64 to BigRational
+  floor_division UInt64 // BigRational returns UInt64
  floor_division UInt64 // BigRational returns UInt64
+  division between BigRational / Int32 returns BigRational
  division between BigRational / Int32 returns BigRational
+  converts from BigFloat to BigInt
  converts from BigFloat to BigInt
+  floor_division Float64 // BigRational returns Float64
  floor_division Float64 // BigRational returns Float64
+  converts from Int16 to BigDecimal
  converts from Int16 to BigDecimal
+  converts from Int32 to BigRational
  converts from Int32 to BigRational
+  division between BigDecimal / UInt16 returns BigDecimal
  division between BigDecimal / UInt16 returns BigDecimal
+  division between BigInt / Float32 returns BigFloat
  division between BigInt / Float32 returns BigFloat
+  floor_division BigInt // UInt8 returns BigInt
  floor_division BigInt // UInt8 returns BigInt
+  converts from BigInt to BigFloat
  converts from BigInt to BigFloat
+  converts from BigFloat to UInt16
  converts from BigFloat to UInt16
+  floor_division UInt32 // BigRational returns UInt32
  floor_division UInt32 // BigRational returns UInt32
+  converts from UInt32 to BigRational
  converts from UInt32 to BigRational
+  division between Int128 / BigFloat returns BigFloat
  division between Int128 / BigFloat returns BigFloat
+  floor_division BigInt // BigFloat returns BigInt
  floor_division BigInt // BigFloat returns BigInt
+  converts from Int8 to BigDecimal
  converts from Int8 to BigDecimal
+  floor_division Int64 // BigFloat returns Int64
  floor_division Int64 // BigFloat returns Int64
+  floor_division Float32 // BigRational returns Float32
  floor_division Float32 // BigRational returns Float32
+  floor_division BigInt // Float32 returns BigInt
  floor_division BigInt // Float32 returns BigInt
+  division between BigFloat / BigInt returns BigFloat
  division between BigFloat / BigInt returns BigFloat
+  converts from UInt64 to BigRational
  converts from UInt64 to BigRational
+  division between BigInt / UInt128 returns BigFloat
  division between BigInt / UInt128 returns BigFloat
+  converts from Float32 to BigFloat
  converts from Float32 to BigFloat
+  floor_division Int8 // BigFloat returns Int8
  floor_division Int8 // BigFloat returns Int8
+  division between UInt16 / BigFloat returns BigFloat
  division between UInt16 / BigFloat returns BigFloat
+  division between Int8 / BigRational returns BigRational
  division between Int8 / BigRational returns BigRational
+  converts from BigRational to Float32
  converts from BigRational to Float32
+  floor_division BigDecimal // BigInt returns BigDecimal
  floor_division BigDecimal // BigInt returns BigDecimal
+  division between BigFloat / BigRational returns BigRational
  division between BigFloat / BigRational returns BigRational
+  floor_division BigDecimal // Int32 returns BigDecimal
  floor_division BigDecimal // Int32 returns BigDecimal
+  floor_division BigRational // UInt32 returns BigRational
  floor_division BigRational // UInt32 returns BigRational
+  converts from Int64 to BigRational
  converts from Int64 to BigRational
+#errors
+  makes errors accessible
  makes errors accessible
+TCPSocket
+  sync from server
  sync from server
+  sends and receives messages
  sends and receives messages
+  fails when connection is refused
  fails when connection is refused
+  #connect
+    using IPv4
+      raises when port is negative
      raises when port is negative
+      raises when connection is refused
      raises when connection is refused
+      connects to server
      connects to server
+      raises when port is zero
      raises when port is zero
+    fails to connect IPv6 to IPv4 server
    fails to connect IPv6 to IPv4 server
+    address resolution
+      connects to localhost
      connects to localhost
+      raises when host doesn't exist
      raises when host doesn't exist
+      raises (rather than segfault on darwin) when host doesn't exist and port is 0
      raises (rather than segfault on darwin) when host doesn't exist and port is 0
+    using IPv6
+      raises when connection is refused
      raises when connection is refused
+      raises when port is zero
      raises when port is zero
+      raises when port is negative
      raises when port is negative
+      connects to server
      connects to server
+  sends and receives messages
  sends and receives messages
+  settings
  settings
+Log::ProcFormatter
+  formats
  formats
+Float64#to_s
+  converts 1000000000010000.0 to "1.00000000001e+15"
  converts 1000000000010000.0 to "1.00000000001e+15"
+  converts 8589934592000.0 to "8589934592000.0"
  converts 8589934592000.0 to "8589934592000.0"
+  converts 1.23456789012345 to "1.23456789012345"
  converts 1.23456789012345 to "1.23456789012345"
+  converts 1000000000000010.0 to "1.00000000000001e+15"
  converts 1000000000000010.0 to "1.00000000000001e+15"
+  converts 549755813888000.0 to "549755813888000.0"
  converts 549755813888000.0 to "549755813888000.0"
+  converts 1.2345 to "1.2345"
  converts 1.2345 to "1.2345"
+  converts 1000000000000000.0 to "1.0e+15"
  converts 1000000000000000.0 to "1.0e+15"
+  converts 12345.0 to "12345.0"
  converts 12345.0 to "12345.0"
+  converts 65536.0 to "65536.0"
  converts 65536.0 to "65536.0"
+  converts 1000.0 to "1000.0"
  converts 1000.0 to "1000.0"
+  Ryu d2s_test.cc LotsOfTrailingZeros
+    converts 2.98023223876953125e-8 to "2.9802322387695312e-8"
    converts 2.98023223876953125e-8 to "2.9802322387695312e-8"
+  converts 1000000000000100.0 to "1.0000000000001e+15"
  converts 1000000000000100.0 to "1.0000000000001e+15"
+  converts 1100000000000000.0 to "1.1e+15"
  converts 1100000000000000.0 to "1.1e+15"
+  converts 1234567.0 to "1234567.0"
  converts 1234567.0 to "1234567.0"
+  converts 1.2345678901 to "1.2345678901"
  converts 1.2345678901 to "1.2345678901"
+  converts 512000.0 to "512000.0"
  converts 512000.0 to "512000.0"
+  converts 12.0 to "12.0"
  converts 12.0 to "12.0"
+  Ryu d2s_test.cc LooksLikePow5
+    converts 0x1.0f0cf064dd592p+132 to "5.764607523034235e+39"
    converts 0x1.0f0cf064dd592p+132 to "5.764607523034235e+39"
+    converts 0x1.0f0cf064dd592p+133 to "1.152921504606847e+40"
    converts 0x1.0f0cf064dd592p+133 to "1.152921504606847e+40"
+    converts 0x1.0f0cf064dd592p+134 to "2.305843009213694e+40"
    converts 0x1.0f0cf064dd592p+134 to "2.305843009213694e+40"
+  converts 123456789012345.0 to "123456789012345.0"
  converts 123456789012345.0 to "123456789012345.0"
+  converts 1234.0 to "1234.0"
  converts 1234.0 to "1234.0"
+  converts 1.23456 to "1.23456"
  converts 1.23456 to "1.23456"
+  converts 512.0 to "512.0"
  converts 512.0 to "512.0"
+  converts 1234567890123.0 to "1234567890123.0"
  converts 1234567890123.0 to "1234567890123.0"
+  converts 100000.0 to "100000.0"
  converts 100000.0 to "100000.0"
+  converts 65536000.0 to "65536000.0"
  converts 65536000.0 to "65536000.0"
+  almost-but-not-quite-anomalous values
+    converts 0x1p890 to "8.25460204899477e+267"
    converts 0x1p890 to "8.25460204899477e+267"
+    converts 0x1p-569 to "5.17526350329881e-172"
    converts 0x1p-569 to "5.17526350329881e-172"
+    converts 0x1p-645 to "6.84940421565126e-195"
    converts 0x1p-645 to "6.84940421565126e-195"
+    converts 0x1p-499 to "6.10987272699921e-151"
    converts 0x1p-499 to "6.10987272699921e-151"
+    converts 0x1p966 to "6.237000967296e+290"
    converts 0x1p966 to "6.237000967296e+290"
+    converts 0x1p149 to "7.1362384635298e+44"
    converts 0x1p149 to "7.1362384635298e+44"
+    converts 0x1p956 to "6.090821257125e+287"
    converts 0x1p956 to "6.090821257125e+287"
+    converts 0x1p740 to "5.78358058743443e+222"
    converts 0x1p740 to "5.78358058743443e+222"
+  special cases
+    converts Float64::MIN_SUBNORMAL to "5.0e-324"
    converts Float64::MIN_SUBNORMAL to "5.0e-324"
+    converts Float64::INFINITY to "Infinity"
    converts Float64::INFINITY to "Infinity"
+    converts 18444492273895866368_u64.unsafe_as(Float64) to "NaN"
    converts 18444492273895866368_u64.unsafe_as(Float64) to "NaN"
+    converts 0.0 to "0.0"
    converts 0.0 to "0.0"
+    converts -0.0 to "-0.0"
    converts -0.0 to "-0.0"
+    converts Float64::MIN_POSITIVE to "2.2250738585072014e-308"
    converts Float64::MIN_POSITIVE to "2.2250738585072014e-308"
+    converts Float64::MIN_POSITIVE.prev_float to "2.225073858507201e-308"
    converts Float64::MIN_POSITIVE.prev_float to "2.225073858507201e-308"
+    converts -Float64::INFINITY to "-Infinity"
    converts -Float64::INFINITY to "-Infinity"
+    converts Float64::MAX to "1.7976931348623157e+308"
    converts Float64::MAX to "1.7976931348623157e+308"
+    converts 9221120237041090560_u64.unsafe_as(Float64) to "NaN"
    converts 9221120237041090560_u64.unsafe_as(Float64) to "NaN"
+  converts 1010000000000000.0 to "1.01e+15"
  converts 1010000000000000.0 to "1.01e+15"
+  converts 8.0 to "8.0"
  converts 8.0 to "8.0"
+  converts 64.0 to "64.0"
  converts 64.0 to "64.0"
+  converts 1000100000000000.0 to "1.0001e+15"
  converts 1000100000000000.0 to "1.0001e+15"
+  converts 1000000000000001.0 to "1.000000000000001e+15"
  converts 1000000000000001.0 to "1.000000000000001e+15"
+  converts 1.234567895 to "1.234567895"
  converts 1.234567895 to "1.234567895"
+  Ryu d2s_test.cc 32-bit Chunking
+    converts 4.294967295 to "4.294967295"
    converts 4.294967295 to "4.294967295"
+    converts 4.294967297 to "4.294967297"
    converts 4.294967297 to "4.294967297"
+    converts 4.294967296 to "4.294967296"
    converts 4.294967296 to "4.294967296"
+    converts 4.294967298 to "4.294967298"
    converts 4.294967298 to "4.294967298"
+    converts 4.294967294 to "4.294967294"
    converts 4.294967294 to "4.294967294"
+  converts 10000000000000.0 to "10000000000000.0"
  converts 10000000000000.0 to "10000000000000.0"
+  Ryu d2s_test.cc MinMaxShift
+    converts 0x1.0000000000000p+54 to "1.8014398509481984e+16"
    converts 0x1.0000000000000p+54 to "1.8014398509481984e+16"
+    converts 0x1.fffffffffffffp-716 to "5.801671039719115e-216"
    converts 0x1.fffffffffffffp-716 to "5.801671039719115e-216"
+    converts 0x1.0000000000000p-982 to "2.446494580089078e-296"
    converts 0x1.0000000000000p-982 to "2.446494580089078e-296"
+    converts 0x1.0000000000000p-716 to "2.900835519859558e-216"
    converts 0x1.0000000000000p-716 to "2.900835519859558e-216"
+    converts 0x1.fffffffffffffp+54 to "3.6028797018963964e+16"
    converts 0x1.fffffffffffffp+54 to "3.6028797018963964e+16"
+    converts 0x1.0000000000000p-1019 to "1.7800590868057611e-307"
    converts 0x1.0000000000000p-1019 to "1.7800590868057611e-307"
+    converts 0x1.fffffffffffffp-1016 to "2.8480945388892175e-306"
    converts 0x1.fffffffffffffp-1016 to "2.8480945388892175e-306"
+    converts 0x1.fa7161a4d6e0cp-89 to "3.196104012172126e-27"
    converts 0x1.fa7161a4d6e0cp-89 to "3.196104012172126e-27"
+    converts 0x1.fffffffffffffp-982 to "4.8929891601781557e-296"
    converts 0x1.fffffffffffffp-982 to "4.8929891601781557e-296"
+  converts 8796093022208000.0 to "8.796093022208e+15"
  converts 8796093022208000.0 to "8.796093022208e+15"
+  converts 67108864000.0 to "67108864000.0"
  converts 67108864000.0 to "67108864000.0"
+  converts 1.0 to "1.0"
  converts 1.0 to "1.0"
+  converts 10000.0 to "10000.0"
  converts 10000.0 to "10000.0"
+  converts 1000010000000000.0 to "1.00001e+15"
  converts 1000010000000000.0 to "1.00001e+15"
+  converts 1234567890.0 to "1234567890.0"
  converts 1234567890.0 to "1234567890.0"
+  converts 10.0 to "10.0"
  converts 10.0 to "10.0"
+  converts 1000000000000.0 to "1000000000000.0"
  converts 1000000000000.0 to "1000000000000.0"
+  converts 1000000000100000.0 to "1.0000000001e+15"
  converts 1000000000100000.0 to "1.0000000001e+15"
+  converts 1000000000.0 to "1000000000.0"
  converts 1000000000.0 to "1000000000.0"
+  anomalous values
+    converts 0x1p122 to "5.316911983139664e+36"
    converts 0x1p122 to "5.316911983139664e+36"
+    converts 0x1p-662 to "5.225680706521042e-200"
    converts 0x1p-662 to "5.225680706521042e-200"
+    converts 0x1p-791 to "7.678447687145631e-239"
    converts 0x1p-791 to "7.678447687145631e-239"
+    converts 0x1p896 to "5.282945311356653e+269"
    converts 0x1p896 to "5.282945311356653e+269"
+    converts 0x1p-652 to "5.351097043477547e-197"
    converts 0x1p-652 to "5.351097043477547e-197"
+    converts 0x1p89 to "6.189700196426902e+26"
    converts 0x1p89 to "6.189700196426902e+26"
+    converts 0x1p976 to "6.386688990511104e+293"
    converts 0x1p976 to "6.386688990511104e+293"
+    converts 0x1p-140 to "7.174648137343064e-43"
    converts 0x1p-140 to "7.174648137343064e-43"
+    converts 0x1p-705 to "5.940911144672375e-213"
    converts 0x1p-705 to "5.940911144672375e-213"
+    converts 0x1p-496 to "4.887898181599368e-150"
    converts 0x1p-496 to "4.887898181599368e-150"
+    converts 0x1p803 to "5.334411546303884e+241"
    converts 0x1p803 to "5.334411546303884e+241"
+    converts 0x1p-44 to "5.684341886080802e-14"
    converts 0x1p-44 to "5.684341886080802e-14"
+    converts 0x1p132 to "5.444517870735016e+39"
    converts 0x1p132 to "5.444517870735016e+39"
+    converts 0x1p-24 to "5.960464477539063e-8"
    converts 0x1p-24 to "5.960464477539063e-8"
+    converts 0x1p863 to "6.150157786156811e+259"
    converts 0x1p863 to "6.150157786156811e+259"
+    converts 0x1p398 to "6.455624695217272e+119"
    converts 0x1p398 to "6.455624695217272e+119"
+    converts 0x1p-788 to "6.142758149716505e-238"
    converts 0x1p-788 to "6.142758149716505e-238"
+    converts 0x1p405 to "8.263199609878108e+121"
    converts 0x1p405 to "8.263199609878108e+121"
+    converts 0x1p-366 to "6.653062250012736e-111"
    converts 0x1p-366 to "6.653062250012736e-111"
+    converts 0x1p574 to "6.183260036827614e+172"
    converts 0x1p574 to "6.183260036827614e+172"
+    converts 0x1p-97 to "6.310887241768095e-30"
    converts 0x1p-97 to "6.310887241768095e-30"
+    converts 0x1p182 to "6.129982163463556e+54"
    converts 0x1p182 to "6.129982163463556e+54"
+    converts 0x1p710 to "5.386379163185535e+213"
    converts 0x1p710 to "5.386379163185535e+213"
+    converts 0x1p275 to "6.070840288205404e+82"
    converts 0x1p275 to "6.070840288205404e+82"
+    converts 0x1p-549 to "5.426657103235053e-166"
    converts 0x1p-549 to "5.426657103235053e-166"
+    converts 0x1p544 to "5.758609657015292e+163"
    converts 0x1p544 to "5.758609657015292e+163"
+    converts 0x1p-383 to "5.075883674631299e-116"
    converts 0x1p-383 to "5.075883674631299e-116"
+    converts 0x1p-1007 to "7.291122019556398e-304"
    converts 0x1p-1007 to "7.291122019556398e-304"
+    converts 0x1p-296 to "7.854549544476363e-90"
    converts 0x1p-296 to "7.854549544476363e-90"
+    converts 0x1p-77 to "6.617444900424222e-24"
    converts 0x1p-77 to "6.617444900424222e-24"
+    converts 0x1p-921 to "5.641232424577593e-278"
    converts 0x1p-921 to "5.641232424577593e-278"
+    converts 0x1p-778 to "6.290184345309701e-235"
    converts 0x1p-778 to "6.290184345309701e-235"
+    converts 0x1p594 to "6.483618076376552e+178"
    converts 0x1p594 to "6.483618076376552e+178"
+    converts 0x1p305 to "6.518515124270356e+91"
    converts 0x1p305 to "6.518515124270356e+91"
+    converts 0x1p345 to "7.167183174968974e+103"
    converts 0x1p345 to "7.167183174968974e+103"
+    converts 0x1p378 to "6.156563468186638e+113"
    converts 0x1p378 to "6.156563468186638e+113"
+    converts 0x1p-808 to "5.858190679279809e-244"
    converts 0x1p-808 to "5.858190679279809e-244"
+    converts 0x1p534 to "5.623642243178996e+160"
    converts 0x1p534 to "5.623642243178996e+160"
+    converts 0x1p-509 to "5.966672584960166e-154"
    converts 0x1p-509 to "5.966672584960166e-154"
+    converts 0x1p554 to "5.896816288783659e+166"
    converts 0x1p554 to "5.896816288783659e+166"
+    converts 0x1p-489 to "6.256509672447191e-148"
    converts 0x1p-489 to "6.256509672447191e-148"
+    converts 0x1p-1017 to "7.120236347223045e-307"
    converts 0x1p-1017 to "7.120236347223045e-307"
+    converts 0x1p-695 to "6.083493012144512e-210"
    converts 0x1p-695 to "6.083493012144512e-210"
+    converts 0x1p172 to "5.986310706507379e+51"
    converts 0x1p172 to "5.986310706507379e+51"
+    converts 0x1p481 to "6.243497100631985e+144"
    converts 0x1p481 to "6.243497100631985e+144"
+    converts 0x1p-957 to "8.209073602596753e-289"
    converts 0x1p-957 to "8.209073602596753e-289"
+  converts 12345678901234.0 to "12345678901234.0"
  converts 12345678901234.0 to "12345678901234.0"
+  converts 68719476736.0 to "68719476736.0"
  converts 68719476736.0 to "68719476736.0"
+  converts 1.2 to "1.2"
  converts 1.2 to "1.2"
+  converts 1.0 to "1.0"
  converts 1.0 to "1.0"
+  converts 1.23456789012 to "1.23456789012"
  converts 1.23456789012 to "1.23456789012"
+  converts 1000000010000000.0 to "1.00000001e+15"
  converts 1000000010000000.0 to "1.00000001e+15"
+  Ryu d2s_test.cc Regression
+    converts 2.989102097996e-312 to "2.989102097996e-312"
    converts 2.989102097996e-312 to "2.989102097996e-312"
+    converts 9.409340012568248e18 to "9.409340012568248e+18"
    converts 9.409340012568248e18 to "9.409340012568248e+18"
+    converts 4.940656e-318 to "4.940656e-318"
    converts 4.940656e-318 to "4.940656e-318"
+    converts 1.18575755e-316 to "1.18575755e-316"
    converts 1.18575755e-316 to "1.18575755e-316"
+    converts 9.0608011534336e15 to "9.0608011534336e+15"
    converts 9.0608011534336e15 to "9.0608011534336e+15"
+    converts -2.109808898695963e16 to "-2.109808898695963e+16"
    converts -2.109808898695963e16 to "-2.109808898695963e+16"
+    converts 4.708356024711512e18 to "4.708356024711512e+18"
    converts 4.708356024711512e18 to "4.708356024711512e+18"
+  converts 8192000.0 to "8192000.0"
  converts 8192000.0 to "8192000.0"
+  converts 67108864.0 to "67108864.0"
  converts 67108864.0 to "67108864.0"
+  converts 123456789012.0 to "123456789012.0"
  converts 123456789012.0 to "123456789012.0"
+  converts 64000.0 to "64000.0"
  converts 64000.0 to "64000.0"
+  converts 1.23456789 to "1.23456789"
  converts 1.23456789 to "1.23456789"
+  converts 10000000000.0 to "10000000000.0"
  converts 10000000000.0 to "10000000000.0"
+  converts 1.2345678901234567 to "1.2345678901234567"
  converts 1.2345678901234567 to "1.2345678901234567"
+  converts 562949953421312.0 to "562949953421312.0"
  converts 562949953421312.0 to "562949953421312.0"
+  all exponents
+    converts 1.729e-215 to "1.729e-215"
    converts 1.729e-215 to "1.729e-215"
+    converts 1.729e-55 to "1.729e-55"
    converts 1.729e-55 to "1.729e-55"
+    converts 1.729e-32 to "1.729e-32"
    converts 1.729e-32 to "1.729e-32"
+    converts 1.729e-59 to "1.729e-59"
    converts 1.729e-59 to "1.729e-59"
+    converts 1.729e-184 to "1.729e-184"
    converts 1.729e-184 to "1.729e-184"
+    converts 1.729e+251 to "1.729e+251"
    converts 1.729e+251 to "1.729e+251"
+    converts 1.729e-146 to "1.729e-146"
    converts 1.729e-146 to "1.729e-146"
+    converts 1.729e+8 to "172900000.0"
    converts 1.729e+8 to "172900000.0"
+    converts 1.729e+255 to "1.729e+255"
    converts 1.729e+255 to "1.729e+255"
+    converts 1.729e+158 to "1.729e+158"
    converts 1.729e+158 to "1.729e+158"
+    converts 1.729e+235 to "1.729e+235"
    converts 1.729e+235 to "1.729e+235"
+    converts 1.729e-304 to "1.729e-304"
    converts 1.729e-304 to "1.729e-304"
+    converts 1.729e+51 to "1.729e+51"
    converts 1.729e+51 to "1.729e+51"
+    converts 1.729e-151 to "1.729e-151"
    converts 1.729e-151 to "1.729e-151"
+    converts 1.729e+249 to "1.729e+249"
    converts 1.729e+249 to "1.729e+249"
+    converts 1.729e+125 to "1.729e+125"
    converts 1.729e+125 to "1.729e+125"
+    converts 1.729e+220 to "1.729e+220"
    converts 1.729e+220 to "1.729e+220"
+    converts 1.729e+3 to "1729.0"
    converts 1.729e+3 to "1729.0"
+    converts 1.729e+118 to "1.729e+118"
    converts 1.729e+118 to "1.729e+118"
+    converts 1.729e+151 to "1.729e+151"
    converts 1.729e+151 to "1.729e+151"
+    converts 1.729e+214 to "1.729e+214"
    converts 1.729e+214 to "1.729e+214"
+    converts 1.729e-61 to "1.729e-61"
    converts 1.729e-61 to "1.729e-61"
+    converts 1.729e+179 to "1.729e+179"
    converts 1.729e+179 to "1.729e+179"
+    converts 1.729e+178 to "1.729e+178"
    converts 1.729e+178 to "1.729e+178"
+    converts 1.729e-232 to "1.729e-232"
    converts 1.729e-232 to "1.729e-232"
+    converts 1.729e-198 to "1.729e-198"
    converts 1.729e-198 to "1.729e-198"
+    converts 1.729e+161 to "1.729e+161"
    converts 1.729e+161 to "1.729e+161"
+    converts 1.729e-130 to "1.729e-130"
    converts 1.729e-130 to "1.729e-130"
+    converts 1.729e-148 to "1.729e-148"
    converts 1.729e-148 to "1.729e-148"
+    converts 1.729e-303 to "1.729e-303"
    converts 1.729e-303 to "1.729e-303"
+    converts 1.729e-88 to "1.729e-88"
    converts 1.729e-88 to "1.729e-88"
+    converts 1.729e+271 to "1.729e+271"
    converts 1.729e+271 to "1.729e+271"
+    converts 1.729e+5 to "172900.0"
    converts 1.729e+5 to "172900.0"
+    converts 1.729e+229 to "1.729e+229"
    converts 1.729e+229 to "1.729e+229"
+    converts 1.729e-201 to "1.729e-201"
    converts 1.729e-201 to "1.729e-201"
+    converts 1.729e-38 to "1.729e-38"
    converts 1.729e-38 to "1.729e-38"
+    converts 1.729e-286 to "1.729e-286"
    converts 1.729e-286 to "1.729e-286"
+    converts 1.729e+85 to "1.729e+85"
    converts 1.729e+85 to "1.729e+85"
+    converts 1.729e-68 to "1.729e-68"
    converts 1.729e-68 to "1.729e-68"
+    converts 1.729e-293 to "1.729e-293"
    converts 1.729e-293 to "1.729e-293"
+    converts 1.729e-85 to "1.729e-85"
    converts 1.729e-85 to "1.729e-85"
+    converts 1.729e+120 to "1.729e+120"
    converts 1.729e+120 to "1.729e+120"
+    converts 1.729e-106 to "1.729e-106"
    converts 1.729e-106 to "1.729e-106"
+    converts 1.729e+64 to "1.729e+64"
    converts 1.729e+64 to "1.729e+64"
+    converts 1.729e-18 to "1.729e-18"
    converts 1.729e-18 to "1.729e-18"
+    converts 1.729e-93 to "1.729e-93"
    converts 1.729e-93 to "1.729e-93"
+    converts 1.729e-115 to "1.729e-115"
    converts 1.729e-115 to "1.729e-115"
+    converts 1.729e-98 to "1.729e-98"
    converts 1.729e-98 to "1.729e-98"
+    converts 1.729e-204 to "1.729e-204"
    converts 1.729e-204 to "1.729e-204"
+    converts 1.729e-62 to "1.729e-62"
    converts 1.729e-62 to "1.729e-62"
+    converts 1.729e+259 to "1.729e+259"
    converts 1.729e+259 to "1.729e+259"
+    converts 1.729e+232 to "1.729e+232"
    converts 1.729e+232 to "1.729e+232"
+    converts 1.729e-318 to "1.729e-318"
    converts 1.729e-318 to "1.729e-318"
+    converts 1.729e+163 to "1.729e+163"
    converts 1.729e+163 to "1.729e+163"
+    converts 1.729e+254 to "1.729e+254"
    converts 1.729e+254 to "1.729e+254"
+    converts 1.729e+39 to "1.729e+39"
    converts 1.729e+39 to "1.729e+39"
+    converts 1.729e-86 to "1.729e-86"
    converts 1.729e-86 to "1.729e-86"
+    converts 1.729e-102 to "1.729e-102"
    converts 1.729e-102 to "1.729e-102"
+    converts 1.729e+86 to "1.729e+86"
    converts 1.729e+86 to "1.729e+86"
+    converts 1.729e+138 to "1.729e+138"
    converts 1.729e+138 to "1.729e+138"
+    converts 1.729e-277 to "1.729e-277"
    converts 1.729e-277 to "1.729e-277"
+    converts 1.729e+142 to "1.729e+142"
    converts 1.729e+142 to "1.729e+142"
+    converts 1.729e-110 to "1.729e-110"
    converts 1.729e-110 to "1.729e-110"
+    converts 1.729e-257 to "1.729e-257"
    converts 1.729e-257 to "1.729e-257"
+    converts 1.729e+303 to "1.729e+303"
    converts 1.729e+303 to "1.729e+303"
+    converts 1.729e-58 to "1.729e-58"
    converts 1.729e-58 to "1.729e-58"
+    converts 1.729e+285 to "1.729e+285"
    converts 1.729e+285 to "1.729e+285"
+    converts 1.729e-234 to "1.729e-234"
    converts 1.729e-234 to "1.729e-234"
+    converts 1.729e-122 to "1.729e-122"
    converts 1.729e-122 to "1.729e-122"
+    converts 1.729e+274 to "1.729e+274"
    converts 1.729e+274 to "1.729e+274"
+    converts 1.729e+143 to "1.729e+143"
    converts 1.729e+143 to "1.729e+143"
+    converts 1.729e-73 to "1.729e-73"
    converts 1.729e-73 to "1.729e-73"
+    converts 1.729e-219 to "1.729e-219"
    converts 1.729e-219 to "1.729e-219"
+    converts 1.729e-231 to "1.729e-231"
    converts 1.729e-231 to "1.729e-231"
+    converts 1.729e-4 to "0.0001729"
    converts 1.729e-4 to "0.0001729"
+    converts 1.729e+224 to "1.729e+224"
    converts 1.729e+224 to "1.729e+224"
+    converts 1.729e-276 to "1.729e-276"
    converts 1.729e-276 to "1.729e-276"
+    converts 1.729e+293 to "1.729e+293"
    converts 1.729e+293 to "1.729e+293"
+    converts 1.729e+291 to "1.729e+291"
    converts 1.729e+291 to "1.729e+291"
+    converts 1.729e-289 to "1.729e-289"
    converts 1.729e-289 to "1.729e-289"
+    converts 1.729e+11 to "172900000000.0"
    converts 1.729e+11 to "172900000000.0"
+    converts 1.729e+305 to "1.729e+305"
    converts 1.729e+305 to "1.729e+305"
+    converts 1.729e+127 to "1.729e+127"
    converts 1.729e+127 to "1.729e+127"
+    converts 1.729e+150 to "1.729e+150"
    converts 1.729e+150 to "1.729e+150"
+    converts 1.729e+130 to "1.729e+130"
    converts 1.729e+130 to "1.729e+130"
+    converts 1.729e-52 to "1.729e-52"
    converts 1.729e-52 to "1.729e-52"
+    converts 1.729e+241 to "1.729e+241"
    converts 1.729e+241 to "1.729e+241"
+    converts 1.729e+110 to "1.729e+110"
    converts 1.729e+110 to "1.729e+110"
+    converts 1.729e-211 to "1.729e-211"
    converts 1.729e-211 to "1.729e-211"
+    converts 1.729e-235 to "1.729e-235"
    converts 1.729e-235 to "1.729e-235"
+    converts 1.729e-179 to "1.729e-179"
    converts 1.729e-179 to "1.729e-179"
+    converts 1.729e-298 to "1.729e-298"
    converts 1.729e-298 to "1.729e-298"
+    converts 1.729e-323 to "1.5e-323"
    converts 1.729e-323 to "1.5e-323"
+    converts 1.729e+180 to "1.729e+180"
    converts 1.729e+180 to "1.729e+180"
+    converts 1.729e+223 to "1.729e+223"
    converts 1.729e+223 to "1.729e+223"
+    converts 1.729e+105 to "1.729e+105"
    converts 1.729e+105 to "1.729e+105"
+    converts 1.729e+113 to "1.729e+113"
    converts 1.729e+113 to "1.729e+113"
+    converts 1.729e-280 to "1.729e-280"
    converts 1.729e-280 to "1.729e-280"
+    converts 1.729e-313 to "1.729e-313"
    converts 1.729e-313 to "1.729e-313"
+    converts 1.729e-317 to "1.729e-317"
    converts 1.729e-317 to "1.729e-317"
+    converts 1.729e-216 to "1.729e-216"
    converts 1.729e-216 to "1.729e-216"
+    converts 1.729e+218 to "1.729e+218"
    converts 1.729e+218 to "1.729e+218"
+    converts 1.729e-187 to "1.729e-187"
    converts 1.729e-187 to "1.729e-187"
+    converts 1.729e-95 to "1.729e-95"
    converts 1.729e-95 to "1.729e-95"
+    converts 1.729e+286 to "1.729e+286"
    converts 1.729e+286 to "1.729e+286"
+    converts 1.729e+273 to "1.729e+273"
    converts 1.729e+273 to "1.729e+273"
+    converts 1.729e+0 to "1.729"
    converts 1.729e+0 to "1.729"
+    converts 1.729e-209 to "1.729e-209"
    converts 1.729e-209 to "1.729e-209"
+    converts 1.729e-23 to "1.729e-23"
    converts 1.729e-23 to "1.729e-23"
+    converts 1.729e+48 to "1.729e+48"
    converts 1.729e+48 to "1.729e+48"
+    converts 1.729e-251 to "1.729e-251"
    converts 1.729e-251 to "1.729e-251"
+    converts 1.729e-248 to "1.729e-248"
    converts 1.729e-248 to "1.729e-248"
+    converts 1.729e-291 to "1.729e-291"
    converts 1.729e-291 to "1.729e-291"
+    converts 1.729e-2 to "0.01729"
    converts 1.729e-2 to "0.01729"
+    converts 1.729e+42 to "1.729e+42"
    converts 1.729e+42 to "1.729e+42"
+    converts 1.729e-28 to "1.729e-28"
    converts 1.729e-28 to "1.729e-28"
+    converts 1.729e+258 to "1.729e+258"
    converts 1.729e+258 to "1.729e+258"
+    converts 1.729e+115 to "1.729e+115"
    converts 1.729e+115 to "1.729e+115"
+    converts 1.729e+14 to "172900000000000.0"
    converts 1.729e+14 to "172900000000000.0"
+    converts 1.729e-180 to "1.729e-180"
    converts 1.729e-180 to "1.729e-180"
+    converts 1.729e-139 to "1.729e-139"
    converts 1.729e-139 to "1.729e-139"
+    converts 1.729e+236 to "1.729e+236"
    converts 1.729e+236 to "1.729e+236"
+    converts 1.729e+136 to "1.729e+136"
    converts 1.729e+136 to "1.729e+136"
+    converts 1.729e-245 to "1.729e-245"
    converts 1.729e-245 to "1.729e-245"
+    converts 1.729e-13 to "1.729e-13"
    converts 1.729e-13 to "1.729e-13"
+    converts 1.729e-228 to "1.729e-228"
    converts 1.729e-228 to "1.729e-228"
+    converts 1.729e-104 to "1.729e-104"
    converts 1.729e-104 to "1.729e-104"
+    converts 1.729e+43 to "1.729e+43"
    converts 1.729e+43 to "1.729e+43"
+    converts 1.729e+280 to "1.729e+280"
    converts 1.729e+280 to "1.729e+280"
+    converts 1.729e-123 to "1.729e-123"
    converts 1.729e-123 to "1.729e-123"
+    converts 1.729e-236 to "1.729e-236"
    converts 1.729e-236 to "1.729e-236"
+    converts 1.729e+299 to "1.729e+299"
    converts 1.729e+299 to "1.729e+299"
+    converts 1.729e+168 to "1.729e+168"
    converts 1.729e+168 to "1.729e+168"
+    converts 1.729e+207 to "1.729e+207"
    converts 1.729e+207 to "1.729e+207"
+    converts 1.729e-244 to "1.729e-244"
    converts 1.729e-244 to "1.729e-244"
+    converts 1.729e+187 to "1.729e+187"
    converts 1.729e+187 to "1.729e+187"
+    converts 1.729e-138 to "1.729e-138"
    converts 1.729e-138 to "1.729e-138"
+    converts 1.729e+131 to "1.729e+131"
    converts 1.729e+131 to "1.729e+131"
+    converts 1.729e+52 to "1.729e+52"
    converts 1.729e+52 to "1.729e+52"
+    converts 1.729e+252 to "1.729e+252"
    converts 1.729e+252 to "1.729e+252"
+    converts 1.729e+13 to "17290000000000.0"
    converts 1.729e+13 to "17290000000000.0"
+    converts 1.729e-267 to "1.729e-267"
    converts 1.729e-267 to "1.729e-267"
+    converts 1.729e-210 to "1.729e-210"
    converts 1.729e-210 to "1.729e-210"
+    converts 1.729e-154 to "1.729e-154"
    converts 1.729e-154 to "1.729e-154"
+    converts 1.729e-11 to "1.729e-11"
    converts 1.729e-11 to "1.729e-11"
+    converts 1.729e+295 to "1.729e+295"
    converts 1.729e+295 to "1.729e+295"
+    converts 1.729e-10 to "1.729e-10"
    converts 1.729e-10 to "1.729e-10"
+    converts 1.729e+228 to "1.729e+228"
    converts 1.729e+228 to "1.729e+228"
+    converts 1.729e-206 to "1.729e-206"
    converts 1.729e-206 to "1.729e-206"
+    converts 1.729e+160 to "1.729e+160"
    converts 1.729e+160 to "1.729e+160"
+    converts 1.729e-155 to "1.729e-155"
    converts 1.729e-155 to "1.729e-155"
+    converts 1.729e+99 to "1.729e+99"
    converts 1.729e+99 to "1.729e+99"
+    converts 1.729e+134 to "1.729e+134"
    converts 1.729e+134 to "1.729e+134"
+    converts 1.729e+278 to "1.729e+278"
    converts 1.729e+278 to "1.729e+278"
+    converts 1.729e-120 to "1.729e-120"
    converts 1.729e-120 to "1.729e-120"
+    converts 1.729e+296 to "1.729e+296"
    converts 1.729e+296 to "1.729e+296"
+    converts 1.729e+68 to "1.729e+68"
    converts 1.729e+68 to "1.729e+68"
+    converts 1.729e-117 to "1.729e-117"
    converts 1.729e-117 to "1.729e-117"
+    converts 1.729e+49 to "1.729e+49"
    converts 1.729e+49 to "1.729e+49"
+    converts 1.729e+269 to "1.729e+269"
    converts 1.729e+269 to "1.729e+269"
+    converts 1.729e+107 to "1.729e+107"
    converts 1.729e+107 to "1.729e+107"
+    converts 1.729e-3 to "0.001729"
    converts 1.729e-3 to "0.001729"
+    converts 1.729e+215 to "1.729e+215"
    converts 1.729e+215 to "1.729e+215"
+    converts 1.729e-141 to "1.729e-141"
    converts 1.729e-141 to "1.729e-141"
+    converts 1.729e-176 to "1.729e-176"
    converts 1.729e-176 to "1.729e-176"
+    converts 1.729e+165 to "1.729e+165"
    converts 1.729e+165 to "1.729e+165"
+    converts 1.729e-24 to "1.729e-24"
    converts 1.729e-24 to "1.729e-24"
+    converts 1.729e-157 to "1.729e-157"
    converts 1.729e-157 to "1.729e-157"
+    converts 1.729e-281 to "1.729e-281"
    converts 1.729e-281 to "1.729e-281"
+    converts 1.729e-196 to "1.729e-196"
    converts 1.729e-196 to "1.729e-196"
+    converts 1.729e-70 to "1.729e-70"
    converts 1.729e-70 to "1.729e-70"
+    converts 1.729e+277 to "1.729e+277"
    converts 1.729e+277 to "1.729e+277"
+    converts 1.729e+242 to "1.729e+242"
    converts 1.729e+242 to "1.729e+242"
+    converts 1.729e+114 to "1.729e+114"
    converts 1.729e+114 to "1.729e+114"
+    converts 1.729e+20 to "1.729e+20"
    converts 1.729e+20 to "1.729e+20"
+    converts 1.729e+76 to "1.729e+76"
    converts 1.729e+76 to "1.729e+76"
+    converts 1.729e+16 to "1.729e+16"
    converts 1.729e+16 to "1.729e+16"
+    converts 1.729e-168 to "1.729e-168"
    converts 1.729e-168 to "1.729e-168"
+    converts 1.729e-5 to "1.729e-5"
    converts 1.729e-5 to "1.729e-5"
+    converts 1.729e-177 to "1.729e-177"
    converts 1.729e-177 to "1.729e-177"
+    converts 1.729e-190 to "1.729e-190"
    converts 1.729e-190 to "1.729e-190"
+    converts 1.729e+67 to "1.729e+67"
    converts 1.729e+67 to "1.729e+67"
+    converts 1.729e+126 to "1.729e+126"
    converts 1.729e+126 to "1.729e+126"
+    converts 1.729e-197 to "1.729e-197"
    converts 1.729e-197 to "1.729e-197"
+    converts 1.729e-56 to "1.729e-56"
    converts 1.729e-56 to "1.729e-56"
+    converts 1.729e+91 to "1.729e+91"
    converts 1.729e+91 to "1.729e+91"
+    converts 1.729e+302 to "1.729e+302"
    converts 1.729e+302 to "1.729e+302"
+    converts 1.729e+257 to "1.729e+257"
    converts 1.729e+257 to "1.729e+257"
+    converts 1.729e-19 to "1.729e-19"
    converts 1.729e-19 to "1.729e-19"
+    converts 1.729e-238 to "1.729e-238"
    converts 1.729e-238 to "1.729e-238"
+    converts 1.729e-243 to "1.729e-243"
    converts 1.729e-243 to "1.729e-243"
+    converts 1.729e+260 to "1.729e+260"
    converts 1.729e+260 to "1.729e+260"
+    converts 1.729e-147 to "1.729e-147"
    converts 1.729e-147 to "1.729e-147"
+    converts 1.729e-81 to "1.729e-81"
    converts 1.729e-81 to "1.729e-81"
+    converts 1.729e+23 to "1.729e+23"
    converts 1.729e+23 to "1.729e+23"
+    converts 1.729e-118 to "1.729e-118"
    converts 1.729e-118 to "1.729e-118"
+    converts 1.729e+308 to "1.729e+308"
    converts 1.729e+308 to "1.729e+308"
+    converts 1.729e+78 to "1.729e+78"
    converts 1.729e+78 to "1.729e+78"
+    converts 1.729e-265 to "1.729e-265"
    converts 1.729e-265 to "1.729e-265"
+    converts 1.729e-99 to "1.729e-99"
    converts 1.729e-99 to "1.729e-99"
+    converts 1.729e-111 to "1.729e-111"
    converts 1.729e-111 to "1.729e-111"
+    converts 1.729e+194 to "1.729e+194"
    converts 1.729e+194 to "1.729e+194"
+    converts 1.729e-43 to "1.729e-43"
    converts 1.729e-43 to "1.729e-43"
+    converts 1.729e+137 to "1.729e+137"
    converts 1.729e+137 to "1.729e+137"
+    converts 1.729e+182 to "1.729e+182"
    converts 1.729e+182 to "1.729e+182"
+    converts 1.729e+156 to "1.729e+156"
    converts 1.729e+156 to "1.729e+156"
+    converts 1.729e+22 to "1.729e+22"
    converts 1.729e+22 to "1.729e+22"
+    converts 1.729e+159 to "1.729e+159"
    converts 1.729e+159 to "1.729e+159"
+    converts 1.729e+289 to "1.729e+289"
    converts 1.729e+289 to "1.729e+289"
+    converts 1.729e-300 to "1.729e-300"
    converts 1.729e-300 to "1.729e-300"
+    converts 1.729e+240 to "1.729e+240"
    converts 1.729e+240 to "1.729e+240"
+    converts 1.729e-284 to "1.729e-284"
    converts 1.729e-284 to "1.729e-284"
+    converts 1.729e-322 to "1.73e-322"
    converts 1.729e-322 to "1.73e-322"
+    converts 1.729e-51 to "1.729e-51"
    converts 1.729e-51 to "1.729e-51"
+    converts 1.729e-316 to "1.729e-316"
    converts 1.729e-316 to "1.729e-316"
+    converts 1.729e-44 to "1.729e-44"
    converts 1.729e-44 to "1.729e-44"
+    converts 1.729e+61 to "1.729e+61"
    converts 1.729e+61 to "1.729e+61"
+    converts 1.729e+279 to "1.729e+279"
    converts 1.729e+279 to "1.729e+279"
+    converts 1.729e+284 to "1.729e+284"
    converts 1.729e+284 to "1.729e+284"
+    converts 1.729e-214 to "1.729e-214"
    converts 1.729e-214 to "1.729e-214"
+    converts 1.729e-9 to "1.729e-9"
    converts 1.729e-9 to "1.729e-9"
+    converts 1.729e-167 to "1.729e-167"
    converts 1.729e-167 to "1.729e-167"
+    converts 1.729e-205 to "1.729e-205"
    converts 1.729e-205 to "1.729e-205"
+    converts 1.729e+90 to "1.729e+90"
    converts 1.729e+90 to "1.729e+90"
+    converts 1.729e-57 to "1.729e-57"
    converts 1.729e-57 to "1.729e-57"
+    converts 1.729e+104 to "1.729e+104"
    converts 1.729e+104 to "1.729e+104"
+    converts 1.729e+176 to "1.729e+176"
    converts 1.729e+176 to "1.729e+176"
+    converts 1.729e-208 to "1.729e-208"
    converts 1.729e-208 to "1.729e-208"
+    converts 1.729e+108 to "1.729e+108"
    converts 1.729e+108 to "1.729e+108"
+    converts 1.729e+264 to "1.729e+264"
    converts 1.729e+264 to "1.729e+264"
+    converts 1.729e-53 to "1.729e-53"
    converts 1.729e-53 to "1.729e-53"
+    converts 1.729e+162 to "1.729e+162"
    converts 1.729e+162 to "1.729e+162"
+    converts 1.729e-31 to "1.729e-31"
    converts 1.729e-31 to "1.729e-31"
+    converts 1.729e-46 to "1.729e-46"
    converts 1.729e-46 to "1.729e-46"
+    converts 1.729e-16 to "1.729e-16"
    converts 1.729e-16 to "1.729e-16"
+    converts 1.729e-203 to "1.729e-203"
    converts 1.729e-203 to "1.729e-203"
+    converts 1.729e-94 to "1.729e-94"
    converts 1.729e-94 to "1.729e-94"
+    converts 1.729e+189 to "1.729e+189"
    converts 1.729e+189 to "1.729e+189"
+    converts 1.729e+116 to "1.729e+116"
    converts 1.729e+116 to "1.729e+116"
+    converts 1.729e+201 to "1.729e+201"
    converts 1.729e+201 to "1.729e+201"
+    converts 1.729e-241 to "1.729e-241"
    converts 1.729e-241 to "1.729e-241"
+    converts 1.729e-29 to "1.729e-29"
    converts 1.729e-29 to "1.729e-29"
+    converts 1.729e-169 to "1.729e-169"
    converts 1.729e-169 to "1.729e-169"
+    converts 1.729e+89 to "1.729e+89"
    converts 1.729e+89 to "1.729e+89"
+    converts 1.729e+30 to "1.729e+30"
    converts 1.729e+30 to "1.729e+30"
+    converts 1.729e+50 to "1.729e+50"
    converts 1.729e+50 to "1.729e+50"
+    converts 1.729e-76 to "1.729e-76"
    converts 1.729e-76 to "1.729e-76"
+    converts 1.729e+268 to "1.729e+268"
    converts 1.729e+268 to "1.729e+268"
+    converts 1.729e+202 to "1.729e+202"
    converts 1.729e+202 to "1.729e+202"
+    converts 1.729e-105 to "1.729e-105"
    converts 1.729e-105 to "1.729e-105"
+    converts 1.729e+32 to "1.729e+32"
    converts 1.729e+32 to "1.729e+32"
+    converts 1.729e-308 to "1.729e-308"
    converts 1.729e-308 to "1.729e-308"
+    converts 1.729e-152 to "1.729e-152"
    converts 1.729e-152 to "1.729e-152"
+    converts 1.729e+65 to "1.729e+65"
    converts 1.729e+65 to "1.729e+65"
+    converts 1.729e-242 to "1.729e-242"
    converts 1.729e-242 to "1.729e-242"
+    converts 1.729e+148 to "1.729e+148"
    converts 1.729e+148 to "1.729e+148"
+    converts 1.729e-223 to "1.729e-223"
    converts 1.729e-223 to "1.729e-223"
+    converts 1.729e+217 to "1.729e+217"
    converts 1.729e+217 to "1.729e+217"
+    converts 1.729e+155 to "1.729e+155"
    converts 1.729e+155 to "1.729e+155"
+    converts 1.729e-103 to "1.729e-103"
    converts 1.729e-103 to "1.729e-103"
+    converts 1.729e-12 to "1.729e-12"
    converts 1.729e-12 to "1.729e-12"
+    converts 1.729e-288 to "1.729e-288"
    converts 1.729e-288 to "1.729e-288"
+    converts 1.729e+184 to "1.729e+184"
    converts 1.729e+184 to "1.729e+184"
+    converts 1.729e-160 to "1.729e-160"
    converts 1.729e-160 to "1.729e-160"
+    converts 1.729e+119 to "1.729e+119"
    converts 1.729e+119 to "1.729e+119"
+    converts 1.729e+226 to "1.729e+226"
    converts 1.729e+226 to "1.729e+226"
+    converts 1.729e-295 to "1.729e-295"
    converts 1.729e-295 to "1.729e-295"
+    converts 1.729e-34 to "1.729e-34"
    converts 1.729e-34 to "1.729e-34"
+    converts 1.729e-36 to "1.729e-36"
    converts 1.729e-36 to "1.729e-36"
+    converts 1.729e+262 to "1.729e+262"
    converts 1.729e+262 to "1.729e+262"
+    converts 1.729e-114 to "1.729e-114"
    converts 1.729e-114 to "1.729e-114"
+    converts 1.729e+211 to "1.729e+211"
    converts 1.729e+211 to "1.729e+211"
+    converts 1.729e+247 to "1.729e+247"
    converts 1.729e+247 to "1.729e+247"
+    converts 1.729e-250 to "1.729e-250"
    converts 1.729e-250 to "1.729e-250"
+    converts 1.729e-75 to "1.729e-75"
    converts 1.729e-75 to "1.729e-75"
+    converts 1.729e+122 to "1.729e+122"
    converts 1.729e+122 to "1.729e+122"
+    converts 1.729e-311 to "1.729e-311"
    converts 1.729e-311 to "1.729e-311"
+    converts 1.729e+6 to "1729000.0"
    converts 1.729e+6 to "1729000.0"
+    converts 1.729e-218 to "1.729e-218"
    converts 1.729e-218 to "1.729e-218"
+    converts 1.729e+73 to "1.729e+73"
    converts 1.729e+73 to "1.729e+73"
+    converts 1.729e+149 to "1.729e+149"
    converts 1.729e+149 to "1.729e+149"
+    converts 1.729e-212 to "1.729e-212"
    converts 1.729e-212 to "1.729e-212"
+    converts 1.729e-301 to "1.729e-301"
    converts 1.729e-301 to "1.729e-301"
+    converts 1.729e+69 to "1.729e+69"
    converts 1.729e+69 to "1.729e+69"
+    converts 1.729e-268 to "1.729e-268"
    converts 1.729e-268 to "1.729e-268"
+    converts 1.729e-270 to "1.729e-270"
    converts 1.729e-270 to "1.729e-270"
+    converts 1.729e+28 to "1.729e+28"
    converts 1.729e+28 to "1.729e+28"
+    converts 1.729e-273 to "1.729e-273"
    converts 1.729e-273 to "1.729e-273"
+    converts 1.729e+170 to "1.729e+170"
    converts 1.729e+170 to "1.729e+170"
+    converts 1.729e+169 to "1.729e+169"
    converts 1.729e+169 to "1.729e+169"
+    converts 1.729e+306 to "1.729e+306"
    converts 1.729e+306 to "1.729e+306"
+    converts 1.729e+234 to "1.729e+234"
    converts 1.729e+234 to "1.729e+234"
+    converts 1.729e-143 to "1.729e-143"
    converts 1.729e-143 to "1.729e-143"
+    converts 1.729e-199 to "1.729e-199"
    converts 1.729e-199 to "1.729e-199"
+    converts 1.729e-153 to "1.729e-153"
    converts 1.729e-153 to "1.729e-153"
+    converts 1.729e+248 to "1.729e+248"
    converts 1.729e+248 to "1.729e+248"
+    converts 1.729e-269 to "1.729e-269"
    converts 1.729e-269 to "1.729e-269"
+    converts 1.729e+181 to "1.729e+181"
    converts 1.729e+181 to "1.729e+181"
+    converts 1.729e-26 to "1.729e-26"
    converts 1.729e-26 to "1.729e-26"
+    converts 1.729e+145 to "1.729e+145"
    converts 1.729e+145 to "1.729e+145"
+    converts 1.729e+45 to "1.729e+45"
    converts 1.729e+45 to "1.729e+45"
+    converts 1.729e+33 to "1.729e+33"
    converts 1.729e+33 to "1.729e+33"
+    converts 1.729e+239 to "1.729e+239"
    converts 1.729e+239 to "1.729e+239"
+    converts 1.729e-108 to "1.729e-108"
    converts 1.729e-108 to "1.729e-108"
+    converts 1.729e-172 to "1.729e-172"
    converts 1.729e-172 to "1.729e-172"
+    converts 1.729e-72 to "1.729e-72"
    converts 1.729e-72 to "1.729e-72"
+    converts 1.729e+87 to "1.729e+87"
    converts 1.729e+87 to "1.729e+87"
+    converts 1.729e+46 to "1.729e+46"
    converts 1.729e+46 to "1.729e+46"
+    converts 1.729e-133 to "1.729e-133"
    converts 1.729e-133 to "1.729e-133"
+    converts 1.729e-173 to "1.729e-173"
    converts 1.729e-173 to "1.729e-173"
+    converts 1.729e+227 to "1.729e+227"
    converts 1.729e+227 to "1.729e+227"
+    converts 1.729e+190 to "1.729e+190"
    converts 1.729e+190 to "1.729e+190"
+    converts 1.729e+63 to "1.729e+63"
    converts 1.729e+63 to "1.729e+63"
+    converts 1.729e+128 to "1.729e+128"
    converts 1.729e+128 to "1.729e+128"
+    converts 1.729e-195 to "1.729e-195"
    converts 1.729e-195 to "1.729e-195"
+    converts 1.729e+200 to "1.729e+200"
    converts 1.729e+200 to "1.729e+200"
+    converts 1.729e-77 to "1.729e-77"
    converts 1.729e-77 to "1.729e-77"
+    converts 1.729e+208 to "1.729e+208"
    converts 1.729e+208 to "1.729e+208"
+    converts 1.729e+141 to "1.729e+141"
    converts 1.729e+141 to "1.729e+141"
+    converts 1.729e-136 to "1.729e-136"
    converts 1.729e-136 to "1.729e-136"
+    converts 1.729e-310 to "1.729e-310"
    converts 1.729e-310 to "1.729e-310"
+    converts 1.729e+205 to "1.729e+205"
    converts 1.729e+205 to "1.729e+205"
+    converts 1.729e+253 to "1.729e+253"
    converts 1.729e+253 to "1.729e+253"
+    converts 1.729e-246 to "1.729e-246"
    converts 1.729e-246 to "1.729e-246"
+    converts 1.729e-191 to "1.729e-191"
    converts 1.729e-191 to "1.729e-191"
+    converts 1.729e+7 to "17290000.0"
    converts 1.729e+7 to "17290000.0"
+    converts 1.729e-290 to "1.729e-290"
    converts 1.729e-290 to "1.729e-290"
+    converts 1.729e-271 to "1.729e-271"
    converts 1.729e-271 to "1.729e-271"
+    converts 1.729e+304 to "1.729e+304"
    converts 1.729e+304 to "1.729e+304"
+    converts 1.729e-64 to "1.729e-64"
    converts 1.729e-64 to "1.729e-64"
+    converts 1.729e-253 to "1.729e-253"
    converts 1.729e-253 to "1.729e-253"
+    converts 1.729e-107 to "1.729e-107"
    converts 1.729e-107 to "1.729e-107"
+    converts 1.729e+38 to "1.729e+38"
    converts 1.729e+38 to "1.729e+38"
+    converts 1.729e-113 to "1.729e-113"
    converts 1.729e-113 to "1.729e-113"
+    converts 1.729e+191 to "1.729e+191"
    converts 1.729e+191 to "1.729e+191"
+    converts 1.729e-283 to "1.729e-283"
    converts 1.729e-283 to "1.729e-283"
+    converts 1.729e-274 to "1.729e-274"
    converts 1.729e-274 to "1.729e-274"
+    converts 1.729e+282 to "1.729e+282"
    converts 1.729e+282 to "1.729e+282"
+    converts 1.729e+173 to "1.729e+173"
    converts 1.729e+173 to "1.729e+173"
+    converts 1.729e-48 to "1.729e-48"
    converts 1.729e-48 to "1.729e-48"
+    converts 1.729e+172 to "1.729e+172"
    converts 1.729e+172 to "1.729e+172"
+    converts 1.729e-100 to "1.729e-100"
    converts 1.729e-100 to "1.729e-100"
+    converts 1.729e+256 to "1.729e+256"
    converts 1.729e+256 to "1.729e+256"
+    converts 1.729e+157 to "1.729e+157"
    converts 1.729e+157 to "1.729e+157"
+    converts 1.729e+166 to "1.729e+166"
    converts 1.729e+166 to "1.729e+166"
+    converts 1.729e-125 to "1.729e-125"
    converts 1.729e-125 to "1.729e-125"
+    converts 1.729e-134 to "1.729e-134"
    converts 1.729e-134 to "1.729e-134"
+    converts 1.729e-41 to "1.729e-41"
    converts 1.729e-41 to "1.729e-41"
+    converts 1.729e+9 to "1729000000.0"
    converts 1.729e+9 to "1729000000.0"
+    converts 1.729e+197 to "1.729e+197"
    converts 1.729e+197 to "1.729e+197"
+    converts 1.729e+272 to "1.729e+272"
    converts 1.729e+272 to "1.729e+272"
+    converts 1.729e+288 to "1.729e+288"
    converts 1.729e+288 to "1.729e+288"
+    converts 1.729e-192 to "1.729e-192"
    converts 1.729e-192 to "1.729e-192"
+    converts 1.729e-159 to "1.729e-159"
    converts 1.729e-159 to "1.729e-159"
+    converts 1.729e+53 to "1.729e+53"
    converts 1.729e+53 to "1.729e+53"
+    converts 1.729e-116 to "1.729e-116"
    converts 1.729e-116 to "1.729e-116"
+    converts 1.729e+31 to "1.729e+31"
    converts 1.729e+31 to "1.729e+31"
+    converts 1.729e-80 to "1.729e-80"
    converts 1.729e-80 to "1.729e-80"
+    converts 1.729e+171 to "1.729e+171"
    converts 1.729e+171 to "1.729e+171"
+    converts 1.729e+243 to "1.729e+243"
    converts 1.729e+243 to "1.729e+243"
+    converts 1.729e-193 to "1.729e-193"
    converts 1.729e-193 to "1.729e-193"
+    converts 1.729e-217 to "1.729e-217"
    converts 1.729e-217 to "1.729e-217"
+    converts 1.729e-158 to "1.729e-158"
    converts 1.729e-158 to "1.729e-158"
+    converts 1.729e-87 to "1.729e-87"
    converts 1.729e-87 to "1.729e-87"
+    converts 1.729e-260 to "1.729e-260"
    converts 1.729e-260 to "1.729e-260"
+    converts 1.729e-50 to "1.729e-50"
    converts 1.729e-50 to "1.729e-50"
+    converts 1.729e-101 to "1.729e-101"
    converts 1.729e-101 to "1.729e-101"
+    converts 1.729e+54 to "1.729e+54"
    converts 1.729e+54 to "1.729e+54"
+    converts 1.729e+225 to "1.729e+225"
    converts 1.729e+225 to "1.729e+225"
+    converts 1.729e-91 to "1.729e-91"
    converts 1.729e-91 to "1.729e-91"
+    converts 1.729e-207 to "1.729e-207"
    converts 1.729e-207 to "1.729e-207"
+    converts 1.729e-189 to "1.729e-189"
    converts 1.729e-189 to "1.729e-189"
+    converts 1.729e+29 to "1.729e+29"
    converts 1.729e+29 to "1.729e+29"
+    converts 1.729e-183 to "1.729e-183"
    converts 1.729e-183 to "1.729e-183"
+    converts 1.729e+25 to "1.729e+25"
    converts 1.729e+25 to "1.729e+25"
+    converts 1.729e-282 to "1.729e-282"
    converts 1.729e-282 to "1.729e-282"
+    converts 1.729e+222 to "1.729e+222"
    converts 1.729e+222 to "1.729e+222"
+    converts 1.729e-314 to "1.729e-314"
    converts 1.729e-314 to "1.729e-314"
+    converts 1.729e+213 to "1.729e+213"
    converts 1.729e+213 to "1.729e+213"
+    converts 1.729e+140 to "1.729e+140"
    converts 1.729e+140 to "1.729e+140"
+    converts 1.729e-306 to "1.729e-306"
    converts 1.729e-306 to "1.729e-306"
+    converts 1.729e-7 to "1.729e-7"
    converts 1.729e-7 to "1.729e-7"
+    converts 1.729e-315 to "1.729e-315"
    converts 1.729e-315 to "1.729e-315"
+    converts 1.729e+174 to "1.729e+174"
    converts 1.729e+174 to "1.729e+174"
+    converts 1.729e-166 to "1.729e-166"
    converts 1.729e-166 to "1.729e-166"
+    converts 1.729e+139 to "1.729e+139"
    converts 1.729e+139 to "1.729e+139"
+    converts 1.729e-78 to "1.729e-78"
    converts 1.729e-78 to "1.729e-78"
+    converts 1.729e+95 to "1.729e+95"
    converts 1.729e+95 to "1.729e+95"
+    converts 1.729e-213 to "1.729e-213"
    converts 1.729e-213 to "1.729e-213"
+    converts 1.729e-126 to "1.729e-126"
    converts 1.729e-126 to "1.729e-126"
+    converts 1.729e+109 to "1.729e+109"
    converts 1.729e+109 to "1.729e+109"
+    converts 1.729e+84 to "1.729e+84"
    converts 1.729e+84 to "1.729e+84"
+    converts 1.729e-249 to "1.729e-249"
    converts 1.729e-249 to "1.729e-249"
+    converts 1.729e+121 to "1.729e+121"
    converts 1.729e+121 to "1.729e+121"
+    converts 1.729e+281 to "1.729e+281"
    converts 1.729e+281 to "1.729e+281"
+    converts 1.729e-185 to "1.729e-185"
    converts 1.729e-185 to "1.729e-185"
+    converts 1.729e-30 to "1.729e-30"
    converts 1.729e-30 to "1.729e-30"
+    converts 1.729e+83 to "1.729e+83"
    converts 1.729e+83 to "1.729e+83"
+    converts 1.729e+263 to "1.729e+263"
    converts 1.729e+263 to "1.729e+263"
+    converts 1.729e-90 to "1.729e-90"
    converts 1.729e-90 to "1.729e-90"
+    converts 1.729e-1 to "0.1729"
    converts 1.729e-1 to "0.1729"
+    converts 1.729e+106 to "1.729e+106"
    converts 1.729e+106 to "1.729e+106"
+    converts 1.729e-259 to "1.729e-259"
    converts 1.729e-259 to "1.729e-259"
+    converts 1.729e+267 to "1.729e+267"
    converts 1.729e+267 to "1.729e+267"
+    converts 1.729e+292 to "1.729e+292"
    converts 1.729e+292 to "1.729e+292"
+    converts 1.729e-145 to "1.729e-145"
    converts 1.729e-145 to "1.729e-145"
+    converts 1.729e+300 to "1.729e+300"
    converts 1.729e+300 to "1.729e+300"
+    converts 1.729e-124 to "1.729e-124"
    converts 1.729e-124 to "1.729e-124"
+    converts 1.729e+185 to "1.729e+185"
    converts 1.729e+185 to "1.729e+185"
+    converts 1.729e+287 to "1.729e+287"
    converts 1.729e+287 to "1.729e+287"
+    converts 1.729e+2 to "172.9"
    converts 1.729e+2 to "172.9"
+    converts 1.729e-97 to "1.729e-97"
    converts 1.729e-97 to "1.729e-97"
+    converts 1.729e+57 to "1.729e+57"
    converts 1.729e+57 to "1.729e+57"
+    converts 1.729e-222 to "1.729e-222"
    converts 1.729e-222 to "1.729e-222"
+    converts 1.729e+209 to "1.729e+209"
    converts 1.729e+209 to "1.729e+209"
+    converts 1.729e+177 to "1.729e+177"
    converts 1.729e+177 to "1.729e+177"
+    converts 1.729e-71 to "1.729e-71"
    converts 1.729e-71 to "1.729e-71"
+    converts 1.729e+96 to "1.729e+96"
    converts 1.729e+96 to "1.729e+96"
+    converts 1.729e+266 to "1.729e+266"
    converts 1.729e+266 to "1.729e+266"
+    converts 1.729e-45 to "1.729e-45"
    converts 1.729e-45 to "1.729e-45"
+    converts 1.729e-181 to "1.729e-181"
    converts 1.729e-181 to "1.729e-181"
+    converts 1.729e-171 to "1.729e-171"
    converts 1.729e-171 to "1.729e-171"
+    converts 1.729e+94 to "1.729e+94"
    converts 1.729e+94 to "1.729e+94"
+    converts 1.729e-142 to "1.729e-142"
    converts 1.729e-142 to "1.729e-142"
+    converts 1.729e+59 to "1.729e+59"
    converts 1.729e+59 to "1.729e+59"
+    converts 1.729e-319 to "1.729e-319"
    converts 1.729e-319 to "1.729e-319"
+    converts 1.729e+198 to "1.729e+198"
    converts 1.729e+198 to "1.729e+198"
+    converts 1.729e-96 to "1.729e-96"
    converts 1.729e-96 to "1.729e-96"
+    converts 1.729e-309 to "1.729e-309"
    converts 1.729e-309 to "1.729e-309"
+    converts 1.729e+221 to "1.729e+221"
    converts 1.729e+221 to "1.729e+221"
+    converts 1.729e-229 to "1.729e-229"
    converts 1.729e-229 to "1.729e-229"
+    converts 1.729e+98 to "1.729e+98"
    converts 1.729e+98 to "1.729e+98"
+    converts 1.729e-131 to "1.729e-131"
    converts 1.729e-131 to "1.729e-131"
+    converts 1.729e+276 to "1.729e+276"
    converts 1.729e+276 to "1.729e+276"
+    converts 1.729e+100 to "1.729e+100"
    converts 1.729e+100 to "1.729e+100"
+    converts 1.729e+101 to "1.729e+101"
    converts 1.729e+101 to "1.729e+101"
+    converts 1.729e-128 to "1.729e-128"
    converts 1.729e-128 to "1.729e-128"
+    converts 1.729e+199 to "1.729e+199"
    converts 1.729e+199 to "1.729e+199"
+    converts 1.729e+24 to "1.729e+24"
    converts 1.729e+24 to "1.729e+24"
+    converts 1.729e+77 to "1.729e+77"
    converts 1.729e+77 to "1.729e+77"
+    converts 1.729e+19 to "1.729e+19"
    converts 1.729e+19 to "1.729e+19"
+    converts 1.729e-82 to "1.729e-82"
    converts 1.729e-82 to "1.729e-82"
+    converts 1.729e+193 to "1.729e+193"
    converts 1.729e+193 to "1.729e+193"
+    converts 1.729e-27 to "1.729e-27"
    converts 1.729e-27 to "1.729e-27"
+    converts 1.729e-69 to "1.729e-69"
    converts 1.729e-69 to "1.729e-69"
+    converts 1.729e+244 to "1.729e+244"
    converts 1.729e+244 to "1.729e+244"
+    converts 1.729e-121 to "1.729e-121"
    converts 1.729e-121 to "1.729e-121"
+    converts 1.729e+204 to "1.729e+204"
    converts 1.729e+204 to "1.729e+204"
+    converts 1.729e+62 to "1.729e+62"
    converts 1.729e+62 to "1.729e+62"
+    converts 1.729e+17 to "1.729e+17"
    converts 1.729e+17 to "1.729e+17"
+    converts 1.729e-266 to "1.729e-266"
    converts 1.729e-266 to "1.729e-266"
+    converts 1.729e-186 to "1.729e-186"
    converts 1.729e-186 to "1.729e-186"
+    converts 1.729e-156 to "1.729e-156"
    converts 1.729e-156 to "1.729e-156"
+    converts 1.729e-194 to "1.729e-194"
    converts 1.729e-194 to "1.729e-194"
+    converts 1.729e-275 to "1.729e-275"
    converts 1.729e-275 to "1.729e-275"
+    converts 1.729e-312 to "1.729e-312"
    converts 1.729e-312 to "1.729e-312"
+    converts 1.729e+183 to "1.729e+183"
    converts 1.729e+183 to "1.729e+183"
+    converts 1.729e+186 to "1.729e+186"
    converts 1.729e+186 to "1.729e+186"
+    converts 1.729e+233 to "1.729e+233"
    converts 1.729e+233 to "1.729e+233"
+    converts 1.729e-224 to "1.729e-224"
    converts 1.729e-224 to "1.729e-224"
+    converts 1.729e+124 to "1.729e+124"
    converts 1.729e+124 to "1.729e+124"
+    converts 1.729e+37 to "1.729e+37"
    converts 1.729e+37 to "1.729e+37"
+    converts 1.729e+219 to "1.729e+219"
    converts 1.729e+219 to "1.729e+219"
+    converts 1.729e-263 to "1.729e-263"
    converts 1.729e-263 to "1.729e-263"
+    converts 1.729e+58 to "1.729e+58"
    converts 1.729e+58 to "1.729e+58"
+    converts 7.29e-324 to "5.0e-324"
    converts 7.29e-324 to "5.0e-324"
+    converts 1.729e-175 to "1.729e-175"
    converts 1.729e-175 to "1.729e-175"
+    converts 1.729e+44 to "1.729e+44"
    converts 1.729e+44 to "1.729e+44"
+    converts 1.729e+123 to "1.729e+123"
    converts 1.729e+123 to "1.729e+123"
+    converts 1.729e-140 to "1.729e-140"
    converts 1.729e-140 to "1.729e-140"
+    converts 1.729e+60 to "1.729e+60"
    converts 1.729e+60 to "1.729e+60"
+    converts 1.729e+88 to "1.729e+88"
    converts 1.729e+88 to "1.729e+88"
+    converts 1.729e-255 to "1.729e-255"
    converts 1.729e-255 to "1.729e-255"
+    converts 1.729e+12 to "1729000000000.0"
    converts 1.729e+12 to "1729000000000.0"
+    converts 1.729e+35 to "1.729e+35"
    converts 1.729e+35 to "1.729e+35"
+    converts 1.729e-239 to "1.729e-239"
    converts 1.729e-239 to "1.729e-239"
+    converts 1.729e-40 to "1.729e-40"
    converts 1.729e-40 to "1.729e-40"
+    converts 1.729e+153 to "1.729e+153"
    converts 1.729e+153 to "1.729e+153"
+    converts 1.729e-240 to "1.729e-240"
    converts 1.729e-240 to "1.729e-240"
+    converts 1.729e-135 to "1.729e-135"
    converts 1.729e-135 to "1.729e-135"
+    converts 1.729e+103 to "1.729e+103"
    converts 1.729e+103 to "1.729e+103"
+    converts 1.729e-89 to "1.729e-89"
    converts 1.729e-89 to "1.729e-89"
+    converts 1.729e-83 to "1.729e-83"
    converts 1.729e-83 to "1.729e-83"
+    converts 1.729e-296 to "1.729e-296"
    converts 1.729e-296 to "1.729e-296"
+    converts 1.729e-233 to "1.729e-233"
    converts 1.729e-233 to "1.729e-233"
+    converts 1.729e+80 to "1.729e+80"
    converts 1.729e+80 to "1.729e+80"
+    converts 1.729e-254 to "1.729e-254"
    converts 1.729e-254 to "1.729e-254"
+    converts 1.729e+147 to "1.729e+147"
    converts 1.729e+147 to "1.729e+147"
+    converts 1.729e+92 to "1.729e+92"
    converts 1.729e+92 to "1.729e+92"
+    converts 1.729e+188 to "1.729e+188"
    converts 1.729e+188 to "1.729e+188"
+    converts 1.729e-92 to "1.729e-92"
    converts 1.729e-92 to "1.729e-92"
+    converts 1.729e+307 to "1.729e+307"
    converts 1.729e+307 to "1.729e+307"
+    converts 1.729e-256 to "1.729e-256"
    converts 1.729e-256 to "1.729e-256"
+    converts 1.729e-294 to "1.729e-294"
    converts 1.729e-294 to "1.729e-294"
+    converts 1.729e-33 to "1.729e-33"
    converts 1.729e-33 to "1.729e-33"
+    converts 1.729e+290 to "1.729e+290"
    converts 1.729e+290 to "1.729e+290"
+    converts 1.729e-161 to "1.729e-161"
    converts 1.729e-161 to "1.729e-161"
+    converts 1.729e-112 to "1.729e-112"
    converts 1.729e-112 to "1.729e-112"
+    converts 1.729e+79 to "1.729e+79"
    converts 1.729e+79 to "1.729e+79"
+    converts 1.729e+4 to "17290.0"
    converts 1.729e+4 to "17290.0"
+    converts 1.729e+275 to "1.729e+275"
    converts 1.729e+275 to "1.729e+275"
+    converts 1.729e-164 to "1.729e-164"
    converts 1.729e-164 to "1.729e-164"
+    converts 1.729e+34 to "1.729e+34"
    converts 1.729e+34 to "1.729e+34"
+    converts 1.729e-150 to "1.729e-150"
    converts 1.729e-150 to "1.729e-150"
+    converts 1.729e-67 to "1.729e-67"
    converts 1.729e-67 to "1.729e-67"
+    converts 1.729e-8 to "1.729e-8"
    converts 1.729e-8 to "1.729e-8"
+    converts 1.729e-74 to "1.729e-74"
    converts 1.729e-74 to "1.729e-74"
+    converts 1.729e-144 to "1.729e-144"
    converts 1.729e-144 to "1.729e-144"
+    converts 1.729e-305 to "1.729e-305"
    converts 1.729e-305 to "1.729e-305"
+    converts 1.729e-79 to "1.729e-79"
    converts 1.729e-79 to "1.729e-79"
+    converts 1.729e+111 to "1.729e+111"
    converts 1.729e+111 to "1.729e+111"
+    converts 1.729e-287 to "1.729e-287"
    converts 1.729e-287 to "1.729e-287"
+    converts 1.729e-6 to "1.729e-6"
    converts 1.729e-6 to "1.729e-6"
+    converts 1.729e+175 to "1.729e+175"
    converts 1.729e+175 to "1.729e+175"
+    converts 1.729e+41 to "1.729e+41"
    converts 1.729e+41 to "1.729e+41"
+    converts 1.729e+82 to "1.729e+82"
    converts 1.729e+82 to "1.729e+82"
+    converts 1.729e-292 to "1.729e-292"
    converts 1.729e-292 to "1.729e-292"
+    converts 1.729e-42 to "1.729e-42"
    converts 1.729e-42 to "1.729e-42"
+    converts 1.729e+192 to "1.729e+192"
    converts 1.729e+192 to "1.729e+192"
+    converts 1.729e+216 to "1.729e+216"
    converts 1.729e+216 to "1.729e+216"
+    converts 1.729e-178 to "1.729e-178"
    converts 1.729e-178 to "1.729e-178"
+    converts 1.729e+18 to "1.729e+18"
    converts 1.729e+18 to "1.729e+18"
+    converts 1.729e-137 to "1.729e-137"
    converts 1.729e-137 to "1.729e-137"
+    converts 1.729e-54 to "1.729e-54"
    converts 1.729e-54 to "1.729e-54"
+    converts 1.729e+133 to "1.729e+133"
    converts 1.729e+133 to "1.729e+133"
+    converts 1.729e-149 to "1.729e-149"
    converts 1.729e-149 to "1.729e-149"
+    converts 1.729e-182 to "1.729e-182"
    converts 1.729e-182 to "1.729e-182"
+    converts 1.729e-60 to "1.729e-60"
    converts 1.729e-60 to "1.729e-60"
+    converts 1.729e+146 to "1.729e+146"
    converts 1.729e+146 to "1.729e+146"
+    converts 1.729e+210 to "1.729e+210"
    converts 1.729e+210 to "1.729e+210"
+    converts 1.729e+56 to "1.729e+56"
    converts 1.729e+56 to "1.729e+56"
+    converts 1.729e+102 to "1.729e+102"
    converts 1.729e+102 to "1.729e+102"
+    converts 1.729e+265 to "1.729e+265"
    converts 1.729e+265 to "1.729e+265"
+    converts 1.729e+26 to "1.729e+26"
    converts 1.729e+26 to "1.729e+26"
+    converts 1.729e-49 to "1.729e-49"
    converts 1.729e-49 to "1.729e-49"
+    converts 1.729e+230 to "1.729e+230"
    converts 1.729e+230 to "1.729e+230"
+    converts 1.729e+47 to "1.729e+47"
    converts 1.729e+47 to "1.729e+47"
+    converts 1.729e+212 to "1.729e+212"
    converts 1.729e+212 to "1.729e+212"
+    converts 1.729e-258 to "1.729e-258"
    converts 1.729e-258 to "1.729e-258"
+    converts 1.729e+154 to "1.729e+154"
    converts 1.729e+154 to "1.729e+154"
+    converts 1.729e+144 to "1.729e+144"
    converts 1.729e+144 to "1.729e+144"
+    converts 1.729e-279 to "1.729e-279"
    converts 1.729e-279 to "1.729e-279"
+    converts 1.729e-63 to "1.729e-63"
    converts 1.729e-63 to "1.729e-63"
+    converts 1.729e+27 to "1.729e+27"
    converts 1.729e+27 to "1.729e+27"
+    converts 1.729e-202 to "1.729e-202"
    converts 1.729e-202 to "1.729e-202"
+    converts 1.729e-226 to "1.729e-226"
    converts 1.729e-226 to "1.729e-226"
+    converts 1.729e+10 to "17290000000.0"
    converts 1.729e+10 to "17290000000.0"
+    converts 1.729e-132 to "1.729e-132"
    converts 1.729e-132 to "1.729e-132"
+    converts 1.729e-307 to "1.729e-307"
    converts 1.729e-307 to "1.729e-307"
+    converts 1.729e-162 to "1.729e-162"
    converts 1.729e-162 to "1.729e-162"
+    converts 1.729e-297 to "1.729e-297"
    converts 1.729e-297 to "1.729e-297"
+    converts 1.729e-127 to "1.729e-127"
    converts 1.729e-127 to "1.729e-127"
+    converts 1.729e-299 to "1.729e-299"
    converts 1.729e-299 to "1.729e-299"
+    converts 1.729e-174 to "1.729e-174"
    converts 1.729e-174 to "1.729e-174"
+    converts 1.729e-225 to "1.729e-225"
    converts 1.729e-225 to "1.729e-225"
+    converts 1.729e-163 to "1.729e-163"
    converts 1.729e-163 to "1.729e-163"
+    converts 1.729e-14 to "1.729e-14"
    converts 1.729e-14 to "1.729e-14"
+    converts 1.729e-20 to "1.729e-20"
    converts 1.729e-20 to "1.729e-20"
+    converts 1.729e+195 to "1.729e+195"
    converts 1.729e+195 to "1.729e+195"
+    converts 1.729e+294 to "1.729e+294"
    converts 1.729e+294 to "1.729e+294"
+    converts 1.729e+206 to "1.729e+206"
    converts 1.729e+206 to "1.729e+206"
+    converts 1.729e-39 to "1.729e-39"
    converts 1.729e-39 to "1.729e-39"
+    converts 1.729e+36 to "1.729e+36"
    converts 1.729e+36 to "1.729e+36"
+    converts 1.729e-220 to "1.729e-220"
    converts 1.729e-220 to "1.729e-220"
+    converts 1.729e-188 to "1.729e-188"
    converts 1.729e-188 to "1.729e-188"
+    converts 1.729e+250 to "1.729e+250"
    converts 1.729e+250 to "1.729e+250"
+    converts 1.729e+245 to "1.729e+245"
    converts 1.729e+245 to "1.729e+245"
+    converts 1.729e-66 to "1.729e-66"
    converts 1.729e-66 to "1.729e-66"
+    converts 1.729e+93 to "1.729e+93"
    converts 1.729e+93 to "1.729e+93"
+    converts 1.729e-47 to "1.729e-47"
    converts 1.729e-47 to "1.729e-47"
+    converts 1.729e+40 to "1.729e+40"
    converts 1.729e+40 to "1.729e+40"
+    converts 1.729e-230 to "1.729e-230"
    converts 1.729e-230 to "1.729e-230"
+    converts 1.729e-109 to "1.729e-109"
    converts 1.729e-109 to "1.729e-109"
+    converts 1.729e-25 to "1.729e-25"
    converts 1.729e-25 to "1.729e-25"
+    converts 1.729e-261 to "1.729e-261"
    converts 1.729e-261 to "1.729e-261"
+    converts 1.729e+55 to "1.729e+55"
    converts 1.729e+55 to "1.729e+55"
+    converts 1.729e+75 to "1.729e+75"
    converts 1.729e+75 to "1.729e+75"
+    converts 1.729e-321 to "1.73e-321"
    converts 1.729e-321 to "1.73e-321"
+    converts 1.729e-22 to "1.729e-22"
    converts 1.729e-22 to "1.729e-22"
+    converts 1.729e-302 to "1.729e-302"
    converts 1.729e-302 to "1.729e-302"
+    converts 1.729e-35 to "1.729e-35"
    converts 1.729e-35 to "1.729e-35"
+    converts 1.729e+15 to "1.729e+15"
    converts 1.729e+15 to "1.729e+15"
+    converts 1.729e-272 to "1.729e-272"
    converts 1.729e-272 to "1.729e-272"
+    converts 1.729e-65 to "1.729e-65"
    converts 1.729e-65 to "1.729e-65"
+    converts 1.729e+112 to "1.729e+112"
    converts 1.729e+112 to "1.729e+112"
+    converts 1.729e-165 to "1.729e-165"
    converts 1.729e-165 to "1.729e-165"
+    converts 1.729e+132 to "1.729e+132"
    converts 1.729e+132 to "1.729e+132"
+    converts 1.729e+238 to "1.729e+238"
    converts 1.729e+238 to "1.729e+238"
+    converts 1.729e+283 to "1.729e+283"
    converts 1.729e+283 to "1.729e+283"
+    converts 1.729e+71 to "1.729e+71"
    converts 1.729e+71 to "1.729e+71"
+    converts 1.729e+270 to "1.729e+270"
    converts 1.729e+270 to "1.729e+270"
+    converts 1.729e-221 to "1.729e-221"
    converts 1.729e-221 to "1.729e-221"
+    converts 1.729e+66 to "1.729e+66"
    converts 1.729e+66 to "1.729e+66"
+    converts 1.729e+167 to "1.729e+167"
    converts 1.729e+167 to "1.729e+167"
+    converts 1.729e+81 to "1.729e+81"
    converts 1.729e+81 to "1.729e+81"
+    converts 1.729e+97 to "1.729e+97"
    converts 1.729e+97 to "1.729e+97"
+    converts 1.729e+1 to "17.29"
    converts 1.729e+1 to "17.29"
+    converts 1.729e-15 to "1.729e-15"
    converts 1.729e-15 to "1.729e-15"
+    converts 1.729e+301 to "1.729e+301"
    converts 1.729e+301 to "1.729e+301"
+    converts 1.729e-264 to "1.729e-264"
    converts 1.729e-264 to "1.729e-264"
+    converts 1.729e-84 to "1.729e-84"
    converts 1.729e-84 to "1.729e-84"
+    converts 1.729e+203 to "1.729e+203"
    converts 1.729e+203 to "1.729e+203"
+    converts 1.729e-119 to "1.729e-119"
    converts 1.729e-119 to "1.729e-119"
+    converts 1.729e+246 to "1.729e+246"
    converts 1.729e+246 to "1.729e+246"
+    converts 1.729e-247 to "1.729e-247"
    converts 1.729e-247 to "1.729e-247"
+    converts 1.729e+261 to "1.729e+261"
    converts 1.729e+261 to "1.729e+261"
+    converts 1.729e-200 to "1.729e-200"
    converts 1.729e-200 to "1.729e-200"
+    converts 1.729e+196 to "1.729e+196"
    converts 1.729e+196 to "1.729e+196"
+    converts 1.729e-17 to "1.729e-17"
    converts 1.729e-17 to "1.729e-17"
+    converts 1.729e+237 to "1.729e+237"
    converts 1.729e+237 to "1.729e+237"
+    converts 1.729e-37 to "1.729e-37"
    converts 1.729e-37 to "1.729e-37"
+    converts 1.729e-170 to "1.729e-170"
    converts 1.729e-170 to "1.729e-170"
+    converts 1.729e-227 to "1.729e-227"
    converts 1.729e-227 to "1.729e-227"
+    converts 1.729e+164 to "1.729e+164"
    converts 1.729e+164 to "1.729e+164"
+    converts 1.729e+117 to "1.729e+117"
    converts 1.729e+117 to "1.729e+117"
+    converts 1.729e+21 to "1.729e+21"
    converts 1.729e+21 to "1.729e+21"
+    converts 1.729e+231 to "1.729e+231"
    converts 1.729e+231 to "1.729e+231"
+    converts 1.729e+70 to "1.729e+70"
    converts 1.729e+70 to "1.729e+70"
+    converts 1.729e-285 to "1.729e-285"
    converts 1.729e-285 to "1.729e-285"
+    converts 1.729e+298 to "1.729e+298"
    converts 1.729e+298 to "1.729e+298"
+    converts 1.729e+135 to "1.729e+135"
    converts 1.729e+135 to "1.729e+135"
+    converts 1.729e+72 to "1.729e+72"
    converts 1.729e+72 to "1.729e+72"
+    converts 1.729e-320 to "1.729e-320"
    converts 1.729e-320 to "1.729e-320"
+    converts 1.729e+297 to "1.729e+297"
    converts 1.729e+297 to "1.729e+297"
+    converts 1.729e+129 to "1.729e+129"
    converts 1.729e+129 to "1.729e+129"
+    converts 1.729e-278 to "1.729e-278"
    converts 1.729e-278 to "1.729e-278"
+    converts 1.729e-237 to "1.729e-237"
    converts 1.729e-237 to "1.729e-237"
+    converts 1.729e-21 to "1.729e-21"
    converts 1.729e-21 to "1.729e-21"
+    converts 1.729e+152 to "1.729e+152"
    converts 1.729e+152 to "1.729e+152"
+    converts 1.729e-129 to "1.729e-129"
    converts 1.729e-129 to "1.729e-129"
+    converts 1.729e+74 to "1.729e+74"
    converts 1.729e+74 to "1.729e+74"
+    converts 1.729e-252 to "1.729e-252"
    converts 1.729e-252 to "1.729e-252"
+    converts 1.729e-262 to "1.729e-262"
    converts 1.729e-262 to "1.729e-262"
+  converts 524288.0 to "524288.0"
  converts 524288.0 to "524288.0"
+  converts 1000000001000000.0 to "1.000000001e+15"
  converts 1000000001000000.0 to "1.000000001e+15"
+  converts 536870912000.0 to "536870912000.0"
  converts 536870912000.0 to "536870912000.0"
+  converts 1.234567890123456 to "1.234567890123456"
  converts 1.234567890123456 to "1.234567890123456"
+  converts 1.23 to "1.23"
  converts 1.23 to "1.23"
+  converts 1000000100000000.0 to "1.0000001e+15"
  converts 1000000100000000.0 to "1.0000001e+15"
+  converts 1.234567 to "1.234567"
  converts 1.234567 to "1.234567"
+  converts 8388608.0 to "8388608.0"
  converts 8388608.0 to "8388608.0"
+  converts 70368744177664.0 to "70368744177664.0"
  converts 70368744177664.0 to "70368744177664.0"
+  Ryu d2s_test.cc SmallIntegers
+    converts 9007199254740991.0 to "9.007199254740991e+15"
    converts 9007199254740991.0 to "9.007199254740991e+15"
+    converts 9007199254740992.0 to "9.007199254740992e+15"
    converts 9007199254740992.0 to "9.007199254740992e+15"
+  one-digit cases, where the decimal point can't appear between digits like "17.29"
+    converts 7e+0 to "7.0"
    converts 7e+0 to "7.0"
+    converts 7e-2 to "0.07"
    converts 7e-2 to "0.07"
+    converts 7e+2 to "700.0"
    converts 7e+2 to "700.0"
+    converts 7e-3 to "0.007"
    converts 7e-3 to "0.007"
+    converts 7e+3 to "7000.0"
    converts 7e+3 to "7000.0"
+    converts 7e+1 to "70.0"
    converts 7e+1 to "70.0"
+    converts 7e-1 to "0.7"
    converts 7e-1 to "0.7"
+  converts 1.2345678 to "1.2345678"
  converts 1.2345678 to "1.2345678"
+  converts 1234567890123456.0 to "1.234567890123456e+15"
  converts 1234567890123456.0 to "1.234567890123456e+15"
+  converts 1001000000000000.0 to "1.001e+15"
  converts 1001000000000000.0 to "1.001e+15"
+  converts 1.234 to "1.234"
  converts 1.234 to "1.234"
+  converts 8589934592.0 to "8589934592.0"
  converts 8589934592.0 to "8589934592.0"
+  converts 8388608000.0 to "8388608000.0"
  converts 8388608000.0 to "8388608000.0"
+  converts 12345678901.0 to "12345678901.0"
  converts 12345678901.0 to "12345678901.0"
+  converts 1000001000000000.0 to "1.000001e+15"
  converts 1000001000000000.0 to "1.000001e+15"
+  converts 9007199254740992.0 to "9.007199254740992e+15"
  converts 9007199254740992.0 to "9.007199254740992e+15"
+  highly-trimmed powers of 2
+    converts 0x1p960 to "9.7453140114e+288"
    converts 0x1p960 to "9.7453140114e+288"
+    converts 0x1p959 to "4.8726570057e+288"
    converts 0x1p959 to "4.8726570057e+288"
+  converts 1.0 to "1.0"
  converts 1.0 to "1.0"
+  converts 12345678.0 to "12345678.0"
  converts 12345678.0 to "12345678.0"
+  converts 1.2345678901234 to "1.2345678901234"
  converts 1.2345678901234 to "1.2345678901234"
+  converts 1.234567890123 to "1.234567890123"
  converts 1.234567890123 to "1.234567890123"
+  converts 1000000000001000.0 to "1.000000000001e+15"
  converts 1000000000001000.0 to "1.000000000001e+15"
+  converts 100000000.0 to "100000000.0"
  converts 100000000.0 to "100000000.0"
+  converts 1000000.0 to "1000000.0"
  converts 1000000.0 to "1000000.0"
+  converts 10000000.0 to "10000000.0"
  converts 10000000.0 to "10000000.0"
+  converts 123456789.0 to "123456789.0"
  converts 123456789.0 to "123456789.0"
+  converts 68719476736000.0 to "68719476736000.0"
  converts 68719476736000.0 to "68719476736000.0"
+  converts 524288000.0 to "524288000.0"
  converts 524288000.0 to "524288000.0"
+  Grisu failures
+    converts 4.91e-6 to "4.91e-6"
    converts 4.91e-6 to "4.91e-6"
+    converts 0x1.a6c767640cd71p+879 to "6.6564021122018745e+264"
    converts 0x1.a6c767640cd71p+879 to "6.6564021122018745e+264"
+    converts 1.0e+23 to "1.0e+23"
    converts 1.0e+23 to "1.0e+23"
+    converts 3.5844466002796428e+298 to "3.5844466002796428e+298"
    converts 3.5844466002796428e+298 to "3.5844466002796428e+298"
+    converts 5.547e-6 to "5.547e-6"
    converts 5.547e-6 to "5.547e-6"
+    converts 0x1.e0ffed391517ep-186 to "1.9156918820264798e-56"
    converts 0x1.e0ffed391517ep-186 to "1.9156918820264798e-56"
+  converts 1234567895.0 to "1234567895.0"
  converts 1234567895.0 to "1234567895.0"
+  converts 8000.0 to "8000.0"
  converts 8000.0 to "8000.0"
+  converts 8796093022208.0 to "8796093022208.0"
  converts 8796093022208.0 to "8796093022208.0"
+  converts 123.0 to "123.0"
  converts 123.0 to "123.0"
+  converts 123456.0 to "123456.0"
  converts 123456.0 to "123456.0"
+  converts 100000000000.0 to "100000000000.0"
  converts 100000000000.0 to "100000000000.0"
+  odd mantissas (unaffected by shifting)
+    converts 5e22 to "5.0e+22"
    converts 5e22 to "5.0e+22"
+    converts 81123342286848e18 to "8.1123342286848e+31"
    converts 81123342286848e18 to "8.1123342286848e+31"
+    converts 115292150461e7 to "1.15292150461e+18"
    converts 115292150461e7 to "1.15292150461e+18"
+    converts 922337203e10 to "9.22337203e+18"
    converts 922337203e10 to "9.22337203e+18"
+    converts 1801439850948199e1 to "1.801439850948199e+16"
    converts 1801439850948199e1 to "1.801439850948199e+16"
+    converts 3e22 to "3.0e+22"
    converts 3e22 to "3.0e+22"
+    converts 14411518807585e4 to "1.4411518807585e+17"
    converts 14411518807585e4 to "1.4411518807585e+17"
+    converts 2361e18 to "2.361e+21"
    converts 2361e18 to "2.361e+21"
+    converts 115292150459e7 to "1.15292150459e+18"
    converts 115292150459e7 to "1.15292150459e+18"
+    converts 295149e15 to "2.95149e+20"
    converts 295149e15 to "2.95149e+20"
+    converts 72057594037927e3 to "7.2057594037927e+16"
    converts 72057594037927e3 to "7.2057594037927e+16"
+    converts 59031e16 to "5.9031e+20"
    converts 59031e16 to "5.9031e+20"
+    converts 93e20 to "9.3e+21"
    converts 93e20 to "9.3e+21"
+    converts 11807e17 to "1.1807e+21"
    converts 11807e17 to "1.1807e+21"
+    converts 59029e16 to "5.9029e+20"
    converts 59029e16 to "5.9029e+20"
+    converts 302232576e15 to "3.02232576e+23"
    converts 302232576e15 to "3.02232576e+23"
+    converts 4611686017e9 to "4.611686017e+18"
    converts 4611686017e9 to "4.611686017e+18"
+    converts 14411518807587e4 to "1.4411518807587e+17"
    converts 14411518807587e4 to "1.4411518807587e+17"
+    converts 23058430093e8 to "2.3058430093e+18"
    converts 23058430093e8 to "2.3058430093e+18"
+    converts 473e19 to "4.73e+21"
    converts 473e19 to "4.73e+21"
+    converts 184467441e11 to "1.84467441e+19"
    converts 184467441e11 to "1.84467441e+19"
+    converts 7378697e13 to "7.378697e+19"
    converts 7378697e13 to "7.378697e+19"
+    converts 922337205e10 to "9.22337205e+18"
    converts 922337205e10 to "9.22337205e+18"
+    converts 360287970189641e2 to "3.60287970189641e+16"
    converts 360287970189641e2 to "3.60287970189641e+16"
+    converts 184467439e11 to "1.84467439e+19"
    converts 184467439e11 to "1.84467439e+19"
+    converts 36893489e12 to "3.6893489e+19"
    converts 36893489e12 to "3.6893489e+19"
+    converts 2882303761517e5 to "2.882303761517e+17"
    converts 2882303761517e5 to "2.882303761517e+17"
+    converts 471e19 to "4.71e+21"
    converts 471e19 to "4.71e+21"
+    converts 81192061763584e18 to "8.1192061763584e+31"
    converts 81192061763584e18 to "8.1192061763584e+31"
+    converts 1801439850948197e1 to "1.801439850948197e+16"
    converts 1801439850948197e1 to "1.801439850948197e+16"
+    converts 11805e17 to "1.1805e+21"
    converts 11805e17 to "1.1805e+21"
+    converts 576460752303e6 to "5.76460752303e+17"
    converts 576460752303e6 to "5.76460752303e+17"
+    converts 4611686019e9 to "4.611686019e+18"
    converts 4611686019e9 to "4.611686019e+18"
+    converts 2363e18 to "2.363e+21"
    converts 2363e18 to "2.363e+21"
+    converts 295147e15 to "2.95147e+20"
    converts 295147e15 to "2.95147e+20"
+    converts 36893487e12 to "3.6893487e+19"
    converts 36893487e12 to "3.6893487e+19"
+    converts 19e21 to "1.9e+22"
    converts 19e21 to "1.9e+22"
+    converts 17e21 to "1.7e+22"
    converts 17e21 to "1.7e+22"
+    converts 23058430091e8 to "2.3058430091e+18"
    converts 23058430091e8 to "2.3058430091e+18"
+    converts 7378699e13 to "7.378699e+19"
    converts 7378699e13 to "7.378699e+19"
+    converts 2882303761519e5 to "2.882303761519e+17"
    converts 2882303761519e5 to "2.882303761519e+17"
+    converts 1475739e14 to "1.475739e+20"
    converts 1475739e14 to "1.475739e+20"
+    converts 72057594037929e3 to "7.2057594037929e+16"
    converts 72057594037929e3 to "7.2057594037929e+16"
+    converts 1475741e14 to "1.475741e+20"
    converts 1475741e14 to "1.475741e+20"
+    converts 360287970189639e2 to "3.60287970189639e+16"
    converts 360287970189639e2 to "3.60287970189639e+16"
+    converts 95e20 to "9.5e+21"
    converts 95e20 to "9.5e+21"
+    converts 576460752305e6 to "5.76460752305e+17"
    converts 576460752305e6 to "5.76460752305e+17"
+    converts 302230528e15 to "3.02230528e+23"
    converts 302230528e15 to "3.02230528e+23"
+  converts 8192.0 to "8192.0"
  converts 8192.0 to "8192.0"
+  converts 100.0 to "100.0"
  converts 100.0 to "100.0"
+  converts 536870912.0 to "536870912.0"
  converts 536870912.0 to "536870912.0"
+  converts 100000000000000.0 to "100000000000000.0"
  converts 100000000000000.0 to "100000000000000.0"
+  converts 549755813888.0 to "549755813888.0"
  converts 549755813888.0 to "549755813888.0"
+JSON mapping
+  works together with yaml
  works together with yaml
+  allows small types of integer
  allows small types of integer
+  parses array of people
  parses array of people
+  parses person with unknown attributes
  parses person with unknown attributes
+  parses json array as set
  parses json array as set
+  parses JSON with presence markers
+    parses person with absent attributes
    parses person with absent attributes
+  parses json with Time::Format converter
  parses json with Time::Format converter
+  parses raw value from object
  parses raw value from object
+  parses 128-bit integer
  parses 128-bit integer
+  with query attributes
+    defines query getter with class restriction
    defines query getter with class restriction
+    raises if non-nilable attribute is nil
    raises if non-nilable attribute is nil
+    defines query getter
    defines query getter
+    defines non-query setter and presence methods
    defines non-query setter and presence methods
+    maps non-query attributes
    maps non-query attributes
+  emit_nulls option
  emit_nulls option
+  parses with nilable root and emit null
  parses with nilable root and emit null
+  should parse extra fields (JSONAttrPersonExtraFields with on_unknown_json_attribute)
  should parse extra fields (JSONAttrPersonExtraFields with on_unknown_json_attribute)
+  parses raw value from int
  parses raw value from int
+  fixes #13337
  fixes #13337
+  parses simple mapping
  parses simple mapping
+  emits null on request when doing to_json
  emits null on request when doing to_json
+  converter with null value (#13655)
  converter with null value (#13655)
+  parses json with problematic keys
  parses json with problematic keys
+  raises if non-nilable attribute is nil
  raises if non-nilable attribute is nil
+  parses person
  parses person
+  serializes JSON with presence markers and ignore_serialize
+    ignore_serialize is set to a method which returns true when value is nil or empty string
+      ignores field when value is nil
      ignores field when value is nil
+      ignores field when value is empty string
      ignores field when value is empty string
+    ignore_serialize is set to conditional expressions 'last_name.nil? && !last_name_present?'
+      emits field when value is not nil and @last_name_present is true
      emits field when value is not nil and @last_name_present is true
+      emits field when value is not nil and @last_name_present is false
      emits field when value is not nil and @last_name_present is false
+      emits null when value is null and @last_name_present is true
      emits null when value is null and @last_name_present is true
+      does not emit null when value is null and @last_name_present is false
      does not emit null when value is null and @last_name_present is false
+  parses raw value from float
  parses raw value from float
+  raises if not an object
  raises if not an object
+  doesn't emit null by default when doing to_json
  doesn't emit null by default when doing to_json
+  does to_json
  does to_json
+  works with record
  works with record
+  converter with default value
  converter with default value
+  BigDecimal
+    parses large precision json floats with BigDecimal
    parses large precision json floats with BigDecimal
+    parses json string with BigDecimal
    parses json string with BigDecimal
+    parses large json ints with BigDecimal
    parses large json ints with BigDecimal
+    parses json float with BigDecimal
    parses json float with BigDecimal
+  work with module and inheritance
     assert
    assert
     assert
    assert
-  any? without block
-    returns false if all elements are falsey
    returns false if all elements are falsey
-    returns true if at least one element is truthy
    returns true if at least one element is truthy
-  #present?
     assert
    assert
     assert
    assert
-Log
-  building for type ignores parent source (types are absolute sources)
  building for type ignores parent source (types are absolute sources)
-  can build for generic class (ignores generic args)
  can build for generic class (ignores generic args)
-  can build for class
  can build for class
-  can build with Log = ::Log.for(self)
  can build with Log = ::Log.for(self)
-  can build sources from nested
  can build sources from nested
-  can build with level override
  can build with level override
-  can build nested with level override
  can build nested with level override
-  can build for module type
  can build for module type
-  can build for structs
  can build for structs
-HTTP::WebSocketHandler
-  gives upgrade response for case-insensitive 'WebSocket' upgrade request
  gives upgrade response for case-insensitive 'WebSocket' upgrade request
-  returns not found if the request is not an websocket upgrade
  returns not found if the request is not an websocket upgrade
-  returns upgrade required if Sec-WebSocket-Version is invalid
  returns upgrade required if Sec-WebSocket-Version is invalid
-  returns upgrade required if Sec-WebSocket-Version is missing
  returns upgrade required if Sec-WebSocket-Version is missing
-  returns not found if the request Upgrade is invalid
  returns not found if the request Upgrade is invalid
-  gives upgrade response for websocket upgrade request with 'keep-alive, Upgrade' request
  gives upgrade response for websocket upgrade request with 'keep-alive, Upgrade' request
-  returns bad request if Sec-WebSocket-Key is missing
  returns bad request if Sec-WebSocket-Key is missing
-  gives upgrade response for websocket upgrade request with 'Upgrade' request
  gives upgrade response for websocket upgrade request with 'Upgrade' request
-HTTP::FormData::Builder
-  #content_type
-    calculates the content type
    calculates the content type
-  #finish
-    fails when no body parts
    fails when no body parts
-    fails after finish
    fails after finish
-  #field
-    converts value to a string
    converts value to a string
-  builds valid form-data messages
  builds valid form-data messages
-  #file
-    fails after finish
    fails after finish
-Indexable(T)
-  iterates until its size, having mutated (#3386)
  iterates until its size, having mutated (#3386)
-  iterates until its size, having mutated (#3386)
  iterates until its size, having mutated (#3386)
-  iterates within a range of indices (#3386)
  iterates within a range of indices (#3386)
-  dig?
-    returns nil if not found
    returns nil if not found
-    gets the value at given path given splat
    gets the value at given path given splat
-  #join
-    joins when T has String
    joins when T has String
-    joins strings (empty case)
    joins strings (empty case)
-    joins non-strings
    joins non-strings
-    joins strings (non-empty case)
    joins strings (non-empty case)
-    with IO
    with IO
-  iterates within a range of indices, no end
  iterates within a range of indices, no end
+  outputs with converter when nilable when emit_null is true
  outputs with converter when nilable when emit_null is true
+  parses strict person with unknown attributes
  parses strict person with unknown attributes
+  JSON::HashValueConverter(Converter)
+    uses converter instance with nested converter metaclass
    uses converter instance with nested converter metaclass
+    uses converter metaclass
    uses converter metaclass
+    uses converter instance with nested converter instance
    uses converter instance with nested converter instance
+  empty class with unmapped
  empty class with unmapped
+  allows setting a nilable property to nil
  allows setting a nilable property to nil
+  parses person without age
  parses person without age
+  empty class
  empty class
+  outputs with converter when nilable
  outputs with converter when nilable
+  uses Time::EpochConverter
  uses Time::EpochConverter
+  outputs JSON with Hash
  outputs JSON with Hash
+  should to store extra fields (JSONAttrPersonExtraFields with on_to_json)
  should to store extra fields (JSONAttrPersonExtraFields with on_to_json)
+  parses json with any
  parses json with any
+  namespaced classes
+    lets default values use the object's own namespace
    lets default values use the object's own namespace
+  raises if data type does not match
  raises if data type does not match
+  works with class with two fields
  works with class with two fields
+  parses json with defaults
+    with nilable
    with nilable
+    mixed
    mixed
+    create new array every time
    create new array every time
+    bool
    bool
+  JSON::ArrayConverter(Converter)
+    uses converter metaclass
    uses converter metaclass
+    uses converter instance with nested converter instance
    uses converter instance with nested converter instance
+    uses converter instance with nested converter metaclass
    uses converter instance with nested converter metaclass
+  uses Time::EpochMillisConverter
  uses Time::EpochMillisConverter
+  doesn't raises on false value when not-nil
  doesn't raises on false value when not-nil
+  parses with nilable root
  parses with nilable root
+  parses nilable union
  parses nilable union
+  yaml and json with after_initialize hook
  yaml and json with after_initialize hook
+  json with selective serialization
  json with selective serialization
+  parses with root
  parses with root
+  parses UUID
  parses UUID
+  parses JSON integer into a float property (#8618)
  parses JSON integer into a float property (#8618)
+  parses json with keywords
  parses json with keywords
+  use_json_discriminator
+    raises if unknown discriminator value
    raises if unknown discriminator value
+    raises if missing discriminator
    raises if missing discriminator
+    deserializes with discriminator, strict recursive type
    deserializes with discriminator, strict recursive type
+    deserializes with discriminator, another recursive type, fixes: #13429
    deserializes with discriminator, another recursive type, fixes: #13429
+    deserializes with discriminator
    deserializes with discriminator
+    deserializes with variable discriminator value type
    deserializes with variable discriminator value type
+__floattisf
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+.__powisf2
.__powisf2
+Base64
+  simple test
+    encode "abc" to "YWJj\n"
    encode "abc" to "YWJj\n"
+    encode "abcd" to "YWJjZA==\n"
    encode "abcd" to "YWJjZA==\n"
+    encode "abcdef" to "YWJjZGVm\n"
    encode "abcdef" to "YWJjZGVm\n"
+    encode "a" to "YQ==\n"
    encode "a" to "YQ==\n"
+    decode from "YWJjZGVmZw==\n" to "abcdefg"
    decode from "YWJjZGVmZw==\n" to "abcdefg"
+    decode from "YWJjZGU=\n" to "abcde"
    decode from "YWJjZGU=\n" to "abcde"
+    encode "abcdefg" to "YWJjZGVmZw==\n"
    encode "abcdefg" to "YWJjZGVmZw==\n"
+    encode "abcde" to "YWJjZGU=\n"
    encode "abcde" to "YWJjZGU=\n"
+    decode from "YWJjZA==\n" to "abcd"
    decode from "YWJjZA==\n" to "abcd"
+    decode from "YWJj\n" to "abc"
    decode from "YWJj\n" to "abc"
+    decode from "YWI=\n" to "ab"
    decode from "YWI=\n" to "ab"
+    encode "" to ""
    encode "" to ""
+    decode from "YWJjZGVm\n" to "abcdef"
    decode from "YWJjZGVm\n" to "abcdef"
+    encode "ab" to "YWI=\n"
    encode "ab" to "YWI=\n"
+    decode from "YQ==\n" to "a"
    decode from "YQ==\n" to "a"
+    decode from "" to ""
    decode from "" to ""
+  base
+    decode from strict form
    decode from strict form
+    encode to stream returns number of written characters
    encode to stream returns number of written characters
+    decode from "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n" to "This is line one\nThis is line two\nThis is line three\nAnd so on...\n"
    decode from "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n" to "This is line one\nThis is line two\nThis is line three\nAnd so on...\n"
+    encode "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" to "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n"
    encode "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" to "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n"
+    encode "hahah⊙ⓧ⊙" to "aGFoYWjiipnik6fiipk=\n"
    encode "hahah⊙ⓧ⊙" to "aGFoYWjiipnik6fiipk=\n"
+    decode from "U2VuZCByZWluZm9yY2VtZW50cw==\n" to "Send reinforcements"
    decode from "U2VuZCByZWluZm9yY2VtZW50cw==\n" to "Send reinforcements"
+    encode "Send reinforcements" to "U2VuZCByZWluZm9yY2VtZW50cw==\n"
    encode "Send reinforcements" to "U2VuZCByZWluZm9yY2VtZW50cw==\n"
+    decode from "aGFoYWjiipnik6fiipk=\n" to "hahah⊙ⓧ⊙"
    decode from "aGFoYWjiipnik6fiipk=\n" to "hahah⊙ⓧ⊙"
+    decode from stream returns number of written bytes
    decode from stream returns number of written bytes
+    big message
    big message
+    works for most characters
    works for most characters
+    decode from "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n" to "Now is the time for all good coders\nto learn Crystal"
    decode from "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n" to "Now is the time for all good coders\nto learn Crystal"
+    encode "Now is the time for all good coders\nto learn Crystal" to "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n"
    encode "Now is the time for all good coders\nto learn Crystal" to "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n"
+  encodes byte slice
  encodes byte slice
+  urlsafe
+    encode to stream returns number of written characters
    encode to stream returns number of written characters
+    work
    work
+  
+ in multiple places
+    decode from "YWJj\nZGVm\nZw==\n" to "abcdefg"
    decode from "YWJj\nZGVm\nZw==\n" to "abcdefg"
+    decode from "YWJj\nZA==\n" to "abcd"
    decode from "YWJj\nZA==\n" to "abcd"
+    decode from "YWJj\nZGU=\n" to "abcde"
    decode from "YWJj\nZGU=\n" to "abcde"
+    decode from "YWJj\nZGVm\n" to "abcdef"
    decode from "YWJj\nZGVm\n" to "abcdef"
+  encodes empty slice
  encodes empty slice
+  encodes static array
  encodes static array
+  decode cases
+    decode 
+
    decode 
+
+    decode 
+ in multiple places
    decode 
+ in multiple places
+    decode small tail after last 
+, was a bug
    decode small tail after last 
+, was a bug
+    raise error when incorrect size
    raise error when incorrect size
+    raise error when 
+ in incorrect place
    raise error when 
+ in incorrect place
+    raise error when incorrect symbol
    raise error when incorrect symbol
+  strict
+    encode to stream returns number of written characters
    encode to stream returns number of written characters
+    with spec symbols
    with spec symbols
+    encode
    encode
+JSON::Builder
+  writes array
  writes array
+  #next_is_object_key?
  #next_is_object_key?
+  writes integer
  writes integer
+  errors on nan
  errors on nan
+  writes object with scalar and indent
  writes object with scalar and indent
+  writes bool
  writes bool
+  writes float
  writes float
+  writes field with scalar in object
  writes field with scalar in object
+  writes nested array
  writes nested array
+  writes field with arbitrary value in object
  writes field with arbitrary value in object
+  writes string
  writes string
+  writes array with indent string
  writes array with indent string
+  writes object
  writes object
+  writes null
  writes null
+  errors on infinity
  errors on infinity
+  writes empty object with indent level
  writes empty object with indent level
+  writes raw
  writes raw
+  errors if writing before document start
  errors if writing before document start
+  writes object with array and scalar and indent
  writes object with array and scalar and indent
+  errors on max nesting (object)
  errors on max nesting (object)
+  errors if writing two scalars
  errors if writing two scalars
+  writes string with controls and slashes 
  writes string with controls and slashes 
+  raises if array is left open
  raises if array is left open
+  raises if object is left open
  raises if object is left open
+  writes empty array with indent level
  writes empty array with indent level
+  writes nested object
  writes nested object
+  errors on max nesting (array)
  errors on max nesting (array)
+  writes nested array
  writes nested array
+  raises if nothing written
  raises if nothing written
+  writes object with indent level
  writes object with indent level
+  writes array with indent level
  writes array with indent level
+ENV
+  does .keys
  does .keys
+  sets and gets case-sensitive
  sets and gets case-sensitive
+  does .values
  does .values
+  sets to empty string
  sets to empty string
+  #to_h
  #to_h
+  []=
+    disallows NUL-bytes in key
    disallows NUL-bytes in key
+    disallows NUL-bytes in value
    disallows NUL-bytes in value
+    disallows NUL-bytes in key if value is nil
    disallows NUL-bytes in key if value is nil
+  does has_key?
  does has_key?
+  sets to nil (same as delete)
  sets to nil (same as delete)
+  set and gets
  set and gets
+  does not have an empty key
  does not have an empty key
+  gets non existent key as nilable
  gets non existent key as nilable
+  gets non existent key raises
  gets non existent key raises
   fetch
     fetches with block
    fetches with block
+    fetches and raises
    fetches and raises
     fetches with default value
    fetches with default value
-  #rindex
-    does rindex with big negative offset
    does rindex with big negative offset
-    does rindex with big offset
    does rindex with big offset
-    offset type
    offset type
-  does each_index
  does each_index
+    fetches arbitrary default value
    fetches arbitrary default value
+    fetches with one argument
    fetches with one argument
+  handles unicode
  handles unicode
+  deletes a key
  deletes a key
+Set
+  does -
  does -
+  does to_a
  does to_a
+  ==
+    compares two sets
    compares two sets
+  does ^
  does ^
+  aliases + to |
  aliases + to |
+  does ^
  does ^
+  does ^
  does ^
+  "#each" yielding
  "#each" yielding
+  does ^
  does ^
+  #rehash
+    rehashes
    rehashes
+  #proper_subset_of?
  #proper_subset_of?
+  does -
  does -
+  compare_by_identity
+    compares by identity
    compares by identity
+    retains compare_by_identity on clone
    retains compare_by_identity on clone
+    retains compare_by_identity on dup
    retains compare_by_identity on dup
+  an empty set
+    has size 0
    has size 0
+    is empty
    is empty
+  add?
+    returns true when object is not in the set
    returns true when object is not in the set
+    returns false when object is in the set
    returns false when object is in the set
+  does support giving a block to to_a
  does support giving a block to to_a
+  does ^
  does ^
+  does -
  does -
+  dup
+    creates a dup
    creates a dup
+  #superset_of?
  #superset_of?
+  does subtract
  does subtract
+  does clear
  does clear
+  "#each" iterator
  "#each" iterator
+  #proper_superset_of?
  #proper_superset_of?
+  does subtract
  does subtract
+  compares hashes of sets
  compares hashes of sets
+  does subtract
  does subtract
+  add
+    adds and includes
    adds and includes
+    returns self
    returns self
+  does &
  does &
+  does subtract
  does subtract
+  does -
  does -
+  does to_s
  does to_s
+  does |
  does |
+  checks intersects
  checks intersects
+  has object_id
  has object_id
+  does ^
  does ^
+  #subset_of?
  #subset_of?
   does each
  does each
-  #rindex!
-    offset type
    offset type
-    does rindex with big negative offset
    does rindex with big negative offset
-    does rindex with big offset
    does rindex with big offset
-  iterates until its size (#3386)
  iterates until its size (#3386)
-  iterates through a subset of its elements (#3386)
  iterates through a subset of its elements (#3386)
-  iterates within a range of indices, no beginning
  iterates within a range of indices, no beginning
-  .each_cartesian
-    does with reuse = true, without block
    does with reuse = true, without block
-    does with reuse = array, with block
    does with reuse = array, with block
-    does with an Indexable of Indexables, without block, combined with select
    does with an Indexable of Indexables, without block, combined with select
-    does with an Indexable of Indexables, without block
    does with an Indexable of Indexables, without block
-    does with reuse = true, with block
    does with reuse = true, with block
-    does with reuse = array, without block
    does with reuse = array, without block
-    does with an Indexable of Indexables, with block
    does with an Indexable of Indexables, with block
-  .cartesian_product
-    does with a Tuple of Tuples with mixed types
    does with a Tuple of Tuples with mixed types
-    does with an Indexable of Indexables
    does with an Indexable of Indexables
-  repeated_combinations
-    assert
    assert
-    yields with reuse = true
    yields with reuse = true
-    returns iterator with reuse = array
    returns iterator with reuse = array
-    yielding dup of arrays
    yielding dup of arrays
-    assert
    assert
-    accepts a block
    accepts a block
-    assert
    assert
-    assert
    assert
-    n > size (#14088)
-      "#each_repeated_combination" yielding
      "#each_repeated_combination" yielding
-      "#each_repeated_combination" iterator
      "#each_repeated_combination" iterator
-      "#each_repeated_combination" yielding
      "#each_repeated_combination" yielding
-      "#each_repeated_combination" iterator
      "#each_repeated_combination" iterator
-    assert
    assert
-    assert
    assert
-    returns iterator with reuse = true
    returns iterator with reuse = true
-    assert
    assert
-    assert
    assert
-    yields with reuse = array
    yields with reuse = array
-    returns iterator
    returns iterator
-    assert
    assert
-  #index!
-    raises if no element is found
    raises if no element is found
-    offset type
    offset type
-  #index
-    offset type
    offset type
-    does index with big offset
    does index with big offset
-    does index with big negative offset
    does index with big negative offset
-  #each_cartesian
-    does with 1 other Indexable, without block
    does with 1 other Indexable, without block
-    does with 1 other Indexable, with block
    does with 1 other Indexable, with block
-    does with >1 other Indexables, without block
    does with >1 other Indexables, without block
-    does with 1 other Indexable, without block, combined with select
    does with 1 other Indexable, without block, combined with select
-    does with >1 other Indexables, with block
    does with >1 other Indexables, with block
-  #cartesian_product
-    does with 1 other Indexable
    does with 1 other Indexable
-    does with >1 other Indexables
    does with >1 other Indexables
-  #to_a
-    without a block of an interface type
    without a block of an interface type
-  permutations
-    returns iterator with given size
    returns iterator with given size
-    assert
    assert
-    assert
    assert
-    yielding dup of arrays
    yielding dup of arrays
-    assert
    assert
-    yields with reuse = true
    yields with reuse = true
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    accepts a block
    accepts a block
-    returns iterator
    returns iterator
-    assert
    assert
-    assert
    assert
-    returns iterator with reuse = true
    returns iterator with reuse = true
-  dig
-    gets the value at given path given splat
    gets the value at given path given splat
-    raises IndexError if not found
    raises IndexError if not found
-  combinations
-    returns iterator with reuse = true
    returns iterator with reuse = true
-    assert
    assert
-    returns iterator with reuse = array
    returns iterator with reuse = array
-    accepts a block
    accepts a block
-    assert
    assert
-    does with reuse = array
    does with reuse = array
-    yielding dup of arrays
    yielding dup of arrays
-    does with reuse = true
    does with reuse = true
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    returns iterator
    returns iterator
-    assert
    assert
-    assert
    assert
-    assert
    assert
-XML
-  parses html5 (#1404)
  parses html5 (#1404)
-  raises error when parsing empty string (#2752)
  raises error when parsing empty string (#2752)
-  gets name of HTML document node (#4040)
  gets name of HTML document node (#4040)
-  parses HTML from IO
  parses HTML from IO
-  parses HTML
  parses HTML
-.__ashlti3
.__ashlti3
-BigInt
-  does bitwise and
  does bitwise and
-  does bitwise xor
  does bitwise xor
-  clones
  clones
-  does bitwise or
  does bitwise or
-  raises if factorial of 2^64
  raises if factorial of 2^64
-  does remainder with negative numbers
  does remainder with negative numbers
-  divides
  divides
-  #to_i16
-    raises OverflowError
    raises OverflowError
-    converts to Int16
    converts to Int16
-  #to_u64
-    raises OverflowError
    raises OverflowError
-    converts to UInt64
    converts to UInt64
-  divides with negative numbers
  divides with negative numbers
-  #to_u16
-    converts to UInt16
    converts to UInt16
-    raises OverflowError
    raises OverflowError
-  #to_u64!
-    converts modulo (2 ** 64)
    converts modulo (2 ** 64)
-    converts to UInt64
    converts to UInt64
-  #humanize_bytes
-    assert
    assert
-    assert
    assert
-  #to_i128!
-    converts to Int128
    converts to Int128
-    converts modulo (2 ** 128)
    converts modulo (2 ** 128)
-  #hash
  #hash
-  negates
  negates
-  #to_i!
-    converts to Int32
    converts to Int32
-  gets absolute value
  gets absolute value
-  creates from signed ints
  creates from signed ints
-  #to_u!
-    converts to UInt32
    converts to UInt32
-  exponentiates
  exponentiates
-  #inspect
-    assert
    assert
-  does modulo
  does modulo
-  does bitwise not
  does bitwise not
-  #to_u8!
-    converts modulo (2 ** 8)
    converts modulo (2 ** 8)
-    converts to UInt8
    converts to UInt8
-  #to_i
-    converts to Int32
    converts to Int32
-  divides with negative numbers
  divides with negative numbers
-  raises if creates from string but invalid
  raises if creates from string but invalid
-  #to_u
-    converts to UInt32
    converts to UInt32
-  #to_u128
-    converts to UInt128
    converts to UInt128
-    raises OverflowError
    raises OverflowError
-  does gcd and lcm
  does gcd and lcm
-  raises if factorial of negative
  raises if factorial of negative
-  #to_u8
-    raises OverflowError
    raises OverflowError
-    converts to UInt8
    converts to UInt8
-  #to_u128!
-    converts modulo (2 ** 128)
    converts modulo (2 ** 128)
-    converts to UInt128
    converts to UInt128
-  does modulo with negative numbers
  does modulo with negative numbers
-  creates from unsigned ints
  creates from unsigned ints
-  #trailing_zeros_count
  #trailing_zeros_count
-  has unsafe_shr (#8691)
  has unsafe_shr (#8691)
-  #to_u32!
-    converts to UInt32
    converts to UInt32
-    converts modulo (2 ** 32)
    converts modulo (2 ** 32)
-  raises if mods by zero
  raises if mods by zero
-  does popcount
  does popcount
-  compares against float
  compares against float
-  #to_i128
-    converts to Int128
    converts to Int128
-    raises OverflowError
    raises OverflowError
-  does to_big_f
  does to_big_f
-  subs
  subs
-  divides and calculates the modulo
  divides and calculates the modulo
-  #digits
-    works for positive numbers or zero
    works for positive numbers or zero
-    raises for invalid base
    raises for invalid base
-    works with a base
    works with a base
-    raises for negative numbers
    raises for negative numbers
-  #integer?
-    assert
    assert
-    assert
    assert
-  #to_i32
-    converts to Int32
    converts to Int32
-    raises OverflowError
    raises OverflowError
-  #bit
  #bit
-  #to_i8
-    converts to Int8
    converts to Int8
-    raises OverflowError
    raises OverflowError
-  #to_u32
-    converts to UInt32
    converts to UInt32
-    raises OverflowError
    raises OverflowError
-  #to_u16!
-    converts modulo (2 ** 16)
    converts modulo (2 ** 16)
-    converts to UInt16
    converts to UInt16
-  #divisible_by?
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  #to_i32!
-    converts to Int32
    converts to Int32
-    converts modulo (2 ** 32)
    converts modulo (2 ** 32)
-  creates from string
  creates from string
-  raises if creating from NaN
  raises if creating from NaN
-  #to_s
-    base and upcase parameters
-      raises on base 1
      raises on base 1
-      assert
      assert
-      raises on base 62 with upcase
      raises on base 62 with upcase
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      raises on base 37
      raises on base 37
-    precision parameter
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-  does bitwise left shift
  does bitwise left shift
-  gets factorial value
  gets factorial value
-  does String#to_big_i
  does String#to_big_i
-  #to_i64!
-    converts to Int64
    converts to Int64
-    converts modulo (2 ** 64)
    converts modulo (2 ** 64)
-  can use Number::[]
  can use Number::[]
-  tdivs
  tdivs
-  raises if divides by zero
  raises if divides by zero
-  creates from float
  creates from float
-  #to_i8!
-    converts to Int8
    converts to Int8
-    converts modulo (2 ** 8)
    converts modulo (2 ** 8)
-  multiplies
  multiplies
-  raises if divides by zero
  raises if divides by zero
-  divides
  divides
-  #to_i16!
-    converts modulo (2 ** 16)
    converts modulo (2 ** 16)
-    converts to Int16
    converts to Int16
-  #to_i64
-    raises OverflowError
    raises OverflowError
-    converts to Int64
    converts to Int64
-  compares
  compares
-  adds
  adds
-  raises if creating from infinity
  raises if creating from infinity
-  does bitwise right shift
  does bitwise right shift
-  creates with a value of zero
  creates with a value of zero
-Crystal::SyntaxHighlighter::HTML
+  concat
+    adds all the other elements
    adds all the other elements
+    returns self
    returns self
+  does -
  does -
+  does subtract
  does subtract
+  does -
  does -
+  clone
+    creates a clone
    creates a clone
+  new
+    creates new set with enumerable without block
    creates new set with enumerable without block
+  does subtract
  does subtract
+  delete
+    returns true when the object was present
    returns true when the object was present
+    returns false when the object was absent
    returns false when the object was absent
+    deletes an object
    deletes an object
+Crystal::SyntaxHighlighter::Colorize
   .highlight
-    "1 < 2"
    "1 < 2"
-    "a/b"
    "a/b"
-    "lib"
    "lib"
-    "fun"
    "fun"
-    "1 * 2"
    "1 * 2"
-    "1 []= 2"
    "1 []= 2"
-    "1 &** 2"
    "1 &** 2"
-    "1 /= 2"
    "1 /= 2"
-    "1 **= 2"
    "1 **= 2"
-    "enum"
    "enum"
-    "\"<>\""
    "\"<>\""
-    "1 // 2"
    "1 // 2"
-    "def <=>"
    "def <=>"
-    "1 > 2"
    "1 > 2"
-    "%q(foo)"
    "%q(foo)"
-    "\"foo\#{[1, bar, \"str\"]}baz\""
    "\"foo\#{[1, bar, \"str\"]}baz\""
     "ensure"
    "ensure"
-    "'a'"
    "'a'"
-    "when"
    "when"
-    "elsif"
    "elsif"
+    "1 &** 2"
    "1 &** 2"
+    "1 == 2"
    "1 == 2"
+    "macro"
    "macro"
+    "1 ^ 2"
    "1 ^ 2"
+    "$1"
    "$1"
+    "sizeof"
    "sizeof"
+    "%w(foo bar baz)"
    "%w(foo bar baz)"
+    "1 === 2"
    "1 === 2"
+    "1 &*= 2"
    "1 &*= 2"
+    "1 != 2"
    "1 != 2"
     "struct"
    "struct"
-    "1 - 2"
    "1 - 2"
-    "instance_sizeof"
    "instance_sizeof"
-    "1/ 2"
    "1/ 2"
-    "1 || 2"
    "1 || 2"
-    "def //"
    "def //"
-    "def +"
    "def +"
-    "nil?"
    "nil?"
-    "def ~"
    "def ~"
-    "next"
    "next"
-    "protected"
    "protected"
     "1 |= 2"
    "1 |= 2"
-    "1 !~ 2"
    "1 !~ 2"
     "a/ b"
    "a/ b"
-    "1 && 2"
    "1 && 2"
-    "\"foo\#{bar}baz\""
    "\"foo\#{bar}baz\""
-    "def %"
    "def %"
-    "1 | 2"
    "1 | 2"
-    "uninitialized"
    "uninitialized"
-    "of"
    "of"
-    "annotation"
    "annotation"
-    "as?"
    "as?"
-    "alias"
    "alias"
-    "# <\">"
    "# <\">"
-    "def |"
    "def |"
-    "in"
    "in"
-    "union"
    "union"
-    "Foo"
    "Foo"
+    "1 //= 2"
    "1 //= 2"
     "def /"
    "def /"
-    "def >>"
    "def >>"
-    "1 + 2"
    "1 + 2"
-    "1 == 2"
    "1 == 2"
+    "a / b"
    "a / b"
+    "1 !~ 2"
    "1 !~ 2"
+    "extend"
    "extend"
+    "in"
    "in"
+    "def &"
    "def &"
+    "def"
    "def"
     "1 *= 2"
    "1 *= 2"
-    "def !="
    "def !="
-    "for"
    "for"
-    "1 ^ 2"
    "1 ^ 2"
-    "1 != 2"
    "1 != 2"
-    "if"
    "if"
-    "1 >> 2"
    "1 >> 2"
-    "typeof"
    "typeof"
-    "1 [] 2"
    "1 [] 2"
-    "class"
    "class"
-    "Foo::Bar"
    "Foo::Bar"
-    "do"
    "do"
-    "1 <<= 2"
    "1 <<= 2"
-    "1 & 2"
    "1 & 2"
-    "# foo\n# bar\n"
    "# foo\n# bar\n"
     "1 &* 2"
    "1 &* 2"
-    "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\""
    "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\""
+    "abstract"
    "abstract"
+    "1 []= 2"
    "1 []= 2"
+    "\"foo\#{[1, bar, \"str\"]}baz\""
    "\"foo\#{[1, bar, \"str\"]}baz\""
+    "1 &&= 2"
    "1 &&= 2"
+    "next"
    "next"
+    "then"
    "then"
+    "offsetof"
    "offsetof"
+    "/foo/xim"
    "/foo/xim"
+    "do"
    "do"
     "def <="
    "def <="
-    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO\n  bar\n  BAR"
    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO\n  bar\n  BAR"
+    "'<'"
    "'<'"
     "1 <=> 2"
    "1 <=> 2"
-    "module"
    "module"
+    "$~"
    "$~"
+    "a /b/"
    "a /b/"
+    "%i(foo bar baz)"
    "%i(foo bar baz)"
+    "if"
    "if"
+    "when"
    "when"
+    "break"
    "break"
+    "private"
    "private"
     "1 &+= 2"
    "1 &+= 2"
-    "a / b"
    "a / b"
-    "/foo/xim"
    "/foo/xim"
-    "end"
    "end"
-    "\"foo\""
    "\"foo\""
-    "1 ~ 2"
    "1 ~ 2"
-    "def >"
    "def >"
-    "1 <= 2"
    "1 <= 2"
-    ":foo"
    ":foo"
-    "offsetof"
    "offsetof"
-    "1 % 2"
    "1 % 2"
-    "def -"
    "def -"
-    "1 &&= 2"
    "1 &&= 2"
-    "1 += 2"
    "1 += 2"
-    "1 ||= 2"
    "1 ||= 2"
-    "# bar\n"
    "# bar\n"
-    "select"
    "select"
+    "is_a?"
    "is_a?"
+    "def ~"
    "def ~"
+    "1/2"
    "1/2"
+    "class"
    "class"
+    "$?"
    "$?"
+    "include"
    "include"
+    "%(foo)"
    "%(foo)"
+    "typeof"
    "typeof"
+    "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\""
    "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\""
+    "enum"
    "enum"
     "asm"
    "asm"
-    "def &"
    "def &"
-    "1 %= 2"
    "1 %= 2"
-    "def **"
    "def **"
-    "nil"
    "nil"
+    "def >="
    "def >="
+    "def =="
    "def =="
+    "module"
    "module"
+    "with"
    "with"
+    "%w<foo bar baz>"
    "%w<foo bar baz>"
     "1 ^= 2"
    "1 ^= 2"
-    "sizeof"
    "sizeof"
-    "%r(foo)xim"
    "%r(foo)xim"
-    "break"
    "break"
-    "def *"
    "def *"
-    "while"
    "while"
+    "1 &= 2"
    "1 &= 2"
+    "1 >= 2"
    "1 >= 2"
     "def =~"
    "def =~"
-    "1 //= 2"
    "1 //= 2"
-    "a /b/"
    "a /b/"
-    "3.14"
    "3.14"
-    "def =="
    "def =="
+    "# <\">"
    "# <\">"
+    "return"
    "return"
+    "as"
    "as"
     "def <"
    "def <"
-    "def ^"
    "def ^"
-    "foo\nbar"
    "foo\nbar"
     "1 &- 2"
    "1 &- 2"
-    "1 &*= 2"
    "1 &*= 2"
-    "%<foo>"
    "%<foo>"
-    "1 &+ 2"
    "1 &+ 2"
-    "case"
    "case"
-    "false"
    "false"
-    "include"
    "include"
-    "def []="
    "def []="
-    "1 = 2"
    "1 = 2"
-    "1 ** 2"
    "1 ** 2"
-    "until"
    "until"
-    "%Q(foo)"
    "%Q(foo)"
-    "abstract"
    "abstract"
-    "1 ! 2"
    "1 ! 2"
-    "with"
    "with"
-    "type"
    "type"
-    "def []?"
    "def []?"
+    "1 [] 2"
    "1 [] 2"
+    "1 | 2"
    "1 | 2"
     "1 /2"
    "1 /2"
+    "protected"
    "protected"
+    "1 & 2"
    "1 & 2"
     "%x(foo)"
    "%x(foo)"
-    "%w(foo  bar\n  baz)"
    "%w(foo  bar\n  baz)"
-    "super"
    "super"
-    "1 / 2"
    "1 / 2"
-    "1 &= 2"
    "1 &= 2"
-    "1 -= 2"
    "1 -= 2"
-    "verbatim"
    "verbatim"
+    "type"
    "type"
+    "1 /= 2"
    "1 /= 2"
+    "1 % 2"
    "1 % 2"
+    "require"
    "require"
+    "Foo"
    "Foo"
+    "1 && 2"
    "1 && 2"
+    "uninitialized"
    "uninitialized"
+    "foo\nbar"
    "foo\nbar"
     "foo bar"
    "foo bar"
-    "'<'"
    "'<'"
+    "def >"
    "def >"
+    "self"
    "self"
+    "a/b"
    "a/b"
+    "for"
    "for"
+    "def foo"
    "def foo"
     "else"
    "else"
-    "as"
    "as"
-    "42"
    "42"
-    "def !~"
    "def !~"
-    "return"
    "return"
+    "while"
    "while"
+    "\"foo\""
    "\"foo\""
+    "lib"
    "lib"
+    "foo"
    "foo"
+    "as?"
    "as?"
+    "super"
    "super"
+    "Foo::Bar"
    "Foo::Bar"
+    "instance_alignof"
    "instance_alignof"
+    "def ^"
    "def ^"
+    "1 << 2"
    "1 << 2"
+    "nil"
    "nil"
+    "Set{1, 2, 3}"
    "Set{1, 2, 3}"
+    "annotation"
    "annotation"
+    "verbatim"
    "verbatim"
+    "1 ~ 2"
    "1 ~ 2"
+    "1 []? 2"
    "1 []? 2"
+    "%q(foo)"
    "%q(foo)"
+    "\"foo\#{bar}baz\""
    "\"foo\#{bar}baz\""
+    "1 + 2"
    "1 + 2"
+    "elsif"
    "elsif"
+    "alias"
    "alias"
+    "1 > 2"
    "1 > 2"
+    "yield"
    "yield"
+    "1/ 2"
    "1/ 2"
     "begin"
    "begin"
-    "1 >= 2"
    "1 >= 2"
     "1 =~ 2"
    "1 =~ 2"
+    "pointerof"
    "pointerof"
+    "1 &-= 2"
    "1 &-= 2"
+    "foo = bar(\"baz\#{PI + 1}\") # comment"
    "foo = bar(\"baz\#{PI + 1}\") # comment"
+    "%w(foo  bar\n  baz)"
    "%w(foo  bar\n  baz)"
+    "def **"
    "def **"
+    "\"<>\""
    "\"<>\""
+    "unless"
    "unless"
+    "union"
    "union"
+    "1 ||= 2"
    "1 ||= 2"
     ":\"foo\""
    ":\"foo\""
-    "extend"
    "extend"
-    "self"
    "self"
-    "self"
    "self"
-    "def []"
    "def []"
-    "%w<foo bar baz>"
    "%w<foo bar baz>"
-    "require"
    "require"
-    "macro"
    "macro"
+    "1 <= 2"
    "1 <= 2"
+    "rescue"
    "rescue"
+    "end"
    "end"
+    "false"
    "false"
+    "def |"
    "def |"
+    "fun"
    "fun"
+    "select"
    "select"
+    "nil?"
    "nil?"
+    "1 += 2"
    "1 += 2"
+    "def >>"
    "def >>"
+    "def !="
    "def !="
+    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO\n  bar\n  BAR"
    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO\n  bar\n  BAR"
+    "1 <<= 2"
    "1 <<= 2"
+    "%Q(foo)"
    "%Q(foo)"
+    "1 %= 2"
    "1 %= 2"
+    "1 / 2"
    "1 / 2"
     "alignof"
    "alignof"
-    "$~"
    "$~"
-    "$1"
    "$1"
-    "out"
    "out"
-    "def >="
    "def >="
-    "1/2"
    "1/2"
-    "Set{1, 2, 3}"
    "Set{1, 2, 3}"
-    "1 === 2"
    "1 === 2"
-    "foo = bar(\"baz\#{PI + 1}\") # comment"
    "foo = bar(\"baz\#{PI + 1}\") # comment"
-    "1 >>= 2"
    "1 >>= 2"
-    "instance_alignof"
    "instance_alignof"
-    "`foo`"
    "`foo`"
-    "# foo"
    "# foo"
+    "def []"
    "def []"
+    "3.14"
    "3.14"
+    "'a'"
    "'a'"
+    "def []="
    "def []="
+    "of"
    "of"
+    "1 -= 2"
    "1 -= 2"
     "true"
    "true"
-    "then"
    "then"
-    "%(foo)"
    "%(foo)"
-    "1 &-= 2"
    "1 &-= 2"
+    "`foo`"
    "`foo`"
+    "1 * 2"
    "1 * 2"
+    "instance_sizeof"
    "instance_sizeof"
+    "def %"
    "def %"
     "def <<"
    "def <<"
-    "def"
    "def"
-    "%w(foo bar baz)"
    "%w(foo bar baz)"
-    "rescue"
    "rescue"
-    "private"
    "private"
-    "pointerof"
    "pointerof"
-    "is_a?"
    "is_a?"
-    "%i(foo bar baz)"
    "%i(foo bar baz)"
-    "unless"
    "unless"
-    "yield"
    "yield"
+    "until"
    "until"
+    "def -"
    "def -"
+    "1 ! 2"
    "1 ! 2"
+    "def <=>"
    "def <=>"
+    "1 >> 2"
    "1 >> 2"
     "123_i64"
    "123_i64"
+    "%r(foo)xim"
    "%r(foo)xim"
+    "def !~"
    "def !~"
+    "def []?"
    "def []?"
+    "1 &+ 2"
    "1 &+ 2"
+    "42"
    "42"
+    "1 < 2"
    "1 < 2"
+    ":foo"
    ":foo"
+    "case"
    "case"
+    "1 - 2"
    "1 - 2"
+    "1 // 2"
    "1 // 2"
+    "# bar\n"
    "# bar\n"
+    "# foo"
    "# foo"
+    "1 ** 2"
    "1 ** 2"
+    "def +"
    "def +"
+    "1 = 2"
    "1 = 2"
+    "1 >>= 2"
    "1 >>= 2"
+    "1 **= 2"
    "1 **= 2"
+    "1 || 2"
    "1 || 2"
+    "# foo\n# bar\n"
    "# foo\n# bar\n"
+    "out"
    "out"
+    "def //"
    "def //"
     "$2?"
    "$2?"
-    "1 []? 2"
    "1 []? 2"
-    "def foo"
    "def foo"
-    "1 << 2"
    "1 << 2"
-    "$?"
    "$?"
-    "foo"
    "foo"
-  #highlight!
+    "%<foo>"
    "%<foo>"
+    "def *"
    "def *"
+  .highlight!
+    "\"foo"
    "\"foo"
+    "%w[foo"
    "%w[foo"
     "%i[foo"
    "%i[foo"
-    "foo, bar = <<-FOO, <<-BAR\n  foo"
    "foo, bar = <<-FOO, <<-BAR\n  foo"
     "foo = bar(\"baz\#{PI + 1}\") # comment"
    "foo = bar(\"baz\#{PI + 1}\") # comment"
     "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO"
    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO"
-    "\"foo"
    "\"foo"
-    "%w[foo"
    "%w[foo"
-Time::Location::Zone
-  #name
  #name
-  #inspect
  #inspect
-CSV
-  lex
-    lexes with newline inside quote
    lexes with newline inside quote
-    lexes two columns
    lexes two columns
-    lexes newline followed by eof
    lexes newline followed by eof
-    raises if command, newline or end doesn't follow quote
    raises if command, newline or end doesn't follow quote
-    lexes with a given separator
    lexes with a given separator
-    doesn't consume char after \n (#11172)
    doesn't consume char after \n (#11172)
-    lexes with comma inside quote
    lexes with comma inside quote
-    raises on unclosed quote
    raises on unclosed quote
-    lexes two with inner quotes
    lexes two with inner quotes
-    raises if single quote in the middle
    raises if single quote in the middle
-    lexes two empty columns
    lexes two empty columns
-    lexes two with quotes
    lexes two with quotes
-    doesn't consume char after \r (#11172)
    doesn't consume char after \r (#11172)
-    lexes with whitespace
    lexes with whitespace
-    lexes with a given quote char
    lexes with a given quote char
-    lexes two columns with two rows
    lexes two columns with two rows
-    lexes two columns with two rows with 
-
    lexes two columns with two rows with 
-
-    lexes last empty column
    lexes last empty column
-    lexes with empty columns
    lexes with empty columns
-IO
-  read operations
-    does gets with char and limit
    does gets with char and limit
-    does gets with limit
    does gets with limit
-    reads all remaining content as bytes
    reads all remaining content as bytes
-    does gets with empty string (no peek)
    does gets with empty string (no peek)
-    reads char
    reads char
-    does gets with \r\n, chomp true goes past \r
    does gets with \r\n, chomp true goes past \r
-    reads all remaining content
    reads all remaining content
-    reads string
    reads string
-    does gets with chomp false
    does gets with chomp false
-    reads byte
    reads byte
-    raises if invoking gets with negative limit
    raises if invoking gets with negative limit
-    does read_line with limit
    does read_line with limit
-    does gets
    does gets
-    does read_fully
    does read_fully
-    does gets with char delimiter
    does gets with char delimiter
-    gets with empty string as delimiter
    gets with empty string as delimiter
-    raises on EOF with read_line
    raises on EOF with read_line
-    gets with string as delimiter and chomp = true
    gets with string as delimiter and chomp = true
-    does gets with \r\n
    does gets with \r\n
-    does gets with \r\n (no peek)
    does gets with \r\n (no peek)
-    raises on EOF with readline and delimiter
    raises on EOF with readline and delimiter
-    does gets with unicode char delimiter
    does gets with unicode char delimiter
-    does gets with \r\n (with peek)
    does gets with \r\n (with peek)
-    does read_fully?
    does read_fully?
-    does gets with \n (with peek)
    does gets with \n (with peek)
-    does each_line
    does each_line
-    does gets with \n (no peek)
    does gets with \n (no peek)
-    does each_byte
    does each_byte
-    does read_line with char and limit
    does read_line with char and limit
-    does gets with empty string (with peek)
    does gets with empty string (with peek)
-    does each_char
    does each_char
-    doesn't underflow when limit is unsigned
    doesn't underflow when limit is unsigned
-    does gets with big line
    does gets with big line
-    gets with string as delimiter
    gets with string as delimiter
-    raises if trying to read to an IO not opened for reading
    raises if trying to read to an IO not opened for reading
-    .same_content?
-      compares two ios, one way (true)
      compares two ios, one way (true)
-      compares two ios, second way (false)
      compares two ios, second way (false)
-      compares two ios, one way (false)
      compares two ios, one way (false)
-      refutes prefix match, one way
      refutes prefix match, one way
-      refutes prefix match, second way
      refutes prefix match, second way
-      refutes prefix match, one way
      refutes prefix match, one way
-      compares two ios, second way (true)
      compares two ios, second way (true)
-      refutes prefix match, second way
      refutes prefix match, second way
-    gets with single byte string as delimiter
    gets with single byte string as delimiter
-  "#each_line" yielding
  "#each_line" yielding
-  copies
  copies
-  "#char" yielding
  "#char" yielding
-  copies with limit
  copies with limit
-  "#each_line" iterator
  "#each_line" iterator
-  write operations
-    skips a few bytes
    skips a few bytes
-    skips more than 4096 bytes
    skips more than 4096 bytes
-    does puts many times
    does puts many times
-    raises if trying to write to an IO not opened for writing
    raises if trying to write to an IO not opened for writing
-    puts several arguments
    puts several arguments
-    writes with printf
    writes with printf
-    does puts
    does puts
-    writes with printf as an array
    writes with printf as an array
-    prints several arguments
    prints several arguments
-    writes bytes
    writes bytes
-    skips to end
    skips to end
-    prints
    prints
-    does puts with big string
    does puts with big string
-    skips but raises if not enough bytes
    skips but raises if not enough bytes
-  "#each_line(chomp: false)" yielding
  "#each_line(chomp: false)" yielding
-  "#each_line(chomp: false)" iterator
  "#each_line(chomp: false)" iterator
-  "#char" iterator
  "#char" iterator
-  encoding
-    encode
-      prints numbers
      prints numbers
-      prints symbol
      prints symbol
-      puts
      puts
-      raises on invalid byte sequence
      raises on invalid byte sequence
-      raises on incomplete byte sequence
      raises on incomplete byte sequence
-      prints char
      prints char
-      printf
      printf
-      skips on invalid byte sequence
      skips on invalid byte sequence
-      prints bool
      prints bool
-      says invalid encoding
      says invalid encoding
-      prints a string
      prints a string
-      prints big int
      prints big int
-    decode
-      reads utf8
      reads utf8
-      decodes incomplete multibyte sequence with skip (2) (#3285)
      decodes incomplete multibyte sequence with skip (2) (#3285)
-      does skips when converting to UTF-8
      does skips when converting to UTF-8
-      gets big string
      gets big string
-      skips invalid byte sequences
      skips invalid byte sequences
-      gets with chomp = false
      gets with chomp = false
-      gets_to_end
      gets_to_end
-      sets encoding to utf8 and stays as UTF-8
      sets encoding to utf8 and stays as UTF-8
-      says invalid byte sequence
      says invalid byte sequence
-      gets big EUC-JP string
      gets big EUC-JP string
-      raises on incomplete byte sequence
      raises on incomplete byte sequence
-      gets with non-ascii and chomp: false
      gets with non-ascii and chomp: false
-      does gets on unicode with char and limit without off-by-one
      does gets on unicode with char and limit without off-by-one
-      gets ascii from socket (#9056)
      gets ascii from socket (#9056)
-      reads utf8 byte
      reads utf8 byte
-      says invalid 'invalid' option
      says invalid 'invalid' option
-      gets with limit (big)
      gets with limit (big)
-      decodes incomplete multibyte sequence with skip (#3285)
      decodes incomplete multibyte sequence with skip (#3285)
-      gets
      gets
-      decodes incomplete multibyte sequence with skip (3) (#3285)
      decodes incomplete multibyte sequence with skip (3) (#3285)
-      gets with non-ascii
      gets with non-ascii
-      sets encoding to utf-8 and stays as UTF-8
      sets encoding to utf-8 and stays as UTF-8
-      gets with limit (small, no newline)
      gets with limit (small, no newline)
-      says invalid encoding
      says invalid encoding
-      gets with string delimiter
      gets with string delimiter
-      reads string
      reads string
-      gets with limit
      gets with limit
-      reads char
      reads char
-    #encoding
-      returns the name of the encoding set via #set_encoding
      returns the name of the encoding set via #set_encoding
-      returns "UTF-8" if the encoding is not manually set
      returns "UTF-8" if the encoding is not manually set
-  raises on copy with negative limit
  raises on copy with negative limit
-  "#char" iterator
  "#char" iterator
-  IO::Error
-    .new
-      accepts `cause` argument (#14241)
      accepts `cause` argument (#14241)
-  "#char" yielding
  "#char" yielding
-  #close
-    aborts 'read' in a different fiber
    aborts 'read' in a different fiber
-    aborts 'write' in a different fiber
    aborts 'write' in a different fiber
-  partial read
-    doesn't block on first read.  blocks on 2nd read
    doesn't block on first read.  blocks on 2nd read
-::sprintf
-  integers
-    base specifier
-      supports base 2
      supports base 2
-      supports base 10
      supports base 10
-      supports base 16
      supports base 16
-      supports base 8
      supports base 8
-    space flag
-      is ignored if plus flag is also specified
      is ignored if plus flag is also specified
-      writes space before left padding
      writes space before left padding
-      writes a space for positive integers
      writes a space for positive integers
-    sharp flag
-      adds a base prefix
      adds a base prefix
-      omits the base prefix for 0
      omits the base prefix for 0
-    works with BigInt
    works with BigInt
-    precision specifier
-      can be used with width
      can be used with width
-      sets the minimum length of the number part
      sets the minimum length of the number part
-      is ignored if precision argument is negative
      is ignored if precision argument is negative
-    minus flag
-      left-justifies the string
      left-justifies the string
-      reserves space for the number prefix
      reserves space for the number prefix
-    width specifier
-      left-justifies on negative width
      left-justifies on negative width
-      sets the minimum length of the string
      sets the minimum length of the string
-    zero flag
-      is ignored if string is left-justified
      is ignored if string is left-justified
-      left-pads the result with zeros
      left-pads the result with zeros
-      is ignored if precision is specified
      is ignored if precision is specified
-    works with Int*::MIN
    works with Int*::MIN
-    plus flag
-      writes plus sign after left space-padding
      writes plus sign after left space-padding
-      writes a plus sign for positive integers
      writes a plus sign for positive integers
-      writes plus sign before left zero-padding
      writes plus sign before left zero-padding
-  works
  works
-  floats
-    infinities
    infinities
-    general format
-      minus flag
-        left-justifies the string
        left-justifies the string
-      sharp flag
-        prints decimal point and trailing zeros
        prints decimal point and trailing zeros
-      zero flag
-        can be used with precision
        can be used with precision
-        left-pads the result with zeros
        left-pads the result with zeros
-        is ignored if string is left-justified
        is ignored if string is left-justified
-      works
      works
-      plus flag
-        writes plus sign before left zero-padding
        writes plus sign before left zero-padding
-        writes plus sign after left space-padding
        writes plus sign after left space-padding
-        writes a plus sign for positive values
        writes a plus sign for positive values
-      space flag
-        writes a space for positive values
        writes a space for positive values
-        is ignored if plus flag is also specified
        is ignored if plus flag is also specified
-        writes space before left space-padding
        writes space before left space-padding
-      precision specifier
-        is ignored if precision argument is negative
        is ignored if precision argument is negative
-        can be used with width
        can be used with width
-        sets the precision of the value
        sets the precision of the value
-      width specifier
-        sets the minimum length of the string
        sets the minimum length of the string
-        left-justifies on negative width
        left-justifies on negative width
-    scientific format
-      width specifier
-        left-justifies on negative width
        left-justifies on negative width
-        sets the minimum length of the string
        sets the minimum length of the string
-      space flag
-        writes space before left space-padding
        writes space before left space-padding
-        writes a space for positive values
        writes a space for positive values
-        is ignored if plus flag is also specified
        is ignored if plus flag is also specified
-      precision specifier
-        is ignored if precision argument is negative
        is ignored if precision argument is negative
-        can be used with width
        can be used with width
-        sets the minimum length of the fractional part
        sets the minimum length of the fractional part
-      minus flag
-        left-justifies the string
        left-justifies the string
-      works
      works
-      plus flag
-        writes plus sign after left space-padding
        writes plus sign after left space-padding
-        writes a plus sign for positive values
        writes a plus sign for positive values
-        writes plus sign before left zero-padding
        writes plus sign before left zero-padding
-      zero flag
-        is ignored if string is left-justified
        is ignored if string is left-justified
-        left-pads the result with zeros
        left-pads the result with zeros
-        can be used with precision
        can be used with precision
-      sharp flag
-        prints a decimal point even if no digits follow
        prints a decimal point even if no digits follow
-    not-a-numbers
    not-a-numbers
-    infinities
    infinities
-    fixed format
-      works
      works
-    not-a-numbers
    not-a-numbers
-    hex format
-      plus flag
-        writes a plus sign for positive values
        writes a plus sign for positive values
-        writes plus sign before left zero-padding
        writes plus sign before left zero-padding
-        writes plus sign after left space-padding
        writes plus sign after left space-padding
-      minus flag
-        left-justifies the string
        left-justifies the string
-      space flag
-        is ignored if plus flag is also specified
        is ignored if plus flag is also specified
-        writes space before left space-padding
        writes space before left space-padding
-        writes a space for positive values
        writes a space for positive values
-      works
      works
-      width specifier
-        sets the minimum length of the string
        sets the minimum length of the string
-        left-justifies on negative width
        left-justifies on negative width
-      sharp flag
-        prints a decimal point even if no digits follow
        prints a decimal point even if no digits follow
-      precision specifier
-        is ignored if precision argument is negative
        is ignored if precision argument is negative
-        can be used with width
        can be used with width
-        sets the minimum length of the fractional part
        sets the minimum length of the fractional part
-      zero flag
-        left-pads the result with zeros
        left-pads the result with zeros
-        is ignored if string is left-justified
        is ignored if string is left-justified
-        can be used with precision
        can be used with precision
-  formatted substitution
-    raises if numbered parameters also given
    raises if numbered parameters also given
-    applies formatting to %<...> placeholder
    applies formatting to %<...> placeholder
-    doesn't raise if plain substitution also given
    doesn't raise if plain substitution also given
-    raises if sequential parameters also given
    raises if sequential parameters also given
-  numbered parameters
-    raises if used as width or precision specifier of a sequential parameter
    raises if used as width or precision specifier of a sequential parameter
-    gets width and precision specifier at specified index
    gets width and precision specifier at specified index
-    can be used before flags
    can be used before flags
-    raises if multiple indices specified
    raises if multiple indices specified
-    gets argument at specified index
    gets argument at specified index
-    raises if index is zero
    raises if index is zero
-    raises if index is out of bounds
    raises if index is out of bounds
-    raises if sequential parameters also given
    raises if sequential parameters also given
-    raises if named parameters also given
    raises if named parameters also given
-  plain substitution
-    doesn't raise if 1-element list of hash or named tuple given
    doesn't raise if 1-element list of hash or named tuple given
-    substitutes multiple placeholder
    substitutes multiple placeholder
-    throws an error when the key is not found
    throws an error when the key is not found
-    raises if numbered parameters also given
    raises if numbered parameters also given
-    raises on unbalanced curly
    raises on unbalanced curly
-    doesn't raise if formatted substitution also given
    doesn't raise if formatted substitution also given
-    substitutes one placeholder
    substitutes one placeholder
-    raises if sequential parameters also given
    raises if sequential parameters also given
-    doesn't raise on balanced curly with null byte
    doesn't raise on balanced curly with null byte
-    raises if expecting hash or named tuple but not given
    raises if expecting hash or named tuple but not given
-  accepts multiple positional arguments
  accepts multiple positional arguments
-  sequential parameters
-    raises if numbered parameters also given
    raises if numbered parameters also given
-    raises if named parameters also given
    raises if named parameters also given
-  doesn't accept modifiers for %%
  doesn't accept modifiers for %%
-  doesn't format %%
  doesn't format %%
-  doesn't stop at null character when doing '%'
  doesn't stop at null character when doing '%'
-  strings
-    works
    works
-    calls to_s on non-strings
    calls to_s on non-strings
-StringScanner
-  #offset=
-    sets the current position
    sets the current position
-    raises on negative positions
    raises on negative positions
-  #[]?
-    returns nil when there is no last match
    returns nil when there is no last match
-    allows access to subgroups of the last match
    allows access to subgroups of the last match
-    raises when there is no subgroup
    raises when there is no subgroup
-  #offset
-    returns the current position
    returns the current position
-  #[]
-    raises when there is no subgroup
    raises when there is no subgroup
-    allows access to subgroups of the last match
    allows access to subgroups of the last match
-    raises when there is no last match
    raises when there is no last match
-  #check_until
-    returns the string matched and advances the offset
    returns the string matched and advances the offset
-    returns nil if it can't match from the offset
    returns nil if it can't match from the offset
-  #rest
-    returns the remainder of the string from the offset
    returns the remainder of the string from the offset
-  #terminate
-    moves the scan offset to the end of the string and clears the last match
    moves the scan offset to the end of the string and clears the last match
-  #reset
-    resets the scan offset to the beginning and clears the last match
    resets the scan offset to the beginning and clears the last match
-  #peek
-    shows the next len characters without advancing the offset
    shows the next len characters without advancing the offset
-  #eos
-    it is true when the offset is at the end
    it is true when the offset is at the end
-  #check
-    returns the string matched but does not advances the offset
    returns the string matched but does not advances the offset
-    returns nil if it can't match from the offset
    returns nil if it can't match from the offset
-  #skip_until
-    advances the offset but does not returns the string matched
    advances the offset but does not returns the string matched
-  #scan_until
-    returns nil if it can't match from the offset
    returns nil if it can't match from the offset
-    returns the string matched and advances the offset
    returns the string matched and advances the offset
-  #skip
-    advances the offset but does not returns the string matched
    advances the offset but does not returns the string matched
-  #string
+    "foo, bar = <<-FOO, <<-BAR\n  foo"
    "foo, bar = <<-FOO, <<-BAR\n  foo"
+HTTP::Cookie
+  #name=
+    raises on invalid name
    raises on invalid name
+    automatically configures the cookie __Secure- prefix and related properties are unset
    automatically configures the cookie __Secure- prefix and related properties are unset
+    doesn't raise on invalid cookie with __Host- prefix
    doesn't raise on invalid cookie with __Host- prefix
+    automatically configures the cookie __Host- prefix and related unset properties
    automatically configures the cookie __Host- prefix and related unset properties
+    doesn't raise on invalid cookie with __Secure- prefix
    doesn't raise on invalid cookie with __Secure- prefix
+  #to_set_cookie_header
+    samesite
    samesite
     assert
    assert
-  #scan
-    returns the string matched and advances the offset
    returns the string matched and advances the offset
-    returns nil if it can't match from the offset
    returns nil if it can't match from the offset
-  #inspect
-    has information on the scanner
    has information on the scanner
-    works with small strings
    works with small strings
-__fixunssfti
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #==
  #==
+  .new
+    raises on invalid value
    raises on invalid value
+    with a security prefix
+      raises on invalid cookie with prefix
      raises on invalid cookie with prefix
+      automatically configures the cookie if it has the __Host- prefix and no explicit values provided
      automatically configures the cookie if it has the __Host- prefix and no explicit values provided
+      automatically makes the cookie secure if it has the __Secure- prefix and no explicit *secure* value is provided
      automatically makes the cookie secure if it has the __Secure- prefix and no explicit *secure* value is provided
+    raises on invalid name
    raises on invalid name
+  #valid? & #validate!
+    with a __Secure- prefix, but @secure is somehow `nil`
    with a __Secure- prefix, but @secure is somehow `nil`
+    raises on invalid cookie with __Host- prefix
    raises on invalid cookie with __Host- prefix
+    raises on invalid cookie with __Secure- prefix
    raises on invalid cookie with __Secure- prefix
+  #value=
+    raises on invalid value
    raises on invalid value
+SemanticVersion
+  compares <
  compares <
+  compares build equivalence
  compares build equivalence
+  SemanticVersion::Prerelease
+    compares <
    compares <
+  does not accept bad versions
  does not accept bad versions
+  copies with specified modifications
  copies with specified modifications
+  bumps to the correct version
  bumps to the correct version
+YAML::Serializable
+  parses yaml with defaults
+    create new array every time
    create new array every time
+    bool
    bool
+    with nilable
    with nilable
+    mixed
    mixed
+  outputs with converter when nilable when emit_null is true
  outputs with converter when nilable when emit_null is true
+  converter with null value (#13655)
  converter with null value (#13655)
+  should parse extra fields (YAMLAttrPersonExtraFields with on_unknown_yaml_attribute)
  should parse extra fields (YAMLAttrPersonExtraFields with on_unknown_yaml_attribute)
+  with query attributes
+    defines query getter
    defines query getter
+    defines query getter with class restriction
    defines query getter with class restriction
+    defines non-query setter and presence methods
    defines non-query setter and presence methods
+    maps non-query attributes
    maps non-query attributes
+    raises if non-nilable attribute is nil
    raises if non-nilable attribute is nil
+  raises if non-nilable attribute is nil
  raises if non-nilable attribute is nil
+  doesn't raises on false value when not-nil
  doesn't raises on false value when not-nil
+  uses Time::EpochMillisConverter
  uses Time::EpochMillisConverter
+  raises if data type does not match
  raises if data type does not match
+  converter with default value
  converter with default value
+  parses recursive nilable (1)
  parses recursive nilable (1)
+  parses yaml with any
  parses yaml with any
+  empty class with unmapped
  empty class with unmapped
+  checks that values fit into integer types
  checks that values fit into integer types
+  parses recursive hash
  parses recursive hash
+  parses strict person with unknown attributes
  parses strict person with unknown attributes
+  raises if not an object
  raises if not an object
+  parses person without age
  parses person without age
+  parses yaml with Time::Format converter
  parses yaml with Time::Format converter
+  parses person
  parses person
+  parses yaml with problematic keys
  parses yaml with problematic keys
+  use_yaml_discriminator
+    deserializes with discriminator, another recursive type, fixes: #13429
    deserializes with discriminator, another recursive type, fixes: #13429
+    raises if unknown discriminator value
    raises if unknown discriminator value
+    deserializes type which nests type with discriminator (#9849)
    deserializes type which nests type with discriminator (#9849)
+    deserializes with discriminator
    deserializes with discriminator
+    raises if missing discriminator
    raises if missing discriminator
+    deserializes with variable discriminator value type
    deserializes with variable discriminator value type
+    deserializes with discriminator, strict recursive type
    deserializes with discriminator, strict recursive type
+  emit_nulls option
  emit_nulls option
+  outputs YAML with Hash
  outputs YAML with Hash
+  works with class with three fields
  works with class with three fields
+  should to store extra fields (YAMLAttrPersonExtraFields with on_to_yaml)
  should to store extra fields (YAMLAttrPersonExtraFields with on_to_yaml)
+  YAML::ArrayConverter(Converter)
+    uses converter instance with nested converter metaclass
    uses converter instance with nested converter metaclass
+    uses converter instance with nested converter instance
    uses converter instance with nested converter instance
+    uses converter metaclass
    uses converter metaclass
+  doesn't emit null when doing to_yaml
  doesn't emit null when doing to_yaml
+  parses person with unknown attributes
  parses person with unknown attributes
+  fixes #13337
  fixes #13337
+  serializes YAML with presence markers and ignore_serialize
+    ignore_serialize is set to conditional expressions 'last_name.nil? && !last_name_present?'
+      emits field when value is not nil and @last_name_present is true
      emits field when value is not nil and @last_name_present is true
+      emits field when value is not nil and @last_name_present is false
      emits field when value is not nil and @last_name_present is false
+      emits null when value is null and @last_name_present is true
      emits null when value is null and @last_name_present is true
+      does not emit null when value is null and @last_name_present is false
      does not emit null when value is null and @last_name_present is false
+    ignore_serialize is set to a method which returns true when value is nil or empty string
+      ignores field when value is empty string
      ignores field when value is empty string
+      ignores field when value is nil
      ignores field when value is nil
+  does to_yaml
  does to_yaml
+  uses Time::EpochConverter
  uses Time::EpochConverter
+  work with module and inheritance
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  parses array of people with merge
  parses array of people with merge
+  works with record
  works with record
+  allows setting a nilable property to nil
  allows setting a nilable property to nil
+  parses simple mapping
  parses simple mapping
+  parses person with blank age
  parses person with blank age
+  calls #finalize
  calls #finalize
+  outputs with converter when nilable
  outputs with converter when nilable
+  works with selective serialization
  works with selective serialization
+  parses recursive array
  parses recursive array
+  empty class
  empty class
+  parses yaml with keywords
  parses yaml with keywords
+  emits null on request when doing to_yaml
  emits null on request when doing to_yaml
+  parses recursive
  parses recursive
+  parses array of people with merge, doesn't hang on infinite recursion
  parses array of people with merge, doesn't hang on infinite recursion
+  namespaced classes
+    lets default values use the object's own namespace
    lets default values use the object's own namespace
+  checks that non-integer values for integer fields report the expected type
  checks that non-integer values for integer fields report the expected type
+  parses YAML with presence markers
+    parses person with absent attributes
    parses person with absent attributes
+  allows small types of integer
  allows small types of integer
+  parses array of people
  parses array of people
+  work with inned class using same module name
+    assert
    assert
+  parses recursive nilable (2)
  parses recursive nilable (2)
+  parses nilable union
  parses nilable union
+OAuth2::Client
+  authorization uri
+    gets with absolute uri
    gets with absolute uri
+    gets with state
    gets with state
+    gets with default endpoint
    gets with default endpoint
+    gets with custom endpoint
    gets with custom endpoint
+    gets with block
    gets with block
+  get_access_token_using_*
+    using Request Body to pass credentials
+      #make_token_request
      #make_token_request
+      #get_access_token_using_refresh_token
      #get_access_token_using_refresh_token
+      #get_access_token_using_client_credentials
      #get_access_token_using_client_credentials
+      #get_access_token_using_resource_owner_credentials
      #get_access_token_using_resource_owner_credentials
+      #get_access_token_using_authorization_code
      #get_access_token_using_authorization_code
+    using HTTP Basic authentication to pass credentials
+      #get_access_token_using_refresh_token
      #get_access_token_using_refresh_token
+      configures HTTP::Client
      configures HTTP::Client
+      #get_access_token_using_client_credentials
      #get_access_token_using_client_credentials
+      #get_access_token_using_authorization_code
      #get_access_token_using_authorization_code
+      #make_token_request
      #make_token_request
+      #get_access_token_using_resource_owner_credentials
      #get_access_token_using_resource_owner_credentials
+__muloti4
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
@@ -18514,1409 +17689,1489 @@
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-IO::Memory
-  skips_to_end
  skips_to_end
-  seeks with pos and pos=
  seeks with pos and pos=
-  reads more than available (#1229)
  reads more than available (#1229)
-  can tell
  can tell
-  reads each line
  reads each line
-  reads byte
  reads byte
-  reads at offset
  reads at offset
-  can seek from the end
  can seek from the end
-  writes and reads
  writes and reads
-  consumes with gets_to_end
  consumes with gets_to_end
-  creates from slice
  creates from slice
-  peeks
  peeks
-  creates from string
  creates from string
-  consumes with getb_to_end
  consumes with getb_to_end
-  writes
  writes
-  peek readonly
  peek readonly
-  writes big
  writes big
-  can be converted to slice
  can be converted to slice
-  raises if clearing when closed
  raises if clearing when closed
-  does gets with char and limit
  does gets with char and limit
-  raises if invoking gets with negative limit
  raises if invoking gets with negative limit
-  can be closed
  can be closed
-  creates from read-only slice
  creates from read-only slice
-  creates from slice, non-writeable
  creates from slice, non-writeable
-  writes past end with write_byte
  writes past end with write_byte
-  does gets with char and limit without off-by-one
  does gets with char and limit without off-by-one
-  can seek set
  can seek set
-  reads single line content
  reads single line content
-  writes after reading
  writes after reading
-  write raises EOFError
  write raises EOFError
-  encoding
-    decode
-      gets_to_end
      gets_to_end
-      gets with chomp = false
      gets with chomp = false
-      gets
      gets
-      reads char
      reads char
-  raises if reading when closed
  raises if reading when closed
-  raises if negative capacity
  raises if negative capacity
-  allocates for > 1 GB
  allocates for > 1 GB
-  raises when reading at offset outside of bounds
  raises when reading at offset outside of bounds
-  writes past end
  writes past end
-  reads each line with chomp = false
  reads each line with chomp = false
-  raises if seek set is negative
  raises if seek set is negative
-  raises if seek current leads to negative value
  raises if seek current leads to negative value
-  does gets with limit
  does gets with limit
-  has a size
  has a size
-  can seek past the end
  can seek past the end
-  can seek current
  can seek current
-  skips
  skips
-  gets with char as delimiter
  gets with char as delimiter
-  clears
  clears
-  #to_s
-    appends to itself
    appends to itself
-    encoding
-      writes to IO
      writes to IO
-      returns String
      returns String
-    appends to another buffer
    appends to another buffer
-  raises if capacity too big
  raises if capacity too big
-  write single byte
  write single byte
-Symbol
-  displays the empty symbol with quotes
  displays the empty symbol with quotes
-  can be compared with another symbol
  can be compared with another symbol
-  displays symbols that don't need quotes without quotes
  displays symbols that don't need quotes without quotes
-  clone
-    assert
    assert
-  inspects
  inspects
-JUnit Formatter
-  reports mixed results
  reports mixed results
-  encodes class names from the relative file path
  encodes class names from the relative file path
-  reports failures
  reports failures
-  report failure stacktrace if present
  report failure stacktrace if present
-  outputs timestamp according to RFC 3339
  outputs timestamp according to RFC 3339
-  reports skipped
  reports skipped
-  report error stacktrace if present
  report error stacktrace if present
-  reports successful results
  reports successful results
-  escapes spec names
  escapes spec names
-  reports errors
  reports errors
 LLVM::ABI::AArch64
-  size
-    for packed struct
    for packed struct
-    for integer
    for integer
-    for struct
    for struct
+  align
     for pointer
    for pointer
     for double
    for double
-    for float
    for float
     for array
    for array
+    for integer
    for integer
+    for packed struct
    for packed struct
+    for struct
    for struct
+    for float
    for float
   abi_info
-    does with primitives
    does with primitives
     does with structs less than 64 bits
    does with structs less than 64 bits
-    does with structs larger than 128 bits
    does with structs larger than 128 bits
     does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
     does with homogeneous structs
    does with homogeneous structs
-  align
-    for integer
    for integer
+    does with structs larger than 128 bits
    does with structs larger than 128 bits
+    does with primitives
    does with primitives
+  size
+    for float
    for float
     for struct
    for struct
+    for integer
    for integer
     for array
    for array
-    for pointer
    for pointer
     for double
    for double
+    for pointer
    for pointer
     for packed struct
    for packed struct
-    for float
    for float
-StaticArray
-  unstable_sort_by!
-    sorts by!
    sorts by!
-    calls given block exactly once for each element
    calls given block exactly once for each element
-  does map
  does map
-  creates with new and block
  creates with new and block
-  "#each" iterator
  "#each" iterator
-  does map_with_index
  does map_with_index
-  ==
-    compares empty
    compares empty
-    compares elements
    compares elements
-    compares other
    compares other
-  rotate!
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
+Time::Format
+  raises when time zone missing
  raises when time zone missing
+  formats
  formats
+  parses day of month blank padded
  parses day of month blank padded
+  parses
  parses
+  parses day of year
  parses day of year
+  parses nanoseconds
  parses nanoseconds
+  parses nanoseconds with %9N
  parses nanoseconds with %9N
+  formats rfc3339 with different fraction digits
  formats rfc3339 with different fraction digits
+  parses centiseconds
  parses centiseconds
+  parses empty
  parses empty
+  formats standard formats
  formats standard formats
+  parses timezone
  parses timezone
+  assert
  assert
+  parses hour 24 blank padded
  parses hour 24 blank padded
+  parses if some decimals are missing
  parses if some decimals are missing
+  parses milliseconds with %L
  parses milliseconds with %L
+  parses microseconds with %6N
  parses microseconds with %6N
+  parses am/pm
  parses am/pm
+  parses discarding additional decimals
  parses discarding additional decimals
+  assert
  assert
+  parses the correct amount of digits (#853)
  parses the correct amount of digits (#853)
+  parses hour 12 blank padded
  parses hour 12 blank padded
+  can parse in location
  can parse in location
+  parse fails without time zone
  parse fails without time zone
+  parses milliseconds with %3N
  parses milliseconds with %3N
+  parses 24h clock with am/pm
  parses 24h clock with am/pm
+  assert
  assert
+  parses zone name
  parses zone name
+  assert
  assert
+  assert
  assert
+  parses 24h clock
  parses 24h clock
+  assert
  assert
+  parses month blank padded
  parses month blank padded
+  gives nice error message when end of input is reached (#12047)
  gives nice error message when end of input is reached (#12047)
+LLVM
+  .default_target_triple
  .default_target_triple
+  .normalize_triple
+    substitutes unknown for empty components
    substitutes unknown for empty components
+    works
    works
+Crystal::Hasher
+  inspect
+    should not expose internal data
    should not expose internal data
+  to_s
+    should not expose internal data
    should not expose internal data
+  funny_hash
+    #string should match test vectors
    #string should match test vectors
+    result should work
    result should work
+    #int should match test vectors
    #int should match test vectors
+    #bool should match test vectors
    #bool should match test vectors
+    #nil should match test vectors
    #nil should match test vectors
+    #float should match test vectors
    #float should match test vectors
+  .reduce_num
+    reduces BigInt
    reduces BigInt
+    reduces BigFloat
    reduces BigFloat
+    reduces BigRational
    reduces BigRational
+    reduces primitive float
    reduces primitive float
+    reduces primitive int
    reduces primitive int
+    reduces BigDecimal
    reduces BigDecimal
+  behavior
+    #class should change state and differ
    #class should change state and differ
+    Big i64 numbers should be hashed ok
    Big i64 numbers should be hashed ok
+    #string should change state and differ
    #string should change state and differ
+    #nil should change hasher state
    #nil should change hasher state
+    #char should change state and differ
    #char should change state and differ
+    #enum should change state and differ
    #enum should change state and differ
+    #symbol should change state and differ
    #symbol should change state and differ
+    #int should change state and differ
    #int should change state and differ
+    #bool should change state and differ
    #bool should change state and differ
+    #bytes should change state and differ
    #bytes should change state and differ
+    #float should change state and differ
    #float should change state and differ
+    #reference should change state and differ
    #reference should change state and differ
+    #int should be equal for different types
    #int should be equal for different types
+    128bit types should be hashed ok
    128bit types should be hashed ok
+  normalization of numbers
+    should 1_f32 and 1.to_big_f hashes equal
    should 1_f32 and 1.to_big_f hashes equal
+    should 1_i32 and 1_f64 hashes equal
    should 1_i32 and 1_f64 hashes equal
+    should 1_f32 and 1.to_big_r hashes equal
    should 1_f32 and 1.to_big_r hashes equal
+    should 1_f32 and 1.to_big_i hashes equal
    should 1_f32 and 1.to_big_i hashes equal
+HTTP::ErrorHandler
+  log debug message when the output is closed
  log debug message when the output is closed
+  logs to custom logger
  logs to custom logger
+  rescues from exception
  rescues from exception
+  doesn't write errors when there is some output already sent
  doesn't write errors when there is some output already sent
+  can return a generic error message
  can return a generic error message
+CSV
+  build
+    builds two rows
    builds two rows
+    builds with commas
    builds with commas
+    builds with inside quoted chars and symbols
    builds with inside quoted chars and symbols
+    builds with numbers
    builds with numbers
+    builds with custom quote character
    builds with custom quote character
+    builds row from splat
    builds row from splat
+    builds row from enumerable
    builds row from enumerable
+    builds with commas
    builds with commas
+    concats enumerable to row
    concats enumerable to row
+    builds with quotes
    builds with quotes
+    skips inside row
    skips inside row
+    builds with quoting
    builds with quoting
+    builds with custom separator
    builds with custom separator
+    concats splat to row
    concats splat to row
+HTTP::StaticFileHandler
+  does not serve a not found file
  does not serve a not found file
+  still serve compressed content when modification time is very close
  still serve compressed content when modification time is very close
+  unescapes a request path
  unescapes a request path
+  adds Etag header
  adds Etag header
+  doesn't serve compressed content if older than raw file
  doesn't serve compressed content if older than raw file
+  with If-Modified-Since header
+    returns 304 Not Modified for younger than Last-Modified
    returns 304 Not Modified for younger than Last-Modified
+    serves content for older than Last-Modified
    serves content for older than Last-Modified
+    returns 304 Not Modified for equal to Last-Modified
    returns 304 Not Modified for equal to Last-Modified
+  lists directory's entries
  lists directory's entries
+  adds Last-Modified header
  adds Last-Modified header
+  serves a file
  serves a file
+  with multiple If-None-Match header
+    returns 304 Not Modified if at least one header matches etag
    returns 304 Not Modified if at least one header matches etag
+    serves file if no header matches etag
    serves file if no header matches etag
+  handles only GET and HEAD method
  handles only GET and HEAD method
+  handles invalid redirect path
  handles invalid redirect path
+  does not serve a not found directory
  does not serve a not found directory
+  expands a request path
  expands a request path
+  handles forbidden characters in windows paths
  handles forbidden characters in windows paths
+  with If-None-Match header
+    serves file if header is empty
    serves file if header is empty
+    serves file if header does not match etag
    serves file if header does not match etag
+    returns 304 Not Modified if header matches etag
    returns 304 Not Modified if header matches etag
+    serves file if header does not contain valid etag
    serves file if header does not contain valid etag
+    returns 304 Not Modified if header is *
    returns 304 Not Modified if header is *
+  returns 400
  returns 400
+  when a Range header is provided
+    int range
+      serves a byte range
      serves a byte range
+      start of the range is larger than the file size
      start of the range is larger than the file size
+      serves a single byte
      serves a single byte
+      serves zero bytes
      serves zero bytes
+      start >= file_size
      start >= file_size
+      serves multiple byte ranges (separator with whitespace)
      serves multiple byte ranges (separator with whitespace)
+      serves multiple byte ranges (separator without whitespace)
      serves multiple byte ranges (separator without whitespace)
+      serves an open-ended byte range
      serves an open-ended byte range
+      end of the range is larger than the file size
      end of the range is larger than the file size
+    suffix range
+      empty file
      empty file
+      negative size
      negative size
+      partial
      partial
+      zero
      zero
+      zero
      zero
+      more bytes than content
      more bytes than content
+    invalid Range syntax
+      open range with negative end
      open range with negative end
+      byte number without dash
      byte number without dash
+      multiple dashes
      multiple dashes
+      not a number
      not a number
+      unsupported unit
      unsupported unit
+      negative end
      negative end
+      start > end
      start > end
+      not a range
      not a range
+      open range with negative end
      open range with negative end
+  does not serve a file as directory
  does not serve a file as directory
+  serve compressed content
  serve compressed content
+  does not list directory's entries when directory_listing is set to false
  does not list directory's entries when directory_listing is set to false
+  with both If-None-Match and If-Modified-Since headers
+    serves a file if header does not match etag even If-Modified-Since is fresh
    serves a file if header does not match etag even If-Modified-Since is fresh
+    ignores If-Modified-Since as specified in RFC 7232
    ignores If-Modified-Since as specified in RFC 7232
+Socket::Addrinfo
+  Error
+    .new (deprecated)
    .new (deprecated)
+  #ip_address
     assert
    assert
-  #sort
-    sort with a block
    sort with a block
-    sort without block
    sort without block
-  unstable_sort_by
-    sorts by
    sorts by
-  raises index out of bounds on read
  raises index out of bounds on read
-  shuffles with a seed
  shuffles with a seed
-  creates with new and value
  creates with new and value
-  creates with new
  creates with new
-  does map_with_index!
  does map_with_index!
-  reverse
  reverse
-  "#each" yielding
  "#each" yielding
-  does map_with_index!, with offset
  does map_with_index!, with offset
-  raises index out of bounds on write
  raises index out of bounds on write
-  shuffles
  shuffles
-  values_at
-    returns the given indexes
    returns the given indexes
-    raises when passed an invalid index
    raises when passed an invalid index
-  allows using negative indices
  allows using negative indices
-  "#each_index" yielding
  "#each_index" yielding
-  clones
  clones
-  does map!
  does map!
-  updates value
  updates value
-  #unstable_sort!
-    sort! without block
    sort! without block
-    sort! with a block
    sort! with a block
-  sort_by!
-    calls given block exactly once for each element
    calls given block exactly once for each element
-    sorts by!
    sorts by!
-  <=>
-    correctly compares two static arrays
    correctly compares two static arrays
-  #unstable_sort
-    sort with a block
    sort with a block
-    sort without block
    sort without block
-  "#reverse_each" iterator
  "#reverse_each" iterator
-  #fill
-    replaces values in a subrange
    replaces values in a subrange
-  "#each_index" iterator
  "#each_index" iterator
-  does to_s
  does to_s
-  "#reverse_each" yielding
  "#reverse_each" yielding
-  #sort!
-    sort! with a block
    sort! with a block
-    sort! without block
    sort! without block
-  sort_by
-    sorts by
    sorts by
-  does map_with_index, with offset
  does map_with_index, with offset
-OptionParser
-  has required option separated from flag but given together
  has required option separated from flag but given together
-  stops when asked
  stops when asked
-  raises on invalid option if value is given to none value handler (long flag, #9553)
  raises on invalid option if value is given to none value handler (long flag, #9553)
-  has required option with =
  has required option with =
-  parses with subcommands twice
  parses with subcommands twice
-  handles subcommands
  handles subcommands
-  calls the handler for invalid options
  calls the handler for invalid options
-  has flag
  has flag
-  can run a callback on every argument
  can run a callback on every argument
-  multiple times
-    gets an existence flag multiple times
    gets an existence flag multiple times
-    gets a double flag option multiple times
    gets a double flag option multiple times
-    gets a single flag option multiple times
    gets a single flag option multiple times
-  does to_s with very long flag (#3305)
  does to_s with very long flag (#3305)
-  does to_s with separators
  does to_s with separators
-  raises if missing required option with space
  raises if missing required option with space
-  raises if missing option next to flag
  raises if missing option next to flag
-  doesn't raise if required option is not specified with separated short flag
  doesn't raise if required option is not specified with separated short flag
-  --
-    returns a pair with things coming before and after --
    returns a pair with things coming before and after --
-    initializes without block and does parse!
    initializes without block and does parse!
-    ignores everything after -- with double flag
    ignores everything after -- with double flag
-    gets `-` as argument
    gets `-` as argument
-    ignores everything after -- with single flag)
    ignores everything after -- with single flag)
-    returns a pair with things coming before and after --, without --
    returns a pair with things coming before and after --, without --
-    ignores everything after -- with bool flag
    ignores everything after -- with bool flag
-  gets short option with value that looks like flag
  gets short option with value that looks like flag
-  handles subcommand --help well (top level)
  handles subcommand --help well (top level)
-  has required option separated from flag
  has required option separated from flag
-  has required option separated from long flag
  has required option separated from long flag
-  gnu_optional_args
-    doesn't get optional argument for long flag after space
    doesn't get optional argument for long flag after space
-    doesn't get optional argument for short flag after space
    doesn't get optional argument for short flag after space
-  unregisters subcommands on call
  unregisters subcommands on call
-  calls the handler for missing options
  calls the handler for missing options
-  does to_s with multi line description (#5832)
  does to_s with multi line description (#5832)
-  has required option with = (3) handles empty
  has required option with = (3) handles empty
-  gets short option with value -- (#8937)
  gets short option with value -- (#8937)
-  doesn't have flag with double dash
  doesn't have flag with double dash
-  has flag with many letters
  has flag with many letters
-  gets long option with value -- (#8937)
  gets long option with value -- (#8937)
-  doesn't have flag
  doesn't have flag
-  handles subcommand --help well (subcommand)
  handles subcommand --help well (subcommand)
-  does to_s with banner
  does to_s with banner
-  raises on invalid option if value is given to none value handler (short flag, #9553) 
  raises on invalid option if value is given to none value handler (short flag, #9553) 
-  parses argument when only referenced in long flag
  parses argument when only referenced in long flag
-  raises if flag pair doesn't start with dash (#4001)
  raises if flag pair doesn't start with dash (#4001)
-  has required option with = (2)
  has required option with = (2)
-  raises if missing required argument separated from long flag
  raises if missing required argument separated from long flag
-  has required option with long flag space
  has required option with long flag space
-  has required option with space
  has required option with space
-  doesn't raise if required option is not specified
  doesn't raise if required option is not specified
-  doesn't raise if optional option is not specified with short flag
  doesn't raise if optional option is not specified with short flag
-  handles subcommands with hyphen
  handles subcommands with hyphen
-  doesn't raise if optional option is not specified with long flag
  doesn't raise if optional option is not specified with long flag
-  has required option next to flag
  has required option next to flag
-  Consumption of flags following an ungiven optional argument
-    Given a long option with an optional value
-      doesn't eat further short options
      doesn't eat further short options
-      doesn't eat further long options
      doesn't eat further long options
-    Given a short option with an optional value
-      does eat a value that looks like an option
      does eat a value that looks like an option
-      doesn't eat a following long option
      doesn't eat a following long option
-      doesn't eat a following short option
      doesn't eat a following short option
-  has flag with double dash
  has flag with double dash
-  has required option next to flag but given separated
  has required option next to flag but given separated
-  raises on invalid option
  raises on invalid option
-  doesn't raise if optional option is not specified with separated short flag
  doesn't raise if optional option is not specified with separated short flag
-  forward-match
-    distinguishes between '--lamb VALUE' and '--lambda VALUE'
    distinguishes between '--lamb VALUE' and '--lambda VALUE'
-    distinguishes between '--lamb=VALUE' and '--lambda=VALUE'
    distinguishes between '--lamb=VALUE' and '--lambda=VALUE'
-  parses argument when referenced in long and short flag
  parses argument when referenced in long and short flag
+  .udp
+    yields each result
    yields each result
+    returns an array
    returns an array
+  .tcp
+    returns an array
    returns an array
+    yields each result
    yields each result
+  .resolve
+    raises helpful message on getaddrinfo failure
    raises helpful message on getaddrinfo failure
+    yields each result
    yields each result
+    eventually raises returned error
    eventually raises returned error
+    returns an array
    returns an array
+  #inspect
  #inspect
+Time
+  #<=>
+    compares different locations
    compares different locations
+    compares
    compares
+  #to_s
  #to_s
+  #time_of_day
  #time_of_day
+  #to_local_in
+    is the difference of offsets apart
    is the difference of offsets apart
+    keeps wall clock
    keeps wall clock
+  .local
+    initializes max value
    initializes max value
+    fails with negative nanosecond
    fails with negative nanosecond
+    fails with too big nanoseconds
    fails with too big nanoseconds
+    checks boundary at time max
    checks boundary at time max
+    checks boundary at time min
    checks boundary at time min
+    accepts midnight 24:00
    accepts midnight 24:00
+    initializes
    initializes
+  #in
+    changes location
    changes location
+  #to_s
+    prints string
    prints string
+    prints local time
    prints local time
+    prints offset for fixed location
    prints offset for fixed location
+    prints date-time fields
    prints date-time fields
+    prints offset for location
    prints offset for location
+    omits nanoseconds
    omits nanoseconds
+  .unix_ms
  .unix_ms
+  .days_in_year
  .days_in_year
+  .unix
  .unix
+  .leap_year?
+    knows years *not* divisible by 4 are normal
    knows years *not* divisible by 4 are normal
+    knows that typical non-century leap years are divisible by 4
    knows that typical non-century leap years are divisible by 4
+    knows that 100-year centuries are normal years
    knows that 100-year centuries are normal years
+    knows that 400-year centuries are leap years
    knows that 400-year centuries are leap years
+  UNIX_EPOCH
  UNIX_EPOCH
+  at methods
  at methods
+  Time::DayOfWeek
+    .from_value
    .from_value
+    #value
    #value
+    .new does not identify 0 as Sunday
    .new does not identify 0 as Sunday
+  .monotonic
+    returns always increasing monotonic clock
    returns always increasing monotonic clock
+  #to_unix
+    gets unix seconds at GMT
    gets unix seconds at GMT
+    gets unix seconds
    gets unix seconds
+  #shift
+    adds months
    adds months
+    preserves location when adding
    preserves location when adding
+    raises out of range min
    raises out of range min
+    adds years
    adds years
+    adds hours
    adds hours
+    raises out of range max
    raises out of range max
+    adds zero span
    adds zero span
+    covers date boundaries with zone offset (#10869)
    covers date boundaries with zone offset (#10869)
+    adds nanoseconds
    adds nanoseconds
+    adds hours, minutes, seconds
    adds hours, minutes, seconds
+    adds days
+      out of range min
      out of range min
+      over dst
      over dst
+      simple
      simple
+      out of range min (shift days)
      out of range min (shift days)
+      out of range max (shift days)
      out of range max (shift days)
+      out of range max
      out of range max
+    checks boundary at time max
    checks boundary at time max
+    covers date boundaries with zone offset (#8741)
    covers date boundaries with zone offset (#8741)
+    irregular calendaric unit ratios
+      shifts by a week if one day is left out
      shifts by a week if one day is left out
+      shifts by conceptual hour even if elapsed time is less
      shifts by conceptual hour even if elapsed time is less
+    checks boundary at time min
    checks boundary at time min
+  .measure
+    measures elapsed time
    measures elapsed time
+  #day_of_year
  #day_of_year
+  #step
+    "advent" iterator
    "advent" iterator
+    "advent" yielding
    "advent" yielding
+  .local without arguments
+    current time is similar in different locations
    current time is similar in different locations
+  .unix_ns
+    supports minimum valid time
    supports minimum valid time
+    supports maximum valid time
    supports maximum valid time
+    supports Int64 values
    supports Int64 values
+  #calendar_week
+    2012-12-30 to 2012-52
    2012-12-30 to 2012-52
+    1984-1-1 to 1983-52
    1984-1-1 to 1983-52
+    1996-1-7 to 1996-1
    1996-1-7 to 1996-1
+    2035-1-1 to 2035-1
    2035-1-1 to 2035-1
+    2011-1-6 to 2011-1
    2011-1-6 to 2011-1
+    2011-1-7 to 2011-1
    2011-1-7 to 2011-1
+    2028-1-1 to 2027-52
    2028-1-1 to 2027-52
+    2027-1-1 to 2026-53
    2027-1-1 to 2026-53
+    2014-1-5 to 2014-1
    2014-1-5 to 2014-1
+    2008-1-1 to 2008-1
    2008-1-1 to 2008-1
+    2011-12-26 to 2011-52
    2011-12-26 to 2011-52
+    2032-1-1 to 2032-1
    2032-1-1 to 2032-1
+    2023-1-1 to 2022-52
    2023-1-1 to 2022-52
+    2001-1-1 to 2001-1
    2001-1-1 to 2001-1
+    1988-1-1 to 1987-53
    1988-1-1 to 1987-53
+    1985-1-1 to 1985-1
    1985-1-1 to 1985-1
+    1995-1-1 to 1994-52
    1995-1-1 to 1994-52
+    1994-1-1 to 1993-52
    1994-1-1 to 1993-52
+    2009-1-1 to 2009-1
    2009-1-1 to 2009-1
+    2011-1-1 to 2010-52
    2011-1-1 to 2010-52
+    2010-1-1 to 2009-53
    2010-1-1 to 2009-53
+    2011-6-13 to 2011-24
    2011-6-13 to 2011-24
+    2000-1-1 to 1999-52
    2000-1-1 to 1999-52
+    1981-1-1 to 1981-1
    1981-1-1 to 1981-1
+    1997-1-1 to 1997-1
    1997-1-1 to 1997-1
+    1982-1-1 to 1981-53
    1982-1-1 to 1981-53
+    2011-1-4 to 2011-1
    2011-1-4 to 2011-1
+    2013-1-1 to 2013-1
    2013-1-1 to 2013-1
+    1998-1-1 to 1998-1
    1998-1-1 to 1998-1
+    2013-12-30 to 2014-1
    2013-12-30 to 2014-1
+    2011-1-9 to 2011-1
    2011-1-9 to 2011-1
+    2005-1-1 to 2004-53
    2005-1-1 to 2004-53
+    2011-6-12 to 2011-23
    2011-6-12 to 2011-23
+    2026-1-1 to 2026-1
    2026-1-1 to 2026-1
+    2011-1-11 to 2011-2
    2011-1-11 to 2011-2
+    1999-1-1 to 1998-53
    1999-1-1 to 1998-53
+    2031-1-1 to 2031-1
    2031-1-1 to 2031-1
+    2002-1-1 to 2002-1
    2002-1-1 to 2002-1
+    1995-1-2 to 1995-1
    1995-1-2 to 1995-1
+    2004-1-1 to 2004-1
    2004-1-1 to 2004-1
+    1993-1-1 to 1992-53
    1993-1-1 to 1992-53
+    2034-1-1 to 2033-52
    2034-1-1 to 2033-52
+    2012-1-2 to 2012-1
    2012-1-2 to 2012-1
+    2013-12-22 to 2013-51
    2013-12-22 to 2013-51
+    2038-1-1 to 2037-53
    2038-1-1 to 2037-53
+    1985-4-12 to 1985-15
    1985-4-12 to 1985-15
+    2011-1-5 to 2011-1
    2011-1-5 to 2011-1
+    1989-1-1 to 1988-52
    1989-1-1 to 1988-52
+    2011-1-2 to 2010-52
    2011-1-2 to 2010-52
+    2030-1-1 to 2030-1
    2030-1-1 to 2030-1
+    2006-1-1 to 2005-52
    2006-1-1 to 2005-52
+    2039-1-1 to 2038-52
    2039-1-1 to 2038-52
+    2025-1-1 to 2025-1
    2025-1-1 to 2025-1
+    2017-1-1 to 2016-52
    2017-1-1 to 2016-52
+    2013-1-6 to 2013-1
    2013-1-6 to 2013-1
+    2033-1-1 to 2032-53
    2033-1-1 to 2032-53
+    1996-1-1 to 1996-1
    1996-1-1 to 1996-1
+    2019-1-1 to 2019-1
    2019-1-1 to 2019-1
+    2029-1-1 to 2029-1
    2029-1-1 to 2029-1
+    2007-1-1 to 2007-1
    2007-1-1 to 2007-1
+    2013-12-23 to 2013-52
    2013-12-23 to 2013-52
+    2016-1-1 to 2015-53
    2016-1-1 to 2015-53
+    2011-1-10 to 2011-2
    2011-1-10 to 2011-2
+    2012-1-1 to 2011-52
    2012-1-1 to 2011-52
+    1992-1-1 to 1992-1
    1992-1-1 to 1992-1
+    2022-1-1 to 2021-52
    2022-1-1 to 2021-52
+    2040-1-1 to 2039-52
    2040-1-1 to 2039-52
+    2020-1-1 to 2020-1
    2020-1-1 to 2020-1
+    2014-1-1 to 2014-1
    2014-1-1 to 2014-1
+    1996-1-8 to 1996-2
    1996-1-8 to 1996-2
+    1983-1-1 to 1982-52
    1983-1-1 to 1982-52
+    2013-1-7 to 2013-2
    2013-1-7 to 2013-2
+    2010-1-1 to 2009-53
    2010-1-1 to 2009-53
+    2011-1-8 to 2011-1
    2011-1-8 to 2011-1
+    2015-1-1 to 2015-1
    2015-1-1 to 2015-1
+    2011-12-25 to 2011-51
    2011-12-25 to 2011-51
+    2012-12-24 to 2012-52
    2012-12-24 to 2012-52
+    2024-1-1 to 2024-1
    2024-1-1 to 2024-1
+    2011-12-31 to 2011-52
    2011-12-31 to 2011-52
+    2012-1-9 to 2012-2
    2012-1-9 to 2012-2
+    1987-1-1 to 1987-1
    1987-1-1 to 1987-1
+    2012-12-23 to 2012-51
    2012-12-23 to 2012-51
+    1990-1-1 to 1990-1
    1990-1-1 to 1990-1
+    2012-1-8 to 2012-1
    2012-1-8 to 2012-1
+    2003-1-1 to 2003-1
    2003-1-1 to 2003-1
+    2011-1-3 to 2011-1
    2011-1-3 to 2011-1
+    2011-12-28 to 2011-52
    2011-12-28 to 2011-52
+    2037-1-1 to 2037-1
    2037-1-1 to 2037-1
+    2021-1-1 to 2020-53
    2021-1-1 to 2020-53
+    1986-1-1 to 1986-1
    1986-1-1 to 1986-1
+    1991-1-1 to 1991-1
    1991-1-1 to 1991-1
+    2018-1-1 to 2018-1
    2018-1-1 to 2018-1
+    2011-12-29 to 2011-52
    2011-12-29 to 2011-52
+    2011-12-30 to 2011-52
    2011-12-30 to 2011-52
+    2014-1-6 to 2014-2
    2014-1-6 to 2014-2
+    2036-1-1 to 2036-1
    2036-1-1 to 2036-1
+    2012-12-31 to 2013-1
    2012-12-31 to 2013-1
+    2013-12-29 to 2013-52
    2013-12-29 to 2013-52
+    2011-12-27 to 2011-52
    2011-12-27 to 2011-52
+  does diff of utc vs local time
  does diff of utc vs local time
+  answers day name predicates
  answers day name predicates
+  .week_date
+    accepts time arguments
    accepts time arguments
+    verify test data
+      W2010-52-7 eq 2011-1-2
      W2010-52-7 eq 2011-1-2
+      W2026-53-5 eq 2027-1-1
      W2026-53-5 eq 2027-1-1
+      W2032-53-6 eq 2033-1-1
      W2032-53-6 eq 2033-1-1
+      W1982-52-6 eq 1983-1-1
      W1982-52-6 eq 1983-1-1
+      W2013-51-7 eq 2013-12-22
      W2013-51-7 eq 2013-12-22
+      W2009-53-5 eq 2010-1-1
      W2009-53-5 eq 2010-1-1
+      W2008-1-2 eq 2008-1-1
      W2008-1-2 eq 2008-1-1
+      W1998-1-4 eq 1998-1-1
      W1998-1-4 eq 1998-1-1
+      W2031-1-3 eq 2031-1-1
      W2031-1-3 eq 2031-1-1
+      W1985-15-5 eq 1985-4-12
      W1985-15-5 eq 1985-4-12
+      W2014-1-1 eq 2013-12-30
      W2014-1-1 eq 2013-12-30
+      W1999-52-6 eq 2000-1-1
      W1999-52-6 eq 2000-1-1
+      W2011-1-6 eq 2011-1-8
      W2011-1-6 eq 2011-1-8
+      W1996-2-1 eq 1996-1-8
      W1996-2-1 eq 1996-1-8
+      W2011-52-7 eq 2012-1-1
      W2011-52-7 eq 2012-1-1
+      W2011-23-7 eq 2011-6-12
      W2011-23-7 eq 2011-6-12
+      W2011-52-1 eq 2011-12-26
      W2011-52-1 eq 2011-12-26
+      W1998-53-5 eq 1999-1-1
      W1998-53-5 eq 1999-1-1
+      W2001-1-1 eq 2001-1-1
      W2001-1-1 eq 2001-1-1
+      W2021-52-6 eq 2022-1-1
      W2021-52-6 eq 2022-1-1
+      W2011-1-1 eq 2011-1-3
      W2011-1-1 eq 2011-1-3
+      W2013-2-1 eq 2013-1-7
      W2013-2-1 eq 2013-1-7
+      W1996-1-1 eq 1996-1-1
      W1996-1-1 eq 1996-1-1
+      W2012-2-1 eq 2012-1-9
      W2012-2-1 eq 2012-1-9
+      W2019-1-2 eq 2019-1-1
      W2019-1-2 eq 2019-1-1
+      W2011-52-3 eq 2011-12-28
      W2011-52-3 eq 2011-12-28
+      W1994-52-7 eq 1995-1-1
      W1994-52-7 eq 1995-1-1
+      W2009-1-4 eq 2009-1-1
      W2009-1-4 eq 2009-1-1
+      W2012-1-7 eq 2012-1-8
      W2012-1-7 eq 2012-1-8
+      W1995-1-1 eq 1995-1-2
      W1995-1-1 eq 1995-1-2
+      W2020-1-3 eq 2020-1-1
      W2020-1-3 eq 2020-1-1
+      W1987-1-4 eq 1987-1-1
      W1987-1-4 eq 1987-1-1
+      W1985-1-2 eq 1985-1-1
      W1985-1-2 eq 1985-1-1
+      W2004-1-4 eq 2004-1-1
      W2004-1-4 eq 2004-1-1
+      W2013-1-2 eq 2013-1-1
      W2013-1-2 eq 2013-1-1
+      W2011-2-2 eq 2011-1-11
      W2011-2-2 eq 2011-1-11
+      W2015-1-4 eq 2015-1-1
      W2015-1-4 eq 2015-1-1
+      W2038-52-6 eq 2039-1-1
      W2038-52-6 eq 2039-1-1
+      W2033-52-7 eq 2034-1-1
      W2033-52-7 eq 2034-1-1
+      W2009-53-5 eq 2010-1-1
      W2009-53-5 eq 2010-1-1
+      W2037-53-5 eq 2038-1-1
      W2037-53-5 eq 2038-1-1
+      W2013-52-1 eq 2013-12-23
      W2013-52-1 eq 2013-12-23
+      W1981-53-5 eq 1982-1-1
      W1981-53-5 eq 1982-1-1
+      W2013-1-7 eq 2013-1-6
      W2013-1-7 eq 2013-1-6
+      W2011-1-7 eq 2011-1-9
      W2011-1-7 eq 2011-1-9
+      W1992-1-3 eq 1992-1-1
      W1992-1-3 eq 1992-1-1
+      W2029-1-1 eq 2029-1-1
      W2029-1-1 eq 2029-1-1
+      W2005-52-7 eq 2006-1-1
      W2005-52-7 eq 2006-1-1
+      W2039-52-7 eq 2040-1-1
      W2039-52-7 eq 2040-1-1
+      W2011-2-1 eq 2011-1-10
      W2011-2-1 eq 2011-1-10
+      W2011-51-7 eq 2011-12-25
      W2011-51-7 eq 2011-12-25
+      W2011-52-6 eq 2011-12-31
      W2011-52-6 eq 2011-12-31
+      W1987-53-5 eq 1988-1-1
      W1987-53-5 eq 1988-1-1
+      W2014-1-7 eq 2014-1-5
      W2014-1-7 eq 2014-1-5
+      W1992-53-5 eq 1993-1-1
      W1992-53-5 eq 1993-1-1
+      W2007-1-1 eq 2007-1-1
      W2007-1-1 eq 2007-1-1
+      W2002-1-2 eq 2002-1-1
      W2002-1-2 eq 2002-1-1
+      W2014-1-3 eq 2014-1-1
      W2014-1-3 eq 2014-1-1
+      W1993-52-6 eq 1994-1-1
      W1993-52-6 eq 1994-1-1
+      W2027-52-6 eq 2028-1-1
      W2027-52-6 eq 2028-1-1
+      W2026-1-4 eq 2026-1-1
      W2026-1-4 eq 2026-1-1
+      W2020-53-5 eq 2021-1-1
      W2020-53-5 eq 2021-1-1
+      W1997-1-3 eq 1997-1-1
      W1997-1-3 eq 1997-1-1
+      W2012-52-1 eq 2012-12-24
      W2012-52-1 eq 2012-12-24
+      W2011-1-2 eq 2011-1-4
      W2011-1-2 eq 2011-1-4
+      W2013-52-7 eq 2013-12-29
      W2013-52-7 eq 2013-12-29
+      W1996-1-7 eq 1996-1-7
      W1996-1-7 eq 1996-1-7
+      W1981-1-4 eq 1981-1-1
      W1981-1-4 eq 1981-1-1
+      W1986-1-3 eq 1986-1-1
      W1986-1-3 eq 1986-1-1
+      W2024-1-1 eq 2024-1-1
      W2024-1-1 eq 2024-1-1
+      W2011-1-3 eq 2011-1-5
      W2011-1-3 eq 2011-1-5
+      W2003-1-3 eq 2003-1-1
      W2003-1-3 eq 2003-1-1
+      W2012-1-1 eq 2012-1-2
      W2012-1-1 eq 2012-1-2
+      W2022-52-7 eq 2023-1-1
      W2022-52-7 eq 2023-1-1
+      W2011-52-2 eq 2011-12-27
      W2011-52-2 eq 2011-12-27
+      W2011-52-4 eq 2011-12-29
      W2011-52-4 eq 2011-12-29
+      W2011-1-5 eq 2011-1-7
      W2011-1-5 eq 2011-1-7
+      W2012-52-7 eq 2012-12-30
      W2012-52-7 eq 2012-12-30
+      W2004-53-6 eq 2005-1-1
      W2004-53-6 eq 2005-1-1
+      W2036-1-2 eq 2036-1-1
      W2036-1-2 eq 2036-1-1
+      W2011-52-5 eq 2011-12-30
      W2011-52-5 eq 2011-12-30
+      W2015-53-5 eq 2016-1-1
      W2015-53-5 eq 2016-1-1
+      W2032-1-4 eq 2032-1-1
      W2032-1-4 eq 2032-1-1
+      W1991-1-2 eq 1991-1-1
      W1991-1-2 eq 1991-1-1
+      W2037-1-4 eq 2037-1-1
      W2037-1-4 eq 2037-1-1
+      W2030-1-2 eq 2030-1-1
      W2030-1-2 eq 2030-1-1
+      W2035-1-1 eq 2035-1-1
      W2035-1-1 eq 2035-1-1
+      W1983-52-7 eq 1984-1-1
      W1983-52-7 eq 1984-1-1
+      W1988-52-7 eq 1989-1-1
      W1988-52-7 eq 1989-1-1
+      W1990-1-1 eq 1990-1-1
      W1990-1-1 eq 1990-1-1
+      W2011-1-4 eq 2011-1-6
      W2011-1-4 eq 2011-1-6
+      W2016-52-7 eq 2017-1-1
      W2016-52-7 eq 2017-1-1
+      W2013-1-1 eq 2012-12-31
      W2013-1-1 eq 2012-12-31
+      W2014-2-1 eq 2014-1-6
      W2014-2-1 eq 2014-1-6
+      W2025-1-3 eq 2025-1-1
      W2025-1-3 eq 2025-1-1
+      W2011-24-1 eq 2011-6-13
      W2011-24-1 eq 2011-6-13
+      W2018-1-1 eq 2018-1-1
      W2018-1-1 eq 2018-1-1
+      W2012-51-7 eq 2012-12-23
      W2012-51-7 eq 2012-12-23
+      W2010-52-6 eq 2011-1-1
      W2010-52-6 eq 2011-1-1
+  #year
  #year
+  #day_of_week
+    2011-12-27 is 2
    2011-12-27 is 2
+    1998-1-1 is 4
    1998-1-1 is 4
+    2011-12-25 is 7
    2011-12-25 is 7
+    1982-1-1 is 5
    1982-1-1 is 5
+    2012-12-23 is 7
    2012-12-23 is 7
+    1984-1-1 is 7
    1984-1-1 is 7
+    2013-1-1 is 2
    2013-1-1 is 2
+    2026-1-1 is 4
    2026-1-1 is 4
+    1999-1-1 is 5
    1999-1-1 is 5
+    2008-1-1 is 2
    2008-1-1 is 2
+    2030-1-1 is 2
    2030-1-1 is 2
+    2007-1-1 is 1
    2007-1-1 is 1
+    1996-1-1 is 1
    1996-1-1 is 1
+    2013-12-22 is 7
    2013-12-22 is 7
+    2040-1-1 is 7
    2040-1-1 is 7
+    2001-1-1 is 1
    2001-1-1 is 1
+    1992-1-1 is 3
    1992-1-1 is 3
+    2019-1-1 is 2
    2019-1-1 is 2
+    2037-1-1 is 4
    2037-1-1 is 4
+    1988-1-1 is 5
    1988-1-1 is 5
+    1985-1-1 is 2
    1985-1-1 is 2
+    2011-1-7 is 5
    2011-1-7 is 5
+    2011-1-4 is 2
    2011-1-4 is 2
+    2039-1-1 is 6
    2039-1-1 is 6
+    2013-12-23 is 1
    2013-12-23 is 1
+    2036-1-1 is 2
    2036-1-1 is 2
+    2029-1-1 is 1
    2029-1-1 is 1
+    2015-1-1 is 4
    2015-1-1 is 4
+    2012-12-30 is 7
    2012-12-30 is 7
+    1986-1-1 is 3
    1986-1-1 is 3
+    1990-1-1 is 1
    1990-1-1 is 1
+    1981-1-1 is 4
    1981-1-1 is 4
+    2017-1-1 is 7
    2017-1-1 is 7
+    2012-12-24 is 1
    2012-12-24 is 1
+    2012-1-8 is 7
    2012-1-8 is 7
+    2011-1-8 is 6
    2011-1-8 is 6
+    1996-1-7 is 7
    1996-1-7 is 7
+    2011-12-31 is 6
    2011-12-31 is 6
+    2013-12-30 is 1
    2013-12-30 is 1
+    2011-12-29 is 4
    2011-12-29 is 4
+    2025-1-1 is 3
    2025-1-1 is 3
+    2002-1-1 is 2
    2002-1-1 is 2
+    2024-1-1 is 1
    2024-1-1 is 1
+    2009-1-1 is 4
    2009-1-1 is 4
+    2004-1-1 is 4
    2004-1-1 is 4
+    2013-1-7 is 1
    2013-1-7 is 1
+    2010-1-1 is 5
    2010-1-1 is 5
+    1987-1-1 is 4
    1987-1-1 is 4
+    2018-1-1 is 1
    2018-1-1 is 1
+    2012-1-2 is 1
    2012-1-2 is 1
+    1997-1-1 is 3
    1997-1-1 is 3
+    1996-1-8 is 1
    1996-1-8 is 1
+    2014-1-6 is 1
    2014-1-6 is 1
+    2027-1-1 is 5
    2027-1-1 is 5
+    2011-1-5 is 3
    2011-1-5 is 3
+    2012-1-1 is 7
    2012-1-1 is 7
+    1991-1-1 is 2
    1991-1-1 is 2
+    2021-1-1 is 5
    2021-1-1 is 5
+    2011-1-1 is 6
    2011-1-1 is 6
+    1983-1-1 is 6
    1983-1-1 is 6
+    2005-1-1 is 6
    2005-1-1 is 6
+    2011-1-11 is 2
    2011-1-11 is 2
+    1994-1-1 is 6
    1994-1-1 is 6
+    2020-1-1 is 3
    2020-1-1 is 3
+    2012-12-31 is 1
    2012-12-31 is 1
+    2014-1-5 is 7
    2014-1-5 is 7
+    2013-12-29 is 7
    2013-12-29 is 7
+    2000-1-1 is 6
    2000-1-1 is 6
+    2003-1-1 is 3
    2003-1-1 is 3
+    2013-1-6 is 7
    2013-1-6 is 7
+    2035-1-1 is 1
    2035-1-1 is 1
+    2038-1-1 is 5
    2038-1-1 is 5
+    2016-1-1 is 5
    2016-1-1 is 5
+    1995-1-2 is 1
    1995-1-2 is 1
+    2011-1-3 is 1
    2011-1-3 is 1
+    2011-1-2 is 7
    2011-1-2 is 7
+    2032-1-1 is 4
    2032-1-1 is 4
+    2012-1-9 is 1
    2012-1-9 is 1
+    2011-12-28 is 3
    2011-12-28 is 3
+    2011-6-12 is 7
    2011-6-12 is 7
+    2022-1-1 is 6
    2022-1-1 is 6
+    2028-1-1 is 6
    2028-1-1 is 6
+    2014-1-1 is 3
    2014-1-1 is 3
+    1989-1-1 is 7
    1989-1-1 is 7
+    2011-12-26 is 1
    2011-12-26 is 1
+    2033-1-1 is 6
    2033-1-1 is 6
+    2023-1-1 is 7
    2023-1-1 is 7
+    2031-1-1 is 3
    2031-1-1 is 3
+    2010-1-1 is 5
    2010-1-1 is 5
+    1995-1-1 is 7
    1995-1-1 is 7
+    2034-1-1 is 7
    2034-1-1 is 7
+    1985-4-12 is 5
    1985-4-12 is 5
+    2006-1-1 is 7
    2006-1-1 is 7
+    1993-1-1 is 5
    1993-1-1 is 5
+    2011-6-13 is 1
    2011-6-13 is 1
+    2011-1-9 is 7
    2011-1-9 is 7
+    gets day of week
    gets day of week
+    2011-1-10 is 1
    2011-1-10 is 1
+    2011-12-30 is 5
    2011-12-30 is 5
+    2011-1-6 is 4
    2011-1-6 is 4
+  #inspect
  #inspect
+  #clone
  #clone
+  .days_in_month
+    raises exception for invalid month
    raises exception for invalid month
+    returns days for valid month and year
    returns days for valid month and year
+    raises exception for invalid year
    raises exception for invalid year
+URI
+  serializes
+    from_json_object_key?
    from_json_object_key?
+    #to_json
    #to_json
+Iterator(T)
+  #cons
+    reuse
+      reuse as deque
      reuse as deque
+      reuse as Array
      reuse as Array
+      reuse as nil
      reuse as nil
+      reuse as Bool
      reuse as Bool
+    conses
    conses
+  flatten
+    flattens an iterator of mixed-type iterators
    flattens an iterator of mixed-type iterators
+    flattens an iterator of mixed-type elements and iterators
    flattens an iterator of mixed-type elements and iterators
+    flattens nested struct iterators with internal state being value types
    flattens nested struct iterators with internal state being value types
+    flattens an iterator of mixed-type elements and iterators and iterators of iterators
    flattens an iterator of mixed-type elements and iterators and iterators of iterators
+    flattens deeply-nested and mixed type iterators
    flattens deeply-nested and mixed type iterators
+    return iterator itself by rewind
    return iterator itself by rewind
+    flattens a deeply-nested iterables and arrays (#3703)
    flattens a deeply-nested iterables and arrays (#3703)
+    flattens a variety of edge cases
    flattens a variety of edge cases
+  integration
+    combines many iterators
    combines many iterators
+  #chunk_while
+    chunks while
    chunks while
+  #with_index
+    "with default offset" iterator
    "with default offset" iterator
+    "with explicit offset" yielding
    "with explicit offset" yielding
+    "with explicit offset" iterator
    "with explicit offset" iterator
+    "with non-Int32 offset" iterator
    "with non-Int32 offset" iterator
+    "with default offset" yielding
    "with default offset" yielding
+    "with non-Int32 offset" yielding
    "with non-Int32 offset" yielding
+  Iterator.of
+    creates singleton from block
    creates singleton from block
+    creates singleton from block can call Iterator.stop
    creates singleton from block can call Iterator.stop
+    creates singleton
    creates singleton
+  compact_map
+    sums after compact_map to_a
    sums after compact_map to_a
+    applies the function and removes nil values
    applies the function and removes nil values
+  #slice_when
+    slices when: single value
    slices when: single value
+    slices when with reuse = array
    slices when with reuse = array
+    slices when
    slices when
+    slices when: non-bool block
    slices when: non-bool block
+    slices when with reuse = true
    slices when with reuse = true
+    slices when: two values
    slices when: two values
+    slices when: #to_a
    slices when: #to_a
+    slices when: #rewind
    slices when: #rewind
+  skip
+    does skip with Range iterator
    does skip with Range iterator
+    is cool to skip 0 elements
    is cool to skip 0 elements
+    raises ArgumentError if negative size is provided
    raises ArgumentError if negative size is provided
+  #slice_after
+    slices after pattern with reuse = true
    slices after pattern with reuse = true
+    slices after
    slices after
+    slices after with reuse = true
    slices after with reuse = true
+    slices after: #rewind
    slices after: #rewind
+    slices after: #to_a
    slices after: #to_a
+    slices after pattern
    slices after pattern
+    slices after with reuse = array
    slices after with reuse = array
+    slices after: non-bool block
    slices after: non-bool block
+  take_while
+    does take_while with more than available
    does take_while with more than available
+    only calls the block as much as needed
    only calls the block as much as needed
+    does take_while with Range iterator
    does take_while with Range iterator
+  #slice_before
+    slices before: first element matches
    slices before: first element matches
+    slices before: non-bool block
    slices before: non-bool block
+    slices before: #to_a
    slices before: #to_a
+    slices before pattern with reuse = true
    slices before pattern with reuse = true
+    slices before nil
    slices before nil
+    slices before with reuse = array
    slices before with reuse = array
+    slices before with reuse = true
    slices before with reuse = true
+    slices before
    slices before
+    slices before pattern
    slices before pattern
+    slices before: #rewind
    slices before: #rewind
+  step
+    returns every other element
    returns every other element
+    returns every element
    returns every element
+    returns every third element
    returns every third element
+    raises with nonsensical steps
    raises with nonsensical steps
+  uniq
+    with block
    with block
+    without block
    without block
+  map
+    does map with Range iterator
    does map with Range iterator
+  with object
+    does with object, with block
    does with object, with block
+    does with object
    does with object
+  compact_map
+    does not return nil values
    does not return nil values
+  tap
+    taps
    taps
+  #accumulate
+    prefix sums, with init
+      returns prefix sums
      returns prefix sums
+      preserves initial type
      preserves initial type
+      empty iterator returns only initial value
      empty iterator returns only initial value
+    generic cumulative fold
+      empty iterator stops immediately
      empty iterator stops immediately
+      accumulates values
      accumulates values
+    generic cumulative fold, with init
+      accumulates values
      accumulates values
+      preserves initial type
      preserves initial type
+      empty iterator returns only initial value
      empty iterator returns only initial value
+    prefix sums
+      returns prefix sums
      returns prefix sums
+      empty iterator stops immediately
      empty iterator stops immediately
+  each_slice
+    gets all the slices of the size n
    gets all the slices of the size n
+    returns each_slice iterator with reuse = true
    returns each_slice iterator with reuse = true
+    returns each_slice iterator with reuse = array
    returns each_slice iterator with reuse = array
+    also works if it does not add up
    also works if it does not add up
+  cycle
+    does not cycle provided 0
    does not cycle provided 0
+    does not cycle provided a negative size
    does not cycle provided a negative size
+    does cycle from range
    does cycle from range
+    cycles N times
    cycles N times
+    cycles an empty array
    cycles an empty array
+  slice
+    slices
    slices
+    doesnt conflict with `::Slice` type
    doesnt conflict with `::Slice` type
+  skip_while
+    does skip_while with an array
    does skip_while with an array
+    can skip everything
    can skip everything
+    only calls the block as much as needed
    only calls the block as much as needed
+    returns the full array if the condition is false for the first item
    returns the full array if the condition is false for the first item
+  chain
+    chains
    chains
+    does not experience tuple upcase bug of #13411
    does not experience tuple upcase bug of #13411
+    chain indeterminate number of iterators
+      chains all together
      chains all together
+      chains iterators of different type
      chains iterators of different type
+      chains array of empty
      chains array of empty
+      rewinds
      rewinds
+      chains empty
      chains empty
+  #flat_map
+    flattens returned values of mixed element types in #to_a
    flattens returned values of mixed element types in #to_a
+    flattens returned arrays
    flattens returned arrays
+    flattens returned iterators
    flattens returned iterators
+    flattens returned values
    flattens returned values
+    flattens returned items
    flattens returned items
+  first
+    does first with more than available
    does first with more than available
+    is cool to first 0 elements
    is cool to first 0 elements
+    does first with Range iterator
    does first with Range iterator
+    raises ArgumentError if negative size is provided
    raises ArgumentError if negative size is provided
+  zip
+    does skip with Range iterator
    does skip with Range iterator
+    takes multiple Iterators
    takes multiple Iterators
+  reject
+    does with type
    does with type
+    does reject with Range iterator
    does reject with Range iterator
+    does with pattern
    does with pattern
+  in_groups_of
+    creates a group of two with reuse = true
    creates a group of two with reuse = true
+    raises argument error if size is less than 0
    raises argument error if size is less than 0
+    fills up with the fill up argument
    fills up with the fill up argument
+    creates groups of one
    creates groups of one
+    still works with other iterator methods like to_a
    still works with other iterator methods like to_a
+    creates a group of two
    creates a group of two
+  each
+    yields the individual elements to the block
    yields the individual elements to the block
+  select
+    does select with Range iterator
    does select with Range iterator
+    does with pattern
    does with pattern
+    does with type
    does with type
+  #cons_pair
+    conses
    conses
+    doesn't include stop in return type
    doesn't include stop in return type
+Log::BroadcastBackend
+  overwriting log level overwrites to all backends
  overwriting log level overwrites to all backends
+  writes to the backend based on level
  writes to the backend based on level
+  #min_level
+    single backend
    single backend
+    multiple backends
    multiple backends
+    on empty
    on empty
+YAML serialization
+  to_yaml
+    does for Float64
    does for Float64
+    does for time at date
    does for time at date
+    does for Path
    does for Path
+    does for Float32
    does for Float32
+    does for Nil (empty string)
    does for Nil (empty string)
+    does for Array
    does for Array
+    does for Float64 (nan)
    does for Float64 (nan)
+    does for bytes
    does for bytes
+    does for Nil
    does for Nil
+    does for Tuple
    does for Tuple
+    does for Float32 (infinity)
    does for Float32 (infinity)
+    does a full document
    does a full document
+    does for Float32 (-infinity)
    does for Float32 (-infinity)
+    does for BigInt
    does for BigInt
+    does for String with stars (#3353)
    does for String with stars (#3353)
+    does for String with unicode characters (#8131)
    does for String with unicode characters (#8131)
+    does for Float64 (-infinity)
    does for Float64 (-infinity)
+    serializes recursive data structures
    serializes recursive data structures
+    does for String with slash
    does for String with slash
+    does for Int32
    does for Int32
+    does for Float32 (nan)
    does for Float32 (nan)
+    does for Hash
    does for Hash
+    does for BigFloat
    does for BigFloat
+    does for Set
    does for Set
+    quotes string if reserved
    quotes string if reserved
+    Enum
+      flag enum
      flag enum
+      normal enum
      normal enum
+    does for utc time with nanoseconds
    does for utc time with nanoseconds
+    does for Hash with symbol keys
    does for Hash with symbol keys
+    Enum::ValueConverter
+      flag enum
      flag enum
+      normal enum
      normal enum
+    does for BigDecimal
    does for BigDecimal
+    does for Float64 (infinity)
    does for Float64 (infinity)
+    writes to a stream
    writes to a stream
+    does for Bool
    does for Bool
+    does for NamedTuple
    does for NamedTuple
+    does for String with quote
    does for String with quote
+    does for String
    does for String
+    does for utc time
    does for utc time
+  from_yaml
+    does for BigInt
    does for BigInt
+    does Hash#from_yaml with merge
    does Hash#from_yaml with merge
+    does for empty tuple
    does for empty tuple
+    Enum
+      normal enum
      normal enum
+      flag enum
      flag enum
+    does Hash#from_yaml
    does Hash#from_yaml
+    does Array#from_yaml
    does Array#from_yaml
+    raises if Int16.from_yaml overflows
    raises if Int16.from_yaml overflows
+    does Time::Format#from_yaml
    does Time::Format#from_yaml
+    does for tuple with file-private type
    does for tuple with file-private type
+    Enum::ValueConverter.from_yaml
+      flag enum
      flag enum
+      normal enum
      normal enum
+    does UInt32.from_yaml
    does UInt32.from_yaml
+    does Set#from_yaml
    does Set#from_yaml
+    raises if UInt32.from_yaml overflows
    raises if UInt32.from_yaml overflows
+    does Int.from_yaml with underscores
    does Int.from_yaml with underscores
+    does for named tuple with nilable fields and null (#8089)
    does for named tuple with nilable fields and null (#8089)
+    does Float64#from_yaml
    does Float64#from_yaml
+    does Int8.from_yaml
    does Int8.from_yaml
+    raises if Int32.from_yaml overflows
    raises if Int32.from_yaml overflows
+    does Int.from_yaml with prefixes
    does Int.from_yaml with prefixes
+    raises if Int64.from_yaml overflows
    raises if Int64.from_yaml overflows
+    does Int64.from_yaml
    does Int64.from_yaml
+    does for named tuple with spaces in key (#10918)
    does for named tuple with spaces in key (#10918)
+    does Int128.from_yaml
    does Int128.from_yaml
+    does for BigDecimal
    does for BigDecimal
+    does for named tuple with file-private type
    does for named tuple with file-private type
+    does Int16.from_yaml
    does Int16.from_yaml
+    does for named tuple with spaces in key and quote char (#10918)
    does for named tuple with spaces in key and quote char (#10918)
+    deserializes bytes
    deserializes bytes
+    deserializes union with nil, string and int (#7936)
    deserializes union with nil, string and int (#7936)
+    raises if Int128.from_yaml overflows
    raises if Int128.from_yaml overflows
+    can parse string that looks like a number
    can parse string that looks like a number
+    does Array#from_yaml from IO
    does Array#from_yaml from IO
+    does UInt16.from_yaml
    does UInt16.from_yaml
+    does UInt64.from_yaml
    does UInt64.from_yaml
+    does Path.from_yaml
    does Path.from_yaml
+    raises if UInt16.from_yaml overflows
    raises if UInt16.from_yaml overflows
+    raises if UInt128.from_yaml overflows
    raises if UInt128.from_yaml overflows
+    raises if UInt64.from_yaml overflows
    raises if UInt64.from_yaml overflows
+    raises if Int8.from_yaml overflows
    raises if Int8.from_yaml overflows
+    does Bool#from_yaml
    does Bool#from_yaml
+    does UInt8.from_yaml
    does UInt8.from_yaml
+    parse exceptions
+      has correct location when raises in Union#from_yaml
      has correct location when raises in Union#from_yaml
+      has correct location when raises in Nil#from_yaml
      has correct location when raises in Nil#from_yaml
+      has correct location when raises in Int32#from_yaml
      has correct location when raises in Int32#from_yaml
+      has correct location when raises in NamedTuple#from_yaml
      has correct location when raises in NamedTuple#from_yaml
+    does Float32#from_yaml
    does Float32#from_yaml
+    does UInt128.from_yaml
    does UInt128.from_yaml
+    does for BigFloat
    does for BigFloat
+    does for named tuple
    does for named tuple
+    does Array#from_yaml with block
    does Array#from_yaml with block
+    does for tuple
    does for tuple
+    does Nil#from_yaml
    does Nil#from_yaml
+    does Hash#from_yaml with merge (recursive)
    does Hash#from_yaml with merge (recursive)
+    does String#from_yaml
    does String#from_yaml
+    raises if UInt8.from_yaml overflows
    raises if UInt8.from_yaml overflows
+    does for named tuple with nilable fields (#8089)
    does for named tuple with nilable fields (#8089)
+    does for empty named tuple
    does for empty named tuple
+    does Int32.from_yaml
    does Int32.from_yaml
+    does String#from_yaml (empty string)
    does String#from_yaml (empty string)
+    deserializes time
    deserializes time
 TCPServer
+  accept
+    sets close on exec flag
    sets close on exec flag
+  settings
  settings
   .new
-    using IPv4
-      raises when port is negative
      raises when port is negative
-      binds to port 0
      binds to port 0
+    using IPv6
       listens on local address
      listens on local address
+      binds to port 0
      binds to port 0
       reuse_port
-        raises when port is in use
        raises when port is in use
         raises when not binding with reuse_port
        raises when not binding with reuse_port
         raises when port is not ready to be reused
        raises when port is not ready to be reused
+        raises when port is in use
        raises when port is in use
         binds to used port with reuse_port = true
        binds to used port with reuse_port = true
+      raises when port is negative
      raises when port is negative
     address resolution
       raises (rather than segfault on darwin) when host doesn't exist and port is 0
      raises (rather than segfault on darwin) when host doesn't exist and port is 0
       raises when host doesn't exist
      raises when host doesn't exist
       binds to localhost
      binds to localhost
     binds to all interfaces
    binds to all interfaces
-    using IPv6
-      raises when port is negative
      raises when port is negative
+    using IPv4
       reuse_port
         binds to used port with reuse_port = true
        binds to used port with reuse_port = true
         raises when not binding with reuse_port
        raises when not binding with reuse_port
-        raises when port is not ready to be reused
        raises when port is not ready to be reused
         raises when port is in use
        raises when port is in use
-      binds to port 0
      binds to port 0
+        raises when port is not ready to be reused
        raises when port is not ready to be reused
       listens on local address
      listens on local address
-  accept
-    sets close on exec flag
    sets close on exec flag
-  settings
  settings
-hardware exception
-  detects stack overflow on a fiber stack
  detects stack overflow on a fiber stack
-  reports invalid memory access
  reports invalid memory access
-  detects stack overflow on the main stack
  detects stack overflow on the main stack
-Regex
-  .literal
  .literal
-  #options
  #options
-  .error?
  .error?
-  #name_table
-    duplicate name
    duplicate name
-    more than 255 groups
    more than 255 groups
-    alpanumeric
    alpanumeric
-    is a map of capture group number to name
    is a map of capture group number to name
-  #matches_at_byte_index?
-    negative
    negative
-    multibyte index
    multibyte index
-    positive index
    positive index
-    with options
-      deprecated Regex::Options
      deprecated Regex::Options
-      Regex::MatchOptions
      Regex::MatchOptions
-  #dup
  #dup
-  #inspect
-    with non-literal-compatible options
-      escapes
      escapes
-      prints flags
      prints flags
-    with literal-compatible options
-      escapes
      escapes
-      prints flags
      prints flags
-  .supports_compile_options?
  .supports_compile_options?
-  #===
-    assigns captures
    assigns captures
-    basic
    basic
-  .union
-    returns a regular expression that will match passed arguments
    returns a regular expression that will match passed arguments
-    constructs a Regex that matches things any of its arguments match
    constructs a Regex that matches things any of its arguments match
-    combines Regex objects in the same way as Regex#+
    combines Regex objects in the same way as Regex#+
-    accepts a single Tuple(String | Regex) argument
    accepts a single Tuple(String | Regex) argument
-    quotes any string arguments
    quotes any string arguments
-    returns a Regex with an Array(String) with special characters
    returns a Regex with an Array(String) with special characters
-    accepts a single Array(String | Regex) argument
    accepts a single Array(String | Regex) argument
-  #matches?
+      binds to port 0
      binds to port 0
+      raises when port is negative
      raises when port is negative
+Subtle
+  compares constant time bytes bug
  compares constant time bytes bug
+  compares constant time and slices strings
  compares constant time and slices strings
+  compares constant time bytes on equality
  compares constant time bytes on equality
+  compares constant times
  compares constant times
+String
+  #grapheme_size
  #grapheme_size
+  #graphemes
  #graphemes
+  #each_grapheme
+    string.dump yielding
    string.dump yielding
+    string.dump yielding
    string.dump yielding
+    string.dump yielding
    string.dump yielding
+    string.dump yielding
    string.dump yielding
+    string.dump iterator
    string.dump iterator
+    string.dump iterator
    string.dump iterator
+    string.dump iterator
    string.dump iterator
+    string.dump iterator
    string.dump iterator
+    string.dump iterator
    string.dump iterator
+    string.dump iterator
    string.dump iterator
+    string.dump iterator
    string.dump iterator
+    string.dump yielding
    string.dump yielding
+    string.dump yielding
    string.dump yielding
+    string.dump iterator
    string.dump iterator
+    string.dump iterator
    string.dump iterator
+    string.dump iterator
    string.dump iterator
+    string.dump yielding
    string.dump yielding
+    string.dump iterator
    string.dump iterator
+    string.dump yielding
    string.dump yielding
+    string.dump yielding
    string.dump yielding
+    string.dump yielding
    string.dump yielding
+    string.dump yielding
    string.dump yielding
+    string.dump iterator
    string.dump iterator
+    string.dump iterator
    string.dump iterator
+    string.dump iterator
    string.dump iterator
+    string.dump yielding
    string.dump yielding
+    string.dump yielding
    string.dump yielding
+    string.dump iterator
    string.dump iterator
+    string.dump yielding
    string.dump yielding
+    string.dump iterator
    string.dump iterator
+    string.dump yielding
    string.dump yielding
+    string.dump iterator
    string.dump iterator
+    string.dump yielding
    string.dump yielding
+    string.dump iterator
    string.dump iterator
+    string.dump yielding
    string.dump yielding
+    string.dump yielding
    string.dump yielding
+    string.dump yielding
    string.dump yielding
+    string.dump yielding
    string.dump yielding
+    string.dump iterator
    string.dump iterator
+    string.dump yielding
    string.dump yielding
+    string.dump iterator
    string.dump iterator
+    string.dump iterator
    string.dump iterator
+LLVM::ABI::X86
+  size
+    for packed struct
    for packed struct
+    for array
    for array
+    for double
    for double
+    for pointer
    for pointer
+    for integer
    for integer
+    for struct
    for struct
+    for float
    for float
+  align
+    for float
    for float
+    for double
    for double
+    for packed struct
    for packed struct
+    for integer
    for integer
+    for pointer
    for pointer
+    for array
    for array
+    for struct
    for struct
+  abi_info
+    does with structs less than 64 bits
    does with structs less than 64 bits
+    does with primitives
    does with primitives
+    does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
+    does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
+JSON::Lexer
+  lexes "\uD800\uDC00" from String
  lexes "\uD800\uDC00" from String
+  lexes "hello\rworld" from IO
  lexes "hello\rworld" from IO
+  lexes "\uDBFF\uDFFF" from String
  lexes "\uDBFF\uDFFF" from String
+  lexes "hello\nworld" from IO
  lexes "hello\nworld" from IO
+  lexes  from IO
  lexes  from IO
+  lexes 1e+12 from String
  lexes 1e+12 from String
+  lexes 1e2 from String
  lexes 1e2 from String
+  lexes { from string
  lexes { from string
+  lexes "\u201chello world\u201d" from IO
  lexes "\u201chello world\u201d" from IO
+  lexes 1234 from IO
  lexes 1234 from IO
+  lexes 6000000000000000000.0 from String
  lexes 6000000000000000000.0 from String
+  lexes [ from string
  lexes [ from string
+  lexes 1.2e-3 from IO
  lexes 1.2e-3 from IO
+  lexes "hello" from IO
  lexes "hello" from IO
+  lexes null from string
  lexes null from string
+  lexes : from string
  lexes : from string
+  lexes } from string
  lexes } from string
+  lexes 9876543212345678987654321e20 from String
  lexes 9876543212345678987654321e20 from String
+  lexes 1e+12 from IO
  lexes 1e+12 from IO
+  lexes "hello\/world" from IO
  lexes "hello\/world" from IO
+  lexes } from IO
  lexes } from IO
+  lexes "\uDBFF\uDFFF" from IO
  lexes "\uDBFF\uDFFF" from IO
+  lexes "hello\\world" from IO
  lexes "hello\\world" from IO
+  lexes "\uD800\uDC00" from IO
  lexes "\uD800\uDC00" from IO
+  errors if lexing "\uD800\u0020" from IO
  errors if lexing "\uD800\u0020" from IO
+  lexes  
+	
 : from string
  lexes  
+	
 : from string
+  lexes 1E2 from String
  lexes 1E2 from String
+  lexes -1.23 from String
  lexes -1.23 from String
+  lexes "hello\"world" from String
  lexes "hello\"world" from String
+  lexes 9.91343313498688 from IO
  lexes 9.91343313498688 from IO
+  lexes -1 from IO
  lexes -1 from IO
+  lexes 0E1 from String
  lexes 0E1 from String
+  lexes , from IO
  lexes , from IO
+  lexes false from IO
  lexes false from IO
+  lexes "hello\rworld" from String
  lexes "hello\rworld" from String
+  lexes 1 from IO
  lexes 1 from IO
+  errors if lexing "\uD800\u0020" from String
  errors if lexing "\uD800\u0020" from String
+  lexes ] from string
  lexes ] from string
+  lexes "hello\bworld" from IO
  lexes "hello\bworld" from IO
+  lexes 9000000000000000000.0 from IO
  lexes 9000000000000000000.0 from IO
+  lexes ] from IO
  lexes ] from IO
+  lexes 1000000000000000000.0 from IO
  lexes 1000000000000000000.0 from IO
+  lexes 1 from String
  lexes 1 from String
+  lexes { from IO
  lexes { from IO
+  lexes 6000000000000000000.0 from IO
  lexes 6000000000000000000.0 from IO
+  lexes 0 from String
  lexes 0 from String
+  lexes "\uD834\uDD1E" from IO
  lexes "\uD834\uDD1E" from IO
+  errors if lexing "\uDC00" from String
  errors if lexing "\uDC00" from String
+  lexes 9.91343313498688 from String
  lexes 9.91343313498688 from String
+  lexes : from IO
  lexes : from IO
+  lexes 0e+12 from IO
  lexes 0e+12 from IO
+  lexes 0e-12 from IO
  lexes 0e-12 from IO
+  lexes 0E1 from IO
  lexes 0E1 from IO
+  lexes , from string
  lexes , from string
+  lexes -1.23e4 from String
  lexes -1.23e4 from String
+  lexes "hello\\world" from String
  lexes "hello\\world" from String
+  lexes "hello\tworld" from String
  lexes "hello\tworld" from String
+  lexes "hello\/world" from String
  lexes "hello\/world" from String
+  lexes -1.23 from IO
  lexes -1.23 from IO
+  errors if lexing "\uD800" from String
  errors if lexing "\uD800" from String
+  lexes "\uD834\uDD1E" from String
  lexes "\uD834\uDD1E" from String
+  errors if lexing "\uD800" from IO
  errors if lexing "\uD800" from IO
+  lexes -1 from String
  lexes -1 from String
+  lexes false from string
  lexes false from string
+  lexes null from IO
  lexes null from IO
+  lexes 0.1e1 from IO
  lexes 0.1e1 from IO
+  errors if lexing "\uDC00" from IO
  errors if lexing "\uDC00" from IO
+  lexes true from IO
  lexes true from IO
+  lexes 0e1 from IO
  lexes 0e1 from IO
+  lexes  from string
  lexes  from string
+  lexes 1E2 from IO
  lexes 1E2 from IO
+  lexes 0 from IO
  lexes 0 from IO
+  lexes true from string
  lexes true from string
+  lexes "hello\fworld" from IO
  lexes "hello\fworld" from IO
+  lexes [ from IO
  lexes [ from IO
+  lexes 1234.567 from String
  lexes 1234.567 from String
+  lexes 0.1e1 from String
  lexes 0.1e1 from String
+  lexes "\uD840\uDC00" from IO
  lexes "\uD840\uDC00" from IO
+  lexes 1.2e-3 from String
  lexes 1.2e-3 from String
+  lexes "\uD840\uDC00" from String
  lexes "\uD840\uDC00" from String
+  lexes 1e2 from IO
  lexes 1e2 from IO
+  lexes 9876543212345678987654321.0 from String
  lexes 9876543212345678987654321.0 from String
+  lexes 9876543212345678987654321.0 from IO
  lexes 9876543212345678987654321.0 from IO
+  lexes 1234.567 from IO
  lexes 1234.567 from IO
+  lexes 9876543212345678987654321e20 from IO
  lexes 9876543212345678987654321e20 from IO
+  lexes 0e-12 from String
  lexes 0e-12 from String
+  lexes 1234 from String
  lexes 1234 from String
+  lexes 0.123 from IO
  lexes 0.123 from IO
+  lexes "hello" from String
  lexes "hello" from String
+  lexes 0e+12 from String
  lexes 0e+12 from String
+  lexes "hello\"world" from IO
  lexes "hello\"world" from IO
+  lexes  
+	
 : from IO
  lexes  
+	
 : from IO
+  lexes 10.100000000000000000000 from IO
  lexes 10.100000000000000000000 from IO
+  lexes "hello\bworld" from String
  lexes "hello\bworld" from String
+  lexes 10.100000000000000000000 from String
  lexes 10.100000000000000000000 from String
+  lexes 0.123 from String
  lexes 0.123 from String
+  lexes "\u201chello world\u201d" from String
  lexes "\u201chello world\u201d" from String
+  lexes "hello\tworld" from IO
  lexes "hello\tworld" from IO
+  lexes "hello\nworld" from String
  lexes "hello\nworld" from String
+  lexes 0e1 from String
  lexes 0e1 from String
+  lexes 9000000000000000000.0 from String
  lexes 9000000000000000000.0 from String
+  lexes -1.23e4 from String
  lexes -1.23e4 from String
+  lexes 1000000000000000000.0 from String
  lexes 1000000000000000000.0 from String
+  lexes -1.23e4 from IO
  lexes -1.23e4 from IO
+  lexes -1.23e4 from IO
  lexes -1.23e4 from IO
+  lexes "hello\fworld" from String
  lexes "hello\fworld" from String
+Class
+  getter
+    uses getter with assignment
    uses getter with assignment
+    uses getter with type declaration and default value
    uses getter with type declaration and default value
+    defines lazy getter with block
    defines lazy getter with block
+    defines lazy getter with block returning false
    defines lazy getter with block returning false
+    uses getter with type declaration
    uses getter with type declaration
+    uses simple getter
    uses simple getter
+  def_hash
+    should return same hash for equal property values
    should return same hash for equal property values
+    shouldn't return same hash for different property values
    shouldn't return same hash for different property values
+  calls #finalize on #clone'd objects
  calls #finalize on #clone'd objects
+  .set_crystal_type_id
  .set_crystal_type_id
+  delegate
+    forwards #{{ op.id }} with multiple parameters and block parameter
    forwards #{{ op.id }} with multiple parameters and block parameter
+    forwards #{{ op.id }} with multiple parameters
    forwards #{{ op.id }} with multiple parameters
+    forwards #{{ op.id }} with multiple parameters
    forwards #{{ op.id }} with multiple parameters
+    forwards #{{ op.id }} with multiple parameters and block parameter
    forwards #{{ op.id }} with multiple parameters and block parameter
+    forwards #{{ op.id }} with multiple parameters and block parameter
    forwards #{{ op.id }} with multiple parameters and block parameter
+    forwards #{{ op.id }} with multiple parameters and block parameter
    forwards #{{ op.id }} with multiple parameters and block parameter
+    forwards #{{ op.id }} with multiple parameters
    forwards #{{ op.id }} with multiple parameters
+    delegates []=
    delegates []=
+    forwards #{{ op.id }} with multiple parameters and block parameter
    forwards #{{ op.id }} with multiple parameters and block parameter
+    forwards #{{ op.id }} with multiple parameters
    forwards #{{ op.id }} with multiple parameters
+    forwards #{{ op.id }} with multiple parameters
    forwards #{{ op.id }} with multiple parameters
+    forwards #{{ op.id }} with multiple parameters
    forwards #{{ op.id }} with multiple parameters
+    delegates
    delegates
+    delegates setter
    delegates setter
+    forwards #{{ op.id }} with multiple parameters and block parameter
    forwards #{{ op.id }} with multiple parameters and block parameter
+  def_equals
+    compares by reference
    compares by reference
+  property!
+    uses property!
    uses property!
+    uses property! with type declaration
    uses property! with type declaration
+  #not_nil!
+    raises NilAssertionError
    raises NilAssertionError
     basic
    basic
-    unicode
-      matches unicode char against [[:alnum:]] (#4704)
      matches unicode char against [[:alnum:]] (#4704)
-      invalid codepoint
      invalid codepoint
-      matches unicode char against [[:print:]] (#11262)
      matches unicode char against [[:print:]] (#11262)
-      unicode support
      unicode support
-    with options
-      Regex::MatchOptions
      Regex::MatchOptions
-      deprecated Regex::Options
      deprecated Regex::Options
-    options
-      extended
-        ignores white space
        ignores white space
-        ignores comments
        ignores comments
-      multiline
-        anchor
        anchor
-        span
        span
-      anchored
      anchored
-      ignore case
      ignore case
-    doesn't crash with a large single line string
    doesn't crash with a large single line string
-  .escape
  .escape
-  .supports_match_options?
  .supports_match_options?
-  #to_s
-    interpolation
    interpolation
-    with slash
    with slash
-    with options
    with options
-  #+
  #+
-  #==
  #==
-  .needs_escape?
-    Char
    Char
-    String
    String
-  #=~
-    accepts any type
    accepts any type
-    assigns captures
    assigns captures
-    returns match index or nil
    returns match index or nil
-  #capture_count
  #capture_count
-  #match!
-    raises on non-match
    raises on non-match
-    assigns captures
    assigns captures
-    returns match data
    returns match data
-    with options
-      Regex::Match options
      Regex::Match options
-  .new
-    doesn't crash when PCRE tries to free some memory (#771)
    doesn't crash when PCRE tries to free some memory (#771)
-    options
-      unnamed option
      unnamed option
-      regular
      regular
-    raises on invalid UTF-8
    raises on invalid UTF-8
-    raises exception with invalid regex
    raises exception with invalid regex
-  #match_at_byte_index
-    negative
    negative
-    multibyte index
    multibyte index
-    with options
-      deprecated Regex::Options
      deprecated Regex::Options
-      Regex::MatchOptions
      Regex::MatchOptions
-    positive index
    positive index
-    assigns captures
    assigns captures
-  #match
-    assigns captures
    assigns captures
-    with pos
-      positive
      positive
-      char index
      char index
-      negative
      negative
-    skip invalid UTF check
    skip invalid UTF check
-    with options
-      Regex::Match options
      Regex::Match options
-      deprecated Regex::Options
      deprecated Regex::Options
-    returns matchdata
    returns matchdata
-    returns nil on non-match
    returns nil on non-match
-    with invalid UTF-8
    with invalid UTF-8
-  #clone
  #clone
-  #source
  #source
-  #hash
  #hash
-Errno
-  #message
  #message
-  .value
  .value
-Float32#to_s
-  converts 8388608000.0_f32 to "8388608000.0"
  converts 8388608000.0_f32 to "8388608000.0"
-  special cases
-    converts -0.0_f32 to "-0.0"
    converts -0.0_f32 to "-0.0"
-    converts Float32::INFINITY to "Infinity"
    converts Float32::INFINITY to "Infinity"
-    converts Float32::MAX to "3.4028235e+38"
    converts Float32::MAX to "3.4028235e+38"
-    converts 4290772992_u32.unsafe_as(Float32) to "NaN"
    converts 4290772992_u32.unsafe_as(Float32) to "NaN"
-    converts Float32::MIN_POSITIVE to "1.1754944e-38"
    converts Float32::MIN_POSITIVE to "1.1754944e-38"
-    converts 0.0_f32 to "0.0"
    converts 0.0_f32 to "0.0"
-    converts Float32::MIN_SUBNORMAL to "1.0e-45"
    converts Float32::MIN_SUBNORMAL to "1.0e-45"
-    converts Float32::MIN_POSITIVE.prev_float to "1.1754942e-38"
    converts Float32::MIN_POSITIVE.prev_float to "1.1754942e-38"
-    converts 2143289344_u32.unsafe_as(Float32) to "NaN"
    converts 2143289344_u32.unsafe_as(Float32) to "NaN"
-    converts -Float32::INFINITY to "-Infinity"
    converts -Float32::INFINITY to "-Infinity"
-  converts 10000.0_f32 to "10000.0"
  converts 10000.0_f32 to "10000.0"
-  converts 1.23456_f32 to "1.23456"
  converts 1.23456_f32 to "1.23456"
-  converts 100000000.0_f32 to "100000000.0"
  converts 100000000.0_f32 to "100000000.0"
-  converts 1000000000000000.0_f32 to "1.0e+15"
  converts 1000000000000000.0_f32 to "1.0e+15"
-  converts 123456789012.0_f32 to "123456790000.0"
  converts 123456789012.0_f32 to "123456790000.0"
-  converts 12345678901234.0_f32 to "12345679000000.0"
  converts 12345678901234.0_f32 to "12345679000000.0"
-  converts 64000.0_f32 to "64000.0"
  converts 64000.0_f32 to "64000.0"
-  converts 65536.0_f32 to "65536.0"
  converts 65536.0_f32 to "65536.0"
-  converts 1234567895.0_f32 to "1234568000.0"
  converts 1234567895.0_f32 to "1234568000.0"
-  converts 1.0_f32 to "1.0"
  converts 1.0_f32 to "1.0"
-  converts 1001000000000000.0_f32 to "1.001e+15"
  converts 1001000000000000.0_f32 to "1.001e+15"
-  converts 123456789012345.0_f32 to "123456790000000.0"
  converts 123456789012345.0_f32 to "123456790000000.0"
-  converts 67108864.0_f32 to "67108864.0"
  converts 67108864.0_f32 to "67108864.0"
-  Ryu f2s_test.cc Regression
-    converts 1.993244e-38_f32 to "1.993244e-38"
    converts 1.993244e-38_f32 to "1.993244e-38"
-    converts 4.7223665e21_f32 to "4.7223665e+21"
    converts 4.7223665e21_f32 to "4.7223665e+21"
-    converts 9.2234038e17_f32 to "9.223404e+17"
    converts 9.2234038e17_f32 to "9.223404e+17"
-    converts 1.4e-45_f32 to "1.0e-45"
    converts 1.4e-45_f32 to "1.0e-45"
-    converts 1.9310392e-38_f32 to "1.9310392e-38"
    converts 1.9310392e-38_f32 to "1.9310392e-38"
-    converts 1.1811161e19_f32 to "1.1811161e+19"
    converts 1.1811161e19_f32 to "1.1811161e+19"
-    converts 4103.9003_f32 to "4103.9004"
    converts 4103.9003_f32 to "4103.9004"
-    converts 1.18697724e20_f32 to "1.18697725e+20"
    converts 1.18697724e20_f32 to "1.18697725e+20"
-    converts 6.0898e-39_f32 to "6.0898e-39"
    converts 6.0898e-39_f32 to "6.0898e-39"
-    converts 4.6143165e18_f32 to "4.6143166e+18"
    converts 4.6143165e18_f32 to "4.6143166e+18"
-    converts 3.3554436e7_f32 to "33554436.0"
    converts 3.3554436e7_f32 to "33554436.0"
-    converts -2.47e-43_f32 to "-2.47e-43"
    converts -2.47e-43_f32 to "-2.47e-43"
-    converts 200.0_f32 to "200.0"
    converts 200.0_f32 to "200.0"
-    converts 9.223372e18_f32 to "9.223372e+18"
    converts 9.223372e18_f32 to "9.223372e+18"
-    converts 6.7131496e7_f32 to "67131496.0"
    converts 6.7131496e7_f32 to "67131496.0"
-    converts 8388608.0_f32 to "8388608.0"
    converts 8388608.0_f32 to "8388608.0"
-    converts 2.8823261e17_f32 to "2.882326e+17"
    converts 2.8823261e17_f32 to "2.882326e+17"
-    converts 5.368709e18_f32 to "5.368709e+18"
    converts 5.368709e18_f32 to "5.368709e+18"
-    converts 5.3399997e9_f32 to "5339999700.0"
    converts 5.3399997e9_f32 to "5339999700.0"
-    converts 0.007812537_f32 to "0.007812537"
    converts 0.007812537_f32 to "0.007812537"
-    converts 1.6777216e7_f32 to "16777216.0"
    converts 1.6777216e7_f32 to "16777216.0"
-    converts 3.3554432e7_f32 to "33554432.0"
    converts 3.3554432e7_f32 to "33554432.0"
-    converts 1.5846085e29_f32 to "1.5846086e+29"
    converts 1.5846085e29_f32 to "1.5846086e+29"
-    converts 6.7108872e7_f32 to "67108870.0"
    converts 6.7108872e7_f32 to "67108870.0"
-    converts 0.0010310042_f32 to "0.0010310042"
    converts 0.0010310042_f32 to "0.0010310042"
-    converts 1.0e-44_f32 to "1.0e-44"
    converts 1.0e-44_f32 to "1.0e-44"
-    converts 7.038531e-26_f32 to "7.038531e-26"
    converts 7.038531e-26_f32 to "7.038531e-26"
-    converts 2.816025e14_f32 to "281602500000000.0"
    converts 2.816025e14_f32 to "281602500000000.0"
-    converts 1.00014165e-36_f32 to "1.00014165e-36"
    converts 1.00014165e-36_f32 to "1.00014165e-36"
-  converts 512.0_f32 to "512.0"
  converts 512.0_f32 to "512.0"
-  Ryu f2s_test.cc ExactValueRoundEven
-    converts 3.0540412e5_f32 to "305404.12"
    converts 3.0540412e5_f32 to "305404.12"
-    converts 8.0990312e3_f32 to "8099.0312"
    converts 8.0990312e3_f32 to "8099.0312"
-  converts 1.234_f32 to "1.234"
  converts 1.234_f32 to "1.234"
-  converts 1000000.0_f32 to "1000000.0"
  converts 1000000.0_f32 to "1000000.0"
-  converts 10000000000000.0_f32 to "10000000000000.0"
  converts 10000000000000.0_f32 to "10000000000000.0"
-  converts 1.2345678_f32 to "1.2345678"
  converts 1.2345678_f32 to "1.2345678"
-  converts 1.0_f32 to "1.0"
  converts 1.0_f32 to "1.0"
-  converts 8.0_f32 to "8.0"
  converts 8.0_f32 to "8.0"
-  converts 1000000000.0_f32 to "1000000000.0"
  converts 1000000000.0_f32 to "1000000000.0"
-  converts 1000.0_f32 to "1000.0"
  converts 1000.0_f32 to "1000.0"
-  converts 8000.0_f32 to "8000.0"
  converts 8000.0_f32 to "8000.0"
-  converts 1000000100000000.0_f32 to "1.0000001e+15"
  converts 1000000100000000.0_f32 to "1.0000001e+15"
-  converts 1234567890.0_f32 to "1234568000.0"
  converts 1234567890.0_f32 to "1234568000.0"
-  converts 8192.0_f32 to "8192.0"
  converts 8192.0_f32 to "8192.0"
-  converts 12.0_f32 to "12.0"
  converts 12.0_f32 to "12.0"
-  converts 1.234567_f32 to "1.234567"
  converts 1.234567_f32 to "1.234567"
-  converts 100.0_f32 to "100.0"
  converts 100.0_f32 to "100.0"
-  converts 67108864000.0_f32 to "67108864000.0"
  converts 67108864000.0_f32 to "67108864000.0"
-  converts 1.0_f32 to "1.0"
  converts 1.0_f32 to "1.0"
-  converts 1.2345_f32 to "1.2345"
  converts 1.2345_f32 to "1.2345"
-  Ryu f2s_test.cc BoundaryRoundEven
-    converts 8.999999e9_f32 to "9000000000.0"
    converts 8.999999e9_f32 to "9000000000.0"
-    converts 3.4366717e10_f32 to "34366720000.0"
    converts 3.4366717e10_f32 to "34366720000.0"
-    converts 3.355445e7_f32 to "33554450.0"
    converts 3.355445e7_f32 to "33554450.0"
-  converts 123.0_f32 to "123.0"
  converts 123.0_f32 to "123.0"
-  converts 100000000000000.0_f32 to "100000000000000.0"
  converts 100000000000000.0_f32 to "100000000000000.0"
-  converts 1000010000000000.0_f32 to "1.00001e+15"
  converts 1000010000000000.0_f32 to "1.00001e+15"
-  converts 123456.0_f32 to "123456.0"
  converts 123456.0_f32 to "123456.0"
-  converts 10000000.0_f32 to "10000000.0"
  converts 10000000.0_f32 to "10000000.0"
-  converts 1234567890123.0_f32 to "1234568000000.0"
  converts 1234567890123.0_f32 to "1234568000000.0"
-  Ryu f2s_test.cc LotsOfTrailingZeros
-    converts 2.4414062e-4_f32 to "0.00024414062"
    converts 2.4414062e-4_f32 to "0.00024414062"
-    converts 4.3945312e-3_f32 to "0.0043945312"
    converts 4.3945312e-3_f32 to "0.0043945312"
-    converts 2.4414062e-3_f32 to "0.0024414062"
    converts 2.4414062e-3_f32 to "0.0024414062"
-    converts 6.3476562e-3_f32 to "0.0063476562"
    converts 6.3476562e-3_f32 to "0.0063476562"
-  converts 12345.0_f32 to "12345.0"
  converts 12345.0_f32 to "12345.0"
-  anomalous values
-    converts 0x1p87_f32 to "1.5474251e+26"
    converts 0x1p87_f32 to "1.5474251e+26"
-    converts 0x1p90_f32 to "1.2379401e+27"
    converts 0x1p90_f32 to "1.2379401e+27"
-    converts 0x1p-96_f32 to "1.2621775e-29"
    converts 0x1p-96_f32 to "1.2621775e-29"
-  converts 1.23456789_f32 to "1.2345679"
  converts 1.23456789_f32 to "1.2345679"
-  converts 10000000000.0_f32 to "10000000000.0"
  converts 10000000000.0_f32 to "10000000000.0"
-  converts 524288000.0_f32 to "524288000.0"
  converts 524288000.0_f32 to "524288000.0"
-  converts 1.23_f32 to "1.23"
  converts 1.23_f32 to "1.23"
-  converts 1234.0_f32 to "1234.0"
  converts 1234.0_f32 to "1234.0"
-  Ryu f2s_test.cc LooksLikePow5
-    converts 0x1.2a05f2p+60_f32 to "1.3421773e+18"
    converts 0x1.2a05f2p+60_f32 to "1.3421773e+18"
-    converts 0x1.2a05f2p+59_f32 to "6.7108864e+17"
    converts 0x1.2a05f2p+59_f32 to "6.7108864e+17"
-    converts 0x1.2a05f2p+61_f32 to "2.6843546e+18"
    converts 0x1.2a05f2p+61_f32 to "2.6843546e+18"
-  converts 1010000000000000.0_f32 to "1.01e+15"
  converts 1010000000000000.0_f32 to "1.01e+15"
-  converts 1000000000000.0_f32 to "1000000000000.0"
  converts 1000000000000.0_f32 to "1000000000000.0"
-  converts 1000000010000000.0_f32 to "1.0e+15"
  converts 1000000010000000.0_f32 to "1.0e+15"
-  odd mantissas (unaffected by shifting)
-    converts 671087e2_f32 to "67108700.0"
    converts 671087e2_f32 to "67108700.0"
-    converts 1075e6_f32 to "1075000000.0"
    converts 1075e6_f32 to "1075000000.0"
-    converts 671089e2_f32 to "67108900.0"
    converts 671089e2_f32 to "67108900.0"
-    converts 3355445e1_f32 to "33554450.0"
    converts 3355445e1_f32 to "33554450.0"
-    converts 215e7_f32 to "2150000000.0"
    converts 215e7_f32 to "2150000000.0"
-    converts 5369e5_f32 to "536900000.0"
    converts 5369e5_f32 to "536900000.0"
-    converts 5367e5_f32 to "536700000.0"
    converts 5367e5_f32 to "536700000.0"
-    converts 26843e4_f32 to "268430000.0"
    converts 26843e4_f32 to "268430000.0"
-    converts 26845e4_f32 to "268450000.0"
    converts 26845e4_f32 to "268450000.0"
-    converts 134217e3_f32 to "134217000.0"
    converts 134217e3_f32 to "134217000.0"
-    converts 9e9_f32 to "9000000000.0"
    converts 9e9_f32 to "9000000000.0"
-    converts 43e8_f32 to "4300000000.0"
    converts 43e8_f32 to "4300000000.0"
-    converts 5495808e5_f32 to "549580800000.0"
    converts 5495808e5_f32 to "549580800000.0"
-    converts 41e8_f32 to "4100000000.0"
    converts 41e8_f32 to "4100000000.0"
-    converts 1073e6_f32 to "1073000000.0"
    converts 1073e6_f32 to "1073000000.0"
-    converts 134219e3_f32 to "134219000.0"
    converts 134219e3_f32 to "134219000.0"
-    converts 213e7_f32 to "2130000000.0"
    converts 213e7_f32 to "2130000000.0"
-    converts 1e10_f32 to "10000000000.0"
    converts 1e10_f32 to "10000000000.0"
-    converts 7e9_f32 to "7000000000.0"
    converts 7e9_f32 to "7000000000.0"
-    converts 3e10_f32 to "30000000000.0"
    converts 3e10_f32 to "30000000000.0"
-    converts 3355443e1_f32 to "33554430.0"
    converts 3355443e1_f32 to "33554430.0"
-    converts 5497856e5_f32 to "549785600000.0"
    converts 5497856e5_f32 to "549785600000.0"
-  converts 12345678.0_f32 to "12345678.0"
  converts 12345678.0_f32 to "12345678.0"
-  converts 1.2_f32 to "1.2"
  converts 1.2_f32 to "1.2"
-  highly-trimmed powers of 2
-    converts 0x1p118_f32 to "3.32307e+35"
    converts 0x1p118_f32 to "3.32307e+35"
-    converts 0x1p119_f32 to "6.64614e+35"
    converts 0x1p119_f32 to "6.64614e+35"
-  one-digit cases, where the decimal point can't appear between digits like "17.29"
-    converts 7e+0_f32 to "7.0"
    converts 7e+0_f32 to "7.0"
-    converts 7e+2_f32 to "700.0"
    converts 7e+2_f32 to "700.0"
-    converts 7e-2_f32 to "0.07"
    converts 7e-2_f32 to "0.07"
-    converts 7e+1_f32 to "70.0"
    converts 7e+1_f32 to "70.0"
-    converts 7e-3_f32 to "0.007"
    converts 7e-3_f32 to "0.007"
-    converts 7e+3_f32 to "7000.0"
    converts 7e+3_f32 to "7000.0"
-    converts 7e-1_f32 to "0.7"
    converts 7e-1_f32 to "0.7"
-  converts 65536000.0_f32 to "65536000.0"
  converts 65536000.0_f32 to "65536000.0"
-  converts 100000000000.0_f32 to "100000000000.0"
  converts 100000000000.0_f32 to "100000000000.0"
-  converts 8192000.0_f32 to "8192000.0"
  converts 8192000.0_f32 to "8192000.0"
-  converts 1234567890123456.0_f32 to "1.234568e+15"
  converts 1234567890123456.0_f32 to "1.234568e+15"
-  converts 8388608.0_f32 to "8388608.0"
  converts 8388608.0_f32 to "8388608.0"
-  converts 512000.0_f32 to "512000.0"
  converts 512000.0_f32 to "512000.0"
-  converts 1234567.0_f32 to "1234567.0"
  converts 1234567.0_f32 to "1234567.0"
-  converts 64.0_f32 to "64.0"
  converts 64.0_f32 to "64.0"
-  converts 123456789.0_f32 to "123456790.0"
  converts 123456789.0_f32 to "123456790.0"
-  converts 12345678901.0_f32 to "12345679000.0"
  converts 12345678901.0_f32 to "12345679000.0"
-  converts 524288.0_f32 to "524288.0"
  converts 524288.0_f32 to "524288.0"
-  converts 1000001000000000.0_f32 to "1.000001e+15"
  converts 1000001000000000.0_f32 to "1.000001e+15"
-  converts 10.0_f32 to "10.0"
  converts 10.0_f32 to "10.0"
-  converts 1100000000000000.0_f32 to "1.1e+15"
  converts 1100000000000000.0_f32 to "1.1e+15"
-  converts 1.23456735e-36_f32 to "1.23456735e-36"
  converts 1.23456735e-36_f32 to "1.23456735e-36"
-  all exponents
-    converts 1.729e-15_f32 to "1.729e-15"
    converts 1.729e-15_f32 to "1.729e-15"
-    converts 1.729e-6_f32 to "1.729e-6"
    converts 1.729e-6_f32 to "1.729e-6"
-    converts 1.729e31_f32 to "1.729e+31"
    converts 1.729e31_f32 to "1.729e+31"
-    converts 1.729e18_f32 to "1.729e+18"
    converts 1.729e18_f32 to "1.729e+18"
-    converts 1.729e32_f32 to "1.729e+32"
    converts 1.729e32_f32 to "1.729e+32"
-    converts 1.729e33_f32 to "1.729e+33"
    converts 1.729e33_f32 to "1.729e+33"
-    converts 1.729e-35_f32 to "1.729e-35"
    converts 1.729e-35_f32 to "1.729e-35"
-    converts 1.729e-10_f32 to "1.729e-10"
    converts 1.729e-10_f32 to "1.729e-10"
-    converts 1.729e+5_f32 to "172900.0"
    converts 1.729e+5_f32 to "172900.0"
-    converts 1.729e-37_f32 to "1.729e-37"
    converts 1.729e-37_f32 to "1.729e-37"
-    converts 1.729e28_f32 to "1.729e+28"
    converts 1.729e28_f32 to "1.729e+28"
-    converts 1.729e15_f32 to "1.729e+15"
    converts 1.729e15_f32 to "1.729e+15"
-    converts 1.729e+14_f32 to "172900000000000.0"
    converts 1.729e+14_f32 to "172900000000000.0"
-    converts 1.729e-23_f32 to "1.729e-23"
    converts 1.729e-23_f32 to "1.729e-23"
-    converts 1.729e+3_f32 to "1729.0"
    converts 1.729e+3_f32 to "1729.0"
-    converts 1.729e-34_f32 to "1.729e-34"
    converts 1.729e-34_f32 to "1.729e-34"
-    converts 1.729e-20_f32 to "1.729e-20"
    converts 1.729e-20_f32 to "1.729e-20"
-    converts 1.729e-22_f32 to "1.729e-22"
    converts 1.729e-22_f32 to "1.729e-22"
-    converts 1.729e+1_f32 to "17.29"
    converts 1.729e+1_f32 to "17.29"
-    converts 1.729e-5_f32 to "1.729e-5"
    converts 1.729e-5_f32 to "1.729e-5"
-    converts 1.729e+12_f32 to "1729000000000.0"
    converts 1.729e+12_f32 to "1729000000000.0"
-    converts 1.729e-33_f32 to "1.729e-33"
    converts 1.729e-33_f32 to "1.729e-33"
-    converts 1.729e36_f32 to "1.729e+36"
    converts 1.729e36_f32 to "1.729e+36"
-    converts 1.729e-44_f32 to "1.7e-44"
    converts 1.729e-44_f32 to "1.7e-44"
-    converts 1.729e21_f32 to "1.729e+21"
    converts 1.729e21_f32 to "1.729e+21"
-    converts 1.729e-32_f32 to "1.729e-32"
    converts 1.729e-32_f32 to "1.729e-32"
-    converts 1.729e+0_f32 to "1.729"
    converts 1.729e+0_f32 to "1.729"
-    converts 1.729e-29_f32 to "1.729e-29"
    converts 1.729e-29_f32 to "1.729e-29"
-    converts 1.729e26_f32 to "1.729e+26"
    converts 1.729e26_f32 to "1.729e+26"
-    converts 1.729e-24_f32 to "1.729e-24"
    converts 1.729e-24_f32 to "1.729e-24"
-    converts 1.729e-43_f32 to "1.72e-43"
    converts 1.729e-43_f32 to "1.72e-43"
-    converts 1.729e-13_f32 to "1.729e-13"
    converts 1.729e-13_f32 to "1.729e-13"
-    converts 1.729e19_f32 to "1.729e+19"
    converts 1.729e19_f32 to "1.729e+19"
-    converts 1.729e+9_f32 to "1729000000.0"
    converts 1.729e+9_f32 to "1729000000.0"
-    converts 1.729e-19_f32 to "1.729e-19"
    converts 1.729e-19_f32 to "1.729e-19"
-    converts 1.729e+2_f32 to "172.9"
    converts 1.729e+2_f32 to "172.9"
-    converts 1.729e-36_f32 to "1.729e-36"
    converts 1.729e-36_f32 to "1.729e-36"
-    converts 1.729e23_f32 to "1.729e+23"
    converts 1.729e23_f32 to "1.729e+23"
-    converts 1.729e-7_f32 to "1.729e-7"
    converts 1.729e-7_f32 to "1.729e-7"
-    converts 1.729e+10_f32 to "17290000000.0"
    converts 1.729e+10_f32 to "17290000000.0"
-    converts 1.729e-45_f32 to "1.0e-45"
    converts 1.729e-45_f32 to "1.0e-45"
-    converts 1.729e-26_f32 to "1.729e-26"
    converts 1.729e-26_f32 to "1.729e-26"
-    converts 1.729e17_f32 to "1.729e+17"
    converts 1.729e17_f32 to "1.729e+17"
-    converts 1.729e-40_f32 to "1.729e-40"
    converts 1.729e-40_f32 to "1.729e-40"
-    converts 1.729e29_f32 to "1.729e+29"
    converts 1.729e29_f32 to "1.729e+29"
-    converts 1.729e-31_f32 to "1.729e-31"
    converts 1.729e-31_f32 to "1.729e-31"
-    converts 1.729e-27_f32 to "1.729e-27"
    converts 1.729e-27_f32 to "1.729e-27"
-    converts 1.729e-28_f32 to "1.729e-28"
    converts 1.729e-28_f32 to "1.729e-28"
-    converts 1.729e-41_f32 to "1.729e-41"
    converts 1.729e-41_f32 to "1.729e-41"
-    converts 1.729e20_f32 to "1.729e+20"
    converts 1.729e20_f32 to "1.729e+20"
-    converts 1.729e24_f32 to "1.729e+24"
    converts 1.729e24_f32 to "1.729e+24"
-    converts 1.729e-17_f32 to "1.729e-17"
    converts 1.729e-17_f32 to "1.729e-17"
-    converts 1.729e30_f32 to "1.729e+30"
    converts 1.729e30_f32 to "1.729e+30"
-    converts 1.729e-3_f32 to "0.001729"
    converts 1.729e-3_f32 to "0.001729"
-    converts 1.729e25_f32 to "1.729e+25"
    converts 1.729e25_f32 to "1.729e+25"
-    converts 1.729e-39_f32 to "1.729e-39"
    converts 1.729e-39_f32 to "1.729e-39"
-    converts 1.729e37_f32 to "1.729e+37"
    converts 1.729e37_f32 to "1.729e+37"
-    converts 1.729e-38_f32 to "1.729e-38"
    converts 1.729e-38_f32 to "1.729e-38"
-    converts 1.729e38_f32 to "1.729e+38"
    converts 1.729e38_f32 to "1.729e+38"
-    converts 1.729e-14_f32 to "1.729e-14"
    converts 1.729e-14_f32 to "1.729e-14"
-    converts 1.729e+13_f32 to "17290000000000.0"
    converts 1.729e+13_f32 to "17290000000000.0"
-    converts 1.729e+6_f32 to "1729000.0"
    converts 1.729e+6_f32 to "1729000.0"
-    converts 1.729e-12_f32 to "1.729e-12"
    converts 1.729e-12_f32 to "1.729e-12"
-    converts 1.729e-21_f32 to "1.729e-21"
    converts 1.729e-21_f32 to "1.729e-21"
-    converts 1.729e-2_f32 to "0.01729"
    converts 1.729e-2_f32 to "0.01729"
-    converts 1.729e16_f32 to "1.729e+16"
    converts 1.729e16_f32 to "1.729e+16"
-    converts 1.729e22_f32 to "1.729e+22"
    converts 1.729e22_f32 to "1.729e+22"
-    converts 1.729e+4_f32 to "17290.0"
    converts 1.729e+4_f32 to "17290.0"
-    converts 1.729e-1_f32 to "0.1729"
    converts 1.729e-1_f32 to "0.1729"
-    converts 1.729e+11_f32 to "172900000000.0"
    converts 1.729e+11_f32 to "172900000000.0"
-    converts 1.729e-42_f32 to "1.729e-42"
    converts 1.729e-42_f32 to "1.729e-42"
-    converts 1.729e-8_f32 to "1.729e-8"
    converts 1.729e-8_f32 to "1.729e-8"
-    converts 1.729e-25_f32 to "1.729e-25"
    converts 1.729e-25_f32 to "1.729e-25"
-    converts 1.729e-11_f32 to "1.729e-11"
    converts 1.729e-11_f32 to "1.729e-11"
-    converts 1.729e35_f32 to "1.729e+35"
    converts 1.729e35_f32 to "1.729e+35"
-    converts 1.729e-9_f32 to "1.729e-9"
    converts 1.729e-9_f32 to "1.729e-9"
-    converts 1.729e-30_f32 to "1.729e-30"
    converts 1.729e-30_f32 to "1.729e-30"
-    converts 1.729e-4_f32 to "0.0001729"
    converts 1.729e-4_f32 to "0.0001729"
-    converts 1.729e+8_f32 to "172900000.0"
    converts 1.729e+8_f32 to "172900000.0"
-    converts 1.729e27_f32 to "1.729e+27"
    converts 1.729e27_f32 to "1.729e+27"
-    converts 1.729e34_f32 to "1.729e+34"
    converts 1.729e34_f32 to "1.729e+34"
-    converts 1.729e-16_f32 to "1.729e-16"
    converts 1.729e-16_f32 to "1.729e-16"
-    converts 1.729e+7_f32 to "17290000.0"
    converts 1.729e+7_f32 to "17290000.0"
-    converts 1.729e-18_f32 to "1.729e-18"
    converts 1.729e-18_f32 to "1.729e-18"
-  converts 100000.0_f32 to "100000.0"
  converts 100000.0_f32 to "100000.0"
-  Grisu failures
-    converts 85_f32 / 512_f32 to "0.16601562"
    converts 85_f32 / 512_f32 to "0.16601562"
-  converts 1000100000000000.0_f32 to "1.0001e+15"
  converts 1000100000000000.0_f32 to "1.0001e+15"
-Float32
-  #to_hexfloat
-    exponents
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    corner cases
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    special cases
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    hexits
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    trimming
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-  .parse_hexfloat
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    special cases
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    values close to MIN_POSITIVE and MAX
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    invalid hexfloats
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    values close to zero
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-Compress::Zip
-  writes entry
  writes entry
-  adds a directory
  adds a directory
-  writes entry uncompressed
  writes entry uncompressed
-  writes string
  writes string
-  writes bytes
  writes bytes
-  writes io
  writes io
-  writes file
  writes file
-  writes and reads to memory
  writes and reads to memory
-  writes entry uncompressed and reads with Compress::Zip::File
  writes entry uncompressed and reads with Compress::Zip::File
-YAML::Nodes::Builder
-  #alias
-    as a scalar value
-      writes correctly
      writes correctly
-    within a mapping
-      writes correctly
      writes correctly
-  #merge
-    within a mapping
-      writes correctly
      writes correctly
-levenshtein
-  assert
  assert
-  assert
  assert
-  assert
  assert
-  assert
  assert
-  finds with finder
  finds with finder
-  assert
  assert
-  assert
  assert
-  assert
  assert
-  assert
  assert
-  finds with finder and other values
  finds with finder and other values
-  assert
  assert
-  assert
  assert
-  assert
  assert
-  assert
  assert
-  assert
  assert
-  assert
  assert
-  assert
  assert
-  assert
  assert
-BigDecimal
-  exponentiates
  exponentiates
-  raises if creating from infinity
  raises if creating from infinity
-  handles modulus correctly
  handles modulus correctly
-  performs arithmetic with bigdecimals
  performs arithmetic with bigdecimals
-  raises if creating from NaN
  raises if creating from NaN
-  initializes from valid input
  initializes from valid input
-  #inspect
-    assert
    assert
-  #trunc
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  #<=>
-    compares against NaNs
    compares against NaNs
-  converts to other number types
  converts to other number types
-  hashes
  hashes
-  raises InvalidBigDecimalException when initializing from invalid input
  raises InvalidBigDecimalException when initializing from invalid input
-  is comparable with other types
  is comparable with other types
-  #ceil
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  #round
-    rounding modes
-      to_negative
      to_negative
-      ties_away
      ties_away
-      ties_even
      ties_even
-      default (=ties_even)
      default (=ties_even)
-      to_positive
      to_positive
-      to_zero
      to_zero
-    with digits
-      ties_away
      ties_away
-      ties_even
      ties_even
-      to_positive
      to_positive
-      to_zero
      to_zero
-      to_negative
      to_negative
-    #integer?
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-  can be converted from scientific notation
  can be converted from scientific notation
-  can be converted from other types
  can be converted from other types
-  #floor
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  can normalize quotient
  can normalize quotient
-  keeps precision
  keeps precision
-  converts to string
  converts to string
-  exponentiates with negative powers
  exponentiates with negative powers
-  upkeeps hashing invariant
  upkeeps hashing invariant
-  performs arithmetic with other number types
  performs arithmetic with other number types
-Atomic::Flag
-  #test_and_set
  #test_and_set
-  #clear
  #clear
-__modti3
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-UNIXServer
-  .new
-    raises when socket file already exists
    raises when socket file already exists
-    creates the socket file
    creates the socket file
-    won't delete existing file on bind failure
    won't delete existing file on bind failure
-    deletes socket file on close
    deletes socket file on close
-    raises when path is too long
    raises when path is too long
-  datagrams
-    can send and receive datagrams
    can send and receive datagrams
-  accept
-    returns the client UNIXSocket
    returns the client UNIXSocket
-    raises when server is closed
    raises when server is closed
-  accept?
-    returns nil when server is closed
    returns nil when server is closed
-    returns the client UNIXSocket
    returns the client UNIXSocket
-    sets close on exec flag
    sets close on exec flag
-OAuth::RequestToken
-  creates from response
  creates from response
-  equality
-    checks secret
    checks secret
-    checks token
    checks token
-YAML::PullParser
-  reads a sequence with an anchor
  reads a sequence with an anchor
-  reads an empty document
  reads an empty document
-  reads a mapping with an anchor
  reads a mapping with an anchor
-  parses alias
  parses alias
-  skip
-    document
    document
-    stream
    stream
-    sequence
    sequence
-    alias
    alias
-    scalar
    scalar
-    skips event in other cases
    skips event in other cases
-    mapping
    mapping
-  reads empty stream
  reads empty stream
-  reads a scalar having a null character
  reads a scalar having a null character
-  reads a scalar with an anchor
  reads a scalar with an anchor
-  reads a mapping
  reads a mapping
-  reads a sequence
  reads a sequence
-  reads a scalar
  reads a scalar
-  raises exception at correct location
  raises exception at correct location
-CSV
-  build
-    builds with commas
    builds with commas
-    builds with quoting
    builds with quoting
-    builds two rows
    builds two rows
-    builds with commas
    builds with commas
-    builds row from enumerable
    builds row from enumerable
-    concats splat to row
    concats splat to row
-    concats enumerable to row
    concats enumerable to row
-    builds with quotes
    builds with quotes
-    builds with inside quoted chars and symbols
    builds with inside quoted chars and symbols
-    skips inside row
    skips inside row
-    builds with custom separator
    builds with custom separator
-    builds row from splat
    builds row from splat
-    builds with numbers
    builds with numbers
-    builds with custom quote character
    builds with custom quote character
-Crystal::Digest::SHA1
-  does hexdigest for "abc"
  does hexdigest for "abc"
-  does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+    with message
    with message
+    does not copy its receiver when it is a value (#13263)
    does not copy its receiver when it is a value (#13263)
+    removes Nil type
    removes Nil type
+  getter?
+    uses getter? with block
    uses getter? with block
+    uses getter? with default value
    uses getter? with default value
+    uses getter?
    uses getter?
+    uses getter? with type declaration and default value
    uses getter? with type declaration and default value
+    uses getter? with type declaration
    uses getter? with type declaration
+    uses getter? with type declaration and block
    uses getter? with type declaration and block
+  applies annotation to lazy property (#9139)
  applies annotation to lazy property (#9139)
+  #unsafe_as
  #unsafe_as
+  property
+    defines lazy property with block returning false
    defines lazy property with block returning false
+    uses property with type declaration and default value
    uses property with type declaration and default value
+    uses property
    uses property
+    uses property with type declaration
    uses property with type declaration
+    uses property with default value
    uses property with default value
+    defines lazy property with block
    defines lazy property with block
+  getter!
+    uses getter! with type declaration
    uses getter! with type declaration
+    uses getter!
    uses getter!
+  #in?
+    works with other objects implementing #includes?
    works with other objects implementing #includes?
+    works with Enumerable-s
    works with Enumerable-s
+    works with splatted arguments
    works with splatted arguments
+  setter
+    uses setter with type declaration and default value
    uses setter with type declaration and default value
+    uses setter
    uses setter
+    uses setter with default value
    uses setter with default value
+    uses setter with type declaration
    uses setter with type declaration
+  property?
+    uses property? with block
    uses property? with block
+    uses property? with type declaration
    uses property? with type declaration
+    uses property?
    uses property?
+    uses property? with type declaration and default value
    uses property? with type declaration and default value
+    uses property? with type declaration and block
    uses property? with type declaration and block
+    uses property? with default value
    uses property? with default value
+.from_www_form
+  Bool
+    any other value
    any other value
+    a truthy value
    a truthy value
+    a falsey value
    a falsey value
+  Union(*T)
+    invalid
    invalid
+    valid
    valid
+  String
+    empty value
    empty value
+    with missing key
    with missing key
+    scalar string
    scalar string
+    with alternate casing
    with alternate casing
+    with key
    with key
+  Enum
+    invalid value
    invalid value
+    valid value
    valid value
+  Nil
+    invalid value
    invalid value
+    valid values
    valid values
+  Array(T)
  Array(T)
+  Number
+    Float
+      valid numbers
      valid numbers
+      empty value
      empty value
+      with whitespace
      with whitespace
+    Int
+      empty value
      empty value
+      valid numbers
      valid numbers
+      with whitespace
      with whitespace
+  Time
+    valid value
    valid value
+    invalid value
    invalid value
+Compress::Deflate::Reader
+  .open
+    yields itself to block
    yields itself to block
+  should rewind
  should rewind
+  should read byte by byte (#4192)
  should read byte by byte (#4192)
+IO::Digest
+  calculates digest from multiple reads
  calculates digest from multiple reads
+  calculates digest from multiple writes
  calculates digest from multiple writes
+  calculates digest from writing a string
  calculates digest from writing a string
+  does not calculate digest on write
  does not calculate digest on write
+  calculates digest from writing
  calculates digest from writing
+  can be created with ongoing digest
  can be created with ongoing digest
+  does not calculate digest on read
  does not calculate digest on read
+  calculates digest from reading
  calculates digest from reading
+MIME::Multipart
+  .parse
+    parses multipart messages
    parses multipart messages
+    parses multipart messages from HTTP client responses
    parses multipart messages from HTTP client responses
+  .parse
+    parses multipart messages
    parses multipart messages
+  .parse_boundary
+    parses unquoted boundaries
    parses unquoted boundaries
+    parses quoted boundaries
    parses quoted boundaries
+Digest::SHA512
+  does #hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does #hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+  does base64digest for ""
  does base64digest for ""
+  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+  does #hexdigest for "a"
  does #hexdigest for "a"
+  can't call #final more than once
  can't call #final more than once
+  resets
  resets
+  resets
  resets
+  does digest for ""
  does digest for ""
+  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
+  does digest for "abc" in a block
  does digest for "abc" in a block
+  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
+  does .hexdigest for ""
  does .hexdigest for ""
+  does .hexdigest for "The quick brown fox jumps over the lazy dog"
  does .hexdigest for "The quick brown fox jumps over the lazy dog"
+  can't call #final more than once
  can't call #final more than once
+  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
+  does digest for "a" in a block
  does digest for "a" in a block
+  digest with file content
  digest with file content
+  does base64digest for "The quick brown fox jumps over the lazy dog"
  does base64digest for "The quick brown fox jumps over the lazy dog"
+  returns the digest_size
  returns the digest_size
+  does .hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
  does .hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
+  does digest for "The quick brown fox jumps over the lazy dog" in a block
  does digest for "The quick brown fox jumps over the lazy dog" in a block
+  does base64digest for "fooø"
  does base64digest for "fooø"
+  does .hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does .hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+  does digest for "" in a block
  does digest for "" in a block
+  does base64digest for "abc"
  does base64digest for "abc"
+  does digest for "fooø" in a block
  does digest for "fooø" in a block
+  resets
  resets
+  can't call #final more than once
  can't call #final more than once
+  does digest for "a"
  does digest for "a"
+  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
+  can't call #final more than once
  can't call #final more than once
+  does base64digest for "a"
  does base64digest for "a"
+  resets
  resets
+  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+  does #hexdigest for "The quick brown fox jumps over the lazy dog"
  does #hexdigest for "The quick brown fox jumps over the lazy dog"
+  does #hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
  does #hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
+  does #hexdigest for "fooø"
  does #hexdigest for "fooø"
+  can't call #final more than once
  can't call #final more than once
+  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
+  resets
  resets
   can't call #final more than once
  can't call #final more than once
+  does digest for "abc"
  does digest for "abc"
+  can't call #final more than once
  can't call #final more than once
+  does #hexdigest for "abc"
  does #hexdigest for "abc"
+  #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
+  does .hexdigest for "abc"
  does .hexdigest for "abc"
+  context are independent
  context are independent
+  does .hexdigest for "fooø"
  does .hexdigest for "fooø"
+  resets
  resets
+  does digest for "fooø"
  does digest for "fooø"
+  does digest for "The quick brown fox jumps over the lazy dog"
  does digest for "The quick brown fox jumps over the lazy dog"
+  .dup
+    preserves type
    preserves type
+    leads to deterministic updates
    leads to deterministic updates
+    leads to not sharing state
    leads to not sharing state
+    preserves value
    preserves value
+  does #hexdigest for ""
  does #hexdigest for ""
+  resets
  resets
+  does .hexdigest for "a"
  does .hexdigest for "a"
+Tuple
+  "#reverse_each" yielding
  "#reverse_each" yielding
+  "#reverse_each" iterator
  "#reverse_each" iterator
+  does clone
  does clone
+  does Tuple.new, with type vars
  does Tuple.new, with type vars
+  gets first element
  gets first element
+  gets last element
  gets last element
+  .[] with non-literal index
+    gets tuple metaclass element
    gets tuple metaclass element
+    raises index out of bounds
    raises index out of bounds
+  values_at
+    works with mixed types
    works with mixed types
+    raises when passed an invalid index
    raises when passed an invalid index
+    returns the given indexes
    returns the given indexes
+  does reverse
  does reverse
+  does map_with_index, with offset
  does map_with_index, with offset
+  gets first? element
  gets first? element
+  does dup
  does dup
+  does <=> with the same beginning and different size
  does <=> with the same beginning and different size
+  does comparison
  does comparison
+  does compare with different sizes
  does compare with different sizes
+  "#each" yielding
  "#each" yielding
+  does == with another type
  does == with another type
+  .[]? with non-literal index
+    gets tuple metaclass element or nil
    gets tuple metaclass element or nil
+  #[] with non-literal index
+    raises index out of bounds
    raises index out of bounds
+    gets tuple element
    gets tuple element
+  does at
  does at
+  #to_static_array
  #to_static_array
+  does ==
  does ==
+  does Tuple.new, without type vars
  does Tuple.new, without type vars
+  does Tuple.from
  does Tuple.from
+  does ===
  does ===
+  does to_s
  does to_s
+  does map_with_index
  does map_with_index
+  does each
  does each
+  does Tuple#from
  does Tuple#from
+  does map
  does map
+  clones empty tuple
  clones empty tuple
+  checks empty?
  checks empty?
+  does types
  does types
+  does <=> for equality
  does <=> for equality
+  does to_a
  does to_a
+  does == with different types but same size
  does == with different types but same size
+  #[]? with non-literal index
+    gets tuple element or nil
    gets tuple element or nil
+  does size
  does size
+  gets last? element
  gets last? element
+  "#each" iterator
  "#each" iterator
+  does compare
  does compare
+IO::Memory
+  creates from string
  creates from string
+  does gets with char and limit
  does gets with char and limit
+  can be converted to slice
  can be converted to slice
+  creates from slice
  creates from slice
+  raises when reading at offset outside of bounds
  raises when reading at offset outside of bounds
+  raises if clearing when closed
  raises if clearing when closed
+  does gets with limit
  does gets with limit
+  encoding
+    decode
+      gets with chomp = false
      gets with chomp = false
+      gets
      gets
+      gets_to_end
      gets_to_end
+      reads char
      reads char
+  allocates for > 1 GB
  allocates for > 1 GB
+  raises if seek set is negative
  raises if seek set is negative
+  has a size
  has a size
+  raises if seek current leads to negative value
  raises if seek current leads to negative value
+  can seek past the end
  can seek past the end
+  can seek set
  can seek set
+  raises if capacity too big
  raises if capacity too big
+  reads byte
  reads byte
+  can seek current
  can seek current
+  writes past end
  writes past end
+  writes past end with write_byte
  writes past end with write_byte
+  can tell
  can tell
+  skips
  skips
+  reads more than available (#1229)
  reads more than available (#1229)
+  consumes with getb_to_end
  consumes with getb_to_end
+  write raises EOFError
  write raises EOFError
+  #to_s
+    appends to another buffer
    appends to another buffer
+    appends to itself
    appends to itself
+    encoding
+      returns String
      returns String
+      writes to IO
      writes to IO
+  writes and reads
  writes and reads
+  peeks
  peeks
+  skips_to_end
  skips_to_end
+  raises if negative capacity
  raises if negative capacity
+  raises if invoking gets with negative limit
  raises if invoking gets with negative limit
+  reads at offset
  reads at offset
+  writes after reading
  writes after reading
+  gets with char as delimiter
  gets with char as delimiter
+  write single byte
  write single byte
+  writes big
  writes big
+  creates from slice, non-writeable
  creates from slice, non-writeable
+  reads single line content
  reads single line content
+  seeks with pos and pos=
  seeks with pos and pos=
+  reads each line with chomp = false
  reads each line with chomp = false
+  clears
  clears
+  can seek from the end
  can seek from the end
+  reads each line
  reads each line
+  writes
  writes
+  does gets with char and limit without off-by-one
  does gets with char and limit without off-by-one
+  can be closed
  can be closed
+  raises if reading when closed
  raises if reading when closed
+  peek readonly
  peek readonly
+  consumes with gets_to_end
  consumes with gets_to_end
+  creates from read-only slice
  creates from read-only slice
+IO::Stapled
+  #peek delegates to reader
  #peek delegates to reader
+  .pipe
+    creates a bidirectional pipe
    creates a bidirectional pipe
+    with block creates a bidirectional pipe
    with block creates a bidirectional pipe
+  #sync_close?
  #sync_close?
+  #skip_to_end delegates to reader
  #skip_to_end delegates to reader
+  #close
+    does not close underlying IOs
    does not close underlying IOs
+    stops access to underlying IOs
    stops access to underlying IOs
+    closes underlying IOs when sync_close is true
    closes underlying IOs when sync_close is true
+  combines two IOs
  combines two IOs
+  loops back
  loops back
+  #skip delegates to reader
  #skip delegates to reader
+Digest::SHA1
+  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
+  does digest for "" in a block
  does digest for "" in a block
   resets
  resets
-  returns the digest_size
  returns the digest_size
+  resets
  resets
+  does digest for ""
  does digest for ""
+  does digest for "The quick brown fox jumps over the lazy dog" in a block
  does digest for "The quick brown fox jumps over the lazy dog" in a block
+  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
+  does digest for "abc" in a block
  does digest for "abc" in a block
+  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
+  does base64digest for "The quick brown fox jumps over the lazy dog"
  does base64digest for "The quick brown fox jumps over the lazy dog"
+  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
   can't call #final more than once
  can't call #final more than once
+  does base64digest for "a"
  does base64digest for "a"
+  does digest for "abc"
  does digest for "abc"
   #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
-  does base64digest for "The quick brown fox jumps over the lazy dog"
  does base64digest for "The quick brown fox jumps over the lazy dog"
+  does base64digest for "abc"
  does base64digest for "abc"
+  does digest for "The quick brown fox jumps over the lazy dog"
  does digest for "The quick brown fox jumps over the lazy dog"
+  does digest for "a"
  does digest for "a"
+  context are independent
  context are independent
+  does hexdigest for "abc"
  does hexdigest for "abc"
+  returns the digest_size
  returns the digest_size
+  can't call #final more than once
  can't call #final more than once
+  can't call #final more than once
  can't call #final more than once
+  does digest for "fooø"
  does digest for "fooø"
   resets
  resets
-  digest with file content
  digest with file content
   can't call #final more than once
  can't call #final more than once
-  does base64digest for "abc"
  does base64digest for "abc"
-  does digest for "abc"
  does digest for "abc"
   .dup
-    leads to not sharing state
    leads to not sharing state
     preserves value
    preserves value
     preserves type
    preserves type
     leads to deterministic updates
    leads to deterministic updates
-  can't call #final more than once
  can't call #final more than once
+    leads to not sharing state
    leads to not sharing state
+  resets
  resets
+  does hexdigest for "fooø"
  does hexdigest for "fooø"
+  does hexdigest for "a"
  does hexdigest for "a"
+  digest with file content
  digest with file content
+  resets
  resets
+  does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+  resets
  resets
+  does digest for "a" in a block
  does digest for "a" in a block
+  does hexdigest for "The quick brown fox jumps over the lazy dog"
  does hexdigest for "The quick brown fox jumps over the lazy dog"
+  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
   does digest for "fooø" in a block
  does digest for "fooø" in a block
-  does base64digest for ""
  does base64digest for ""
+  does hexdigest for ""
  does hexdigest for ""
   can't call #final more than once
  can't call #final more than once
-  does digest for "a" in a block
  does digest for "a" in a block
-  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
-  does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
  does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
-  does digest for "The quick brown fox jumps over the lazy dog" in a block
  does digest for "The quick brown fox jumps over the lazy dog" in a block
-  does hexdigest for "a"
  does hexdigest for "a"
   does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
   can't call #final more than once
  can't call #final more than once
-  does digest for "a"
  does digest for "a"
-  resets
  resets
   resets
  resets
   does base64digest for "fooø"
  does base64digest for "fooø"
-  does digest for "fooø"
  does digest for "fooø"
-  resets
  resets
-  context are independent
  context are independent
-  does hexdigest for ""
  does hexdigest for ""
+  does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
  does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
+  does base64digest for ""
  does base64digest for ""
   can't call #final more than once
  can't call #final more than once
-  does base64digest for "a"
  does base64digest for "a"
-  does digest for "The quick brown fox jumps over the lazy dog"
  does digest for "The quick brown fox jumps over the lazy dog"
-  resets
  resets
-  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
-  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
-  does digest for ""
  does digest for ""
-  resets
  resets
-  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
-  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
-  does digest for "" in a block
  does digest for "" in a block
-  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
-  does hexdigest for "fooø"
  does hexdigest for "fooø"
-  does digest for "abc" in a block
  does digest for "abc" in a block
-  does hexdigest for "The quick brown fox jumps over the lazy dog"
  does hexdigest for "The quick brown fox jumps over the lazy dog"
-IO::Stapled
-  #close
-    does not close underlying IOs
    does not close underlying IOs
-    closes underlying IOs when sync_close is true
    closes underlying IOs when sync_close is true
-    stops access to underlying IOs
    stops access to underlying IOs
-  .pipe
-    with block creates a bidirectional pipe
    with block creates a bidirectional pipe
-    creates a bidirectional pipe
    creates a bidirectional pipe
-  #skip delegates to reader
  #skip delegates to reader
-  #sync_close?
  #sync_close?
-  loops back
  loops back
-  #skip_to_end delegates to reader
  #skip_to_end delegates to reader
-  #peek delegates to reader
  #peek delegates to reader
-  combines two IOs
  combines two IOs
-XML::Builder
-  errors on invalid element names
  errors on invalid element names
-  #cdata
-    writes cdata with block
    writes cdata with block
-    escapes ]]> sequences
    escapes ]]> sequences
-    writes cdata
    writes cdata
-  writes element with attributes as hash
  writes element with attributes as hash
-  writes element with namespace
  writes element with namespace
-  writes element with attributes as named tuple
  writes element with attributes as named tuple
-  errors on invalid element name with prefix
  errors on invalid element name with prefix
-  errors on invalid element name with prefix and namespace
  errors on invalid element name with prefix and namespace
-  writes namespace
  writes namespace
-  writes attribute with namespace
  writes attribute with namespace
-  writes comment
  writes comment
-  sets indent with count
  sets indent with count
-  writes to IO
  writes to IO
-  writes document
  writes document
-  writes element with namespace
  writes element with namespace
-  errors on null byte
  errors on null byte
-  sets quote char
  sets quote char
-  writes to string
  writes to string
-  writes element with prefix
  writes element with prefix
-  writes attribute
  writes attribute
-  writes element with namespace, without block
  writes element with namespace, without block
-  writes element with attributes as hash, nesting
  writes element with attributes as hash, nesting
-  writes element
  writes element
-  sets indent with string
  sets indent with string
-  writes DTD with block
  writes DTD with block
-  writes nested element
  writes nested element
-  writes text
  writes text
-  writes comment with block
  writes comment with block
-  writes DTD
  writes DTD
-  writes element with attributes as named tuple, nesting
  writes element with attributes as named tuple, nesting
-OAuth::AuthorizationHeader
-  builds
  builds
-Log::TestFormatter
-  formats
  formats
-String::Grapheme
-  #inspect
  #inspect
-  #==
  #==
-  .new
  .new
-  .break?
  .break?
-  #bytesize
  #bytesize
-  #to_s
  #to_s
-  #size
  #size
-at_exit
-  changes final exit code when an handler raises an error
  changes final exit code when an handler raises an error
-  runs handlers on explicit program ending
  runs handlers on explicit program ending
-  runs all handlers maximum once
  runs all handlers maximum once
-  shows unhandled exceptions after at_exit handlers
  shows unhandled exceptions after at_exit handlers
-  allows handlers to change the exit code with explicit `exit` call (2)
  allows handlers to change the exit code with explicit `exit` call (2)
-  runs handlers on normal program ending
  runs handlers on normal program ending
-  prints unhandled exception with cause
  prints unhandled exception with cause
-  can get unhandled exception in at_exit handler
  can get unhandled exception in at_exit handler
-  allows at_exit inside at_exit
  allows at_exit inside at_exit
-  runs handlers in reverse order
  runs handlers in reverse order
-  allows handlers to change the exit code with explicit `exit` call
  allows handlers to change the exit code with explicit `exit` call
-MIME
-  .from_extension
  .from_extension
-  .init
-    skips loading defaults
    skips loading defaults
-    loads defaults
    loads defaults
-    loads file
    loads file
-  .from_filename?
-    Path
    Path
-    String
    String
-  .from_extension?
  .from_extension?
-  .load_mime_database
  .load_mime_database
-  .from_filename
-    Path
    Path
-    String
    String
-  .extensions
-    recognizes overridden types
    recognizes overridden types
-    lists extensions
    lists extensions
-    returns empty set
    returns empty set
-  .register
-    fails for invalid extension
    fails for invalid extension
-    registers new type
    registers new type
-  parses media types
  parses media types
-HTTP::Cookies
-  allows to iterate over the cookies
  allows to iterate over the cookies
-  allows retrieving the size of the cookies collection
  allows retrieving the size of the cookies collection
-  allows adding cookies and retrieving
  allows adding cookies and retrieving
-  .from_server_headers
-    parses Set-Cookie header
    parses Set-Cookie header
-    does not accept Cookie header
    does not accept Cookie header
-  adding response headers
-    uses encode_www_form on Set-Cookie value
    uses encode_www_form on Set-Cookie value
-    sets one Set-Cookie header per cookie
    sets one Set-Cookie header per cookie
-    overwrites all pre-existing Set-Cookie headers
    overwrites all pre-existing Set-Cookie headers
-    when no cookies are set
-      does not set a Set-Cookie header
      does not set a Set-Cookie header
-  allows deleting a particular cookie by key
  allows deleting a particular cookie by key
-  disallows adding inconsistent state
  disallows adding inconsistent state
-  adding request headers
-    use encode_www_form to write the cookie's value
    use encode_www_form to write the cookie's value
-    merges multiple cookies into one Cookie header
    merges multiple cookies into one Cookie header
-    overwrites a pre-existing Cookie header
    overwrites a pre-existing Cookie header
-    when no cookies are set
-      does not set a Cookie header
      does not set a Cookie header
-  .from_client_headers
-    parses Cookie header
    parses Cookie header
-    does not accept Set-Cookie header
    does not accept Set-Cookie header
-  allows clearing the cookies collection
  allows clearing the cookies collection
-  allows transform to hash
  allows transform to hash
-HTTP::Client
-  will not retry when closed (block) (#12464)
  will not retry when closed (block) (#12464)
-  will not retry when closed (non-block) (#12464)
  will not retry when closed (non-block) (#12464)
-  tests connect_timeout
  tests connect_timeout
-  retry does not affect implicit compression (#11354)
  retry does not affect implicit compression (#11354)
-  ensures closing the response when breaking out of block
  ensures closing the response when breaking out of block
-  sends the host header ipv6 with brackets
  sends the host header ipv6 with brackets
-  from String
-    raises when not a host
    raises when not a host
-  sends a 'connection: close' header on one-shot request with block
  sends a 'connection: close' header on one-shot request with block
-  raises if URI is missing host
  raises if URI is missing host
-  tests read_timeout
  tests read_timeout
-  will not retry if IO::Error in request handling
  will not retry if IO::Error in request handling
-  logging
-    emit logs with block
    emit logs with block
-    emit logs
    emit logs
-  from URI
-    allows for specified ports
    allows for specified ports
-    detects HTTPS
    detects HTTPS
-    doesn't take context for HTTP
    doesn't take context for HTTP
-    raises error if URI is missing host
    raises error if URI is missing host
-    raises error if not http schema
    raises error if not http schema
-    has sane defaults
    has sane defaults
-    yields to a block
    yields to a block
-    keeps context
    keeps context
-  tests empty Content-Type
  tests empty Content-Type
-  cannot reconnect when initialized with IO
  cannot reconnect when initialized with IO
-  can be subclassed
  can be subclassed
-  will retry once on connection error
  will retry once on connection error
-  from a host
-    yields to a block
    yields to a block
-  will retry a broken socket
  will retry a broken socket
-  sends a 'connection: close' header on one-shot request
  sends a 'connection: close' header on one-shot request
-  works with IO
  works with IO
-  raises if URI is missing scheme
  raises if URI is missing scheme
-  can specify host and port when initialized with IO
  can specify host and port when initialized with IO
-  doesn't read the body if request was HEAD
  doesn't read the body if request was HEAD
-  tests write_timeout
  tests write_timeout
-  #set_defaults
-    sets default Host header
    sets default Host header
-Process
-  .exec
-    gets error from exec
    gets error from exec
-    redirects STDIN and STDOUT to files
    redirects STDIN and STDOUT to files
-  #wait
-    successful exit code
    successful exit code
-    unsuccessful exit code
    unsuccessful exit code
-  .chroot
-    raises when unprivileged
    raises when unprivileged
-  .pgid
  .pgid
-  .on_terminate
-    compiles
    compiles
-  .fork
-    executes the new process with exec
    executes the new process with exec
-  #terminate
  #terminate
-  .on_interrupt
-    compiles
    compiles
-  .run
-    receives arguments in array
    receives arguments in array
-    does not run shell code in the argument list
    does not run shell code in the argument list
-    redirects output to /dev/null
    redirects output to /dev/null
-    allows passing huge argument lists to a shell
    allows passing huge argument lists to a shell
-    disallows passing arguments to nowhere
    disallows passing arguments to nowhere
-    forwards non-blocking file
    forwards non-blocking file
-    looks up programs in the $PATH with a shell
    looks up programs in the $PATH with a shell
-    forwards closed io
    forwards closed io
-    closes ios after block
    closes ios after block
-    runs true in block
    runs true in block
-    gets output
    gets output
-    sends input in IO
    sends input in IO
-    waits for the process
    waits for the process
-    does not execute batch files
-      .CmD
      .CmD
-      .Bat
      .Bat
-      .bat
      .bat
-      .BAT
      .BAT
-      .cmD
      .cmD
-      .cmd
      .cmd
-    sends output to IO
    sends output to IO
-    receives arguments in tuple
    receives arguments in tuple
-    can link processes together
    can link processes together
-    environ
-      overrides existing environment variable
      overrides existing environment variable
-      clears and sets an environment variable
      clears and sets an environment variable
-      clears the environment
      clears the environment
-      preserves existing environment variable
      preserves existing environment variable
-      sets an environment variable
      sets an environment variable
-      sets an empty environment variable
      sets an empty environment variable
-      deletes existing environment variable
      deletes existing environment variable
-      preserves and sets an environment variable
      preserves and sets an environment variable
-    controls process in block
    controls process in block
-    sets working directory with string
    sets working directory with string
-    sets working directory with path
    sets working directory with path
-    sends error to IO
    sends error to IO
-  .new
-    raises if command is not executable
    raises if command is not executable
-    raises if command doesn't exist
    raises if command doesn't exist
-    raises if command is not executable
    raises if command is not executable
-    accepts nilable string for `chdir` (#13767)
    accepts nilable string for `chdir` (#13767)
-    raises if command could not be executed
    raises if command could not be executed
-  .exists?
  .exists?
-  #signal(Signal::KILL)
-    kills many process
    kills many process
-    kills a process
    kills a process
-Process
-  .quote_posix
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    join
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
+StaticArray
+  reverse
  reverse
+  allows using negative indices
  allows using negative indices
+  #fill
+    replaces values in a subrange
    replaces values in a subrange
+  does map!
  does map!
+  does to_s
  does to_s
+  updates value
  updates value
+  shuffles with a seed
  shuffles with a seed
+  does map_with_index, with offset
  does map_with_index, with offset
+  creates with new
  creates with new
+  <=>
+    correctly compares two static arrays
    correctly compares two static arrays
+  rotate!
     assert
    assert
     assert
    assert
-  .parse_arguments
-    uses the native platform rules
    uses the native platform rules
-  .executable_path
-    searches executable
    searches executable
-  .parse_arguments_windows
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-    raises an error if double quote is unclosed
    raises an error if double quote is unclosed
     assert
    assert
     assert
    assert
     assert
    assert
@@ -19924,201 +19179,557 @@
     assert
    assert
     assert
    assert
     assert
    assert
+  does map_with_index
  does map_with_index
+  ==
+    compares empty
    compares empty
+    compares other
    compares other
+    compares elements
    compares elements
+  creates with new and value
  creates with new and value
+  raises index out of bounds on write
  raises index out of bounds on write
+  unstable_sort_by
+    sorts by
    sorts by
+  "#each" yielding
  "#each" yielding
+  #unstable_sort!
+    sort! with a block
    sort! with a block
+    sort! without block
    sort! without block
+  raises index out of bounds on read
  raises index out of bounds on read
+  clones
  clones
+  creates with new and block
  creates with new and block
+  does map_with_index!, with offset
  does map_with_index!, with offset
+  "#each_index" yielding
  "#each_index" yielding
+  #unstable_sort
+    sort without block
    sort without block
+    sort with a block
    sort with a block
+  values_at
+    returns the given indexes
    returns the given indexes
+    raises when passed an invalid index
    raises when passed an invalid index
+  does map_with_index!
  does map_with_index!
+  "#each" iterator
  "#each" iterator
+  #sort
+    sort with a block
    sort with a block
+    sort without block
    sort without block
+  "#each_index" iterator
  "#each_index" iterator
+  sort_by
+    sorts by
    sorts by
+  "#reverse_each" iterator
  "#reverse_each" iterator
+  shuffles
  shuffles
+  does map
  does map
+  unstable_sort_by!
+    calls given block exactly once for each element
    calls given block exactly once for each element
+    sorts by!
    sorts by!
+  sort_by!
+    calls given block exactly once for each element
    calls given block exactly once for each element
+    sorts by!
    sorts by!
+  "#reverse_each" yielding
  "#reverse_each" yielding
+  #sort!
+    sort! without block
    sort! without block
+    sort! with a block
    sort! with a block
+String
+  .char_bytesize_at
  .char_bytesize_at
+YAML::Nodes::Builder
+  #alias
+    as a scalar value
+      writes correctly
      writes correctly
+    within a mapping
+      writes correctly
      writes correctly
+  #merge
+    within a mapping
+      writes correctly
      writes correctly
+Benchmark::IPS::Job
+  works in general / integration test
  works in general / integration test
+Errno
+  .value
  .value
+  #message
  #message
+Reference
+  clones with def_clone (recursive type)
  clones with def_clone (recursive type)
+  can dup class that inherits abstract class
  can dup class that inherits abstract class
+  should be false when negated
  should be false when negated
+  should not be nil
  should not be nil
+  does inspect
  does inspect
+  does inspect for class
  does inspect for class
+  clones with def_clone
  clones with def_clone
+  pretty_print
  pretty_print
+  calls #finalize on #dup'ed objects
  calls #finalize on #dup'ed objects
+  does to_s for class if virtual
  does to_s for class if virtual
+  dups
  dups
+  compares reference to other reference
  compares reference to other reference
+  returns itself
  returns itself
+  does to_s for class
  does to_s for class
+  does to_s
  does to_s
+HTTP::WebSocketHandler
+  returns not found if the request is not an websocket upgrade
  returns not found if the request is not an websocket upgrade
+  gives upgrade response for websocket upgrade request with 'keep-alive, Upgrade' request
  gives upgrade response for websocket upgrade request with 'keep-alive, Upgrade' request
+  returns upgrade required if Sec-WebSocket-Version is invalid
  returns upgrade required if Sec-WebSocket-Version is invalid
+  returns bad request if Sec-WebSocket-Key is missing
  returns bad request if Sec-WebSocket-Key is missing
+  returns not found if the request Upgrade is invalid
  returns not found if the request Upgrade is invalid
+  gives upgrade response for case-insensitive 'WebSocket' upgrade request
  gives upgrade response for case-insensitive 'WebSocket' upgrade request
+  returns upgrade required if Sec-WebSocket-Version is missing
  returns upgrade required if Sec-WebSocket-Version is missing
+  gives upgrade response for websocket upgrade request with 'Upgrade' request
  gives upgrade response for websocket upgrade request with 'Upgrade' request
+Spec::RootContext
+  #run_filters
+    by pattern
+      on a context
      on a context
+      on an example
      on an example
+    by anti_tags
+      on an example
      on an example
+      on a context
      on a context
+    by tags
+      on a context
      on a context
+      on an example
      on an example
+    by line
+      on a context's end line'
      on a context's end line'
+      on an example's start line
      on an example's start line
+      on an example's end line
      on an example's end line
+      between examples
      between examples
+      on a context's start line'
      on a context's start line'
+      in an example
      in an example
+    by focus
+      on a context
      on a context
+      on an example
      on an example
+    by locations
+      between examples
      between examples
+      on an example's end line
      on an example's end line
+      on a context's end line'
      on a context's end line'
+      on an example's start line
      on an example's start line
+      in an example
      in an example
+      on a context's start line'
      on a context's start line'
+Mutex
+  unchecked
+    can lock and unlock from multiple fibers
    can lock and unlock from multiple fibers
+  locks and unlocks
  locks and unlocks
+  reentrant
+    can be locked many times from the same fiber
    can be locked many times from the same fiber
+    can't be unlocked by another fiber
    can't be unlocked by another fiber
+    raises if unlocks without lock
    raises if unlocks without lock
+  works with multiple threads
  works with multiple threads
+  checked
+    raises if locked recursively
    raises if locked recursively
+    raises if unlocks without lock
    raises if unlocks without lock
+    can't be unlocked by another fiber
    can't be unlocked by another fiber
+Spec matchers
+  should work like describe
+    is true
    is true
+  should be_falsey
+    passes for false
    passes for false
+    passes for nil
    passes for nil
+  pending block is not compiled
+    pending has block with valid syntax, but invalid semantics
    pending has block with valid syntax, but invalid semantics
+  detects a nesting `pending`
  detects a nesting `pending`
+  detects a nesting `it`
  detects a nesting `it`
+  should_not contain
+    does not pass when string does not includes? specified substring
    does not pass when string does not includes? specified substring
+    passes when string does not includes? specified substring
    passes when string does not includes? specified substring
+  should_not be_falsey
+    passes for true
    passes for true
+    passes for some non-nil, non-false value
    passes for some non-nil, non-false value
+  should be_truthy
+    passes for true
    passes for true
+    passes for some non-nil, non-false value
    passes for some non-nil, non-false value
+  should contain
+    works with array
    works with array
+    does not pass when string does not includes? specified substring
    does not pass when string does not includes? specified substring
+    passes when string includes? specified substring
    passes when string includes? specified substring
+    works with set
    works with set
+    works with range
    works with range
+  be_nil
+    passes for nil
    passes for nil
+    does not pass for overwritten `==`
    does not pass for overwritten `==`
+  expect_raises
+    return exception
    return exception
+  should_not be_truthy
+    passes for false
    passes for false
+    passes for nil
    passes for nil
+Array
+  find the index by using binary search
  find the index by using binary search
+  does map
  does map
+  to_s
+    does to_s
    does to_s
+    does with recursive
    does with recursive
+  rejects! with pattern
  rejects! with pattern
+  delete
+    delete not found
    delete not found
+    deletes many
    deletes many
+  shuffle
+    shuffle!
    shuffle!
+    shuffle with random
    shuffle with random
+    shuffle
    shuffle
+    shuffle! with random
    shuffle! with random
+  inspect
     assert
    assert
+  does each while modifying array
  does each while modifying array
+  does map_with_index, with offset
  does map_with_index, with offset
+  "#cycle" yielding
  "#cycle" yielding
+  does reverse! with an odd number of elements
  does reverse! with an odd number of elements
+  []
+    gets on exclusive range
    gets on exclusive range
+    gets on range without begin
    gets on range without begin
+    raises on index out of bounds with range without end
    raises on index out of bounds with range without end
+    gets on positive index
    gets on positive index
+    gets on range with start higher than negative end
    gets on range with start higher than negative end
+    raises on index out of bounds with start and count
    raises on index out of bounds with start and count
+    gets on range without end
    gets on range without end
+    gets on range with start higher than end
    gets on range with start higher than end
+    gets on exclusive range with negative indices
    gets on exclusive range with negative indices
+    gets on inclusive range with negative indices
    gets on inclusive range with negative indices
+    gets with start and count exceeding size
    gets with start and count exceeding size
+    gets 0, 0 on empty array
    gets 0, 0 on empty array
+    raises on negative count
    raises on negative count
+    doesn't exceed limits
    doesn't exceed limits
+    raises on negative count on empty Array
    raises on negative count on empty Array
+    raises on too negative left bound
    raises on too negative left bound
+    gets with start and count
    gets with start and count
+    gets 0 ... 0 on empty array
    gets 0 ... 0 on empty array
+    raises on index out of bounds
    raises on index out of bounds
+    raises on index out of bounds with range
    raises on index out of bounds with range
+    returns empty if at end
    returns empty if at end
+    raises on negative count
    raises on negative count
+    gets on inclusive range
    gets on inclusive range
+    gets on negative index
    gets on negative index
+    gets with negative start
    gets with negative start
+  new
+    creates with default value
    creates with default value
+    raises on negative count
    raises on negative count
+    raises on negative capacity
    raises on negative capacity
+    creates with default value in block
    creates with default value in block
+  rindex
+    performs with a block and offset
    performs with a block and offset
+    performs with a block
    performs with a block
+    performs without a block
    performs without a block
+    performs without a block and an offset
    performs without a block and an offset
+  find the element by using binary search
  find the element by using binary search
+  does reverse with an even number of elements
  does reverse with an even number of elements
+  sort
+    #sort_by
+      stable sort
      stable sort
+      sorts
      sorts
+      unpacks tuple
      unpacks tuple
+    #sort!
+      without block
      without block
+      stable sort with a block
      stable sort with a block
+      stable sort without a block
      stable sort without a block
+      with a block
      with a block
+    #unstable_sort!
+      with a block
      with a block
+      without block
      without block
+    #sort_by!
+      stable sort
      stable sort
+      sorts
      sorts
+      calls given block exactly once for each element
      calls given block exactly once for each element
+    #unstable_sort
+      with a block
      with a block
+      without block
      without block
+    #unstable_sort_by!
+      sorts
      sorts
+      calls given block exactly once for each element
      calls given block exactly once for each element
+    #sort
+      without block
      without block
+      stable sort without a block
      stable sort without a block
+      with a block
      with a block
+      stable sort with a block
      stable sort with a block
+    #unstable_sort_by
+      sorts
      sorts
+      unpacks tuple
      unpacks tuple
+  doesn't overflow buffer with Array.new(size, value) (#1209)
  doesn't overflow buffer with Array.new(size, value) (#1209)
+  does compact_map
  does compact_map
+  first
+    returns a sub array with given number of elements
    returns a sub array with given number of elements
+    gets first when non empty
    gets first when non empty
+    raises when empty
    raises when empty
+  "#reverse_each" iterator
  "#reverse_each" iterator
+  #truncate
+    raises on out of bound index
    raises on out of bound index
+    truncates with index == size and count
    truncates with index == size and count
+    truncates with index and count == 0
    truncates with index and count == 0
+    truncates with index and count
    truncates with index and count
+    truncates with range
    truncates with range
+    raises on negative count
    raises on negative count
+    truncates with index and count, not enough elements
    truncates with index and count, not enough elements
+    truncates with index < 0 and count
    truncates with index < 0 and count
+  does dup
  does dup
+  shift
+    raises when empty
    raises when empty
+    shifts all after pop
    shifts all after pop
+    shifts more than what is available
    shifts more than what is available
+    shifts all with shift(n)
    shifts all with shift(n)
+    pops after shift
    pops after shift
+    shifts one and resizes
    shifts one and resizes
+    shifts all
    shifts all
+    shifts and then concats Enumerable
    shifts and then concats Enumerable
+    shifts negative count raises
    shifts negative count raises
+    shifts almost all and then avoid resize
    shifts almost all and then avoid resize
+    shifts many elements
    shifts many elements
+    shifts when non empty
    shifts when non empty
+    shifts and then concats Array
    shifts and then concats Array
+  does *
  does *
+  unshift
+    repeated unshift/pop does not exhaust memory (#10748)
    repeated unshift/pop does not exhaust memory (#10748)
+    unshifts multiple elements to an empty array
    unshifts multiple elements to an empty array
+    unshifts one element
    unshifts one element
+    unshift of large array does not corrupt elements
    unshift of large array does not corrupt elements
+    unshifts one elements three times
    unshifts one elements three times
+    repeated unshift/clear does not exhaust memory
    repeated unshift/clear does not exhaust memory
+    unshifts multiple elements
    unshifts multiple elements
+    repeated unshift/shift does not exhaust memory
    repeated unshift/shift does not exhaust memory
+    unshifts one element multiple times
    unshifts one element multiple times
+    unshifts after shift
    unshifts after shift
+    unshifts many after many shifts
    unshifts many after many shifts
+  []=
+    sets on negative index
    sets on negative index
+    reuses the buffer if possible
    reuses the buffer if possible
+    resizes the buffer if capacity is not enough
    resizes the buffer if capacity is not enough
+    replaces a subrange with an array
    replaces a subrange with an array
+    replaces entire range with an array for empty array (#8341)
    replaces entire range with an array for empty array (#8341)
+    pushes a new value with []=(...)
    pushes a new value with []=(...)
+    replaces a subrange with a single value
    replaces a subrange with a single value
+    replaces entire range with a value for empty array (#8341)
    replaces entire range with a value for empty array (#8341)
+    sets on positive index
    sets on positive index
+    optimizes when index is 0
    optimizes when index is 0
+    concats a new array with []=(...)
    concats a new array with []=(...)
+  uniq
+    uniqs with true
    uniqs with true
+    uniqs large array
    uniqs large array
+    uniqs without block
    uniqs without block
+    uniqs with block
    uniqs with block
+  insert
+    inserts with positive index
    inserts with positive index
+    inserts out of range
    inserts out of range
+    inserts with negative index (2)
    inserts with negative index (2)
+    inserts with negative index
    inserts with negative index
+  "#each_index" yielding
  "#each_index" yielding
+  does + with empty tuple converted to array (#909)
  does + with empty tuple converted to array (#909)
+  pop
+    pops negative count raises
    pops negative count raises
+    pops when non empty
    pops when non empty
+    pops more elements that what is available
    pops more elements that what is available
+    raises when empty
    raises when empty
+    pops many elements
    pops many elements
+  "#cycle" iterator
  "#cycle" iterator
+  does compact
  does compact
+  zip
+    when a block is provided
+      works with iterable
      works with iterable
+      works with iterator
      works with iterator
+      yields pairs of self's elements and passed array
      yields pairs of self's elements and passed array
+    when no block is provided
+      and the arrays have different typed elements
+        works with iterator
        works with iterator
+        works with iterable
        works with iterable
+        zips three things
        zips three things
+        zips union type (#8608)
        zips union type (#8608)
+        returns an array of paired elements (tuples)
        returns an array of paired elements (tuples)
+  does each_index
  does each_index
+  does clone
  does clone
+  #fill
+    replaces values in a subrange
    replaces values in a subrange
+  -
+    does with even larger arrays
    does with even larger arrays
+    with different types
+      small array
      small array
+      big array
      big array
+    does with larger array coming second
    does with larger array coming second
+    does it
    does it
+  #replace
+    clears unused elements if new size is smaller
    clears unused elements if new size is smaller
+    reuses the buffer if possible
    reuses the buffer if possible
+    resizes the buffer if capacity is not enough
    resizes the buffer if capacity is not enough
+    replaces all elements
    replaces all elements
+  uniq!
+    uniqs with block
    uniqs with block
+    uniqs with true
    uniqs with true
+    uniqs without block
    uniqs without block
+    uniqs large array
    uniqs large array
+  flattens
  flattens
+  does compact_map with false
  does compact_map with false
+  does clear
  does clear
+  rejects!
  rejects!
+  does map!
  does map!
+  "#each_index" iterator
  "#each_index" iterator
+  concat
+    concats large arrays
    concats large arrays
+    concats enumerable
    concats enumerable
+    concats a union of arrays
    concats a union of arrays
+    concats indexable
    concats indexable
+    concats enumerable to empty array (#2047)
    concats enumerable to empty array (#2047)
+    concats small arrays
    concats small arrays
+  zip?
+    when no block is provided
+      and the arrays have different typed elements
+        and size of an arg is less than receiver
+          works with iterator
          works with iterator
+          zips three things
          zips three things
+          works with iterable
          works with iterable
+          zips union type (#8608)
          zips union type (#8608)
+          returns an array of paired elements (tuples with nil)
          returns an array of paired elements (tuples with nil)
+    when a block is provided
+      and size of an arg is less than receiver
+        works with iterator
        works with iterator
+        works with iterable
        works with iterable
+        yields pairs of self's elements and passed array (with nil)
        yields pairs of self's elements and passed array (with nil)
+  |
+    small arrays
    small arrays
+    large arrays
    large arrays
+  does clone with recursive array
  does clone with recursive array
+  transpose
+    transposes array of tuples
    transposes array of tuples
+    transposes empty array
    transposes empty array
+    transposes elements
    transposes elements
+    transposes union of arrays
    transposes union of arrays
+    raises IndexError error when size of element is invalid
    raises IndexError error when size of element is invalid
+  does +
  does +
+  last
+    gets last when non empty
    gets last when non empty
+    returns a sub array with given number of elements
    returns a sub array with given number of elements
+    raises when empty
    raises when empty
+  does product with block
  does product with block
+  does hash
  does hash
+  empty
+    is empty
    is empty
+    is not empty
    is not empty
+  values_at
+    works with mixed types
    works with mixed types
+    returns the given indexes
    returns the given indexes
+    raises when passed an invalid index
    raises when passed an invalid index
+  size
+    has size 0
    has size 0
+    has size 2
    has size 2
+  #skip
  #skip
+  Array.product
+    with array
    with array
+    with splat
    with splat
+  []?
+    gets with range without beginning
    gets with range without beginning
+    gets with start and count
    gets with start and count
+    gets with range without end
    gets with range without end
+    gets with range
    gets with range
+    gets with index
    gets with index
+  does update
  does update
+  "#reverse_each" yielding
  "#reverse_each" yielding
+  rotate
+    rotate!
    rotate!
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  .parse_arguments_posix
     assert
    assert
-    raises an error when double quote is unclosed
    raises an error when double quote is unclosed
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-    raises an error if single quote is unclosed
    raises an error if single quote is unclosed
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+    rotate
    rotate
     assert
    assert
     assert
    assert
-  .quote_windows
     assert
    assert
+  push
+    has the << alias
    has the << alias
+    pushes multiple elements to an empty array
    pushes multiple elements to an empty array
+    pushes multiple elements
    pushes multiple elements
+    pushes one element
    pushes one element
+  Array.each_product
+    2 arrays
    2 arrays
+    2 arrays different types
    2 arrays different types
+    single array
    single array
+    more arrays, reuse = true
    more arrays, reuse = true
+    more arrays
    more arrays
+    with splat
    with splat
+    one empty array
    one empty array
+  selects! with pattern
  selects! with pattern
+  does product without block
  does product without block
+  does map_with_index!
  does map_with_index!
+  does <=>
  does <=>
+  swap
+    swaps but raises out of bounds on left
    swaps but raises out of bounds on left
+    swaps with negative indices
    swaps with negative indices
+    swaps but raises out of bounds on right
    swaps but raises out of bounds on right
+    swaps
    swaps
+  does each index while modifying array
  does each index while modifying array
+  index
+    performs with a block
    performs with a block
+    raises if out of bounds
    raises if out of bounds
+    performs without a block
    performs without a block
+    performs with a block and offset
    performs with a block and offset
+    performs without a block and offset
    performs without a block and offset
+  capacity re-sizing
+    initializes an array capacity to INITIAL_CAPACITY
    initializes an array capacity to INITIAL_CAPACITY
+    doubles capacity for arrays smaller than CAPACITY_THRESHOLD
    doubles capacity for arrays smaller than CAPACITY_THRESHOLD
+    uses slow growth heuristic for arrays larger than CAPACITY_THRESHOLD
    uses slow growth heuristic for arrays larger than CAPACITY_THRESHOLD
+  does map_with_index!, with offset
  does map_with_index!, with offset
+  builds from buffer
  builds from buffer
+  does reverse! with an even number of elements
  does reverse! with an even number of elements
+  insert_all
+    inserts with index 0
    inserts with index 0
+    inserts with negative index
    inserts with negative index
+    inserts when empty
    inserts when empty
+    inserts when other is empty
    inserts when other is empty
+    inserts indexable
    inserts indexable
+    raises with negative index greater than size
    raises with negative index greater than size
+    inserts with positive index
    inserts with positive index
+    inserts with negative index (2)
    inserts with negative index (2)
+    raises with index greater than size
    raises with index greater than size
+    inserts with index of #size
    inserts with index of #size
+  ==
+    compares elements
    compares elements
+    compares other
    compares other
+    compares empty
    compares empty
+  "#cycle(limit)" yielding
  "#cycle(limit)" yielding
+  repeated_permutations
     assert
    assert
-    join
-      assert
      assert
-      assert
      assert
-      assert
      assert
     assert
    assert
+    accepts a block
    accepts a block
     assert
    assert
     assert
    assert
     assert
    assert
+    yielding dup of arrays
    yielding dup of arrays
     assert
    assert
+    yields with reuse = array
    yields with reuse = array
+    yields with reuse = true
    yields with reuse = true
     assert
    assert
     assert
    assert
     assert
    assert
-Float::Printer::DiyFP
-  converts ordered 32
  converts ordered 32
-  multiply
  multiply
-  converts max f64
  converts max f64
-  converts min f64
  converts min f64
-  converts min f32
  converts min f32
-  multiply rounding
  multiply rounding
-  converts ordered 64
  converts ordered 64
-  normalizes max f64
  normalizes max f64
-  converts max f32
  converts max f32
-  normalizes ordered
  normalizes ordered
-  multiply rounding
  multiply rounding
-  multiply big numbers
  multiply big numbers
-  multiply
  multiply
-  normalizes min f64
  normalizes min f64
-Compress::Zlib
-  write read should be inverse with random string
  write read should be inverse with random string
-  write read should be inverse (utf-8)
  write read should be inverse (utf-8)
-YAML::Any
-  is enumerable
  is enumerable
-  dups
  dups
-  compares to other objects
  compares to other objects
-  #[]
-    of array
    of array
-    hash
-      fetches Hash(YAML::Any, YAML::Any)
      fetches Hash(YAML::Any, YAML::Any)
-      fetches Time
      fetches Time
-      fetches Bool
      fetches Bool
-      fetches Nil
      fetches Nil
-      fetches Array(YAML::Any)
      fetches Array(YAML::Any)
-      fetches Int64
      fetches Int64
-      fetches Float64
      fetches Float64
-      fetches String
      fetches String
-      fetches Slice(UInt8)
      fetches Slice(UInt8)
-      fetches Set(YAML::Any)
      fetches Set(YAML::Any)
-  returns array of any when doing parse all
  returns array of any when doing parse all
-  can compare with ===
  can compare with ===
-  traverses big structure
  traverses big structure
-  #dig?
-    returns nil if not found
    returns nil if not found
-    returns nil for non-Hash/Array intermediary values
    returns nil for non-Hash/Array intermediary values
-    gets the value at given path given splat
    gets the value at given path given splat
+  does map_with_index
  does map_with_index
+  does equals? with custom block
  does equals? with custom block
+  &
+    small arrays
    small arrays
+    big arrays
    big arrays
+  "#each" iterator
  "#each" iterator
+  "#each" yielding
  "#each" yielding
+  "#cycle(limit)" iterator
  "#cycle(limit)" iterator
+  first?
+    gets first? when non empty
    gets first? when non empty
+    gives nil when empty
    gives nil when empty
+  delete_at
+    deletes at beginning is same as shift
    deletes at beginning is same as shift
+    deletes with index and count
    deletes with index and count
+    deletes positive index
    deletes positive index
+    returns empty if at end
    returns empty if at end
+    deletes negative index with range
    deletes negative index with range
+    deletes use range
    deletes use range
+    deletes negative index
    deletes negative index
+    deletes out of bounds
    deletes out of bounds
+    deletes negative index with range, out of bounds
    deletes negative index with range, out of bounds
+  does compact!
  does compact!
+  selects!
  selects!
+  does reverse with an odd number of elements
  does reverse with an odd number of elements
+  does + with different types (#568)
  does + with different types (#568)
+OpenSSL::SSL::Server
+  .open
  .open
+  #accept?
+    accepts
    accepts
+  don't sync_close
  don't sync_close
+  #accept
+    doesn't to SSL handshake with start_immediately = false
    doesn't to SSL handshake with start_immediately = false
+    accepts and do handshake
    accepts and do handshake
+  sync_close
  sync_close
   .new
  .new
-  #to_json
  #to_json
-  clones
  clones
-  exposes $~ when doing Regex#===
  exposes $~ when doing Regex#===
-  #size
-    of hash
    of hash
-    of array
    of array
-  casts
-    gets float64
    gets float64
-    gets float64 from JSON integer (#8618)
    gets float64 from JSON integer (#8618)
-    gets float32
    gets float32
-    gets yes/no unquoted booleans
    gets yes/no unquoted booleans
-    doesn't get quoted numbers
    doesn't get quoted numbers
-    gets nil
    gets nil
-    gets array
    gets array
-    gets hash
    gets hash
-    gets int32
    gets int32
-    gets int64
    gets int64
-    gets time
    gets time
-    gets anchor
    gets anchor
-    gets bool
    gets bool
-    gets float32 from JSON integer (#8618)
    gets float32 from JSON integer (#8618)
-    gets string
    gets string
-    gets bytes
    gets bytes
-  dig
-    gets the value at given path given splat
    gets the value at given path given splat
-    raises if not found
    raises if not found
-  #[]?
-    of hash with integer keys
    of hash with integer keys
-    hash
-      fetches Bool
      fetches Bool
-      fetches Int64
      fetches Int64
-      fetches Set(YAML::Any)
      fetches Set(YAML::Any)
-      fetches Nil
      fetches Nil
-      fetches Array(YAML::Any)
      fetches Array(YAML::Any)
-      fetches Hash(YAML::Any, YAML::Any)
      fetches Hash(YAML::Any, YAML::Any)
-      fetches String
      fetches String
-      fetches Slice(UInt8)
      fetches Slice(UInt8)
-      fetches Time
      fetches Time
-      fetches Float64
      fetches Float64
-    of array
    of array
-    of hash
    of hash
-Digest::SHA1
-  does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
-  resets
  resets
-  can't call #final more than once
  can't call #final more than once
-  does digest for ""
  does digest for ""
-  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
-  resets
  resets
-  does digest for "a" in a block
  does digest for "a" in a block
-  #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
-  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
-  does hexdigest for "The quick brown fox jumps over the lazy dog"
  does hexdigest for "The quick brown fox jumps over the lazy dog"
-  resets
  resets
-  does digest for "The quick brown fox jumps over the lazy dog" in a block
  does digest for "The quick brown fox jumps over the lazy dog" in a block
-  does hexdigest for "fooø"
  does hexdigest for "fooø"
-  context are independent
  context are independent
-  does base64digest for ""
  does base64digest for ""
-  can't call #final more than once
  can't call #final more than once
-  can't call #final more than once
  can't call #final more than once
-  does digest for "abc"
  does digest for "abc"
-  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
-  can't call #final more than once
  can't call #final more than once
-  does digest for "abc" in a block
  does digest for "abc" in a block
-  does hexdigest for "a"
  does hexdigest for "a"
-  does base64digest for "fooø"
  does base64digest for "fooø"
-  does base64digest for "The quick brown fox jumps over the lazy dog"
  does base64digest for "The quick brown fox jumps over the lazy dog"
-  does base64digest for "abc"
  does base64digest for "abc"
-  does digest for "fooø"
  does digest for "fooø"
-  returns the digest_size
  returns the digest_size
-  does hexdigest for "abc"
  does hexdigest for "abc"
-  resets
  resets
-  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
-  digest with file content
  digest with file content
-  resets
  resets
-  can't call #final more than once
  can't call #final more than once
-  .dup
-    preserves type
    preserves type
-    leads to not sharing state
    leads to not sharing state
-    leads to deterministic updates
    leads to deterministic updates
-    preserves value
    preserves value
-  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
-  does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
  does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
-  can't call #final more than once
  can't call #final more than once
-  resets
  resets
-  does digest for "a"
  does digest for "a"
-  resets
  resets
-  does digest for "fooø" in a block
  does digest for "fooø" in a block
-  does base64digest for "a"
  does base64digest for "a"
-  does digest for "The quick brown fox jumps over the lazy dog"
  does digest for "The quick brown fox jumps over the lazy dog"
-  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
-  does hexdigest for ""
  does hexdigest for ""
-  can't call #final more than once
  can't call #final more than once
-  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
-  does digest for "" in a block
  does digest for "" in a block
-.__powisf2
.__powisf2
-OAuth::Params
-  builds
  builds
-__floatuntisf
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  detects SNI hostname
  detects SNI hostname
+__mulosi4
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
@@ -20145,154 +19756,6 @@
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-Process::Status
-  #signal_exit? with signal code
  #signal_exit? with signal code
-  equality
  equality
-  #signal_exit?
  #signal_exit?
-  #normal_exit? with signal code
  #normal_exit? with signal code
-  #exit_reason
-    returns FloatException
    returns FloatException
-    returns Normal
    returns Normal
-    returns BadInstruction
    returns BadInstruction
-    returns SessionEnded
    returns SessionEnded
-    returns Interrupted
    returns Interrupted
-    returns Breakpoint
    returns Breakpoint
-    returns BadMemoryAccess
    returns BadMemoryAccess
-    returns AccessViolation
    returns AccessViolation
-    returns Aborted
    returns Aborted
-    returns TerminalDisconnected
    returns TerminalDisconnected
-  #exit_signal
  #exit_signal
-  #inspect
-    with exit status
    with exit status
-    with exit signal
    with exit signal
-  #success?
  #success?
-  #to_s
-    with exit signal
    with exit signal
-    with exit status
    with exit status
-  #normal_exit?
  #normal_exit?
-  #exit_code
  #exit_code
-ECR
-  does with <%= -%>
  does with <%= -%>
-  does ECR.def_to_s
  does ECR.def_to_s
-  does with <%- %> (1)
  does with <%- %> (1)
-  does with <%% %>
  does with <%% %>
-  does with <%- %> (2)
  does with <%- %> (2)
-  builds a crystal program from a source
  builds a crystal program from a source
-  does with <% -%>
  does with <% -%>
-  .render
  .render
-  does with -% inside string
  does with -% inside string
-Pointer
-  copies/move with different types
  copies/move with different types
-  compares two pointers by address
  compares two pointers by address
-  maps!
  maps!
-  does to_s
  does to_s
-  performs arithmetic with u32
  performs arithmetic with u32
-  realloc
-    raises on negative count
    raises on negative count
-  memcmp
-    assert
    assert
-  does malloc with value
  does malloc with value
-  clear
-    clears many
    clears many
-    clears one
    clears one
-    clears with union
    clears with union
-  clones
  clones
-  does malloc with value from block
  does malloc with value from block
-  copy_to
-    doesn't raise OverflowError on unsigned size and different target type
    doesn't raise OverflowError on unsigned size and different target type
-    raises on negative count
    raises on negative count
-    copies to union of pointers
    copies to union of pointers
-    performs
    performs
-  does index with count
  does index with count
-  maps_with_index!
  maps_with_index!
-  shuffles!
  shuffles!
-  move_to
-    moves to union of pointers
    moves to union of pointers
-    performs with overlap right to left
    performs with overlap right to left
-    raises on negative count
    raises on negative count
-    performs with overlap left to right
    performs with overlap left to right
-  maps_with_index!, with offset
  maps_with_index!, with offset
-  move_from
-    moves from union of pointers
    moves from union of pointers
-    performs with overlap left to right
    performs with overlap left to right
-    performs with overlap right to left
    performs with overlap right to left
-    raises on negative count
    raises on negative count
-  copy_from
-    performs
    performs
-    raises on negative count
    raises on negative count
-    copies from union of pointers
    copies from union of pointers
-  raises if mallocs negative size
  raises if mallocs negative size
-  does !
  does !
-  creates from int
  creates from int
-  performs arithmetic with u64
  performs arithmetic with u64
-Thread::ConditionVariable
-  signals & broadcasts
  signals & broadcasts
-  timeouts
  timeouts
-  signals
  signals
-  resumes before timeout
  resumes before timeout
-Random
-  generates full-range by negation
  generates full-range by negation
-  generates by accumulation
  generates by accumulation
-  float number
  float number
-  does with inclusive range
  does with inclusive range
-  hex
-    gets hex with default number of digits
    gets hex with default number of digits
-    gets hex with requested number of digits
    gets hex with requested number of digits
-  allows creating a new default random with a seed
  allows creating a new default random with a seed
-  random_bytes
-    generates random bytes
    generates random bytes
-    gets random bytes with requested number of digits
    gets random bytes with requested number of digits
-    gets random bytes with default number of digits
    gets random bytes with default number of digits
-    fills given buffer with random bytes
    fills given buffer with random bytes
-  raises on invalid float number
  raises on invalid float number
-  limited Float32 number
  limited Float32 number
-  does with BigInt range
  does with BigInt range
-  base64
-    gets base64 with default number of digits
    gets base64 with default number of digits
-    gets base64 with requested number of digits
    gets base64 with requested number of digits
-  urlsafe_base64
-    keeps padding
    keeps padding
-    gets urlsafe base64 with requested number of digits
    gets urlsafe base64 with requested number of digits
-    gets urlsafe base64 with default number of digits
    gets urlsafe base64 with default number of digits
-  generates full-range by truncation
  generates full-range by truncation
-  generates full-range
  generates full-range
-  limited large BigInt
  limited large BigInt
-  does with inclusive range of floats
  does with inclusive range of floats
-  does with exclusive range
  does with exclusive range
-  does with exclusive range of floats
  does with exclusive range of floats
-  generates full-range by accumulation
  generates full-range by accumulation
-  limited Float64 number
  limited Float64 number
-  generates by truncation
  generates by truncation
-  returns a random integer
  returns a random integer
-  raises on invalid number
  raises on invalid number
-  works using U/Int128
  works using U/Int128
-  limited number
  limited number
-  gets a random bool
  gets a random bool
-  limited BigInt
  limited BigInt
-  raises on invalid range
-    Int32 range
    Int32 range
-    Float64 range
    Float64 range
-    BigInt range
    BigInt range
-  allows creating a new default random
  allows creating a new default random
-  returns a random static array
  returns a random static array
-  works with span exceeding int type's range
  works with span exceeding int type's range
-ECR::Lexer
-  lexes with <%= -%>
  lexes with <%= -%>
-  lexes with <%%= %>
  lexes with <%%= %>
-  lexes with <% -%>
  lexes with <% -%>
-  lexes with <%-% %> (#14734)
  lexes with <%-% %> (#14734)
-  lexes with <%- %>
  lexes with <%- %>
-  lexes with <%-%= %> (#14734)
  lexes with <%-%= %> (#14734)
-  lexes with <%# -%>
  lexes with <%# -%>
-  lexes with <%= %>
  lexes with <%= %>
-  lexes with <% %>
  lexes with <% %>
-  lexes with <% %> and correct location info
  lexes with <% %> and correct location info
-  lexes with -% inside string
  lexes with -% inside string
-  lexes with <%% -%> (#14734)
  lexes with <%% -%> (#14734)
-  lexes with <%# %>
  lexes with <%# %>
-  lexes with <%% %>
  lexes with <%% %>
-  lexes without interpolation
  lexes without interpolation
-__muloti4
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
@@ -20320,6 +19783,58 @@
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+.__ashrti3
.__ashrti3
+OpenSSL::X509::Name
+  parse
  parse
+  add_entry
  add_entry
+HTTP::FormData::Builder
+  #field
+    converts value to a string
    converts value to a string
+  builds valid form-data messages
  builds valid form-data messages
+  #content_type
+    calculates the content type
    calculates the content type
+  #file
+    fails after finish
    fails after finish
+  #finish
+    fails when no body parts
    fails when no body parts
+    fails after finish
    fails after finish
+System::User
+  .find_by(*, id)
+    returns a user by id
    returns a user by id
+    raises on nonexistent user id
    raises on nonexistent user id
+  #id
+    is the same as the source ID
    is the same as the source ID
+  #home_directory
+    calls without raising
    calls without raising
+  .find_by?(*, id)
+    returns nil on nonexistent user id
    returns nil on nonexistent user id
+    returns a user by id
    returns a user by id
+  #to_s
+    returns a string representation
    returns a string representation
+  .find_by(*, name)
+    raises on a nonexistent user
    raises on a nonexistent user
+    returns a user by name
    returns a user by name
+  #name
+    calls without raising
    calls without raising
+  #shell
+    calls without raising
    calls without raising
+  #username
+    is the same as the source name
    is the same as the source name
+  #group_id
+    calls without raising
    calls without raising
+  .find_by?(*, name)
+    returns nil on nonexistent user
    returns nil on nonexistent user
+    returns a user by name
    returns a user by name
+UUID
+  serializes
+    #to_yaml
    #to_yaml
+    #from_yaml
    #from_yaml
+Crypto::Bcrypt::Base64
+  decodes
  decodes
+  encodes
  encodes
+Syscall
+  can call into the system successfully
  can call into the system successfully
+__fixunsdfti
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
@@ -20341,6 +19856,74 @@
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+JSON::Parser
+  parses false
  parses false
+  prevents stack overflow for hashes
  prevents stack overflow for hashes
+  parses {}
  parses {}
+  raises on parse "hello
+world"
  raises on parse "hello
+world"
+  raises on parse [1 true]
  raises on parse [1 true]
+  parses {"foo": 1, "bar": 1.5}
  parses {"foo": 1, "bar": 1.5}
+  raises on parse {"foo": 1,}
  raises on parse {"foo": 1,}
+  parses []
  parses []
+  raises on parse {1}
  raises on parse {1}
+  parses [false]
  parses [false]
+  raises on parse [1,]
  raises on parse [1,]
+  parses [[1]]
  parses [[1]]
+  raises on parse {"foo": 1 "bar": 2}
  raises on parse {"foo": 1 "bar": 2}
+  parses {"fo\no": 1}
  parses {"fo\no": 1}
+  raises on parse 1�
  raises on parse 1�
+  raises on parse "\u201cello	world"
  raises on parse "\u201cello	world"
+  raises on parse [2.]
  raises on parse [2.]
+  raises on parse [0] 1 
  raises on parse [0] 1 
+  parses {"foo": 1}
  parses {"foo": 1}
+  parses [{"foo": 1}]
  parses [{"foo": 1}]
+  parses [null]
  parses [null]
+  parses [1]
  parses [1]
+  parses ["hello"]
  parses ["hello"]
+  parses 1
  parses 1
+  parses [true]
  parses [true]
+  parses  [ 0 ] 
  parses  [ 0 ] 
+  raises on parse [0]1
  raises on parse [0]1
+  raises on parse ["\u123z"]
  raises on parse ["\u123z"]
+  parses ["日"]
  parses ["日"]
+  parses [1, 2, 3]
  parses [1, 2, 3]
+  parses 2.5
  parses 2.5
+  parses [1.5]
  parses [1.5]
+  returns raw
  returns raw
+  prevents stack overflow for arrays
  prevents stack overflow for arrays
+  raises on parse "{"foo":}
  raises on parse "{"foo":}
+  parses "\nПривет, мир!"
  parses "\nПривет, мир!"
+  parses true
  parses true
+  parses "hello"
  parses "hello"
+  parses [0]
  parses [0]
+  raises on parse {"foo"1}
  raises on parse {"foo"1}
+  parses null
  parses null
+  raises on parse "hello	world"
  raises on parse "hello	world"
+  raises on parse "\u201cello
+world"
  raises on parse "\u201cello
+world"
+buffered
+  cannot send if closed
  cannot send if closed
+  can be closed from different fiber
  can be closed from different fiber
+  works with select
  works with select
+  can be closed after sending
  can be closed after sending
+  does inspect on buffered channel
  does inspect on buffered channel
+  gets ready with data
  gets ready with data
+  pings
  pings
+  can send and receive nil
  can send and receive nil
+  does pretty_inspect on unbuffered channel
  does pretty_inspect on unbuffered channel
+  can be closed
  can be closed
+  blocks when full
  blocks when full
+  can receive? when closed
  can receive? when closed
+  does pretty_inspect on buffered channel
  does pretty_inspect on buffered channel
+  does inspect on unbuffered channel
  does inspect on unbuffered channel
+  can send successfully without raise
  can send successfully without raise
+  doesn't block when not full
  doesn't block when not full
+  can receive? when not empty
  can receive? when not empty
+.__multi3
.__multi3
+__fixunssfti
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
@@ -20359,533 +19942,510 @@
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-expectations
-  be_close
-    assert
    assert
-    assert
    assert
-  be_nil
-    assert
    assert
-    restricts type on should_not
    restricts type on should_not
-    assert
    assert
-    assert
    assert
-  be_true
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  start_with
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  expect_raises
-    pass if raises MyError
    pass if raises MyError
-  be_falsey
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  eq
-    assert
    assert
-    assert
    assert
-  accept a custom failure message
-    assert
    assert
-    assert
    assert
-  contain
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  be
-    works with module type (#14920)
    works with module type (#14920)
-    assert
    assert
-    assert
    assert
-    works with type that does not implement `#object_id`
    works with type that does not implement `#object_id`
-  match
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  end_with
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  be
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  be_a
-    assert
    assert
-    assert
    assert
-    restricts type on should_not
    restricts type on should_not
-    assert
    assert
-    restricts type on should
    restricts type on should
-    assert
    assert
-  empty
-    assert
    assert
-    assert
    assert
+ECR
+  does with -% inside string
  does with -% inside string
+  does with <% -%>
  does with <% -%>
+  builds a crystal program from a source
  builds a crystal program from a source
+  does ECR.def_to_s
  does ECR.def_to_s
+  does with <%- %> (1)
  does with <%- %> (1)
+  does with <%- %> (2)
  does with <%- %> (2)
+  does with <%= -%>
  does with <%= -%>
+  .render
  .render
+  does with <%% %>
  does with <%% %>
+colorize
+  colorizes foreground with background with mode
  colorizes foreground with background with mode
+  colorizes foreground with 8-bit color
  colorizes foreground with 8-bit color
+  colorizes with surround and no reset
  colorizes with surround and no reset
+  colorizes background with true color
  colorizes background with true color
+  colorizes background with 8-bit color
  colorizes background with 8-bit color
+  colorizes background
  colorizes background
+  colorizes foreground with background
  colorizes foreground with background
+  raises on unknown foreground color
  raises on unknown foreground color
+  colorizes mode
  colorizes mode
+  raises on unknown background color
  raises on unknown background color
+  colorizes with to_s
  colorizes with to_s
+  colorizes foreground
  colorizes foreground
+  inspects
  inspects
+  colorizes foreground with symbol
  colorizes foreground with symbol
+  colorizes with surround and default
  colorizes with surround and default
+  colorizes mode combination
  colorizes mode combination
+  colorizes with surround
  colorizes with surround
+  colorizes mode with symbol
  colorizes mode with symbol
+  toggles off
  toggles off
+  colorizes with surround and reset
  colorizes with surround and reset
+  colorizes without change
  colorizes without change
+  colorizes foreground with true color
  colorizes foreground with true color
+  toggles off and on
  toggles off and on
+INI
+  parse
+    from String
+      parses sections
      parses sections
+      parses key = value
      parses key = value
+      fails on malformed declaration
      fails on malformed declaration
+      ignores comments
      ignores comments
+      ignores whitespaces
      ignores whitespaces
+      fails on data after section
      fails on data after section
+      fails on malformed section
      fails on malformed section
+      parses empty values
      parses empty values
+      parses empty section
      parses empty section
+      parses a reopened section
      parses a reopened section
+    from IO
+      parses a file
      parses a file
+  build to an INI-formatted output
+    builds with no sections
    builds with no sections
+    builds from a Hash
    builds from a Hash
+    builds an empty section before non-empty sections
    builds an empty section before non-empty sections
+    builds with no spaces around `=`
    builds with no spaces around `=`
+    builds from a NamedTuple
    builds from a NamedTuple
+Random::ISAAC
+  generates random numbers as generated official implementation
  generates random numbers as generated official implementation
+  different instances generate different numbers (#7976)
  different instances generate different numbers (#7976)
+  can be initialized without explicit seed
  can be initialized without explicit seed
+ECR::Lexer
+  lexes with <%- %>
  lexes with <%- %>
+  lexes with <% -%>
  lexes with <% -%>
+  lexes with -% inside string
  lexes with -% inside string
+  lexes with <%= -%>
  lexes with <%= -%>
+  lexes without interpolation
  lexes without interpolation
+  lexes with <%% -%> (#14734)
  lexes with <%% -%> (#14734)
+  lexes with <% %> and correct location info
  lexes with <% %> and correct location info
+  lexes with <%%= %>
  lexes with <%%= %>
+  lexes with <%-% %> (#14734)
  lexes with <%-% %> (#14734)
+  lexes with <%# %>
  lexes with <%# %>
+  lexes with <%= %>
  lexes with <%= %>
+  lexes with <%-%= %> (#14734)
  lexes with <%-%= %> (#14734)
+  lexes with <% %>
  lexes with <% %>
+  lexes with <%# -%>
  lexes with <%# -%>
+  lexes with <%% %>
  lexes with <%% %>
+Spec::TAPFormatter
+  reports failures
  reports failures
+  reports mixed results
  reports mixed results
+  reports successful results
  reports successful results
+  reports errors
  reports errors
+  reports pending
  reports pending
+Digest::MD5
+  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
+  calculates hash from unicode string
  calculates hash from unicode string
+  return the digest size
  return the digest size
+  digest with file content
  digest with file content
+  calculates hash from string
  calculates hash from string
+  #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
+  context are independent
  context are independent
+  calculates digest from string
  calculates digest from string
+  can't call final twice
  can't call final twice
+  can take a block
  can take a block
+  #hexfinal
  #hexfinal
+  calculates hash from UInt8 slices
  calculates hash from UInt8 slices
+  resets
  resets
+  calculates hash of #to_slice
  calculates hash of #to_slice
+  calculates base64'd hash from string
  calculates base64'd hash from string
+  .dup
+    preserves value
    preserves value
+    preserves type
    preserves type
+    leads to not sharing state
    leads to not sharing state
+    leads to deterministic updates
    leads to deterministic updates
+Slice
+  "#reverse_each" yielding
  "#reverse_each" yielding
+  does to_s
  does to_s
+  .move_to(Slice)
+    moves most src.size
    moves most src.size
+    handles intersecting ranges
    handles intersecting ranges
+    raises if dst is smaller
    raises if dst is smaller
+    moves bytes
    moves bytes
+  does map
  does map
+  .copy_from(Slice)
+    copies at most src.size
    copies at most src.size
+    raises if dst is smaller
    raises if dst is smaller
+    copies bytes
    copies bytes
+  "#each_index" iterator
  "#each_index" iterator
+  does Bytes[]
  does Bytes[]
+  #+(Int)
  #+(Int)
+  does map_with_index
  does map_with_index
+  .move_from(Slice)
+    moves bytes
    moves bytes
+    handles intersecting ranges
    handles intersecting ranges
+    moves at most src.size
    moves at most src.size
+    raises if dst is smaller
    raises if dst is smaller
+  #to_unsafe_bytes
+    reinterprets a slice's elements as bytes
    reinterprets a slice's elements as bytes
+  #hexdump
+    works for empty slice
    works for empty slice
+    works for Bytes
    works for Bytes
+  does [] with start and count
  does [] with start and count
+  #clone
+    deep copy
    deep copy
+    clones primitive
    clones primitive
+    clones non-primitive
    clones non-primitive
+    buffer copy
    buffer copy
+  does rindex
  does rindex
+  "#each" yielding
  "#each" yielding
+  does []=
  does []=
+  does map_with_index, with offset
  does map_with_index, with offset
+  raises if size is negative on new
  raises if size is negative on new
+  does map_with_index!
  does map_with_index!
+  "#each_index" yielding
  "#each_index" yielding
+  does to_a
  does to_a
+  does macro []
  does macro []
+  sort
+    #unstable_sort!
+      raises if <=> returns nil
      raises if <=> returns nil
+      sorts with invalid block (#4379)
      sorts with invalid block (#4379)
+      raises if sort! block returns nil
      raises if sort! block returns nil
+      without block
      without block
+      with a block
      with a block
+      can sort! just by using <=> (#6608)
      can sort! just by using <=> (#6608)
+    #sort
+      without block
      without block
+      stable sort with a block
      stable sort with a block
+      stable sort without a block
      stable sort without a block
+      with a block
      with a block
+    #sort_by
+      calls given block exactly once for each element
      calls given block exactly once for each element
+      stable sort
      stable sort
+      sorts
      sorts
+    #unstable_sort
+      with a block
      with a block
+      without block
      without block
+    #sort_by
+      stable sort
      stable sort
+      sorts
      sorts
+    #unstable_sort_by
+      calls given block exactly once for each element
      calls given block exactly once for each element
+      sorts
      sorts
+    #unstable_sort_by
+      sorts
      sorts
+    #sort!
+      sorts with invalid block (#4379)
      sorts with invalid block (#4379)
+      raises if <=> returns nil
      raises if <=> returns nil
+      stable sort without a block
      stable sort without a block
+      can sort! just by using <=> (#6608)
      can sort! just by using <=> (#6608)
+      without block
      without block
+      with a block
      with a block
+      stable sort with a block
      stable sort with a block
+      raises if sort! block returns nil
      raises if sort! block returns nil
+  #+(Slice)
+    concatenates two slices
    concatenates two slices
+  .additive_identity
+    returns an empty slice
    returns an empty slice
+  #[]
  #[]
+  creates read-only slice
  creates read-only slice
+  #[] keeps read-only value
  #[] keeps read-only value
+  "#reverse_each" iterator
  "#reverse_each" iterator
+  .join
+    concatenates an empty indexable of slices
    concatenates an empty indexable of slices
+    concatenates an indexable of slices
    concatenates an indexable of slices
+    concatenates a slice of slices
    concatenates a slice of slices
+  does []
  does []
+  does to_s for bytes
  does to_s for bytes
+  does bytesize
  does bytesize
+  uses percent vars in [] macro (#2954)
  uses percent vars in [] macro (#2954)
+  #same?
  #same?
+  creates empty slice
  creates empty slice
+  does []?
  does []?
+  does []? with start and count
  does []? with start and count
+  does map!
  does map!
+  .copy_to(Slice)
+    copies bytes
    copies bytes
+    raises if dst is smaller
    raises if dst is smaller
+    copies at most src.size
    copies at most src.size
+  does copy_to pointer
  does copy_to pointer
+  #dup
+    don't deep copy
    don't deep copy
+    buffer copy
    buffer copy
+  does empty?
  does empty?
+  does copy_from pointer
  does copy_from pointer
+  #hexstring
+    works for Bytes
    works for Bytes
+  does macro [] with numbers (#3055)
  does macro [] with numbers (#3055)
+  does map_with_index!, with offset
  does map_with_index!, with offset
+  <=>
+    compares
    compares
+    compares (UInt8)
    compares (UInt8)
+    is comparable
    is comparable
+  gets pointer and size
  gets pointer and size
+  ==
+    does == with same type, different runtime instances
    does == with same type, different runtime instances
+    does ==
    does ==
+    does == for bytes
    does == for bytes
+  does []? with range
  does []? with range
+  hashes each item in collection
  hashes each item in collection
+  #fill
+    replaces values in a subrange
    replaces values in a subrange
+    works for bytes
    works for bytes
+  reverses
  reverses
+  rotate!
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  be_false
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  be_truthy
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-Big* as numbers
-  division between BigRational / Int8 returns BigRational
  division between BigRational / Int8 returns BigRational
-  converts from BigInt to UInt64
  converts from BigInt to UInt64
-  division between UInt8 / BigRational returns BigRational
  division between UInt8 / BigRational returns BigRational
-  converts from UInt8 to BigFloat
  converts from UInt8 to BigFloat
-  floor_division BigFloat // BigInt returns BigFloat
  floor_division BigFloat // BigInt returns BigFloat
-  division between UInt128 / BigDecimal returns BigDecimal
  division between UInt128 / BigDecimal returns BigDecimal
-  converts from BigRational to Int32
  converts from BigRational to Int32
-  division between BigFloat / Float32 returns BigFloat
  division between BigFloat / Float32 returns BigFloat
-  division between BigInt / Float64 returns BigFloat
  division between BigInt / Float64 returns BigFloat
-  converts from BigInt to BigRational
  converts from BigInt to BigRational
-  converts from BigRational to BigFloat
  converts from BigRational to BigFloat
-  floor_division BigFloat // BigRational returns BigFloat
  floor_division BigFloat // BigRational returns BigFloat
-  floor_division BigRational // Int16 returns BigRational
  floor_division BigRational // Int16 returns BigRational
-  converts from Float64 to BigInt
  converts from Float64 to BigInt
-  converts from BigInt to Float32
  converts from BigInt to Float32
-  division between BigRational / BigRational returns BigRational
  division between BigRational / BigRational returns BigRational
-  converts from Int64 to BigDecimal
  converts from Int64 to BigDecimal
-  division between BigFloat / UInt16 returns BigFloat
  division between BigFloat / UInt16 returns BigFloat
-  converts from UInt16 to BigRational
  converts from UInt16 to BigRational
-  converts from BigInt to BigInt
  converts from BigInt to BigInt
-  converts from BigDecimal to Float64
  converts from BigDecimal to Float64
-  division between BigDecimal / Float64 returns BigDecimal
  division between BigDecimal / Float64 returns BigDecimal
-  division between BigRational / UInt32 returns BigRational
  division between BigRational / UInt32 returns BigRational
-  floor_division BigInt // UInt32 returns BigInt
  floor_division BigInt // UInt32 returns BigInt
-  floor_division BigInt // Int8 returns BigInt
  floor_division BigInt // Int8 returns BigInt
-  converts from BigInt to BigDecimal
  converts from BigInt to BigDecimal
-  division between Int64 / BigInt returns BigFloat
  division between Int64 / BigInt returns BigFloat
-  division between BigRational / UInt64 returns BigRational
  division between BigRational / UInt64 returns BigRational
-  division between BigRational / BigDecimal returns BigRational
  division between BigRational / BigDecimal returns BigRational
-  converts from Float64 to BigDecimal
  converts from Float64 to BigDecimal
-  converts from Float32 to BigRational
  converts from Float32 to BigRational
-  floor_division BigDecimal // Int64 returns BigDecimal
  floor_division BigDecimal // Int64 returns BigDecimal
-  converts from BigRational to UInt16
  converts from BigRational to UInt16
-  converts from UInt32 to BigFloat
  converts from UInt32 to BigFloat
-  initialize from value to BigDecimal
  initialize from value to BigDecimal
-  floor_division UInt64 // BigRational returns UInt64
  floor_division UInt64 // BigRational returns UInt64
-  division between UInt8 / BigFloat returns BigFloat
  division between UInt8 / BigFloat returns BigFloat
-  floor_division BigInt // UInt16 returns BigInt
  floor_division BigInt // UInt16 returns BigInt
-  converts from BigFloat to Int32
  converts from BigFloat to Int32
-  floor_division Int64 // BigDecimal returns Int64
  floor_division Int64 // BigDecimal returns Int64
-  converts from UInt32 to BigRational
  converts from UInt32 to BigRational
-  converts from BigFloat to Int8
  converts from BigFloat to Int8
-  floor_division BigDecimal // BigInt returns BigDecimal
  floor_division BigDecimal // BigInt returns BigDecimal
-  converts from UInt8 to BigInt
  converts from UInt8 to BigInt
-  converts from BigFloat to Int64
  converts from BigFloat to Int64
-  converts from BigRational to UInt32
  converts from BigRational to UInt32
-  converts from BigRational to Int16
  converts from BigRational to Int16
-  division between BigFloat / UInt64 returns BigFloat
  division between BigFloat / UInt64 returns BigFloat
-  converts from BigRational to BigRational
  converts from BigRational to BigRational
-  floor_division BigRational // UInt32 returns BigRational
  floor_division BigRational // UInt32 returns BigRational
-  floor_division BigRational // BigInt returns BigRational
  floor_division BigRational // BigInt returns BigRational
-  division between UInt64 / BigInt returns BigFloat
  division between UInt64 / BigInt returns BigFloat
-  floor_division BigDecimal // UInt16 returns BigDecimal
  floor_division BigDecimal // UInt16 returns BigDecimal
-  converts from UInt8 to BigDecimal
  converts from UInt8 to BigDecimal
-  division between BigDecimal / UInt8 returns BigDecimal
  division between BigDecimal / UInt8 returns BigDecimal
-  floor_division Int8 // BigRational returns Int8
  floor_division Int8 // BigRational returns Int8
-  division between Float64 / BigRational returns BigRational
  division between Float64 / BigRational returns BigRational
-  division between BigRational / Int128 returns BigRational
  division between BigRational / Int128 returns BigRational
-  converts from BigDecimal to UInt32
  converts from BigDecimal to UInt32
-  converts from BigRational to BigInt
  converts from BigRational to BigInt
-  division between Int128 / BigFloat returns BigFloat
  division between Int128 / BigFloat returns BigFloat
-  division between Int8 / BigRational returns BigRational
  division between Int8 / BigRational returns BigRational
-  division between Int32 / BigRational returns BigRational
  division between Int32 / BigRational returns BigRational
-  division between BigFloat / Int32 returns BigFloat
  division between BigFloat / Int32 returns BigFloat
-  division between UInt32 / BigRational returns BigRational
  division between UInt32 / BigRational returns BigRational
-  converts from BigInt to Int16
  converts from BigInt to Int16
-  floor_division BigDecimal // UInt64 returns BigDecimal
  floor_division BigDecimal // UInt64 returns BigDecimal
-  converts from Int16 to BigFloat
  converts from Int16 to BigFloat
-  division between UInt16 / BigDecimal returns BigDecimal
  division between UInt16 / BigDecimal returns BigDecimal
-  converts from BigFloat to BigInt
  converts from BigFloat to BigInt
-  floor_division BigDecimal // UInt32 returns BigDecimal
  floor_division BigDecimal // UInt32 returns BigDecimal
-  converts from BigInt to Int64
  converts from BigInt to Int64
-  division between BigDecimal / Int16 returns BigDecimal
  division between BigDecimal / Int16 returns BigDecimal
-  converts from BigFloat to Float64
  converts from BigFloat to Float64
-  floor_division UInt8 // BigRational returns UInt8
  floor_division UInt8 // BigRational returns UInt8
-  converts from UInt8 to BigInt
  converts from UInt8 to BigInt
-  converts from Int8 to BigDecimal
  converts from Int8 to BigDecimal
-  converts from BigFloat to BigRational
  converts from BigFloat to BigRational
-  converts from UInt64 to BigRational
  converts from UInt64 to BigRational
-  converts from BigRational to UInt16
  converts from BigRational to UInt16
-  converts from Int8 to BigDecimal
  converts from Int8 to BigDecimal
-  floor_division BigInt // BigInt returns BigInt
  floor_division BigInt // BigInt returns BigInt
-  division between BigInt / BigRational returns BigRational
  division between BigInt / BigRational returns BigRational
-  converts from BigRational to BigDecimal
  converts from BigRational to BigDecimal
-  floor_division BigInt // Int32 returns BigInt
  floor_division BigInt // Int32 returns BigInt
-  division between BigRational / Float64 returns BigRational
  division between BigRational / Float64 returns BigRational
-  floor_division BigInt // Float32 returns BigInt
  floor_division BigInt // Float32 returns BigInt
-  initialize from value to BigInt
  initialize from value to BigInt
-  converts from UInt16 to BigInt
  converts from UInt16 to BigInt
-  converts from BigFloat to Int32
  converts from BigFloat to Int32
-  converts from Int32 to BigRational
  converts from Int32 to BigRational
-  floor_division Float64 // BigInt returns Float64
  floor_division Float64 // BigInt returns Float64
-  floor_division UInt64 // BigInt returns UInt64
  floor_division UInt64 // BigInt returns UInt64
-  converts from BigFloat to BigFloat
  converts from BigFloat to BigFloat
-  converts from BigRational to Float64
  converts from BigRational to Float64
-  converts from BigFloat to Int16
  converts from BigFloat to Int16
-  converts from Float64 to BigDecimal
  converts from Float64 to BigDecimal
-  converts from BigInt to Int8
  converts from BigInt to Int8
-  division between Float32 / BigFloat returns BigFloat
  division between Float32 / BigFloat returns BigFloat
-  converts from BigFloat to Float32
  converts from BigFloat to Float32
-  converts from BigInt to UInt8
  converts from BigInt to UInt8
-  converts from UInt32 to BigDecimal
  converts from UInt32 to BigDecimal
-  converts from BigFloat to UInt64
  converts from BigFloat to UInt64
-  converts from BigFloat to Int8
  converts from BigFloat to Int8
-  converts from BigInt to UInt32
  converts from BigInt to UInt32
-  floor_division UInt16 // BigInt returns UInt16
  floor_division UInt16 // BigInt returns UInt16
-  converts from BigFloat to UInt8
  converts from BigFloat to UInt8
-  converts from BigFloat to UInt32
  converts from BigFloat to UInt32
-  division between BigInt / UInt16 returns BigFloat
  division between BigInt / UInt16 returns BigFloat
-  division between BigRational / BigFloat returns BigRational
  division between BigRational / BigFloat returns BigRational
-  floor_division UInt8 // BigDecimal returns UInt8
  floor_division UInt8 // BigDecimal returns UInt8
-  division between BigRational / UInt16 returns BigRational
  division between BigRational / UInt16 returns BigRational
-  converts from UInt64 to BigDecimal
  converts from UInt64 to BigDecimal
-  converts from BigRational to Int8
  converts from BigRational to Int8
-  floor_division UInt32 // BigInt returns UInt32
  floor_division UInt32 // BigInt returns UInt32
-  floor_division BigDecimal // BigRational returns BigDecimal
  floor_division BigDecimal // BigRational returns BigDecimal
-  converts from BigInt to UInt16
  converts from BigInt to UInt16
-  converts from BigInt to BigRational
  converts from BigInt to BigRational
-  division between BigFloat / BigFloat returns BigFloat
  division between BigFloat / BigFloat returns BigFloat
-  converts from Int64 to BigRational
  converts from Int64 to BigRational
-  converts from BigInt to BigInt
  converts from BigInt to BigInt
-  floor_division BigDecimal // Float32 returns BigDecimal
  floor_division BigDecimal // Float32 returns BigDecimal
-  converts from BigRational to BigRational
  converts from BigRational to BigRational
-  converts from UInt64 to BigInt
  converts from UInt64 to BigInt
-  floor_division Float64 // BigDecimal returns Float64
  floor_division Float64 // BigDecimal returns Float64
-  converts from BigFloat to BigDecimal
  converts from BigFloat to BigDecimal
-  floor_division BigRational // UInt8 returns BigRational
  floor_division BigRational // UInt8 returns BigRational
-  division between BigFloat / UInt32 returns BigFloat
  division between BigFloat / UInt32 returns BigFloat
-  floor_division Int8 // BigInt returns Int8
  floor_division Int8 // BigInt returns Int8
-  division between BigDecimal / UInt16 returns BigDecimal
  division between BigDecimal / UInt16 returns BigDecimal
-  division between BigRational / Int16 returns BigRational
  division between BigRational / Int16 returns BigRational
-  converts from BigRational to Int16
  converts from BigRational to Int16
-  converts from BigRational to Float32
  converts from BigRational to Float32
-  division between Float32 / BigRational returns BigRational
  division between Float32 / BigRational returns BigRational
-  converts from BigFloat to Int16
  converts from BigFloat to Int16
-  division between BigInt / UInt32 returns BigFloat
  division between BigInt / UInt32 returns BigFloat
-  floor_division BigInt // UInt64 returns BigInt
  floor_division BigInt // UInt64 returns BigInt
-  division between BigFloat / BigDecimal returns BigDecimal
  division between BigFloat / BigDecimal returns BigDecimal
-  floor_division BigRational // Int8 returns BigRational
  floor_division BigRational // Int8 returns BigRational
-  converts from BigRational to Int8
  converts from BigRational to Int8
-  division between BigDecimal / UInt64 returns BigDecimal
  division between BigDecimal / UInt64 returns BigDecimal
-  converts from Int16 to BigDecimal
  converts from Int16 to BigDecimal
-  converts from BigFloat to BigRational
  converts from BigFloat to BigRational
-  division between BigInt / BigDecimal returns BigDecimal
  division between BigInt / BigDecimal returns BigDecimal
-  converts from BigDecimal to Float32
  converts from BigDecimal to Float32
-  converts from BigRational to UInt8
  converts from BigRational to UInt8
-  floor_division BigFloat // Float64 returns BigFloat
  floor_division BigFloat // Float64 returns BigFloat
-  division between UInt16 / BigFloat returns BigFloat
  division between UInt16 / BigFloat returns BigFloat
-  division between BigRational / BigInt returns BigRational
  division between BigRational / BigInt returns BigRational
-  converts from BigRational to UInt64
  converts from BigRational to UInt64
-  converts from BigFloat to UInt8
  converts from BigFloat to UInt8
-  converts from UInt16 to BigFloat
  converts from UInt16 to BigFloat
-  division between Int64 / BigDecimal returns BigDecimal
  division between Int64 / BigDecimal returns BigDecimal
-  converts from BigInt to Int16
  converts from BigInt to Int16
-  converts from BigDecimal to Int16
  converts from BigDecimal to Int16
-  converts from Int64 to BigFloat
  converts from Int64 to BigFloat
-  division between BigDecimal / Int128 returns BigDecimal
  division between BigDecimal / Int128 returns BigDecimal
-  division between Float64 / BigDecimal returns BigDecimal
  division between Float64 / BigDecimal returns BigDecimal
-  floor_division BigFloat // UInt64 returns BigFloat
  floor_division BigFloat // UInt64 returns BigFloat
-  division between BigInt / UInt8 returns BigFloat
  division between BigInt / UInt8 returns BigFloat
-  floor_division UInt16 // BigRational returns UInt16
  floor_division UInt16 // BigRational returns UInt16
-  converts from Float64 to BigInt
  converts from Float64 to BigInt
-  floor_division Int32 // BigDecimal returns Int32
  floor_division Int32 // BigDecimal returns Int32
-  converts from Int32 to BigInt
  converts from Int32 to BigInt
-  converts from BigDecimal to UInt16
  converts from BigDecimal to UInt16
-  converts from UInt32 to BigFloat
  converts from UInt32 to BigFloat
-  division between BigRational / Float32 returns BigRational
  division between BigRational / Float32 returns BigRational
-  division between BigFloat / Int64 returns BigFloat
  division between BigFloat / Int64 returns BigFloat
-  converts from BigFloat to UInt32
  converts from BigFloat to UInt32
-  converts from BigDecimal to Int64
  converts from BigDecimal to Int64
-  division between BigInt / Int16 returns BigFloat
  division between BigInt / Int16 returns BigFloat
-  converts from BigFloat to Int64
  converts from BigFloat to Int64
-  converts from Float64 to BigRational
  converts from Float64 to BigRational
-  division between UInt128 / BigInt returns BigFloat
  division between UInt128 / BigInt returns BigFloat
-  converts from BigFloat to Float32
  converts from BigFloat to Float32
-  division between BigRational / UInt8 returns BigRational
  division between BigRational / UInt8 returns BigRational
-  division between BigFloat / BigRational returns BigRational
  division between BigFloat / BigRational returns BigRational
-  division between BigFloat / Int16 returns BigFloat
  division between BigFloat / Int16 returns BigFloat
-  division between BigDecimal / BigFloat returns BigDecimal
  division between BigDecimal / BigFloat returns BigDecimal
-  converts from Float32 to BigFloat
  converts from Float32 to BigFloat
-  floor_division Float32 // BigDecimal returns Float32
  floor_division Float32 // BigDecimal returns Float32
-  converts from BigRational to Int64
  converts from BigRational to Int64
-  converts from BigRational to Int64
  converts from BigRational to Int64
-  converts from UInt8 to BigFloat
  converts from UInt8 to BigFloat
-  converts from UInt32 to BigInt
  converts from UInt32 to BigInt
-  division between BigDecimal / Int8 returns BigDecimal
  division between BigDecimal / Int8 returns BigDecimal
-  converts from BigDecimal to BigDecimal
  converts from BigDecimal to BigDecimal
-  floor_division BigFloat // UInt8 returns BigFloat
  floor_division BigFloat // UInt8 returns BigFloat
-  converts from Int16 to BigRational
  converts from Int16 to BigRational
-  converts from Int32 to BigDecimal
  converts from Int32 to BigDecimal
-  floor_division BigFloat // UInt16 returns BigFloat
  floor_division BigFloat // UInt16 returns BigFloat
-  division between BigDecimal / UInt128 returns BigDecimal
  division between BigDecimal / UInt128 returns BigDecimal
-  converts from BigDecimal to UInt8
  converts from BigDecimal to UInt8
-  division between BigFloat / UInt8 returns BigFloat
  division between BigFloat / UInt8 returns BigFloat
-  division between BigDecimal / BigInt returns BigDecimal
  division between BigDecimal / BigInt returns BigDecimal
-  division between BigRational / BigRational returns BigRational
  division between BigRational / BigRational returns BigRational
-  division between Int32 / BigDecimal returns BigDecimal
  division between Int32 / BigDecimal returns BigDecimal
-  converts from BigDecimal to BigRational
  converts from BigDecimal to BigRational
-  division between Int64 / BigRational returns BigRational
  division between Int64 / BigRational returns BigRational
-  division between Float32 / BigInt returns BigFloat
  division between Float32 / BigInt returns BigFloat
-  converts from BigRational to BigInt
  converts from BigRational to BigInt
-  division between UInt128 / BigRational returns BigRational
  division between UInt128 / BigRational returns BigRational
-  converts from Int64 to BigDecimal
  converts from Int64 to BigDecimal
-  floor_division Float32 // BigFloat returns Float32
  floor_division Float32 // BigFloat returns Float32
-  converts from UInt64 to BigInt
  converts from UInt64 to BigInt
-  converts from BigInt to BigFloat
  converts from BigInt to BigFloat
-  division between Int8 / BigInt returns BigFloat
  division between Int8 / BigInt returns BigFloat
-  floor_division BigInt // Int16 returns BigInt
  floor_division BigInt // Int16 returns BigInt
-  floor_division BigDecimal // Int32 returns BigDecimal
  floor_division BigDecimal // Int32 returns BigDecimal
-  floor_division BigInt // BigFloat returns BigInt
  floor_division BigInt // BigFloat returns BigInt
-  converts from BigRational to Int32
  converts from BigRational to Int32
-  converts from BigDecimal to BigDecimal
  converts from BigDecimal to BigDecimal
-  converts from BigInt to Float64
  converts from BigInt to Float64
-  division between UInt64 / BigRational returns BigRational
  division between UInt64 / BigRational returns BigRational
-  division between BigFloat / Float64 returns BigFloat
  division between BigFloat / Float64 returns BigFloat
-  division between Int8 / BigDecimal returns BigDecimal
  division between Int8 / BigDecimal returns BigDecimal
-  floor_division BigRational // Int64 returns BigRational
  floor_division BigRational // Int64 returns BigRational
-  division between BigDecimal / BigDecimal returns BigDecimal
  division between BigDecimal / BigDecimal returns BigDecimal
-  converts from BigFloat to Float64
  converts from BigFloat to Float64
-  converts from Int8 to BigRational
  converts from Int8 to BigRational
-  converts from BigDecimal to UInt64
  converts from BigDecimal to UInt64
-  converts from Int16 to BigRational
  converts from Int16 to BigRational
-  converts from Int8 to BigFloat
  converts from Int8 to BigFloat
-  floor_division UInt32 // BigRational returns UInt32
  floor_division UInt32 // BigRational returns UInt32
-  converts from BigInt to Int8
  converts from BigInt to Int8
-  floor_division Int16 // BigInt returns Int16
  floor_division Int16 // BigInt returns Int16
-  division between BigDecimal / UInt32 returns BigDecimal
  division between BigDecimal / UInt32 returns BigDecimal
-  converts from BigDecimal to Int8
  converts from BigDecimal to Int8
-  floor_division BigInt // BigRational returns BigInt
  floor_division BigInt // BigRational returns BigInt
-  floor_division BigDecimal // UInt8 returns BigDecimal
  floor_division BigDecimal // UInt8 returns BigDecimal
-  floor_division BigFloat // Float32 returns BigFloat
  floor_division BigFloat // Float32 returns BigFloat
-  converts from UInt64 to BigDecimal
  converts from UInt64 to BigDecimal
-  converts from BigInt to BigFloat
  converts from BigInt to BigFloat
-  floor_division BigRational // BigDecimal returns BigRational
  floor_division BigRational // BigDecimal returns BigRational
-  converts from BigRational to Float64
  converts from BigRational to Float64
-  floor_division BigDecimal // BigFloat returns BigDecimal
  floor_division BigDecimal // BigFloat returns BigDecimal
-  division between Int64 / BigFloat returns BigFloat
  division between Int64 / BigFloat returns BigFloat
-  division between BigInt / BigInt returns BigFloat
  division between BigInt / BigInt returns BigFloat
-  converts from Int8 to BigInt
  converts from Int8 to BigInt
-  converts from BigRational to UInt64
  converts from BigRational to UInt64
-  floor_division Int8 // BigDecimal returns Int8
  floor_division Int8 // BigDecimal returns Int8
-  converts from BigInt to BigDecimal
  converts from BigInt to BigDecimal
-  converts from UInt64 to BigFloat
  converts from UInt64 to BigFloat
-  division between BigInt / Int32 returns BigFloat
  division between BigInt / Int32 returns BigFloat
-  floor_division BigFloat // Int64 returns BigFloat
  floor_division BigFloat // Int64 returns BigFloat
-  division between Int32 / BigInt returns BigFloat
  division between Int32 / BigInt returns BigFloat
-  floor_division UInt16 // BigFloat returns UInt16
  floor_division UInt16 // BigFloat returns UInt16
-  converts from Int32 to BigRational
  converts from Int32 to BigRational
-  division between Int16 / BigFloat returns BigFloat
  division between Int16 / BigFloat returns BigFloat
-  converts from Int8 to BigFloat
  converts from Int8 to BigFloat
-  division between Int8 / BigFloat returns BigFloat
  division between Int8 / BigFloat returns BigFloat
-  division between UInt32 / BigFloat returns BigFloat
  division between UInt32 / BigFloat returns BigFloat
-  converts from UInt8 to BigDecimal
  converts from UInt8 to BigDecimal
-  floor_division BigFloat // Int32 returns BigFloat
  floor_division BigFloat // Int32 returns BigFloat
-  converts from BigDecimal to UInt64
  converts from BigDecimal to UInt64
-  floor_division BigRational // Float32 returns BigRational
  floor_division BigRational // Float32 returns BigRational
-  division between BigInt / BigFloat returns BigFloat
  division between BigInt / BigFloat returns BigFloat
-  floor_division Int32 // BigInt returns Int32
  floor_division Int32 // BigInt returns Int32
-  floor_division BigFloat // BigDecimal returns BigFloat
  floor_division BigFloat // BigDecimal returns BigFloat
-  converts from Int16 to BigInt
  converts from Int16 to BigInt
-  floor_division BigInt // Int64 returns BigInt
  floor_division BigInt // Int64 returns BigInt
-  converts from BigFloat to UInt16
  converts from BigFloat to UInt16
-  floor_division BigFloat // BigFloat returns BigFloat
  floor_division BigFloat // BigFloat returns BigFloat
-  floor_division Int16 // BigDecimal returns Int16
  floor_division Int16 // BigDecimal returns Int16
-  converts from UInt8 to BigRational
  converts from UInt8 to BigRational
-  converts from BigRational to Float32
  converts from BigRational to Float32
-  floor_division Float64 // BigFloat returns Float64
  floor_division Float64 // BigFloat returns Float64
-  converts from Float32 to BigInt
  converts from Float32 to BigInt
-  converts from UInt16 to BigDecimal
  converts from UInt16 to BigDecimal
-  converts from Float32 to BigRational
  converts from Float32 to BigRational
-  converts from BigInt to UInt16
  converts from BigInt to UInt16
-  converts from BigRational to UInt32
  converts from BigRational to UInt32
-  floor_division Int32 // BigRational returns Int32
  floor_division Int32 // BigRational returns Int32
-  converts from UInt16 to BigDecimal
  converts from UInt16 to BigDecimal
-  converts from BigFloat to UInt16
  converts from BigFloat to UInt16
-  converts from Float32 to BigDecimal
  converts from Float32 to BigDecimal
-  floor_division Int16 // BigFloat returns Int16
  floor_division Int16 // BigFloat returns Int16
-  floor_division BigRational // UInt16 returns BigRational
  floor_division BigRational // UInt16 returns BigRational
-  floor_division Float32 // BigRational returns Float32
  floor_division Float32 // BigRational returns Float32
-  division between BigFloat / BigInt returns BigFloat
  division between BigFloat / BigInt returns BigFloat
-  converts from BigFloat to BigFloat
  converts from BigFloat to BigFloat
-  floor_division BigDecimal // BigDecimal returns BigDecimal
  floor_division BigDecimal // BigDecimal returns BigDecimal
-  converts from BigInt to Int32
  converts from BigInt to Int32
-  division between Float64 / BigInt returns BigFloat
  division between Float64 / BigInt returns BigFloat
-  floor_division UInt64 // BigDecimal returns UInt64
  floor_division UInt64 // BigDecimal returns UInt64
-  division between BigInt / Int64 returns BigFloat
  division between BigInt / Int64 returns BigFloat
-  floor_division BigDecimal // Int8 returns BigDecimal
  floor_division BigDecimal // Int8 returns BigDecimal
-  division between BigInt / UInt64 returns BigFloat
  division between BigInt / UInt64 returns BigFloat
-  division between Int16 / BigInt returns BigFloat
  division between Int16 / BigInt returns BigFloat
-  converts from Int32 to BigInt
  converts from Int32 to BigInt
-  floor_division Int32 // BigFloat returns Int32
  floor_division Int32 // BigFloat returns Int32
-  converts from BigInt to UInt32
  converts from BigInt to UInt32
-  floor_division UInt8 // BigFloat returns UInt8
  floor_division UInt8 // BigFloat returns UInt8
-  converts from BigDecimal to Int8
  converts from BigDecimal to Int8
-  converts from BigDecimal to Float64
  converts from BigDecimal to Float64
-  floor_division UInt32 // BigFloat returns UInt32
  floor_division UInt32 // BigFloat returns UInt32
-  initialize from value to BigFloat
  initialize from value to BigFloat
-  floor_division BigRational // UInt64 returns BigRational
  floor_division BigRational // UInt64 returns BigRational
-  floor_division UInt64 // BigFloat returns UInt64
  floor_division UInt64 // BigFloat returns UInt64
-  converts from BigRational to UInt8
  converts from BigRational to UInt8
-  converts from BigDecimal to UInt16
  converts from BigDecimal to UInt16
-  division between BigFloat / Int8 returns BigFloat
  division between BigFloat / Int8 returns BigFloat
-  division between Int16 / BigDecimal returns BigDecimal
  division between Int16 / BigDecimal returns BigDecimal
-  division between BigInt / Float32 returns BigFloat
  division between BigInt / Float32 returns BigFloat
-  converts from Int64 to BigInt
  converts from Int64 to BigInt
-  floor_division BigInt // BigDecimal returns BigInt
  floor_division BigInt // BigDecimal returns BigInt
-  converts from Int16 to BigDecimal
  converts from Int16 to BigDecimal
-  converts from Int32 to BigFloat
  converts from Int32 to BigFloat
-  division between Float32 / BigDecimal returns BigDecimal
  division between Float32 / BigDecimal returns BigDecimal
-  floor_division BigRational // BigRational returns BigRational
  floor_division BigRational // BigRational returns BigRational
-  division between BigInt / UInt128 returns BigFloat
  division between BigInt / UInt128 returns BigFloat
-  floor_division Int8 // BigFloat returns Int8
  floor_division Int8 // BigFloat returns Int8
-  initialize from value to BigRational
  initialize from value to BigRational
-  converts from UInt8 to BigRational
  converts from UInt8 to BigRational
-  division between BigRational / UInt128 returns BigRational
  division between BigRational / UInt128 returns BigRational
-  floor_division BigFloat // UInt32 returns BigFloat
  floor_division BigFloat // UInt32 returns BigFloat
-  converts from BigInt to Float32
  converts from BigInt to Float32
-  converts from BigDecimal to Int32
  converts from BigDecimal to Int32
-  converts from Int64 to BigRational
  converts from Int64 to BigRational
-  converts from Float32 to BigInt
  converts from Float32 to BigInt
-  division between UInt64 / BigDecimal returns BigDecimal
  division between UInt64 / BigDecimal returns BigDecimal
-  floor_division UInt16 // BigDecimal returns UInt16
  floor_division UInt16 // BigDecimal returns UInt16
-  floor_division BigRational // Int32 returns BigRational
  floor_division BigRational // Int32 returns BigRational
-  converts from BigInt to UInt64
  converts from BigInt to UInt64
-  division between UInt8 / BigDecimal returns BigDecimal
  division between UInt8 / BigDecimal returns BigDecimal
-  floor_division Float64 // BigRational returns Float64
  floor_division Float64 // BigRational returns Float64
-  division between BigRational / Int32 returns BigRational
  division between BigRational / Int32 returns BigRational
-  converts from Int64 to BigFloat
  converts from Int64 to BigFloat
-  division between BigFloat / Int128 returns BigFloat
  division between BigFloat / Int128 returns BigFloat
-  floor_division BigFloat // Int16 returns BigFloat
  floor_division BigFloat // Int16 returns BigFloat
-  floor_division BigFloat // Int8 returns BigFloat
  floor_division BigFloat // Int8 returns BigFloat
-  division between UInt32 / BigDecimal returns BigDecimal
  division between UInt32 / BigDecimal returns BigDecimal
-  converts from Float64 to BigRational
  converts from Float64 to BigRational
-  converts from UInt32 to BigInt
  converts from UInt32 to BigInt
-  converts from BigRational to BigDecimal
  converts from BigRational to BigDecimal
-  division between BigFloat / UInt128 returns BigFloat
  division between BigFloat / UInt128 returns BigFloat
-  floor_division UInt32 // BigDecimal returns UInt32
  floor_division UInt32 // BigDecimal returns UInt32
-  division between BigDecimal / Float32 returns BigDecimal
  division between BigDecimal / Float32 returns BigDecimal
-  division between BigDecimal / BigDecimal returns BigDecimal
  division between BigDecimal / BigDecimal returns BigDecimal
-  converts from Int8 to BigInt
  converts from Int8 to BigInt
-  converts from BigInt to Int32
  converts from BigInt to Int32
-  floor_division UInt8 // BigInt returns UInt8
  floor_division UInt8 // BigInt returns UInt8
-  converts from Float64 to BigFloat
  converts from Float64 to BigFloat
-  converts from BigDecimal to BigFloat
  converts from BigDecimal to BigFloat
-  converts from UInt64 to BigFloat
  converts from UInt64 to BigFloat
-  converts from BigDecimal to Int64
  converts from BigDecimal to Int64
-  converts from BigDecimal to UInt32
  converts from BigDecimal to UInt32
-  converts from BigDecimal to UInt8
  converts from BigDecimal to UInt8
-  floor_division Float32 // BigInt returns Float32
  floor_division Float32 // BigInt returns Float32
-  division between BigDecimal / Int32 returns BigDecimal
  division between BigDecimal / Int32 returns BigDecimal
-  converts from BigDecimal to BigFloat
  converts from BigDecimal to BigFloat
-  floor_division BigRational // Float64 returns BigRational
  floor_division BigRational // Float64 returns BigRational
-  division between BigDecimal / Int64 returns BigDecimal
  division between BigDecimal / Int64 returns BigDecimal
-  floor_division BigRational // BigFloat returns BigRational
  floor_division BigRational // BigFloat returns BigRational
-  converts from BigFloat to BigInt
  converts from BigFloat to BigInt
-  converts from Float64 to BigFloat
  converts from Float64 to BigFloat
-  converts from Int16 to BigFloat
  converts from Int16 to BigFloat
-  floor_division BigInt // UInt8 returns BigInt
  floor_division BigInt // UInt8 returns BigInt
-  division between Int128 / BigInt returns BigFloat
  division between Int128 / BigInt returns BigFloat
-  converts from BigDecimal to Int32
  converts from BigDecimal to Int32
-  converts from UInt32 to BigDecimal
  converts from UInt32 to BigDecimal
-  converts from UInt16 to BigFloat
  converts from UInt16 to BigFloat
-  floor_division BigDecimal // Float64 returns BigDecimal
  floor_division BigDecimal // Float64 returns BigDecimal
-  converts from Int8 to BigRational
  converts from Int8 to BigRational
-  floor_division Int64 // BigFloat returns Int64
  floor_division Int64 // BigFloat returns Int64
-  converts from UInt16 to BigRational
  converts from UInt16 to BigRational
-  division between Int32 / BigFloat returns BigFloat
  division between Int32 / BigFloat returns BigFloat
-  floor_division Int64 // BigRational returns Int64
  floor_division Int64 // BigRational returns Int64
-  division between UInt128 / BigFloat returns BigFloat
  division between UInt128 / BigFloat returns BigFloat
-  division between BigRational / Int64 returns BigRational
  division between BigRational / Int64 returns BigRational
-  division between BigInt / Int128 returns BigFloat
  division between BigInt / Int128 returns BigFloat
-  converts from UInt32 to BigRational
  converts from UInt32 to BigRational
-  converts from BigRational to BigFloat
  converts from BigRational to BigFloat
-  division between UInt64 / BigFloat returns BigFloat
  division between UInt64 / BigFloat returns BigFloat
-  division between Int128 / BigRational returns BigRational
  division between Int128 / BigRational returns BigRational
-  floor_division BigInt // Float64 returns BigInt
  floor_division BigInt // Float64 returns BigInt
-  division between UInt32 / BigInt returns BigFloat
  division between UInt32 / BigInt returns BigFloat
-  converts from Float32 to BigDecimal
  converts from Float32 to BigDecimal
-  floor_division BigDecimal // Int16 returns BigDecimal
  floor_division BigDecimal // Int16 returns BigDecimal
-  division between Int128 / BigDecimal returns BigDecimal
  division between Int128 / BigDecimal returns BigDecimal
-  converts from Float32 to BigFloat
  converts from Float32 to BigFloat
-  converts from BigDecimal to Float32
  converts from BigDecimal to Float32
-  division between BigDecimal / BigRational returns BigRational
  division between BigDecimal / BigRational returns BigRational
-  converts from BigInt to Int64
  converts from BigInt to Int64
-  converts from Int64 to BigInt
  converts from Int64 to BigInt
-  division between UInt16 / BigRational returns BigRational
  division between UInt16 / BigRational returns BigRational
-  converts from BigDecimal to Int16
  converts from BigDecimal to Int16
-  converts from Int32 to BigDecimal
  converts from Int32 to BigDecimal
-  converts from BigDecimal to BigRational
  converts from BigDecimal to BigRational
-  converts from UInt16 to BigInt
  converts from UInt16 to BigInt
-  floor_division Int16 // BigRational returns Int16
  floor_division Int16 // BigRational returns Int16
-  division between Int16 / BigRational returns BigRational
  division between Int16 / BigRational returns BigRational
-  converts from Int32 to BigFloat
  converts from Int32 to BigFloat
-  converts from Int16 to BigInt
  converts from Int16 to BigInt
-  converts from BigInt to UInt8
  converts from BigInt to UInt8
-  converts from BigDecimal to BigInt
  converts from BigDecimal to BigInt
-  division between Float64 / BigFloat returns BigFloat
  division between Float64 / BigFloat returns BigFloat
-  converts from BigDecimal to BigInt
  converts from BigDecimal to BigInt
-  converts from BigFloat to BigDecimal
  converts from BigFloat to BigDecimal
-  converts from UInt64 to BigRational
  converts from UInt64 to BigRational
-  converts from BigInt to Float64
  converts from BigInt to Float64
-  converts from BigFloat to UInt64
  converts from BigFloat to UInt64
-  division between BigInt / Int8 returns BigFloat
  division between BigInt / Int8 returns BigFloat
-  floor_division Int64 // BigInt returns Int64
  floor_division Int64 // BigInt returns Int64
-  division between UInt8 / BigInt returns BigFloat
  division between UInt8 / BigInt returns BigFloat
-  division between UInt16 / BigInt returns BigFloat
  division between UInt16 / BigInt returns BigFloat
-OpenSSL::X509::Name
-  add_entry
  add_entry
-  parse
  parse
-Syscall
-  can call into the system successfully
  can call into the system successfully
-MIME::MediaType
-  #[]=
  #[]=
-  .new
-    create new instance
    create new instance
-    raises for invalid parameter name
    raises for invalid parameter name
-  #sub_type
  #sub_type
-  #type
  #type
-  .parse
-    sets default charset to utf-8 for text media types
    sets default charset to utf-8 for text media types
-    parses params
    parses params
-    parses media type
    parses media type
-    parses params with encoding
    parses params with encoding
-  #each_parameter
  #each_parameter
-  #to_s
  #to_s
-  #fetch
  #fetch
+  shuffles
  shuffles
+  optimizes hash for Bytes
  optimizes hash for Bytes
+  "#each" iterator
  "#each" iterator
+  #unsafe_slice_of
+    reinterprets a slice's elements
    reinterprets a slice's elements
+Crystal::Digest::SHA1
+  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
+  resets
  resets
+  can't call #final more than once
  can't call #final more than once
+  does digest for ""
  does digest for ""
+  does base64digest for ""
  does base64digest for ""
+  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
+  does digest for "a" in a block
  does digest for "a" in a block
+  digest with file content
  digest with file content
+  does digest for "The quick brown fox jumps over the lazy dog"
  does digest for "The quick brown fox jumps over the lazy dog"
+  does base64digest for "a"
  does base64digest for "a"
+  can't call #final more than once
  can't call #final more than once
+  does base64digest for "The quick brown fox jumps over the lazy dog"
  does base64digest for "The quick brown fox jumps over the lazy dog"
+  does digest for "" in a block
  does digest for "" in a block
+  can't call #final more than once
  can't call #final more than once
+  returns the digest_size
  returns the digest_size
+  resets
  resets
+  #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
+  .dup
+    preserves type
    preserves type
+    leads to not sharing state
    leads to not sharing state
+    preserves value
    preserves value
+    leads to deterministic updates
    leads to deterministic updates
+  resets
  resets
+  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
+  does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+  does digest for "fooø"
  does digest for "fooø"
+  does hexdigest for "a"
  does hexdigest for "a"
+  can't call #final more than once
  can't call #final more than once
+  resets
  resets
+  does digest for "The quick brown fox jumps over the lazy dog" in a block
  does digest for "The quick brown fox jumps over the lazy dog" in a block
+  does digest for "abc" in a block
  does digest for "abc" in a block
+  does digest for "fooø" in a block
  does digest for "fooø" in a block
+  resets
  resets
+  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
+  context are independent
  context are independent
+  does hexdigest for "fooø"
  does hexdigest for "fooø"
+  does base64digest for "fooø"
  does base64digest for "fooø"
+  resets
  resets
+  resets
  resets
+  can't call #final more than once
  can't call #final more than once
+  does hexdigest for "The quick brown fox jumps over the lazy dog"
  does hexdigest for "The quick brown fox jumps over the lazy dog"
+  can't call #final more than once
  can't call #final more than once
+  does base64digest for "abc"
  does base64digest for "abc"
+  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+  can't call #final more than once
  can't call #final more than once
+  does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
  does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
+  does digest for "a"
  does digest for "a"
+  does digest for "abc"
  does digest for "abc"
+  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
+  does hexdigest for ""
  does hexdigest for ""
+  does hexdigest for "abc"
  does hexdigest for "abc"
 HTTP::CompressHandler
-  don't try to compress upgraded response
  don't try to compress upgraded response
-  deflates gzip if has deflate in 'deflate' Accept-Encoding header
  deflates gzip if has deflate in 'deflate' Accept-Encoding header
-  fix content-length header
  fix content-length header
   doesn't deflates if doesn't have 'deflate' in Accept-Encoding header
  doesn't deflates if doesn't have 'deflate' in Accept-Encoding header
   doesn't compress twice
  doesn't compress twice
-  don't try to compress for empty body responses
  don't try to compress for empty body responses
   deflates if has deflate in 'deflate' Accept-Encoding header
  deflates if has deflate in 'deflate' Accept-Encoding header
+  don't try to compress upgraded response
  don't try to compress upgraded response
+  deflates gzip if has deflate in 'deflate' Accept-Encoding header
  deflates gzip if has deflate in 'deflate' Accept-Encoding header
+  don't try to compress for empty body responses
  don't try to compress for empty body responses
+  fix content-length header
  fix content-length header
+XML::Builder
+  writes element with attributes as named tuple, nesting
  writes element with attributes as named tuple, nesting
+  #cdata
+    writes cdata
    writes cdata
+    escapes ]]> sequences
    escapes ]]> sequences
+    writes cdata with block
    writes cdata with block
+  writes element with prefix
  writes element with prefix
+  writes element with attributes as hash
  writes element with attributes as hash
+  writes comment
  writes comment
+  writes to string
  writes to string
+  errors on invalid element names
  errors on invalid element names
+  writes DTD
  writes DTD
+  writes document
  writes document
+  writes element with namespace
  writes element with namespace
+  errors on invalid element name with prefix
  errors on invalid element name with prefix
+  writes text
  writes text
+  writes attribute with namespace
  writes attribute with namespace
+  writes namespace
  writes namespace
+  sets indent with count
  sets indent with count
+  errors on invalid element name with prefix and namespace
  errors on invalid element name with prefix and namespace
+  writes element
  writes element
+  errors on null byte
  errors on null byte
+  writes DTD with block
  writes DTD with block
+  writes element with namespace, without block
  writes element with namespace, without block
+  writes element with attributes as named tuple
  writes element with attributes as named tuple
+  writes element with namespace
  writes element with namespace
+  writes comment with block
  writes comment with block
+  writes to IO
  writes to IO
+  writes element with attributes as hash, nesting
  writes element with attributes as hash, nesting
+  sets indent with string
  sets indent with string
+  sets quote char
  sets quote char
+  writes attribute
  writes attribute
+  writes nested element
  writes nested element
+OpenSSL::HMAC
+  computes SHA256
  computes SHA256
+  computes SHA512
  computes SHA512
+  computes MD5
  computes MD5
+  computes SHA224
  computes SHA224
+  computes SHA1
  computes SHA1
+  computes SHA384
  computes SHA384
+OAuth::Consumer
+  gets authorize uri
+    with callback url
    with callback url
+    without block
    without block
+    without callback url
    without callback url
+    without custom authorize uri
    without custom authorize uri
+    with absolute uri
    with absolute uri
+URI::Params
+  #==
+    compares other
    compares other
+    compares other types
    compares other types
+  #delete_all
+    deletes all values for provided param name and returns them
    deletes all values for provided param name and returns them
+  #delete
+    deletes first value for provided param name and returns it
    deletes first value for provided param name and returns it
+  #[]=(name, value)
+    sets value for provided param name
    sets value for provided param name
+    adds new name => value pair if there is no such param
    adds new name => value pair if there is no such param
+    sets value for provided param name (array)
    sets value for provided param name (array)
+  #add(name, value)
+    appends new value for provided param name
    appends new value for provided param name
+  #has_key?(name)
+    return false if param with provided name does not exist
    return false if param with provided name does not exist
+    returns true if param with provided name exists
    returns true if param with provided name exists
+  #to_s
+    serializes params to http form
    serializes params to http form
+    turns spaces to + by default
    turns spaces to + by default
+    turns spaces to %20 if space_to_plus is false
    turns spaces to %20 if space_to_plus is false
+  #[]?(name)
+    return nil when there is no such param
    return nil when there is no such param
+    returns first value for provided param name
    returns first value for provided param name
+  #fetch(name, &block)
+    returns first value for provided param name
    returns first value for provided param name
+    return default value when there is no such param
    return default value when there is no such param
+  #set_all(name, values)
+    sets values for provided param name
    sets values for provided param name
+  .build
+    builds form from {"foo" => [""], "bar" => [""]}
    builds form from {"foo" => [""], "bar" => [""]}
+    builds form from {"foo" => [""]}
    builds form from {"foo" => [""]}
+    builds form from {"foo" => ["bar"], "baz" => ["qux"]}
    builds form from {"foo" => ["bar"], "baz" => ["qux"]}
+    builds form from {"foo" => ["hello+world"]}
    builds form from {"foo" => ["hello+world"]}
+    builds form from {"bar" => [""], "foo" => [""]}
    builds form from {"bar" => [""], "foo" => [""]}
+    builds form from {"foo" => ["bar", "baz"]}
    builds form from {"foo" => ["bar", "baz"]}
+    turns spaces to %20 if wanted
    turns spaces to %20 if wanted
+    builds with IO
    builds with IO
+    builds form from {"foo" => ["bar"]}
    builds form from {"foo" => ["bar"]}
+    builds form from {"foo" => ["hello world"]}
    builds form from {"foo" => ["hello world"]}
+  #each
+    calls provided proc for each name, value pair, including multiple values per one param name
    calls provided proc for each name, value pair, including multiple values per one param name
+  #empty?
+    test empty?
    test empty?
+  .parse
+    parses foo=
    parses foo=
+    parses foo=bar&foo=baz
    parses foo=bar&foo=baz
+    parses foo=bar
    parses foo=bar
+    parses 
    parses 
+    parses bar&foo
    parses bar&foo
+    parses foo=&bar
    parses foo=&bar
+    parses foo=bar;baz=qux
    parses foo=bar;baz=qux
+    parses foo=hello+world
    parses foo=hello+world
+    parses &&
    parses &&
+    parses foo
    parses foo
+    parses foo=hello%2Bworld
    parses foo=hello%2Bworld
+    parses foo=bar&baz=qux
    parses foo=bar&baz=qux
+    parses    
    parses    
+    parses foo=bar=qux
    parses foo=bar=qux
+  #merge
+    appends values with the same key with replace: false
    appends values with the same key with replace: false
+    replaces all values with the same key by default
    replaces all values with the same key by default
+    does not modify the receiver
    does not modify the receiver
+  #merge!
+    modifies the receiver
    modifies the receiver
+    does not modify the other params
+      with replace: true
      with replace: true
+      with replace: false
      with replace: false
+  #inspect
  #inspect
+  #clone
+    gives a whole new set of params
    gives a whole new set of params
+  .new
+    assert
    assert
+  #fetch(name, default)
+    returns first value for provided param name
    returns first value for provided param name
+    return default value when there is no such param
    return default value when there is no such param
+  #dup
+    gives a whole new set of params
    gives a whole new set of params
+  #[](name)
+    raises KeyError when there is no such param
    raises KeyError when there is no such param
+    returns first value for provided param name
    returns first value for provided param name
+  #fetch_all(name)
+    fetches list of all values for provided param name
    fetches list of all values for provided param name
+  .encode
+    builds from hash with IO
    builds from hash with IO
+    builds from named tuple with IO
    builds from named tuple with IO
+    builds from hash
    builds from hash
+    builds from named tuple
    builds from named tuple
+Compress::Zip
+  writes io
  writes io
+  adds a directory
  adds a directory
+  writes entry uncompressed
  writes entry uncompressed
+  writes entry
  writes entry
+  writes file
  writes file
+  writes entry uncompressed and reads with Compress::Zip::File
  writes entry uncompressed and reads with Compress::Zip::File
+  writes bytes
  writes bytes
+  writes string
  writes string
+  writes and reads to memory
  writes and reads to memory
+StringPool
+  puts many
  puts many
+  doesn't fail if initial capacity is not a power of 2
  doesn't fail if initial capacity is not a power of 2
+  is empty
  is empty
+  gets slice
  gets slice
+  gets string
  gets string
+  doesn't fail if initial capacity is too small
  doesn't fail if initial capacity is too small
+  gets string IO
  gets string IO
+  gets pointer with size
  gets pointer with size
+  can be created with larger initial capacity
  can be created with larger initial capacity
+  #get?
  #get?
+HTTP::Status
+  .new
+    returns an instance when given undefined status code
    returns an instance when given undefined status code
+    returns an instance when given defined status code
    returns an instance when given defined status code
+    raises when given invalid status code
    raises when given invalid status code
+  #server_error?
+    returns false unless given 5xx status code
    returns false unless given 5xx status code
+    returns true when given 5xx status code
    returns true when given 5xx status code
+  #description
+    returns default description for status 200
    returns default description for status 200
+    returns nil on non-existent status
    returns nil on non-existent status
+  #code
+    returns the status code
    returns the status code
+  #redirection?
+    returns false unless given 3xx status code
    returns false unless given 3xx status code
+    returns true when given 3xx status code
    returns true when given 3xx status code
+  #informational?
+    returns true when given 1xx status code
    returns true when given 1xx status code
+    returns false unless given 1xx status code
    returns false unless given 1xx status code
+  #client_error?
+    returns true when given 4xx status code
    returns true when given 4xx status code
+    returns false unless given 4xx status code
    returns false unless given 4xx status code
+  #success?
+    returns false unless given 2xx status code
    returns false unless given 2xx status code
+    returns true when given 2xx status code
    returns true when given 2xx status code
+at_exit
+  allows handlers to change the exit code with explicit `exit` call (2)
  allows handlers to change the exit code with explicit `exit` call (2)
+  runs handlers on explicit program ending
  runs handlers on explicit program ending
+  allows handlers to change the exit code with explicit `exit` call
  allows handlers to change the exit code with explicit `exit` call
+  can get unhandled exception in at_exit handler
  can get unhandled exception in at_exit handler
+  runs all handlers maximum once
  runs all handlers maximum once
+  shows unhandled exceptions after at_exit handlers
  shows unhandled exceptions after at_exit handlers
+  runs handlers on normal program ending
  runs handlers on normal program ending
+  changes final exit code when an handler raises an error
  changes final exit code when an handler raises an error
+  prints unhandled exception with cause
  prints unhandled exception with cause
+  allows at_exit inside at_exit
  allows at_exit inside at_exit
+  runs handlers in reverse order
  runs handlers in reverse order
 __fixdfti
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
@@ -20914,2146 +20474,789 @@
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-JSON mapping
-  parses with nilable root and emit null
  parses with nilable root and emit null
-  parses person with unknown attributes
  parses person with unknown attributes
-  raises if non-nilable attribute is nil
  raises if non-nilable attribute is nil
-  parses json with Time::Format converter
  parses json with Time::Format converter
-  allows setting a nilable property to nil
  allows setting a nilable property to nil
-  fixes #13337
  fixes #13337
-  parses simple mapping
  parses simple mapping
-  works with record
  works with record
-  parses nilable union
  parses nilable union
-  work with module and inheritance
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  use_json_discriminator
-    raises if missing discriminator
    raises if missing discriminator
-    deserializes with discriminator, strict recursive type
    deserializes with discriminator, strict recursive type
-    raises if unknown discriminator value
    raises if unknown discriminator value
-    deserializes with discriminator
    deserializes with discriminator
-    deserializes with discriminator, another recursive type, fixes: #13429
    deserializes with discriminator, another recursive type, fixes: #13429
-    deserializes with variable discriminator value type
    deserializes with variable discriminator value type
-  uses Time::EpochConverter
  uses Time::EpochConverter
-  emit_nulls option
  emit_nulls option
-  JSON::HashValueConverter(Converter)
-    uses converter instance with nested converter metaclass
    uses converter instance with nested converter metaclass
-    uses converter instance with nested converter instance
    uses converter instance with nested converter instance
-    uses converter metaclass
    uses converter metaclass
-  doesn't emit null by default when doing to_json
  doesn't emit null by default when doing to_json
-  parses with nilable root
  parses with nilable root
-  namespaced classes
-    lets default values use the object's own namespace
    lets default values use the object's own namespace
-  parses json with keywords
  parses json with keywords
-  works with class with two fields
  works with class with two fields
-  parses raw value from int
  parses raw value from int
-  parses UUID
  parses UUID
-  parses raw value from float
  parses raw value from float
-  raises if not an object
  raises if not an object
-  parses raw value from object
  parses raw value from object
-  uses Time::EpochMillisConverter
  uses Time::EpochMillisConverter
-  should to store extra fields (JSONAttrPersonExtraFields with on_to_json)
  should to store extra fields (JSONAttrPersonExtraFields with on_to_json)
-  outputs with converter when nilable
  outputs with converter when nilable
-  parses person
  parses person
-  parses with root
  parses with root
-  converter with null value (#13655)
  converter with null value (#13655)
-  empty class with unmapped
  empty class with unmapped
-  parses 128-bit integer
  parses 128-bit integer
-  parses array of people
  parses array of people
-  parses json array as set
  parses json array as set
-  serializes JSON with presence markers and ignore_serialize
-    ignore_serialize is set to a method which returns true when value is nil or empty string
-      ignores field when value is empty string
      ignores field when value is empty string
-      ignores field when value is nil
      ignores field when value is nil
-    ignore_serialize is set to conditional expressions 'last_name.nil? && !last_name_present?'
-      emits field when value is not nil and @last_name_present is true
      emits field when value is not nil and @last_name_present is true
-      does not emit null when value is null and @last_name_present is false
      does not emit null when value is null and @last_name_present is false
-      emits field when value is not nil and @last_name_present is false
      emits field when value is not nil and @last_name_present is false
-      emits null when value is null and @last_name_present is true
      emits null when value is null and @last_name_present is true
-  outputs JSON with Hash
  outputs JSON with Hash
-  empty class
  empty class
-  raises if data type does not match
  raises if data type does not match
-  parses JSON with presence markers
-    parses person with absent attributes
    parses person with absent attributes
-  yaml and json with after_initialize hook
  yaml and json with after_initialize hook
-  parses person without age
  parses person without age
-  does to_json
  does to_json
-  JSON::ArrayConverter(Converter)
-    uses converter instance with nested converter metaclass
    uses converter instance with nested converter metaclass
-    uses converter instance with nested converter instance
    uses converter instance with nested converter instance
-    uses converter metaclass
    uses converter metaclass
-  BigDecimal
-    parses large json ints with BigDecimal
    parses large json ints with BigDecimal
-    parses json float with BigDecimal
    parses json float with BigDecimal
-    parses large precision json floats with BigDecimal
    parses large precision json floats with BigDecimal
-    parses json string with BigDecimal
    parses json string with BigDecimal
-  emits null on request when doing to_json
  emits null on request when doing to_json
-  outputs with converter when nilable when emit_null is true
  outputs with converter when nilable when emit_null is true
-  doesn't raises on false value when not-nil
  doesn't raises on false value when not-nil
-  parses json with any
  parses json with any
-  works together with yaml
  works together with yaml
-  should parse extra fields (JSONAttrPersonExtraFields with on_unknown_json_attribute)
  should parse extra fields (JSONAttrPersonExtraFields with on_unknown_json_attribute)
-  allows small types of integer
  allows small types of integer
-  parses json with defaults
-    mixed
    mixed
-    with nilable
    with nilable
-    bool
    bool
-    create new array every time
    create new array every time
-  parses JSON integer into a float property (#8618)
  parses JSON integer into a float property (#8618)
-  json with selective serialization
  json with selective serialization
-  parses strict person with unknown attributes
  parses strict person with unknown attributes
-  converter with default value
  converter with default value
-  parses json with problematic keys
  parses json with problematic keys
-  with query attributes
-    defines query getter with class restriction
    defines query getter with class restriction
-    defines non-query setter and presence methods
    defines non-query setter and presence methods
-    raises if non-nilable attribute is nil
    raises if non-nilable attribute is nil
-    defines query getter
    defines query getter
-    maps non-query attributes
    maps non-query attributes
-Log::Dispatcher
-  create dispatcher from enum
  create dispatcher from enum
-System
-  cpu_count
-    returns current CPU count
    returns current CPU count
-  hostname
-    returns current hostname
    returns current hostname
-Crystal::PointerLinkedList(T)
-  does each
  does each
-  shift?
-    return nil if list is empty
    return nil if list is empty
-    remove and return the first element
    remove and return the first element
-  empty?
-    return true if there is no element in list
    return true if there is no element in list
-  push
-    append the node into the list
    append the node into the list
-  delete
-    remove a node from list
    remove a node from list
-OpenSSL::HMAC
-  computes SHA224
  computes SHA224
-  computes SHA384
  computes SHA384
-  computes SHA512
  computes SHA512
-  computes SHA1
  computes SHA1
-  computes MD5
  computes MD5
-  computes SHA256
  computes SHA256
-JSON::PullParser
-  errors on [}]
  errors on [}]
-  errors on ["hello" 2]
  errors on ["hello" 2]
-  reads string or null
  reads string or null
-  parses {"foo": 1, "bar": 2}
  parses {"foo": 1, "bar": 2}
-  parses [1]
  parses [1]
-  errors on {"name": "John", "age", 1}
  errors on {"name": "John", "age", 1}
-  #raise
  #raise
-  errors on [
  errors on [
-  errors on [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
  errors on [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
-  reads int or null
  reads int or null
-  errors on {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
  errors on {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
-  errors on {"foo",1}
  errors on {"foo",1}
-  parses true
  parses true
-  parses [null]
  parses [null]
-  parses []
  parses []
-  prevents stack overflow for hashes
  prevents stack overflow for hashes
-  errors on {"foo": {}
  errors on {"foo": {}
-  parses when the input IO is already empty
  parses when the input IO is already empty
-  reads object or null
  reads object or null
-  parses [false]
  parses [false]
-  skip
-    skips int
    skips int
-    skips null
    skips null
-    skips string
    skips string
-    skips object
    skips object
-    skips bool
    skips bool
-    skips float
    skips float
-    skips array
    skips array
-  errors on [1.5 2]
  errors on [1.5 2]
-  errors on [false 2]
  errors on [false 2]
-  parses 1.5
  parses 1.5
-  errors on [1 2]
  errors on [1 2]
-  errors on [,1]
  errors on [,1]
-  errors on {"name": "John", "age": "foo", "bar"}
  errors on {"name": "John", "age": "foo", "bar"}
-  errors on [[]
  errors on [[]
-  errors on {"foo": []:1}
  errors on {"foo": []:1}
-  parses 1
  parses 1
-  parses ["hello"]
  parses ["hello"]
-  parses false
  parses false
-  errors on [true 2]
  errors on [true 2]
-  parses [true]
  parses [true]
-  errors on []]
  errors on []]
-  errors on {"foo"::1}
  errors on {"foo"::1}
-  parses {"foo": 1}
  parses {"foo": 1}
-  #read?
-    returns nil in place of Int8 when an overflow occurs
    returns nil in place of Int8 when an overflow occurs
-    reads Int128: -170141183460469231731687303715884105728
    reads Int128: -170141183460469231731687303715884105728
-    reads UInt8 when the token is a compatible kind
    reads UInt8 when the token is a compatible kind
-    reads UInt64 when the token is a compatible kind
    reads UInt64 when the token is a compatible kind
-    reads UInt64: 0
    reads UInt64: 0
-    reads Int64: 9223372036854775807
    reads Int64: 9223372036854775807
-    reads Int32: 10
    reads Int32: 10
-    reads > Float32::MAX
    reads > Float32::MAX
-    reads Int8: -128
    reads Int8: -128
-    doesn't accept nan or infinity
    doesn't accept nan or infinity
-    returns nil in place of Int16 when an overflow occurs
    returns nil in place of Int16 when an overflow occurs
-    reads Float32 when the token is a compatible kind
    reads Float32 when the token is a compatible kind
-    returns nil in place of UInt8 when an overflow occurs
    returns nil in place of UInt8 when an overflow occurs
-    reads < Float64::MIN
    reads < Float64::MIN
-    reads UInt16: 65535
    reads UInt16: 65535
-    returns nil instead of UInt8 when the token is not compatible
    returns nil instead of UInt8 when the token is not compatible
-    reads UInt64: 10
    reads UInt64: 10
-    reads String when the token is a compatible kind
    reads String when the token is a compatible kind
-    reads Int32: -10
    reads Int32: -10
-    returns nil in place of UInt32 when an overflow occurs
    returns nil in place of UInt32 when an overflow occurs
-    reads Bool when the token is a compatible kind
    reads Bool when the token is a compatible kind
-    reads Int128: -10
    reads Int128: -10
-    reads Int8: -10
    reads Int8: -10
-    returns nil in place of UInt16 when an overflow occurs
    returns nil in place of UInt16 when an overflow occurs
-    reads UInt16 when the token is a compatible kind
    reads UInt16 when the token is a compatible kind
-    reads < Float32::MIN
    reads < Float32::MIN
-    reads Int8 when the token is a compatible kind
    reads Int8 when the token is a compatible kind
-    returns nil instead of UInt32 when the token is not compatible
    returns nil instead of UInt32 when the token is not compatible
-    reads Int128 when the token is a compatible kind
    reads Int128 when the token is a compatible kind
-    reads Int16: 32767
    reads Int16: 32767
-    reads UInt128 when the token is a compatible kind
    reads UInt128 when the token is a compatible kind
-    reads Int64: -10
    reads Int64: -10
-    reads UInt16: 0
    reads UInt16: 0
-    returns nil instead of Int64 when the token is not compatible
    returns nil instead of Int64 when the token is not compatible
-    reads UInt64: 18446744073709551615
    reads UInt64: 18446744073709551615
-    returns nil in place of Int128 when an overflow occurs
    returns nil in place of Int128 when an overflow occurs
-    reads UInt32: 0
    reads UInt32: 0
-    reads UInt128: 0
    reads UInt128: 0
-    returns nil in place of Int32 when an overflow occurs
    returns nil in place of Int32 when an overflow occurs
-    returns nil instead of UInt16 when the token is not compatible
    returns nil instead of UInt16 when the token is not compatible
-    returns nil instead of String when the token is not compatible
    returns nil instead of String when the token is not compatible
-    reads Int64: 0
    reads Int64: 0
-    reads Int16: -10
    reads Int16: -10
-    reads UInt16: 10
    reads UInt16: 10
-    reads UInt8: 0
    reads UInt8: 0
-    reads Int16: 0
    reads Int16: 0
-    reads Float64 when the token is a compatible kind
    reads Float64 when the token is a compatible kind
-    returns nil instead of Int8 when the token is not compatible
    returns nil instead of Int8 when the token is not compatible
-    reads Int64: -9223372036854775808
    reads Int64: -9223372036854775808
-    reads UInt32: 10
    reads UInt32: 10
-    returns nil instead of Float32 when the token is not compatible
    returns nil instead of Float32 when the token is not compatible
-    reads Int32: 0
    reads Int32: 0
-    returns nil in place of UInt128 when an overflow occurs
    returns nil in place of UInt128 when an overflow occurs
-    returns nil instead of UInt128 when the token is not compatible
    returns nil instead of UInt128 when the token is not compatible
-    reads Int64: 10
    reads Int64: 10
-    reads UInt8: 10
    reads UInt8: 10
-    reads Int128: 0
    reads Int128: 0
-    reads Int32 when the token is a compatible kind
    reads Int32 when the token is a compatible kind
-    reads Int8: 10
    reads Int8: 10
-    returns nil instead of Int128 when the token is not compatible
    returns nil instead of Int128 when the token is not compatible
-    reads Int16 when the token is a compatible kind
    reads Int16 when the token is a compatible kind
-    returns nil instead of Float64 when the token is not compatible
    returns nil instead of Float64 when the token is not compatible
-    reads Int8: 127
    reads Int8: 127
-    reads Int128: 10
    reads Int128: 10
-    reads Int8: 0
    reads Int8: 0
-    returns nil in place of Int64 when an overflow occurs
    returns nil in place of Int64 when an overflow occurs
-    reads > Float64::MAX
    reads > Float64::MAX
-    returns nil instead of Bool when the token is not compatible
    returns nil instead of Bool when the token is not compatible
-    reads Int64 when the token is a compatible kind
    reads Int64 when the token is a compatible kind
-    reads UInt128: 10
    reads UInt128: 10
-    reads Int128: 170141183460469231731687303715884105727
    reads Int128: 170141183460469231731687303715884105727
-    reads Int32: -2147483648
    reads Int32: -2147483648
-    returns nil instead of Int32 when the token is not compatible
    returns nil instead of Int32 when the token is not compatible
-    reads Int32: 2147483647
    reads Int32: 2147483647
-    reads Int16: 10
    reads Int16: 10
-    reads UInt32: 4294967295
    reads UInt32: 4294967295
-    returns nil in place of UInt64 when an overflow occurs
    returns nil in place of UInt64 when an overflow occurs
-    returns nil instead of UInt64 when the token is not compatible
    returns nil instead of UInt64 when the token is not compatible
-    reads UInt128: 340282366920938463463374607431768211455
    reads UInt128: 340282366920938463463374607431768211455
-    reads UInt32 when the token is a compatible kind
    reads UInt32 when the token is a compatible kind
-    reads Int16: -32768
    reads Int16: -32768
-    reads UInt8: 255
    reads UInt8: 255
-    returns nil instead of Int16 when the token is not compatible
    returns nil instead of Int16 when the token is not compatible
-  errors on {,"foo": 1}
  errors on {,"foo": 1}
-  on key
-    yields all keys when skipping [1]
    yields all keys when skipping [1]
-    doesn't find key with bang
    doesn't find key with bang
-    yields all keys when skipping {"x": [1]}
    yields all keys when skipping {"x": [1]}
-    reads float when it is an int
    reads float when it is an int
-    finds key
    finds key
-    yields all keys when skipping 1
    yields all keys when skipping 1
-    yields parser
    yields parser
-    finds key with bang
    finds key with bang
-    yields parser with bang
    yields parser with bang
-    doesn't find key
    doesn't find key
-  parses {"foo": [1, 2]}
  parses {"foo": [1, 2]}
-  parses [1.5]
  parses [1.5]
-  errors on [null 2]
  errors on [null 2]
-  parses "hello"
  parses "hello"
-  errors on {}}
  errors on {}}
-  reads array or null
  reads array or null
-  prevents stack overflow for arrays
  prevents stack overflow for arrays
-  raw
-    parses raw "{\"foo\":[1,2,{\"bar\":[1,\"hello\",true,false,1.5]}]}"
    parses raw "{\"foo\":[1,2,{\"bar\":[1,\"hello\",true,false,1.5]}]}"
-    parses raw "null"
    parses raw "null"
-    parses raw "1234.5678"
    parses raw "1234.5678"
-    parses raw "[1,\"hello\",true,false,null,[1,2,3]]"
    parses raw "[1,\"hello\",true,false,null,[1,2,3]]"
-    parses raw "{\"foo\":\"bar\"}"
    parses raw "{\"foo\":\"bar\"}"
-    parses raw "\"hello\""
    parses raw "\"hello\""
-    parses raw "false"
    parses raw "false"
-    parses raw "true"
    parses raw "true"
-    parses raw "1234"
    parses raw "1234"
-  parses [1, 2]
  parses [1, 2]
-  parses {"foo": "foo1", "bar": "bar1"}
  parses {"foo": "foo1", "bar": "bar1"}
-  parses {"foo": "bar"}
  parses {"foo": "bar"}
-  parses {}
  parses {}
-  reads bool or null
  reads bool or null
-  parses [[]]
  parses [[]]
-  parses null
  parses null
-  reads float or null
  reads float or null
-  errors on ["foo":1]
  errors on ["foo":1]
-Thread
-  yields the processor
  yields the processor
-  returns current thread object
  returns current thread object
-  raises inside thread and gets it on join
  raises inside thread and gets it on join
-  allows passing an argumentless fun to execute
  allows passing an argumentless fun to execute
-  names the thread
  names the thread
-IO::Buffered
-  rewinds
  rewinds
-  sync
-    syncs (write)
    syncs (write)
-  does gets with big line and \r\n
  does gets with big line and \r\n
-  does gets with char and limit when not found in buffer (2)
  does gets with char and limit when not found in buffer (2)
-  encoding
-    decode
-      gets_to_end
      gets_to_end
-      gets
      gets
-      gets big string
      gets big string
-      gets big EUC-JP string
      gets big EUC-JP string
-      reads char
      reads char
-      gets with chomp = false
      gets with chomp = false
-  skips big
  skips big
-  reads char
  reads char
-  does gets with chomp = false
  does gets with chomp = false
-  can not set buffer_size after first use
  can not set buffer_size after first use
-  does gets with char and limit without off-by-one
  does gets with char and limit without off-by-one
-  does puts with big string
  does puts with big string
-  can report buffer_size
  can report buffer_size
-  flush_on_newline
-    flushes on 
-
    flushes on 
-
-    doesn't write past count
    doesn't write past count
-  writes bytes
  writes bytes
-  does puts many times
  does puts many times
-  does gets with unicode char delimiter
  does gets with unicode char delimiter
-  does gets with char and limit when not found in buffer
  does gets with char and limit when not found in buffer
-  shouldn't call unbuffered read if reading to an empty slice
  shouldn't call unbuffered read if reading to an empty slice
-  skips
  skips
-  does puts
  does puts
-  does gets with big line
  does gets with big line
-  does gets with limit
  does gets with limit
-  peeks
  peeks
-  reads more than the buffer's internal capacity
  reads more than the buffer's internal capacity
-  raises if invoking gets with negative limit
  raises if invoking gets with negative limit
-  writes more than the buffer's internal capacity
  writes more than the buffer's internal capacity
-  does new with block
  does new with block
-  does gets with char delimiter
  does gets with char delimiter
-  does gets
  does gets
-  can set buffer_size
  can set buffer_size
-  does gets with big line and chomp = false
  does gets with big line and chomp = false
-  can set buffer_size to the same value after first use
  can set buffer_size to the same value after first use
-  read_buffering
-    works with IO#read (already buffered)
    works with IO#read (already buffered)
-    works with IO#read_byte (already buffered)
    works with IO#read_byte (already buffered)
-    works with IO#read_byte
    works with IO#read_byte
-    works with IO#read
    works with IO#read
-  reads byte
  reads byte
-  does gets with char and limit
  does gets with char and limit
-HTTP::Server::RequestProcessor
-  handles IO::Error while reading
  handles IO::Error while reading
-  doesn't respond with error when headers were already sent
  doesn't respond with error when headers were already sent
-  reads consecutive requests
-    with empty body
    with empty body
-    fail if body is not consumed
    fail if body is not consumed
-    when body is consumed
    when body is consumed
-    closes connection when request body is not entirely consumed
    closes connection when request body is not entirely consumed
-    closes connection when Connection: close
    closes connection when Connection: close
-    continues when request body is entirely consumed
    continues when request body is entirely consumed
-  catches raised error on handler and retains context from handler
  catches raised error on handler and retains context from handler
-  handles IO::Error while writing
  handles IO::Error while writing
-  flushes output buffer when an error happens and some content was already sent
  flushes output buffer when an error happens and some content was already sent
-  does not bleed Log::Context between requests
  does not bleed Log::Context between requests
-  works
  works
-  handles IO::Error while flushing
  handles IO::Error while flushing
-Exception
-  allows subclassing #message
  allows subclassing #message
-  collect memory within ensure block
  collect memory within ensure block
-  inspects
  inspects
-  inspects with cause
  inspects with cause
-Compress::Zlib::Writer
-  can be flushed
  can be flushed
-  can be closed without sync
  can be closed without sync
-  can be closed with sync (2)
  can be closed with sync (2)
-  can be closed with sync (1)
  can be closed with sync (1)
-  should be able to write
  should be able to write
-Spec matchers
-  pending block is not compiled
-    pending has block with valid syntax, but invalid semantics
    pending has block with valid syntax, but invalid semantics
-  should contain
-    works with range
    works with range
-    does not pass when string does not includes? specified substring
    does not pass when string does not includes? specified substring
-    works with array
    works with array
-    passes when string includes? specified substring
    passes when string includes? specified substring
-    works with set
    works with set
-  should_not contain
-    passes when string does not includes? specified substring
    passes when string does not includes? specified substring
-    does not pass when string does not includes? specified substring
    does not pass when string does not includes? specified substring
-  detects a nesting `it`
  detects a nesting `it`
-  should be_truthy
-    passes for true
    passes for true
-    passes for some non-nil, non-false value
    passes for some non-nil, non-false value
-  should be_falsey
-    passes for false
    passes for false
-    passes for nil
    passes for nil
-  should work like describe
-    is true
    is true
-  should_not be_falsey
-    passes for true
    passes for true
-    passes for some non-nil, non-false value
    passes for some non-nil, non-false value
-  should_not be_truthy
-    passes for nil
    passes for nil
-    passes for false
    passes for false
-  be_nil
-    does not pass for overwritten `==`
    does not pass for overwritten `==`
-    passes for nil
    passes for nil
-  expect_raises
-    return exception
    return exception
-  detects a nesting `pending`
  detects a nesting `pending`
-Crystal::SyntaxHighlighter::Colorize
-  .highlight!
-    "foo = bar(\"baz\#{PI + 1}\") # comment"
    "foo = bar(\"baz\#{PI + 1}\") # comment"
-    "foo, bar = <<-FOO, <<-BAR\n  foo"
    "foo, bar = <<-FOO, <<-BAR\n  foo"
-    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO"
    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO"
-    "%w[foo"
    "%w[foo"
-    "%i[foo"
    "%i[foo"
-    "\"foo"
    "\"foo"
-  .highlight
-    "1 [] 2"
    "1 [] 2"
-    "if"
    "if"
-    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO\n  bar\n  BAR"
    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO\n  bar\n  BAR"
-    "3.14"
    "3.14"
-    "ensure"
    "ensure"
-    "include"
    "include"
-    "fun"
    "fun"
-    "\"<>\""
    "\"<>\""
-    "asm"
    "asm"
-    "42"
    "42"
-    "def <"
    "def <"
-    "def <="
    "def <="
-    "Foo::Bar"
    "Foo::Bar"
-    ":foo"
    ":foo"
-    "def =="
    "def =="
-    "%q(foo)"
    "%q(foo)"
-    "%i(foo bar baz)"
    "%i(foo bar baz)"
-    "def !~"
    "def !~"
-    "'<'"
    "'<'"
-    "1 %= 2"
    "1 %= 2"
-    "%w(foo  bar\n  baz)"
    "%w(foo  bar\n  baz)"
-    "uninitialized"
    "uninitialized"
-    "def !="
    "def !="
-    "1 ~ 2"
    "1 ~ 2"
-    "next"
    "next"
-    "1 ||= 2"
    "1 ||= 2"
-    "a/b"
    "a/b"
-    "1 ** 2"
    "1 ** 2"
-    "def <<"
    "def <<"
-    "# bar\n"
    "# bar\n"
-    "def >="
    "def >="
-    "1 ! 2"
    "1 ! 2"
-    "break"
    "break"
-    "1 &** 2"
    "1 &** 2"
-    "nil"
    "nil"
-    "a / b"
    "a / b"
-    "of"
    "of"
-    "%<foo>"
    "%<foo>"
-    "1 &&= 2"
    "1 &&= 2"
-    "1 % 2"
    "1 % 2"
-    ":\"foo\""
    ":\"foo\""
-    "false"
    "false"
-    "%x(foo)"
    "%x(foo)"
-    "1 //= 2"
    "1 //= 2"
-    "1 &+ 2"
    "1 &+ 2"
-    "return"
    "return"
-    "end"
    "end"
-    "\"foo\""
    "\"foo\""
-    "1 // 2"
    "1 // 2"
-    "1 **= 2"
    "1 **= 2"
-    "1 & 2"
    "1 & 2"
-    "super"
    "super"
-    "true"
    "true"
-    "$2?"
    "$2?"
-    "with"
    "with"
-    "1 >>= 2"
    "1 >>= 2"
-    "1 / 2"
    "1 / 2"
-    "1 | 2"
    "1 | 2"
-    "def foo"
    "def foo"
-    "1 &* 2"
    "1 &* 2"
-    "1 >> 2"
    "1 >> 2"
-    "1 <= 2"
    "1 <= 2"
-    "def **"
    "def **"
-    "123_i64"
    "123_i64"
-    "# foo\n# bar\n"
    "# foo\n# bar\n"
-    "annotation"
    "annotation"
-    "in"
    "in"
-    "\"foo\#{[1, bar, \"str\"]}baz\""
    "\"foo\#{[1, bar, \"str\"]}baz\""
-    "as"
    "as"
-    "def ~"
    "def ~"
-    "1 &-= 2"
    "1 &-= 2"
-    "protected"
    "protected"
-    "/foo/xim"
    "/foo/xim"
-    "def =~"
    "def =~"
-    "%r(foo)xim"
    "%r(foo)xim"
-    "then"
    "then"
-    "1 []? 2"
    "1 []? 2"
-    "\"foo\#{bar}baz\""
    "\"foo\#{bar}baz\""
-    "a /b/"
    "a /b/"
-    "1 * 2"
    "1 * 2"
-    "out"
    "out"
-    "1 =~ 2"
    "1 =~ 2"
-    "1 &- 2"
    "1 &- 2"
-    "def"
    "def"
-    "a/ b"
    "a/ b"
-    "1 &= 2"
    "1 &= 2"
-    "# foo"
    "# foo"
-    "1 *= 2"
    "1 *= 2"
-    "def ^"
    "def ^"
-    "def /"
    "def /"
-    "def >"
    "def >"
-    "1 &+= 2"
    "1 &+= 2"
-    "1 || 2"
    "1 || 2"
-    "def %"
    "def %"
-    "1 < 2"
    "1 < 2"
-    "union"
    "union"
-    "when"
    "when"
-    "do"
    "do"
-    "begin"
    "begin"
-    "%Q(foo)"
    "%Q(foo)"
-    "1 += 2"
    "1 += 2"
-    "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\""
    "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\""
-    "1 ^= 2"
    "1 ^= 2"
-    "1 = 2"
    "1 = 2"
-    "Set{1, 2, 3}"
    "Set{1, 2, 3}"
-    "1 <=> 2"
    "1 <=> 2"
-    "private"
    "private"
-    "def &"
    "def &"
-    "pointerof"
    "pointerof"
-    "1 >= 2"
    "1 >= 2"
-    "1 /= 2"
    "1 /= 2"
-    "elsif"
    "elsif"
-    "foo bar"
    "foo bar"
-    "1 + 2"
    "1 + 2"
-    "as?"
    "as?"
-    "is_a?"
    "is_a?"
-    "abstract"
    "abstract"
-    "typeof"
    "typeof"
-    "1 /2"
    "1 /2"
-    "def []?"
    "def []?"
-    "struct"
    "struct"
-    "verbatim"
    "verbatim"
-    "enum"
    "enum"
-    "select"
    "select"
-    "1 - 2"
    "1 - 2"
-    "alias"
    "alias"
-    "extend"
    "extend"
-    "1 == 2"
    "1 == 2"
-    "instance_sizeof"
    "instance_sizeof"
-    "1 -= 2"
    "1 -= 2"
-    "`foo`"
    "`foo`"
-    "def []"
    "def []"
-    "def >>"
    "def >>"
-    "foo\nbar"
    "foo\nbar"
-    "%(foo)"
    "%(foo)"
-    "def *"
    "def *"
-    "1/2"
    "1/2"
-    "def <=>"
    "def <=>"
-    "Foo"
    "Foo"
-    "self"
    "self"
-    "case"
    "case"
-    "1 << 2"
    "1 << 2"
-    "foo = bar(\"baz\#{PI + 1}\") # comment"
    "foo = bar(\"baz\#{PI + 1}\") # comment"
-    "$1"
    "$1"
-    "sizeof"
    "sizeof"
-    "1 === 2"
    "1 === 2"
-    "require"
    "require"
-    "nil?"
    "nil?"
-    "alignof"
    "alignof"
-    "instance_alignof"
    "instance_alignof"
-    "while"
    "while"
-    "def |"
    "def |"
-    "class"
    "class"
-    "def +"
    "def +"
-    "'a'"
    "'a'"
-    "1 != 2"
    "1 != 2"
-    "1 !~ 2"
    "1 !~ 2"
-    "1 <<= 2"
    "1 <<= 2"
-    "1 &*= 2"
    "1 &*= 2"
-    "unless"
    "unless"
-    "# <\">"
    "# <\">"
-    "lib"
    "lib"
-    "for"
    "for"
-    "def []="
    "def []="
-    "def -"
    "def -"
-    "offsetof"
    "offsetof"
-    "1 > 2"
    "1 > 2"
-    "1 ^ 2"
    "1 ^ 2"
-    "else"
    "else"
-    "def //"
    "def //"
-    "yield"
    "yield"
-    "foo"
    "foo"
-    "macro"
    "macro"
-    "%w<foo bar baz>"
    "%w<foo bar baz>"
-    "1 []= 2"
    "1 []= 2"
-    "1/ 2"
    "1/ 2"
-    "$~"
    "$~"
-    "1 && 2"
    "1 && 2"
-    "module"
    "module"
-    "type"
    "type"
-    "rescue"
    "rescue"
-    "until"
    "until"
-    "%w(foo bar baz)"
    "%w(foo bar baz)"
-    "1 |= 2"
    "1 |= 2"
-    "$?"
    "$?"
-SemanticVersion
-  bumps to the correct version
  bumps to the correct version
-  copies with specified modifications
  copies with specified modifications
-  compares <
  compares <
-  SemanticVersion::Prerelease
-    compares <
    compares <
-  compares build equivalence
  compares build equivalence
-  does not accept bad versions
  does not accept bad versions
-HTTP::StaticFileHandler
-  returns 400
  returns 400
-  with If-Modified-Since header
-    returns 304 Not Modified for equal to Last-Modified
    returns 304 Not Modified for equal to Last-Modified
-    returns 304 Not Modified for younger than Last-Modified
    returns 304 Not Modified for younger than Last-Modified
-    serves content for older than Last-Modified
    serves content for older than Last-Modified
-  handles only GET and HEAD method
  handles only GET and HEAD method
-  with multiple If-None-Match header
-    returns 304 Not Modified if at least one header matches etag
    returns 304 Not Modified if at least one header matches etag
-    serves file if no header matches etag
    serves file if no header matches etag
-  still serve compressed content when modification time is very close
  still serve compressed content when modification time is very close
-  unescapes a request path
  unescapes a request path
-  does not serve a not found directory
  does not serve a not found directory
-  does not list directory's entries when directory_listing is set to false
  does not list directory's entries when directory_listing is set to false
-  lists directory's entries
  lists directory's entries
-  with If-None-Match header
-    returns 304 Not Modified if header is *
    returns 304 Not Modified if header is *
-    serves file if header does not contain valid etag
    serves file if header does not contain valid etag
-    serves file if header is empty
    serves file if header is empty
-    serves file if header does not match etag
    serves file if header does not match etag
-    returns 304 Not Modified if header matches etag
    returns 304 Not Modified if header matches etag
-  serve compressed content
  serve compressed content
-  adds Last-Modified header
  adds Last-Modified header
-  adds Etag header
  adds Etag header
-  does not serve a not found file
  does not serve a not found file
-  handles invalid redirect path
  handles invalid redirect path
-  handles forbidden characters in windows paths
  handles forbidden characters in windows paths
-  when a Range header is provided
-    invalid Range syntax
-      open range with negative end
      open range with negative end
-      negative end
      negative end
-      not a range
      not a range
-      open range with negative end
      open range with negative end
-      multiple dashes
      multiple dashes
-      start > end
      start > end
-      byte number without dash
      byte number without dash
-      not a number
      not a number
-      unsupported unit
      unsupported unit
-    int range
-      start of the range is larger than the file size
      start of the range is larger than the file size
-      start >= file_size
      start >= file_size
-      serves multiple byte ranges (separator with whitespace)
      serves multiple byte ranges (separator with whitespace)
-      serves multiple byte ranges (separator without whitespace)
      serves multiple byte ranges (separator without whitespace)
-      serves zero bytes
      serves zero bytes
-      serves a byte range
      serves a byte range
-      end of the range is larger than the file size
      end of the range is larger than the file size
-      serves a single byte
      serves a single byte
-      serves an open-ended byte range
      serves an open-ended byte range
-    suffix range
-      partial
      partial
-      negative size
      negative size
-      empty file
      empty file
-      zero
      zero
-      more bytes than content
      more bytes than content
-      zero
      zero
-  doesn't serve compressed content if older than raw file
  doesn't serve compressed content if older than raw file
-  serves a file
  serves a file
-  with both If-None-Match and If-Modified-Since headers
-    serves a file if header does not match etag even If-Modified-Since is fresh
    serves a file if header does not match etag even If-Modified-Since is fresh
-    ignores If-Modified-Since as specified in RFC 7232
    ignores If-Modified-Since as specified in RFC 7232
-  does not serve a file as directory
  does not serve a file as directory
-  expands a request path
  expands a request path
-YAML
-  dump
-    returns YAML as a string
    returns YAML as a string
-    writes YAML to a stream
    writes YAML to a stream
-  parser
-    parses alias to scalar
    parses alias to scalar
-    parses recursive mapping
    parses recursive mapping
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    parses recursive sequence
    parses recursive sequence
-    assert
    assert
-    assert
    assert
-    merging with << key
-      has correct line/number info (2)
      has correct line/number info (2)
-      raises if merging with missing alias
      raises if merging with missing alias
-      has correct line/number info (#2585)
      has correct line/number info (#2585)
-      doesn't merge arrays
      doesn't merge arrays
-      has correct message (#4006)
      has correct message (#4006)
-      merges other mapping with array of alias
      merges other mapping with array of alias
-      doesn't merge empty mapping
      doesn't merge empty mapping
-      merges other mapping
      merges other mapping
-      merges other mapping with alias
      merges other mapping with alias
-      parses from IO
      parses from IO
-      doesn't merge explicit string key <<
      doesn't merge explicit string key <<
-Socket::UNIXAddress
-  raises when path is too long
  raises when path is too long
-  transforms into a C struct and back
  transforms into a C struct and back
-  #==
  #==
-  .parse
-    parses relative
    parses relative
-    parses relative dot
    parses relative dot
-    parses relative subpath
    parses relative subpath
-    ignores params
    ignores params
-    parses absolute
    parses absolute
-    relative with
    relative with
-    fails with missing path
    fails with missing path
-  to_s
  to_s
-LLVM::Type
-  .const_int
-    support Int64
    support Int64
-    support Int128
    support Int128
-JSON::Any
-  #[]?
-    of hash
    of hash
-    of array
    of array
-  dig
-    raises if not found
    raises if not found
-    gets the value at given path given splat
    gets the value at given path given splat
-  can compare with ===
  can compare with ===
-  compares to other objects
  compares to other objects
-  #dig?
-    returns nil if not found
    returns nil if not found
-    gets the value at given path given splat
    gets the value at given path given splat
-    returns nil for non-Hash/Array intermediary values
    returns nil for non-Hash/Array intermediary values
-  clones
  clones
-  #size
-    of array
    of array
-    of hash
    of hash
-  exposes $~ when doing Regex#===
  exposes $~ when doing Regex#===
-  #to_yaml
  #to_yaml
-  #[]
-    of hash
    of hash
-    of array
    of array
-  casts
-    gets nil
    gets nil
-    gets float32
    gets float32
-    gets float32 from JSON integer (#8618)
    gets float32 from JSON integer (#8618)
-    gets int64
    gets int64
-    gets bool
    gets bool
-    gets array
    gets array
-    gets float64 from JSON integer (#8618)
    gets float64 from JSON integer (#8618)
-    gets int32
    gets int32
-    gets float64
    gets float64
-    gets string
    gets string
-    gets hash
    gets hash
-  dups
  dups
-  traverses big structure
  traverses big structure
-  .new
  .new
-TCPSocket
-  fails when connection is refused
  fails when connection is refused
-  settings
  settings
-  sync from server
  sync from server
-  #connect
-    fails to connect IPv6 to IPv4 server
    fails to connect IPv6 to IPv4 server
-    address resolution
-      raises (rather than segfault on darwin) when host doesn't exist and port is 0
      raises (rather than segfault on darwin) when host doesn't exist and port is 0
-      raises when host doesn't exist
      raises when host doesn't exist
-      connects to localhost
      connects to localhost
-    using IPv6
-      raises when port is negative
      raises when port is negative
-      raises when connection is refused
      raises when connection is refused
-      raises when port is zero
      raises when port is zero
-      connects to server
      connects to server
-    using IPv4
-      raises when connection is refused
      raises when connection is refused
-      raises when port is negative
      raises when port is negative
-      raises when port is zero
      raises when port is zero
-      connects to server
      connects to server
-  sends and receives messages
  sends and receives messages
-  sends and receives messages
  sends and receives messages
-Log::IOBackend
-  yields message
  yields message
-  logs any object
  logs any object
-  uses custom formatter
  uses custom formatter
-  logs context
  logs context
-  creates with defaults
  creates with defaults
-  formats message
  formats message
-  logs messages
  logs messages
-  allows setting formatter in initializer
  allows setting formatter in initializer
-Int
-  #humanize_bytes
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-Number
-  converts from UInt64 to Int16
  converts from UInt64 to Int16
-  converts from Int64 to UInt32
  converts from Int64 to UInt32
-  converts from UInt8 to Int64
  converts from UInt8 to Int64
-  division between Int8 / UInt16 returns Float64
  division between Int8 / UInt16 returns Float64
-  division between Float64 / UInt8 returns Float64
  division between Float64 / UInt8 returns Float64
-  unchecked initialize from value to Float64
  unchecked initialize from value to Float64
-  converts from Int32 to Float32
  converts from Int32 to Float32
-  division between Int16 / Int64 returns Float64
  division between Int16 / Int64 returns Float64
-  converts from UInt64 to Int8
  converts from UInt64 to Int8
-  converts from Int128 to Int64
  converts from Int128 to Int64
-  converts from Int32 to Int128
  converts from Int32 to Int128
-  floor_division Int128 // Int128 returns Int128
  floor_division Int128 // Int128 returns Int128
-  converts from UInt16 to UInt8
  converts from UInt16 to UInt8
-  floor_division Float64 // UInt128 returns Float64
  floor_division Float64 // UInt128 returns Float64
-  division between Int128 / Float32 returns Float32
  division between Int128 / Float32 returns Float32
-  converts from Int32 to Int32
  converts from Int32 to Int32
-  floor_division Int16 // Int128 returns Int16
  floor_division Int16 // Int128 returns Int16
-  converts from Float32 to UInt128
  converts from Float32 to UInt128
-  division between UInt32 / Int32 returns Float64
  division between UInt32 / Int32 returns Float64
-  compare the numbers
  compare the numbers
-  floor_division UInt16 // UInt8 returns UInt16
  floor_division UInt16 // UInt8 returns UInt16
-  converts from Int16 to Int128
  converts from Int16 to Int128
-  floor_division Int32 // Int64 returns Int32
  floor_division Int32 // Int64 returns Int32
-  initialize from value to Int16
  initialize from value to Int16
-  division between Int64 / UInt16 returns Float64
  division between Int64 / UInt16 returns Float64
-  converts from UInt128 to UInt16
  converts from UInt128 to UInt16
-  converts from Int32 to UInt128
  converts from Int32 to UInt128
-  converts from UInt128 to Int16
  converts from UInt128 to Int16
-  division between UInt16 / Int32 returns Float64
  division between UInt16 / Int32 returns Float64
-  converts from Int32 to Int16
  converts from Int32 to Int16
-  converts from Int64 to Int64
  converts from Int64 to Int64
-  converts from Float64 to Int64
  converts from Float64 to Int64
-  converts from UInt32 to Int64
  converts from UInt32 to Int64
-  division between Float64 / UInt16 returns Float64
  division between Float64 / UInt16 returns Float64
-  unchecked initialize from value to Int64
  unchecked initialize from value to Int64
-  converts from Int64 to Int16
  converts from Int64 to Int16
-  floor_division Int8 // UInt128 returns Int8
  floor_division Int8 // UInt128 returns Int8
-  converts from Float32 to Int64
  converts from Float32 to Int64
-  converts from Int128 to UInt32
  converts from Int128 to UInt32
-  floor_division Int16 // Float32 returns Int16
  floor_division Int16 // Float32 returns Int16
-  division between UInt128 / UInt8 returns Float64
  division between UInt128 / UInt8 returns Float64
-  converts from Int16 to UInt8
  converts from Int16 to UInt8
-  unchecked initialize from value to Int128
  unchecked initialize from value to Int128
-  converts from Int128 to UInt16
  converts from Int128 to UInt16
-  floor_division Int128 // Int16 returns Int128
  floor_division Int128 // Int16 returns Int128
-  division between Float64 / Float64 returns Float64
  division between Float64 / Float64 returns Float64
-  floor_division UInt8 // UInt16 returns UInt8
  floor_division UInt8 // UInt16 returns UInt8
-  division between Float32 / Int16 returns Float32
  division between Float32 / Int16 returns Float32
-  converts from Float64 to UInt32
  converts from Float64 to UInt32
-  converts from UInt32 to Int8
  converts from UInt32 to Int8
-  converts from UInt8 to Int16
  converts from UInt8 to Int16
-  unchecked initialize from value to Int32
  unchecked initialize from value to Int32
-  division between Int8 / Int32 returns Float64
  division between Int8 / Int32 returns Float64
-  floor_division Float32 // UInt16 returns Float32
  floor_division Float32 // UInt16 returns Float32
-  converts from Int16 to Int8
  converts from Int16 to Int8
-  converts from UInt16 to UInt16
  converts from UInt16 to UInt16
-  significant
-    8 base
    8 base
-    10 base
    10 base
-    preserves type
    preserves type
-    2 base
    2 base
-  converts from Float64 to Int128
  converts from Float64 to Int128
-  converts from Int16 to UInt32
  converts from Int16 to UInt32
-  division between Int64 / UInt64 returns Float64
  division between Int64 / UInt64 returns Float64
-  floor_division Int128 // UInt128 returns Int128
  floor_division Int128 // UInt128 returns Int128
-  converts from Int8 to UInt32
  converts from Int8 to UInt32
-  converts from UInt128 to UInt128
  converts from UInt128 to UInt128
-  floor_division Float64 // UInt8 returns Float64
  floor_division Float64 // UInt8 returns Float64
-  floor_division Float32 // UInt8 returns Float32
  floor_division Float32 // UInt8 returns Float32
-  converts from UInt16 to UInt8
  converts from UInt16 to UInt8
-  converts from UInt16 to UInt64
  converts from UInt16 to UInt64
-  converts from UInt32 to UInt8
  converts from UInt32 to UInt8
-  division between Int128 / Float64 returns Float64
  division between Int128 / Float64 returns Float64
-  converts from UInt64 to Float64
  converts from UInt64 to Float64
-  converts from Float32 to Float32
  converts from Float32 to Float32
-  division between Float64 / Int8 returns Float64
  division between Float64 / Int8 returns Float64
-  floor_division UInt64 // Int16 returns UInt64
  floor_division UInt64 // Int16 returns UInt64
-  division between UInt128 / Int32 returns Float64
  division between UInt128 / Int32 returns Float64
-  converts from Int128 to UInt128
  converts from Int128 to UInt128
-  floor_division UInt128 // Int8 returns UInt128
  floor_division UInt128 // Int8 returns UInt128
-  floor_division Float64 // Int32 returns Float64
  floor_division Float64 // Int32 returns Float64
-  converts from UInt32 to UInt128
  converts from UInt32 to UInt128
-  floor_division Float64 // Float64 returns Float64
  floor_division Float64 // Float64 returns Float64
-  division between UInt16 / Int8 returns Float64
  division between UInt16 / Int8 returns Float64
-  converts from UInt32 to Int32
  converts from UInt32 to Int32
-  floor_division UInt128 // Int64 returns UInt128
  floor_division UInt128 // Int64 returns UInt128
-  initialize from value to Float32
  initialize from value to Float32
-  division between Float32 / Int64 returns Float32
  division between Float32 / Int64 returns Float32
-  floor_division UInt8 // Int32 returns UInt8
  floor_division UInt8 // Int32 returns UInt8
-  division between UInt16 / Float32 returns Float32
  division between UInt16 / Float32 returns Float32
-  converts from UInt8 to Int8
  converts from UInt8 to Int8
-  division between UInt16 / UInt16 returns Float64
  division between UInt16 / UInt16 returns Float64
-  converts from Int64 to Float64
  converts from Int64 to Float64
-  converts from Float32 to Int128
  converts from Float32 to Int128
-  division between Int32 / Int8 returns Float64
  division between Int32 / Int8 returns Float64
-  floor_division Float64 // Int64 returns Float64
  floor_division Float64 // Int64 returns Float64
-  floor_division UInt16 // UInt128 returns UInt16
  floor_division UInt16 // UInt128 returns UInt16
-  converts from Int16 to UInt64
  converts from Int16 to UInt64
-  division between Int128 / UInt64 returns Float64
  division between Int128 / UInt64 returns Float64
-  converts from Int128 to UInt64
  converts from Int128 to UInt64
-  division between Int16 / Float32 returns Float32
  division between Int16 / Float32 returns Float32
-  converts from Int8 to Int64
  converts from Int8 to Int64
-  converts from Int64 to UInt128
  converts from Int64 to UInt128
-  converts from UInt32 to UInt16
  converts from UInt32 to UInt16
-  floor_division Int32 // UInt64 returns Int32
  floor_division Int32 // UInt64 returns Int32
-  converts from UInt64 to Int128
  converts from UInt64 to Int128
-  initialize from value to UInt32
  initialize from value to UInt32
-  #step
-    "Float to Int by" iterator
    "Float to Int by" iterator
-    "over zero Float" iterator
    "over zero Float" iterator
-    "single value Float by Int" yielding
    "single value Float by Int" yielding
-    "at min Int" iterator
    "at min Int" iterator
-    "downto Int" yielding
    "downto Int" yielding
-    "Float to Int by" yielding
    "Float to Int by" yielding
-    "basic Float" iterator
    "basic Float" iterator
-    "towards limit [max-4, max-2, max]" iterator
    "towards limit [max-4, max-2, max]" iterator
-    "downto Float by" yielding
    "downto Float by" yielding
-    "empty if `self` can't be compared by" yielding
    "empty if `self` can't be compared by" yielding
-    "negative by Float" yielding
    "negative by Float" yielding
-    "basic Int" yielding
    "basic Int" yielding
-    "single value Int by Float" yielding
    "single value Int by Float" yielding
-    "negative by Float" iterator
    "negative by Float" iterator
-    "single value Int" iterator
    "single value Int" iterator
-    "by Float half" yielding
    "by Float half" yielding
-    "downto Int by" yielding
    "downto Int by" yielding
-    "Int to Float" iterator
    "Int to Float" iterator
-    by zero iterator
    by zero iterator
-    without limit
-      iterator
-        basic
        basic
-        raises overflow error
        raises overflow error
-      yielding
-        basic
        basic
-        raises overflow error
        raises overflow error
-    "Int by Float" iterator
    "Int by Float" iterator
-    "single value Float" yielding
    "single value Float" yielding
-    "downto UInt by" iterator
    "downto UInt by" iterator
-    "over zero Float" yielding
    "over zero Float" yielding
-    "by Float" yielding
    "by Float" yielding
-    "empty if `to` can't be compared by" iterator
    "empty if `to` can't be compared by" iterator
-    "negative Float" yielding
    "negative Float" yielding
-    "Int to Float" yielding
    "Int to Float" yielding
-    whole range
-      "Int8 downwards" yielding
      "Int8 downwards" yielding
-      assert
      assert
-      "Int8 downwards" iterator
      "Int8 downwards" iterator
-      "Int16 upwards" iterator
      "Int16 upwards" iterator
-      "Int8 upwards" iterator
      "Int8 upwards" iterator
-      "UInt8 downwards" iterator
      "UInt8 downwards" iterator
-      "UInt8 upwards" iterator
      "UInt8 upwards" iterator
-      "Int8 upwards" yielding
      "Int8 upwards" yielding
-      "Int16 upwards" yielding
      "Int16 upwards" yielding
-      "Int16 downwards" yielding
      "Int16 downwards" yielding
-      assert
      assert
-      "UInt8 upwards" yielding
      "UInt8 upwards" yielding
-      "Int16 downwards" iterator
      "Int16 downwards" iterator
-      assert
      assert
-      "UInt8 downwards" yielding
      "UInt8 downwards" yielding
-    "Int to Float by" yielding
    "Int to Float by" yielding
-    "missing end UInt" yielding
    "missing end UInt" yielding
-    "single value by Int" iterator
    "single value by Int" iterator
-    "downto Int" iterator
    "downto Int" iterator
-    "single value Int by Float" iterator
    "single value Int by Float" iterator
-    "towards limit [max-3, max-1, max)" iterator
    "towards limit [max-3, max-1, max)" iterator
-    "towards limit [max-3, max-1, max)" yielding
    "towards limit [max-3, max-1, max)" yielding
-    "missing end Int" yielding
    "missing end Int" yielding
-    "over zero Int" iterator
    "over zero Int" iterator
-    "Float to Int" iterator
    "Float to Int" iterator
-    "negative Float" iterator
    "negative Float" iterator
-    "empty if `self` can't be compared" yielding
    "empty if `self` can't be compared" yielding
-    "towards limit [max-4, max-2, max)" yielding
    "towards limit [max-4, max-2, max)" yielding
-    "at max Int" iterator
    "at max Int" iterator
-    "single value Int" yielding
    "single value Int" yielding
-    "negative by Float half" iterator
    "negative by Float half" iterator
-    "missing end UInt" iterator
    "missing end UInt" iterator
-    "empty if `by` and `to` are opposed" iterator
    "empty if `by` and `to` are opposed" iterator
-    "downto Float" yielding
    "downto Float" yielding
-    "downto Float" iterator
    "downto Float" iterator
-    "Int by Float" yielding
    "Int by Float" yielding
-    "basic Float" yielding
    "basic Float" yielding
-    "Int to Float by" iterator
    "Int to Float by" iterator
-    "over min Int" iterator
    "over min Int" iterator
-    "single value by Int" yielding
    "single value by Int" yielding
-    "Float by Int" iterator
    "Float by Int" iterator
-    "single value Float" iterator
    "single value Float" iterator
-    "negative by Int" iterator
    "negative by Int" iterator
-    "downto UInt" yielding
    "downto UInt" yielding
-    "downto UInt" iterator
    "downto UInt" iterator
-    "over zero Int" yielding
    "over zero Int" yielding
-    "single value Float by Int" iterator
    "single value Float by Int" iterator
-    "by Float half" iterator
    "by Float half" iterator
-    "over max Int" yielding
    "over max Int" yielding
-    "single value by Float" yielding
    "single value by Float" yielding
-    "over min Int" yielding
    "over min Int" yielding
-    "negative Int" yielding
    "negative Int" yielding
-    "downto UInt by" yielding
    "downto UInt by" yielding
-    "at max Int" yielding
    "at max Int" yielding
-    "downto Int by" iterator
    "downto Int by" iterator
-    "missing end Float" yielding
    "missing end Float" yielding
-    "empty if `to` can't be compared" yielding
    "empty if `to` can't be compared" yielding
-    "Float by Int" yielding
    "Float by Int" yielding
-    "empty if `self` can't be compared" iterator
    "empty if `self` can't be compared" iterator
-    "empty if `by` and `to` are opposed" yielding
    "empty if `by` and `to` are opposed" yielding
-    "basic Int" iterator
    "basic Int" iterator
-    "empty if `to` can't be compared by" yielding
    "empty if `to` can't be compared by" yielding
-    "missing end Float" iterator
    "missing end Float" iterator
-    "at min Int" yielding
    "at min Int" yielding
-    "missing end Int" iterator
    "missing end Int" iterator
-    "single value by Float" iterator
    "single value by Float" iterator
-    exclusive
-      "single value Int" yielding
      "single value Int" yielding
-      "basic Float" yielding
      "basic Float" yielding
-      "single value Float" yielding
      "single value Float" yielding
-      "single value Float" iterator
      "single value Float" iterator
-      "single value Int" iterator
      "single value Int" iterator
-      "basic Float" iterator
      "basic Float" iterator
-      "basic Int" yielding
      "basic Int" yielding
-      "basic Int" iterator
      "basic Int" iterator
-    "empty if `to` can't be compared" iterator
    "empty if `to` can't be compared" iterator
-    "Float to Int" yielding
    "Float to Int" yielding
-    "by Int" yielding
    "by Int" yielding
-    "negative by Float half" yielding
    "negative by Float half" yielding
-    "empty if `self` can't be compared by" iterator
    "empty if `self` can't be compared by" iterator
-    "towards limit [max-4, max-2, max)" iterator
    "towards limit [max-4, max-2, max)" iterator
-    by zero yielding
    by zero yielding
-    "by Int" iterator
    "by Int" iterator
-    "negative Int" iterator
    "negative Int" iterator
-    "towards limit [max-4, max-2, max]" yielding
    "towards limit [max-4, max-2, max]" yielding
-    "downto Float by" iterator
    "downto Float by" iterator
-    "over max Int" iterator
    "over max Int" iterator
-    "negative by Int" yielding
    "negative by Int" yielding
-    "by Float" iterator
    "by Float" iterator
-  converts from UInt64 to UInt32
  converts from UInt64 to UInt32
-  gives the square of a value
  gives the square of a value
-  unchecked initialize from value to UInt8
  unchecked initialize from value to UInt8
-  converts from UInt64 to UInt64
  converts from UInt64 to UInt64
-  converts from Int32 to UInt16
  converts from Int32 to UInt16
-  #zero?
  #zero?
-  converts from Int8 to UInt16
  converts from Int8 to UInt16
-  converts from UInt16 to Int128
  converts from UInt16 to Int128
-  converts from Int64 to Int32
  converts from Int64 to Int32
-  converts from Int128 to Int128
  converts from Int128 to Int128
-  floor_division Int64 // Int16 returns Int64
  floor_division Int64 // Int16 returns Int64
-  converts from UInt8 to Float64
  converts from UInt8 to Float64
-  converts from UInt8 to UInt32
  converts from UInt8 to UInt32
-  converts from Int64 to UInt8
  converts from Int64 to UInt8
-  floor_division UInt8 // Int16 returns UInt8
  floor_division UInt8 // Int16 returns UInt8
-  division between Float32 / UInt8 returns Float32
  division between Float32 / UInt8 returns Float32
-  unchecked initialize from value to Int16
  unchecked initialize from value to Int16
-  division between Float32 / Float64 returns Float64
  division between Float32 / Float64 returns Float64
-  converts from Int128 to UInt32
  converts from Int128 to UInt32
-  division between Int8 / UInt32 returns Float64
  division between Int8 / UInt32 returns Float64
-  converts from Float32 to UInt32
  converts from Float32 to UInt32
-  floor_division UInt64 // UInt16 returns UInt64
  floor_division UInt64 // UInt16 returns UInt64
-  converts from Float64 to Int8
  converts from Float64 to Int8
-  floor_division Float64 // Float32 returns Float64
  floor_division Float64 // Float32 returns Float64
-  converts from Int32 to UInt16
  converts from Int32 to UInt16
-  floor_division Int16 // Int64 returns Int16
  floor_division Int16 // Int64 returns Int16
-  converts from UInt16 to Float64
  converts from UInt16 to Float64
-  division between Int16 / UInt16 returns Float64
  division between Int16 / UInt16 returns Float64
-  converts from UInt128 to Int8
  converts from UInt128 to Int8
-  unchecked initialize from value to UInt64
  unchecked initialize from value to UInt64
-  converts from UInt64 to Int64
  converts from UInt64 to Int64
-  floor_division UInt64 // Int128 returns UInt64
  floor_division UInt64 // Int128 returns UInt64
-  division between Int8 / Int128 returns Float64
  division between Int8 / Int128 returns Float64
-  unchecked initialize from value to Int8
  unchecked initialize from value to Int8
-  division between Int32 / UInt16 returns Float64
  division between Int32 / UInt16 returns Float64
-  division between UInt16 / UInt8 returns Float64
  division between UInt16 / UInt8 returns Float64
-  floor_division Int8 // UInt32 returns Int8
  floor_division Int8 // UInt32 returns Int8
-  converts from UInt64 to Float64
  converts from UInt64 to Float64
-  floor_division Int64 // UInt16 returns Int64
  floor_division Int64 // UInt16 returns Int64
-  converts from UInt8 to Int128
  converts from UInt8 to Int128
-  converts from UInt128 to UInt128
  converts from UInt128 to UInt128
-  converts from Float32 to UInt8
  converts from Float32 to UInt8
-  converts from UInt16 to Float32
  converts from UInt16 to Float32
-  converts from Int16 to Float64
  converts from Int16 to Float64
-  floor_division Float32 // UInt64 returns Float32
  floor_division Float32 // UInt64 returns Float32
-  division between UInt128 / UInt128 returns Float64
  division between UInt128 / UInt128 returns Float64
-  converts from Float32 to Int32
  converts from Float32 to Int32
-  floor_division Int32 // Float32 returns Int32
  floor_division Int32 // Float32 returns Int32
-  division between Int32 / Int128 returns Float64
  division between Int32 / Int128 returns Float64
-  division between Int128 / UInt128 returns Float64
  division between Int128 / UInt128 returns Float64
-  division between Int32 / UInt64 returns Float64
  division between Int32 / UInt64 returns Float64
-  converts from Float64 to Int16
  converts from Float64 to Int16
-  division between Int16 / UInt8 returns Float64
  division between Int16 / UInt8 returns Float64
-  floor_division Int8 // Int64 returns Int8
  floor_division Int8 // Int64 returns Int8
-  converts from UInt64 to Float32
  converts from UInt64 to Float32
-  division between Int8 / Float64 returns Float64
  division between Int8 / Float64 returns Float64
-  #negative?
  #negative?
-  converts from Int128 to Int8
  converts from Int128 to Int8
-  floor_division Int32 // Int128 returns Int32
  floor_division Int32 // Int128 returns Int32
-  floor_division Float32 // Int32 returns Float32
  floor_division Float32 // Int32 returns Float32
-  division between Float32 / Int128 returns Float32
  division between Float32 / Int128 returns Float32
-  converts from Int16 to Float64
  converts from Int16 to Float64
-  converts from UInt16 to Int128
  converts from UInt16 to Int128
-  converts from UInt32 to Int128
  converts from UInt32 to Int128
-  converts from UInt128 to UInt64
  converts from UInt128 to UInt64
-  floor_division UInt32 // Int32 returns UInt32
  floor_division UInt32 // Int32 returns UInt32
-  creates an array with [] and no elements
  creates an array with [] and no elements
-  converts from UInt64 to Int16
  converts from UInt64 to Int16
-  division between UInt32 / UInt8 returns Float64
  division between UInt32 / UInt8 returns Float64
-  floor_division Int8 // UInt8 returns Int8
  floor_division Int8 // UInt8 returns Int8
-  converts from Int8 to UInt8
  converts from Int8 to UInt8
-  converts from Int8 to Int64
  converts from Int8 to Int64
-  floor_division UInt64 // Float32 returns UInt64
  floor_division UInt64 // Float32 returns UInt64
-  converts from UInt16 to UInt128
  converts from UInt16 to UInt128
-  converts from Int128 to UInt16
  converts from Int128 to UInt16
-  converts from Int32 to Int16
  converts from Int32 to Int16
-  division between UInt8 / Int16 returns Float64
  division between UInt8 / Int16 returns Float64
-  converts from Int8 to UInt8
  converts from Int8 to UInt8
-  floor_division Int16 // UInt64 returns Int16
  floor_division Int16 // UInt64 returns Int16
-  floor_division Float64 // Int16 returns Float64
  floor_division Float64 // Int16 returns Float64
-  floor_division Int128 // UInt16 returns Int128
  floor_division Int128 // UInt16 returns Int128
-  floor_division Int128 // Int32 returns Int128
  floor_division Int128 // Int32 returns Int128
-  floor_division UInt8 // UInt128 returns UInt8
  floor_division UInt8 // UInt128 returns UInt8
-  converts from UInt128 to UInt64
  converts from UInt128 to UInt64
-  converts from Float32 to UInt32
  converts from Float32 to UInt32
-  division between UInt32 / Int64 returns Float64
  division between UInt32 / Int64 returns Float64
-  division between UInt64 / Int8 returns Float64
  division between UInt64 / Int8 returns Float64
-  converts from Float32 to UInt128
  converts from Float32 to UInt128
-  creates a slice
  creates a slice
-  division between Float64 / Int32 returns Float64
  division between Float64 / Int32 returns Float64
-  division between Float32 / Int32 returns Float32
  division between Float32 / Int32 returns Float32
-  floor_division UInt64 // Int64 returns UInt64
  floor_division UInt64 // Int64 returns UInt64
-  converts from Float64 to Int64
  converts from Float64 to Int64
-  division between UInt128 / Int16 returns Float64
  division between UInt128 / Int16 returns Float64
-  division between UInt128 / Float32 returns Float32
  division between UInt128 / Float32 returns Float32
-  division between Int8 / Int8 returns Float64
  division between Int8 / Int8 returns Float64
-  converts from Int16 to UInt8
  converts from Int16 to UInt8
-  floor_division Int64 // Int8 returns Int64
  floor_division Int64 // Int8 returns Int64
-  converts from Int16 to UInt64
  converts from Int16 to UInt64
-  division between Int128 / UInt16 returns Float64
  division between Int128 / UInt16 returns Float64
-  floor_division Int64 // UInt128 returns Int64
  floor_division Int64 // UInt128 returns Int64
-  converts from Float32 to UInt64
  converts from Float32 to UInt64
-  converts from UInt8 to Int16
  converts from UInt8 to Int16
-  floor_division Int8 // Int16 returns Int8
  floor_division Int8 // Int16 returns Int8
-  division between Int8 / Int64 returns Float64
  division between Int8 / Int64 returns Float64
-  division between Int8 / Int16 returns Float64
  division between Int8 / Int16 returns Float64
-  converts from Int64 to UInt128
  converts from Int64 to UInt128
-  converts from UInt16 to Int8
  converts from UInt16 to Int8
-  converts from Int128 to UInt128
  converts from Int128 to UInt128
-  division between UInt64 / Float32 returns Float32
  division between UInt64 / Float32 returns Float32
-  division between UInt16 / Float64 returns Float64
  division between UInt16 / Float64 returns Float64
-  division between Int64 / Int64 returns Float64
  division between Int64 / Int64 returns Float64
-  division between UInt8 / Int128 returns Float64
  division between UInt8 / Int128 returns Float64
-  division between UInt32 / Int128 returns Float64
  division between UInt32 / Int128 returns Float64
-  division between UInt128 / UInt16 returns Float64
  division between UInt128 / UInt16 returns Float64
-  converts from Int32 to Float64
  converts from Int32 to Float64
-  converts from UInt128 to Int8
  converts from UInt128 to Int8
-  division between UInt32 / Float32 returns Float32
  division between UInt32 / Float32 returns Float32
-  unchecked initialize from value to Float32
  unchecked initialize from value to Float32
-  converts from UInt128 to Int64
  converts from UInt128 to Int64
-  floor_division UInt16 // Int8 returns UInt16
  floor_division UInt16 // Int8 returns UInt16
-  division between UInt8 / UInt8 returns Float64
  division between UInt8 / UInt8 returns Float64
-  converts from Int64 to UInt8
  converts from Int64 to UInt8
-  division between UInt32 / Int8 returns Float64
  division between UInt32 / Int8 returns Float64
-  floor_division UInt32 // UInt64 returns UInt32
  floor_division UInt32 // UInt64 returns UInt32
-  converts from Float64 to Int128
  converts from Float64 to Int128
-  converts from Int128 to Int32
  converts from Int128 to Int32
-  converts from UInt32 to UInt128
  converts from UInt32 to UInt128
-  gives the absolute value
  gives the absolute value
-  converts from Int8 to Int16
  converts from Int8 to Int16
-  division between UInt16 / UInt32 returns Float64
  division between UInt16 / UInt32 returns Float64
-  converts from Float64 to Float32
  converts from Float64 to Float32
-  floor_division Int16 // UInt128 returns Int16
  floor_division Int16 // UInt128 returns Int16
-  converts from Int64 to Int128
  converts from Int64 to Int128
-  floor_division UInt8 // UInt8 returns UInt8
  floor_division UInt8 // UInt8 returns UInt8
-  converts from Int8 to UInt128
  converts from Int8 to UInt128
-  division between UInt64 / UInt64 returns Float64
  division between UInt64 / UInt64 returns Float64
-  floor_division Float64 // Int8 returns Float64
  floor_division Float64 // Int8 returns Float64
-  division between UInt128 / Int8 returns Float64
  division between UInt128 / Int8 returns Float64
-  converts from UInt8 to UInt64
  converts from UInt8 to UInt64
-  floor_division UInt8 // Int128 returns UInt8
  floor_division UInt8 // Int128 returns UInt8
-  division between UInt8 / UInt16 returns Float64
  division between UInt8 / UInt16 returns Float64
-  converts from Int32 to Int8
  converts from Int32 to Int8
-  division between UInt16 / Int64 returns Float64
  division between UInt16 / Int64 returns Float64
-  converts from Int64 to UInt16
  converts from Int64 to UInt16
-  converts from UInt32 to UInt64
  converts from UInt32 to UInt64
-  converts from UInt8 to Int128
  converts from UInt8 to Int128
-  division between UInt32 / UInt64 returns Float64
  division between UInt32 / UInt64 returns Float64
-  floor_division UInt8 // UInt64 returns UInt8
  floor_division UInt8 // UInt64 returns UInt8
-  converts from Float64 to Float64
  converts from Float64 to Float64
-  converts from UInt32 to UInt32
  converts from UInt32 to UInt32
-  floor_division UInt16 // Float32 returns UInt16
  floor_division UInt16 // Float32 returns UInt16
-  division between Float64 / Int64 returns Float64
  division between Float64 / Int64 returns Float64
-  converts from UInt64 to Int8
  converts from UInt64 to Int8
-  floor_division UInt32 // UInt16 returns UInt32
  floor_division UInt32 // UInt16 returns UInt32
-  converts from UInt64 to UInt8
  converts from UInt64 to UInt8
-  division between UInt128 / Int64 returns Float64
  division between UInt128 / Int64 returns Float64
-  division between Int16 / UInt32 returns Float64
  division between Int16 / UInt32 returns Float64
-  division between Int32 / Float32 returns Float32
  division between Int32 / Float32 returns Float32
-  unchecked initialize from value to UInt128
  unchecked initialize from value to UInt128
-  converts from Int32 to UInt32
  converts from Int32 to UInt32
-  floor_division UInt128 // Int16 returns UInt128
  floor_division UInt128 // Int16 returns UInt128
-  floor_division Float64 // Int128 returns Float64
  floor_division Float64 // Int128 returns Float64
-  floor_division Float32 // Int64 returns Float32
  floor_division Float32 // Int64 returns Float32
-  division between UInt8 / Int32 returns Float64
  division between UInt8 / Int32 returns Float64
-  converts from Int8 to Int8
  converts from Int8 to Int8
-  converts from UInt128 to Int16
  converts from UInt128 to Int16
-  division between Int128 / Int32 returns Float64
  division between Int128 / Int32 returns Float64
-  division between Int32 / Int64 returns Float64
  division between Int32 / Int64 returns Float64
-  converts from Int8 to UInt32
  converts from Int8 to UInt32
-  division between Int64 / UInt128 returns Float64
  division between Int64 / UInt128 returns Float64
-  division between UInt32 / Float64 returns Float64
  division between UInt32 / Float64 returns Float64
-  converts from Float32 to UInt16
  converts from Float32 to UInt16
-  converts from Int8 to Float64
  converts from Int8 to Float64
-  converts from Float32 to Int128
  converts from Float32 to Int128
-  converts from UInt128 to UInt8
  converts from UInt128 to UInt8
-  converts from Float64 to Int16
  converts from Float64 to Int16
-  converts from UInt8 to Float64
  converts from UInt8 to Float64
-  floor_division UInt32 // Float32 returns UInt32
  floor_division UInt32 // Float32 returns UInt32
-  floor_division Int32 // Int8 returns Int32
  floor_division Int32 // Int8 returns Int32
-  division between UInt128 / Int128 returns Float64
  division between UInt128 / Int128 returns Float64
-  converts from UInt64 to UInt128
  converts from UInt64 to UInt128
-  converts from UInt128 to Int32
  converts from UInt128 to Int32
-  converts from UInt128 to UInt32
  converts from UInt128 to UInt32
-  converts from Int64 to Int8
  converts from Int64 to Int8
-  division between UInt16 / Int16 returns Float64
  division between UInt16 / Int16 returns Float64
-  floor_division UInt32 // UInt128 returns UInt32
  floor_division UInt32 // UInt128 returns UInt32
-  converts from UInt16 to Float64
  converts from UInt16 to Float64
-  converts from Float64 to UInt64
  converts from Float64 to UInt64
-  initialize from value to Int64
  initialize from value to Int64
-  division between Int64 / Int32 returns Float64
  division between Int64 / Int32 returns Float64
-  converts from UInt16 to Int16
  converts from UInt16 to Int16
-  converts from UInt32 to Int64
  converts from UInt32 to Int64
-  converts from Int128 to Int32
  converts from Int128 to Int32
-  floor_division Int128 // Float32 returns Int128
  floor_division Int128 // Float32 returns Int128
-  converts from Int32 to Float64
  converts from Int32 to Float64
-  converts from Int32 to Float32
  converts from Int32 to Float32
-  converts from Int32 to Int64
  converts from Int32 to Int64
-  converts from UInt64 to Int32
  converts from UInt64 to Int32
-  floor_division Int32 // Int16 returns Int32
  floor_division Int32 // Int16 returns Int32
-  converts from UInt64 to UInt16
  converts from UInt64 to UInt16
-  division between UInt16 / UInt64 returns Float64
  division between UInt16 / UInt64 returns Float64
-  floor_division UInt64 // Int8 returns UInt64
  floor_division UInt64 // Int8 returns UInt64
-  converts from Float64 to UInt32
  converts from Float64 to UInt32
-  floor_division Int8 // Float32 returns Int8
  floor_division Int8 // Float32 returns Int8
-  floor_division UInt16 // Float64 returns UInt16
  floor_division UInt16 // Float64 returns UInt16
-  converts from UInt16 to Int8
  converts from UInt16 to Int8
-  division between Int32 / UInt32 returns Float64
  division between Int32 / UInt32 returns Float64
-  floor_division Int64 // UInt32 returns Int64
  floor_division Int64 // UInt32 returns Int64
-  converts from Int16 to Float32
  converts from Int16 to Float32
-  converts from Int16 to UInt32
  converts from Int16 to UInt32
-  division between UInt8 / UInt128 returns Float64
  division between UInt8 / UInt128 returns Float64
-  #round_even
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  converts from UInt64 to UInt8
  converts from UInt64 to UInt8
-  converts from Int16 to Int16
  converts from Int16 to Int16
-  floor_division Int8 // Int128 returns Int8
  floor_division Int8 // Int128 returns Int8
-  division between Int32 / Float64 returns Float64
  division between Int32 / Float64 returns Float64
-  converts from UInt8 to Int64
  converts from UInt8 to Int64
-  converts from Int128 to Int128
  converts from Int128 to Int128
-  floor_division UInt16 // Int32 returns UInt16
  floor_division UInt16 // Int32 returns UInt16
-  floor_division Float32 // Float32 returns Float32
  floor_division Float32 // Float32 returns Float32
-  floor_division Int8 // UInt16 returns Int8
  floor_division Int8 // UInt16 returns Int8
-  converts from Float32 to Int16
  converts from Float32 to Int16
-  converts from UInt64 to UInt16
  converts from UInt64 to UInt16
-  division between UInt64 / UInt16 returns Float64
  division between UInt64 / UInt16 returns Float64
-  floor_division UInt16 // UInt32 returns UInt16
  floor_division UInt16 // UInt32 returns UInt16
-  converts from UInt16 to UInt32
  converts from UInt16 to UInt32
-  converts from Int64 to Int64
  converts from Int64 to Int64
-  #positive?
  #positive?
-  floor_division Int64 // Int32 returns Int64
  floor_division Int64 // Int32 returns Int64
-  converts from Int8 to Float32
  converts from Int8 to Float32
-  converts from UInt32 to UInt16
  converts from UInt32 to UInt16
-  converts from Float64 to UInt8
  converts from Float64 to UInt8
-  converts from Float32 to Int8
  converts from Float32 to Int8
-  floor_division Int128 // Int64 returns Int128
  floor_division Int128 // Int64 returns Int128
-  floor_division Int16 // Float64 returns Int16
  floor_division Int16 // Float64 returns Int16
-  converts from Int8 to UInt64
  converts from Int8 to UInt64
-  floor_division Float32 // Int128 returns Float32
  floor_division Float32 // Int128 returns Float32
-  floor_division Float32 // UInt32 returns Float32
  floor_division Float32 // UInt32 returns Float32
-  floor_division Int32 // UInt16 returns Int32
  floor_division Int32 // UInt16 returns Int32
-  converts from UInt32 to UInt64
  converts from UInt32 to UInt64
-  converts from UInt64 to Int64
  converts from UInt64 to Int64
-  floor_division Int32 // UInt32 returns Int32
  floor_division Int32 // UInt32 returns Int32
-  converts from UInt64 to Float32
  converts from UInt64 to Float32
-  floor_division UInt128 // Float32 returns UInt128
  floor_division UInt128 // Float32 returns UInt128
-  converts from UInt8 to UInt8
  converts from UInt8 to UInt8
-  initialize from value to UInt64
  initialize from value to UInt64
-  converts from UInt128 to Int32
  converts from UInt128 to Int32
-  converts from Int64 to Int32
  converts from Int64 to Int32
-  floor_division Int64 // UInt8 returns Int64
  floor_division Int64 // UInt8 returns Int64
-  converts from UInt8 to UInt32
  converts from UInt8 to UInt32
-  converts from Int64 to Int8
  converts from Int64 to Int8
-  initialize from value to Int8
  initialize from value to Int8
-  converts from Int128 to UInt8
  converts from Int128 to UInt8
-  converts from Float32 to Float32
  converts from Float32 to Float32
-  converts from Int16 to Int32
  converts from Int16 to Int32
-  converts from UInt128 to Float64
  converts from UInt128 to Float64
-  converts from Int32 to UInt128
  converts from Int32 to UInt128
-  floor_division Float32 // Float64 returns Float32
  floor_division Float32 // Float64 returns Float32
-  division between Int16 / Int8 returns Float64
  division between Int16 / Int8 returns Float64
-  division between Int32 / UInt8 returns Float64
  division between Int32 / UInt8 returns Float64
-  division between Float64 / Int16 returns Float64
  division between Float64 / Int16 returns Float64
-  divides and calculates the modulo
  divides and calculates the modulo
-  converts from UInt8 to Float32
  converts from UInt8 to Float32
-  converts from Float32 to Int64
  converts from Float32 to Int64
-  converts from UInt64 to Int128
  converts from UInt64 to Int128
-  converts from UInt16 to UInt64
  converts from UInt16 to UInt64
-  creates a static array
  creates a static array
-  converts from UInt8 to UInt8
  converts from UInt8 to UInt8
-  division between UInt64 / UInt8 returns Float64
  division between UInt64 / UInt8 returns Float64
-  floor_division Int64 // Float64 returns Int64
  floor_division Int64 // Float64 returns Int64
-  converts from UInt32 to Int8
  converts from UInt32 to Int8
-  floor_division UInt128 // Int128 returns UInt128
  floor_division UInt128 // Int128 returns UInt128
-  converts from Int8 to UInt64
  converts from Int8 to UInt64
-  floor_division Int8 // Float64 returns Int8
  floor_division Int8 // Float64 returns Int8
-  floor_division UInt32 // UInt8 returns UInt32
  floor_division UInt32 // UInt8 returns UInt32
-  division between Int64 / Int16 returns Float64
  division between Int64 / Int16 returns Float64
-  floor_division Float32 // Int8 returns Float32
  floor_division Float32 // Int8 returns Float32
-  converts from UInt32 to Int16
  converts from UInt32 to Int16
-  division between Int8 / Float32 returns Float32
  division between Int8 / Float32 returns Float32
-  converts from Int8 to Int32
  converts from Int8 to Int32
-  converts from Int8 to Int16
  converts from Int8 to Int16
-  division between Float32 / UInt128 returns Float32
  division between Float32 / UInt128 returns Float32
-  converts from UInt8 to Int8
  converts from UInt8 to Int8
-  floor_division UInt16 // Int16 returns UInt16
  floor_division UInt16 // Int16 returns UInt16
-  converts from Int64 to UInt64
  converts from Int64 to UInt64
-  division between Int32 / Int32 returns Float64
  division between Int32 / Int32 returns Float64
-  division between Int64 / Float64 returns Float64
  division between Int64 / Float64 returns Float64
-  floor_division Float64 // UInt64 returns Float64
  floor_division Float64 // UInt64 returns Float64
-  converts from Float64 to UInt64
  converts from Float64 to UInt64
-  division between Float32 / UInt32 returns Float32
  division between Float32 / UInt32 returns Float32
-  division between Int8 / UInt8 returns Float64
  division between Int8 / UInt8 returns Float64
-  floor_division UInt16 // UInt16 returns UInt16
  floor_division UInt16 // UInt16 returns UInt16
-  floor_division Int128 // UInt64 returns Int128
  floor_division Int128 // UInt64 returns Int128
-  division between UInt8 / UInt32 returns Float64
  division between UInt8 / UInt32 returns Float64
-  converts from UInt16 to UInt16
  converts from UInt16 to UInt16
-  floor_division UInt16 // UInt64 returns UInt16
  floor_division UInt16 // UInt64 returns UInt16
-  floor_division Int64 // Int128 returns Int64
  floor_division Int64 // Int128 returns Int64
-  division between Int64 / Int128 returns Float64
  division between Int64 / Int128 returns Float64
-  floor_division Int16 // UInt16 returns Int16
  floor_division Int16 // UInt16 returns Int16
-  converts from Float32 to Float64
  converts from Float32 to Float64
-  floor_division Int16 // UInt32 returns Int16
  floor_division Int16 // UInt32 returns Int16
-  converts from Int16 to UInt128
  converts from Int16 to UInt128
-  division between Int16 / Int32 returns Float64
  division between Int16 / Int32 returns Float64
-  converts from UInt128 to Int128
  converts from UInt128 to Int128
-  converts from Int32 to Int64
  converts from Int32 to Int64
-  converts from Int32 to UInt64
  converts from Int32 to UInt64
-  converts from UInt32 to Float64
  converts from UInt32 to Float64
-  floor_division UInt64 // Int32 returns UInt64
  floor_division UInt64 // Int32 returns UInt64
-  converts from Float64 to Float32
  converts from Float64 to Float32
-  converts from UInt16 to Int32
  converts from UInt16 to Int32
-  floor_division UInt64 // UInt64 returns UInt64
  floor_division UInt64 // UInt64 returns UInt64
-  division between Int64 / Int8 returns Float64
  division between Int64 / Int8 returns Float64
-  floor_division UInt128 // UInt64 returns UInt128
  floor_division UInt128 // UInt64 returns UInt128
-  converts from UInt8 to UInt16
  converts from UInt8 to UInt16
-  floor_division Int8 // Int32 returns Int8
  floor_division Int8 // Int32 returns Int8
-  floor_division UInt32 // Int128 returns UInt32
  floor_division UInt32 // Int128 returns UInt32
-  floor_division UInt32 // Float64 returns UInt32
  floor_division UInt32 // Float64 returns UInt32
-  floor_division UInt8 // Float32 returns UInt8
  floor_division UInt8 // Float32 returns UInt8
-  division between Int8 / UInt128 returns Float64
  division between Int8 / UInt128 returns Float64
-  converts from Int16 to Float32
  converts from Int16 to Float32
-  division between UInt64 / Int16 returns Float64
  division between UInt64 / Int16 returns Float64
-  floor_division Float32 // UInt128 returns Float32
  floor_division Float32 // UInt128 returns Float32
-  converts from Int16 to Int8
  converts from Int16 to Int8
-  initialize from value to UInt128
  initialize from value to UInt128
-  division between UInt64 / UInt128 returns Float64
  division between UInt64 / UInt128 returns Float64
-  floor_division Int64 // UInt64 returns Int64
  floor_division Int64 // UInt64 returns Int64
-  gives the sign
  gives the sign
-  floor_division Float64 // UInt16 returns Float64
  floor_division Float64 // UInt16 returns Float64
-  division between Int16 / Int16 returns Float64
  division between Int16 / Int16 returns Float64
-  converts from UInt16 to Int16
  converts from UInt16 to Int16
-  converts from Int32 to Int32
  converts from Int32 to Int32
-  converts from Float32 to UInt8
  converts from Float32 to UInt8
-  converts from Int64 to UInt32
  converts from Int64 to UInt32
-  floor_division Int128 // Float64 returns Int128
  floor_division Int128 // Float64 returns Int128
-  floor_division UInt16 // Int64 returns UInt16
  floor_division UInt16 // Int64 returns UInt16
-  converts from UInt32 to Float32
  converts from UInt32 to Float32
-  division between UInt32 / UInt16 returns Float64
  division between UInt32 / UInt16 returns Float64
-  floor_division UInt8 // Float64 returns UInt8
  floor_division UInt8 // Float64 returns UInt8
-  converts from UInt16 to Int32
  converts from UInt16 to Int32
-  floor_division UInt8 // Int64 returns UInt8
  floor_division UInt8 // Int64 returns UInt8
-  initialize from value to Int128
  initialize from value to Int128
-  converts from Float64 to Int32
  converts from Float64 to Int32
-  converts from UInt64 to UInt64
  converts from UInt64 to UInt64
-  unchecked initialize from value to UInt16
  unchecked initialize from value to UInt16
-  division between Int64 / Float32 returns Float32
  division between Int64 / Float32 returns Float32
-  converts from UInt16 to UInt128
  converts from UInt16 to UInt128
-  division between UInt8 / Float32 returns Float32
  division between UInt8 / Float32 returns Float32
-  converts from UInt128 to Int64
  converts from UInt128 to Int64
-  converts from UInt128 to UInt16
  converts from UInt128 to UInt16
-  division between Int16 / Float64 returns Float64
  division between Int16 / Float64 returns Float64
-  division between Int128 / UInt8 returns Float64
  division between Int128 / UInt8 returns Float64
-  converts from Float64 to Int32
  converts from Float64 to Int32
-  converts from Int8 to UInt16
  converts from Int8 to UInt16
-  floor_division UInt64 // UInt128 returns UInt64
  floor_division UInt64 // UInt128 returns UInt64
-  floor_division Float64 // UInt32 returns Float64
  floor_division Float64 // UInt32 returns Float64
-  converts from Int16 to UInt128
  converts from Int16 to UInt128
-  converts from UInt32 to UInt8
  converts from UInt32 to UInt8
-  converts from Float32 to Int32
  converts from Float32 to Int32
-  converts from Int64 to Float32
  converts from Int64 to Float32
-  division between UInt128 / UInt32 returns Float64
  division between UInt128 / UInt32 returns Float64
-  converts from Float32 to UInt64
  converts from Float32 to UInt64
-  floor_division UInt8 // Int8 returns UInt8
  floor_division UInt8 // Int8 returns UInt8
-  converts from Int16 to Int64
  converts from Int16 to Int64
-  division between Int8 / UInt64 returns Float64
  division between Int8 / UInt64 returns Float64
-  floor_division UInt64 // UInt32 returns UInt64
  floor_division UInt64 // UInt32 returns UInt64
-  converts from UInt8 to UInt16
  converts from UInt8 to UInt16
-  floor_division UInt64 // Float64 returns UInt64
  floor_division UInt64 // Float64 returns UInt64
-  floor_division UInt128 // UInt16 returns UInt128
  floor_division UInt128 // UInt16 returns UInt128
-  converts from UInt8 to Int32
  converts from UInt8 to Int32
-  division between Int16 / UInt64 returns Float64
  division between Int16 / UInt64 returns Float64
-  division between Float64 / UInt128 returns Float64
  division between Float64 / UInt128 returns Float64
-  converts from Int8 to Float32
  converts from Int8 to Float32
-  floor_division UInt128 // UInt8 returns UInt128
  floor_division UInt128 // UInt8 returns UInt128
-  converts from UInt64 to Int32
  converts from UInt64 to Int32
-  floor_division UInt128 // UInt32 returns UInt128
  floor_division UInt128 // UInt32 returns UInt128
-  division between Int128 / Int8 returns Float64
  division between Int128 / Int8 returns Float64
-  converts from Float32 to Int16
  converts from Float32 to Int16
-  converts from UInt32 to Int128
  converts from UInt32 to Int128
-  division between UInt128 / UInt64 returns Float64
  division between UInt128 / UInt64 returns Float64
-  converts from Int64 to UInt16
  converts from Int64 to UInt16
-  division between Float64 / Float32 returns Float64
  division between Float64 / Float32 returns Float64
-  division between UInt8 / UInt64 returns Float64
  division between UInt8 / UInt64 returns Float64
-  division between UInt64 / Int32 returns Float64
  division between UInt64 / Int32 returns Float64
-  division between Int64 / UInt8 returns Float64
  division between Int64 / UInt8 returns Float64
-  division between Float32 / Float32 returns Float32
  division between Float32 / Float32 returns Float32
-  converts from Float64 to UInt8
  converts from Float64 to UInt8
-  converts from Int128 to UInt64
  converts from Int128 to UInt64
-  division between UInt32 / Int16 returns Float64
  division between UInt32 / Int16 returns Float64
-  converts from UInt64 to UInt128
  converts from UInt64 to UInt128
-  division between UInt64 / Int64 returns Float64
  division between UInt64 / Int64 returns Float64
-  converts from Int64 to Float32
  converts from Int64 to Float32
-  converts from UInt8 to UInt128
  converts from UInt8 to UInt128
-  initialize from value to Int32
  initialize from value to Int32
-  converts from UInt32 to Float64
  converts from UInt32 to Float64
-  converts from UInt16 to Int64
  converts from UInt16 to Int64
-  converts from Float32 to Int8
  converts from Float32 to Int8
-  division between Float64 / UInt64 returns Float64
  division between Float64 / UInt64 returns Float64
-  converts from Int128 to Float32
  converts from Int128 to Float32
-  floor_division UInt8 // UInt32 returns UInt8
  floor_division UInt8 // UInt32 returns UInt8
-  converts from UInt128 to Float64
  converts from UInt128 to Float64
-  converts from Int16 to UInt16
  converts from Int16 to UInt16
-  converts from Float64 to UInt128
  converts from Float64 to UInt128
-  floor_division UInt16 // Int128 returns UInt16
  floor_division UInt16 // Int128 returns UInt16
-  division between UInt8 / Float64 returns Float64
  division between UInt8 / Float64 returns Float64
-  division between Int16 / Int128 returns Float64
  division between Int16 / Int128 returns Float64
-  floor_division Int128 // UInt8 returns Int128
  floor_division Int128 // UInt8 returns Int128
-  floor_division UInt32 // Int64 returns UInt32
  floor_division UInt32 // Int64 returns UInt32
-  floor_division UInt64 // UInt8 returns UInt64
  floor_division UInt64 // UInt8 returns UInt64
-  division between Int16 / UInt128 returns Float64
  division between Int16 / UInt128 returns Float64
-  converts from Int32 to UInt8
  converts from Int32 to UInt8
-  converts from Float64 to UInt16
  converts from Float64 to UInt16
-  converts from UInt64 to UInt32
  converts from UInt64 to UInt32
-  converts from UInt128 to UInt8
  converts from UInt128 to UInt8
-  converts from Int32 to Int8
  converts from Int32 to Int8
-  floor_division UInt128 // Int32 returns UInt128
  floor_division UInt128 // Int32 returns UInt128
-  division between UInt32 / UInt32 returns Float64
  division between UInt32 / UInt32 returns Float64
-  converts from Int64 to Int128
  converts from Int64 to Int128
-  converts from UInt32 to Float32
  converts from UInt32 to Float32
-  division between Int32 / Int16 returns Float64
  division between Int32 / Int16 returns Float64
-  floor_division UInt32 // Int16 returns UInt32
  floor_division UInt32 // Int16 returns UInt32
-  converts from Float32 to UInt16
  converts from Float32 to UInt16
-  division between UInt64 / Float64 returns Float64
  division between UInt64 / Float64 returns Float64
-  division between Float64 / Float64 returns Float64
  division between Float64 / Float64 returns Float64
-  division between UInt16 / UInt128 returns Float64
  division between UInt16 / UInt128 returns Float64
-  division between Float64 / Int128 returns Float64
  division between Float64 / Int128 returns Float64
-  converts from UInt128 to UInt32
  converts from UInt128 to UInt32
-  floor_division Int128 // Int8 returns Int128
  floor_division Int128 // Int8 returns Int128
-  converts from Int128 to Float32
  converts from Int128 to Float32
-  floor_division Int64 // Int64 returns Int64
  floor_division Int64 // Int64 returns Int64
-  converts from UInt16 to UInt32
  converts from UInt16 to UInt32
-  division between UInt8 / Int64 returns Float64
  division between UInt8 / Int64 returns Float64
-  converts from UInt16 to Int64
  converts from UInt16 to Int64
-  converts from UInt16 to Float32
  converts from UInt16 to Float32
-  converts from Int8 to UInt128
  converts from Int8 to UInt128
-  converts from Int8 to Int32
  converts from Int8 to Int32
-  converts from Int8 to Int128
  converts from Int8 to Int128
-  floor_division UInt32 // Int8 returns UInt32
  floor_division UInt32 // Int8 returns UInt32
-  converts from Int32 to Int128
  converts from Int32 to Int128
-  converts from Int128 to Int64
  converts from Int128 to Int64
-  division between UInt8 / Int8 returns Float64
  division between UInt8 / Int8 returns Float64
-  converts from UInt32 to Int32
  converts from UInt32 to Int32
-  division between Float32 / UInt64 returns Float32
  division between Float32 / UInt64 returns Float32
-  converts from Float32 to Float64
  converts from Float32 to Float64
-  converts from Int32 to UInt8
  converts from Int32 to UInt8
-  converts from UInt32 to Int16
  converts from UInt32 to Int16
-  division between UInt64 / Int128 returns Float64
  division between UInt64 / Int128 returns Float64
-  floor_division UInt128 // Float64 returns UInt128
  floor_division UInt128 // Float64 returns UInt128
-  converts from Int128 to Int16
  converts from Int128 to Int16
-  converts from UInt128 to Float32
  converts from UInt128 to Float32
-  converts from Float64 to UInt128
  converts from Float64 to UInt128
-  converts from Int8 to Int8
  converts from Int8 to Int8
-  converts from Int16 to Int16
  converts from Int16 to Int16
-  converts from Int128 to Int16
  converts from Int128 to Int16
-  converts from UInt128 to Int128
  converts from UInt128 to Int128
-  floor_division Int8 // Int8 returns Int8
  floor_division Int8 // Int8 returns Int8
-  division between Int32 / UInt128 returns Float64
  division between Int32 / UInt128 returns Float64
-  division between Float32 / UInt16 returns Float32
  division between Float32 / UInt16 returns Float32
-  #round_away
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  converts from Float64 to Int8
  converts from Float64 to Int8
-  converts from Int32 to UInt32
  converts from Int32 to UInt32
-  converts from UInt32 to UInt32
  converts from UInt32 to UInt32
-  floor_division Int16 // Int32 returns Int16
  floor_division Int16 // Int32 returns Int16
-  converts from Int128 to Float64
  converts from Int128 to Float64
-  division between Int128 / Int16 returns Float64
  division between Int128 / Int16 returns Float64
-  converts from Int16 to Int32
  converts from Int16 to Int32
-  floor_division Int32 // Float64 returns Int32
  floor_division Int32 // Float64 returns Int32
-  #round
-    preserves type
    preserves type
-    rounds to digits
    rounds to digits
-    infinity Float64
    infinity Float64
-    accepts unsigned precision
    accepts unsigned precision
-    with digits
-      to_negative
      to_negative
-      to_positive
      to_positive
-      ties_even
      ties_even
-      ties_away
      ties_away
-      to_zero
      to_zero
-    nan
    nan
-    infinity Float32
    infinity Float32
-    handle medium amount of digits
    handle medium amount of digits
-    edge cases
    edge cases
-    base
-      2
      2
-      8
      8
-    rounds to nearest integer
    rounds to nearest integer
-    assert
    assert
-    rounding modes
-      ties_away
      ties_away
-      to_positive
      to_positive
-      to_zero
      to_zero
-      default (=ties_even)
      default (=ties_even)
-      ties_even
      ties_even
-      to_negative
      to_negative
-    negative digits
    negative digits
-  floor_division Int16 // Int8 returns Int16
  floor_division Int16 // Int8 returns Int16
-  converts from Int64 to Float64
  converts from Int64 to Float64
-  converts from UInt8 to Int32
  converts from UInt8 to Int32
-  floor_division Int128 // UInt32 returns Int128
  floor_division Int128 // UInt32 returns Int128
-  converts from Int128 to Int8
  converts from Int128 to Int8
-  floor_division Int64 // Float32 returns Int64
  floor_division Int64 // Float32 returns Int64
-  floor_division Int16 // UInt8 returns Int16
  floor_division Int16 // UInt8 returns Int16
-  floor_division Int32 // Int32 returns Int32
  floor_division Int32 // Int32 returns Int32
-  converts from UInt8 to UInt128
  converts from UInt8 to UInt128
-  division between Float32 / Int8 returns Float32
  division between Float32 / Int8 returns Float32
-  converts from UInt8 to Float32
  converts from UInt8 to Float32
-  converts from Int16 to Int128
  converts from Int16 to Int128
-  floor_division Float32 // Int16 returns Float32
  floor_division Float32 // Int16 returns Float32
-  converts from Int16 to UInt16
  converts from Int16 to UInt16
-  division between UInt128 / Float64 returns Float64
  division between UInt128 / Float64 returns Float64
-  converts from Int64 to Int16
  converts from Int64 to Int16
-  converts from Float64 to UInt16
  converts from Float64 to UInt16
-  division between Int128 / Int128 returns Float64
  division between Int128 / Int128 returns Float64
-  creates an array with [] and some elements
  creates an array with [] and some elements
-  floor_division Int32 // UInt128 returns Int32
  floor_division Int32 // UInt128 returns Int32
-  floor_division Int32 // UInt8 returns Int32
  floor_division Int32 // UInt8 returns Int32
-  initialize from value to UInt16
  initialize from value to UInt16
-  converts from UInt128 to Float32
  converts from UInt128 to Float32
-  converts from Int128 to Float64
  converts from Int128 to Float64
-  converts from Int128 to UInt8
  converts from Int128 to UInt8
-  floor_division UInt32 // UInt32 returns UInt32
  floor_division UInt32 // UInt32 returns UInt32
-  unchecked initialize from value to UInt32
  unchecked initialize from value to UInt32
-  division between UInt32 / UInt128 returns Float64
  division between UInt32 / UInt128 returns Float64
-  converts from Int64 to UInt64
  converts from Int64 to UInt64
-  converts from UInt8 to UInt64
  converts from UInt8 to UInt64
-  initialize from value to Float64
  initialize from value to Float64
-  division between Int64 / UInt32 returns Float64
  division between Int64 / UInt32 returns Float64
-  floor_division Int8 // UInt64 returns Int8
  floor_division Int8 // UInt64 returns Int8
-  converts from Float64 to Float64
  converts from Float64 to Float64
-  floor_division UInt128 // UInt128 returns UInt128
  floor_division UInt128 // UInt128 returns UInt128
-  converts from Int16 to Int64
  converts from Int16 to Int64
-  converts from Int8 to Float64
  converts from Int8 to Float64
-  division between UInt64 / UInt32 returns Float64
  division between UInt64 / UInt32 returns Float64
-  floor_division Int16 // Int16 returns Int16
  floor_division Int16 // Int16 returns Int16
-  division between Int128 / Int64 returns Float64
  division between Int128 / Int64 returns Float64
-  converts from Int8 to Int128
  converts from Int8 to Int128
-  initialize from value to UInt8
  initialize from value to UInt8
-  division between UInt16 / Int128 returns Float64
  division between UInt16 / Int128 returns Float64
-  division between Int128 / UInt32 returns Float64
  division between Int128 / UInt32 returns Float64
-  division between Float64 / UInt32 returns Float64
  division between Float64 / UInt32 returns Float64
-  converts from Int32 to UInt64
  converts from Int32 to UInt64
-NamedTuple
-  does map
  does map
-  compares with named tuple union (#5131)
  compares with named tuple union (#5131)
-  gets size
  gets size
-  #[]? with non-literal index
-    gets named tuple value or nil with String key
    gets named tuple value or nil with String key
-    gets named tuple value or nil with Symbol key
    gets named tuple value or nil with Symbol key
-  compares with other named tuple type
  compares with other named tuple type
-  .[] with non-literal index
-    gets named tuple metaclass value with Symbol key
    gets named tuple metaclass value with Symbol key
-    raises missing key
    raises missing key
-    gets named tuple metaclass value with String key
    gets named tuple metaclass value with String key
-  does NamedTuple.new, without type vars
  does NamedTuple.new, without type vars
-  does each_value
  does each_value
-  .[]? with non-literal index
-    gets named tuple metaclass value or nil with String key
    gets named tuple metaclass value or nil with String key
-    gets named tuple metaclass value or nil with Symbol key
    gets named tuple metaclass value or nil with Symbol key
-  does sorted_keys
  does sorted_keys
-  #dig
-    raises KeyError if not found
    raises KeyError if not found
-    gets the value at given path given splat
    gets the value at given path given splat
-  does NamedTuple.new, with type vars
  does NamedTuple.new, with type vars
-  #dig?
-    returns nil if not found
    returns nil if not found
-    gets the value at given path given splat
    gets the value at given path given splat
-  does NamedTuple.new, with hyphen in key
  does NamedTuple.new, with hyphen in key
-  compares with same named tuple type
  compares with same named tuple type
-  #to_a
-    creates an array of key-value pairs
    creates an array of key-value pairs
-    preserves key type for empty named tuples
    preserves key type for empty named tuples
-  does has_key? with symbol
  does has_key? with symbol
-  does each
  does each
-  dups
  dups
-  clones
  clones
-  does NamedTuple#from
  does NamedTuple#from
-  does empty
  does empty
-  does values
  does values
-  merges two empty named tuples
  merges two empty named tuples
-  does each_key
  does each_key
-  does NamedTuple.from
  does NamedTuple.from
+Log
+  .context
+    is per fiber
    is per fiber
+    is assignable from a named tuple
    is assignable from a named tuple
+    is extended by set
    is extended by set
+    can be set and cleared
    can be set and cleared
+    existing keys are overwritten by set
    existing keys are overwritten by set
+    is assignable from a hash with symbol keys
    is assignable from a hash with symbol keys
+  .with_context
+    with arguments restores context after the block
    with arguments restores context after the block
+    restores context after the block
    restores context after the block
+    assigns context via a named tuple
    assigns context via a named tuple
+    assigns context via a hash with symbol keys
    assigns context via a hash with symbol keys
+  #with_context
+    with arguments restores context after the block
    with arguments restores context after the block
+    restores context after the block
    restores context after the block
+Process
+  .chroot
+    raises when unprivileged
    raises when unprivileged
+  .on_interrupt
+    compiles
    compiles
+  .pgid
  .pgid
+  .fork
+    executes the new process with exec
    executes the new process with exec
+  #wait
+    successful exit code
    successful exit code
+    unsuccessful exit code
    unsuccessful exit code
+  #signal(Signal::KILL)
+    kills many process
    kills many process
+    kills a process
    kills a process
+  .new
+    raises if command doesn't exist
    raises if command doesn't exist
+    accepts nilable string for `chdir` (#13767)
    accepts nilable string for `chdir` (#13767)
+    raises if command could not be executed
    raises if command could not be executed
+    raises if command is not executable
    raises if command is not executable
+    raises if command is not executable
    raises if command is not executable
+  #terminate
  #terminate
+  .on_terminate
+    compiles
    compiles
+  .run
+    sends input in IO
    sends input in IO
+    does not execute batch files
+      .CmD
      .CmD
+      .cmD
      .cmD
+      .cmd
      .cmd
+      .bat
      .bat
+      .BAT
      .BAT
+      .Bat
      .Bat
+    sets working directory with string
    sets working directory with string
+    sends error to IO
    sends error to IO
+    environ
+      deletes existing environment variable
      deletes existing environment variable
+      sets an environment variable
      sets an environment variable
+      sets an empty environment variable
      sets an empty environment variable
+      overrides existing environment variable
      overrides existing environment variable
+      preserves and sets an environment variable
      preserves and sets an environment variable
+      preserves existing environment variable
      preserves existing environment variable
+      clears and sets an environment variable
      clears and sets an environment variable
+      clears the environment
      clears the environment
+    disallows passing arguments to nowhere
    disallows passing arguments to nowhere
+    sets working directory with path
    sets working directory with path
+    runs true in block
    runs true in block
+    can link processes together
    can link processes together
+    does not run shell code in the argument list
    does not run shell code in the argument list
+    sends output to IO
    sends output to IO
+    gets output
    gets output
+    looks up programs in the $PATH with a shell
    looks up programs in the $PATH with a shell
+    allows passing huge argument lists to a shell
    allows passing huge argument lists to a shell
+    redirects output to /dev/null
    redirects output to /dev/null
+    forwards non-blocking file
    forwards non-blocking file
+    forwards closed io
    forwards closed io
+    waits for the process
    waits for the process
+    controls process in block
    controls process in block
+    receives arguments in tuple
    receives arguments in tuple
+    closes ios after block
    closes ios after block
+    receives arguments in array
    receives arguments in array
+  .exists?
  .exists?
+  .exec
+    redirects STDIN and STDOUT to files
    redirects STDIN and STDOUT to files
+    gets error from exec
    gets error from exec
+Channel(T)
+  does not raise or change its status when it is closed more than once
  does not raise or change its status when it is closed more than once
+  send returns channel
  send returns channel
+  does send_first
  does send_first
+  .non_blocking_select
+    mix of receive and receive? multi-channel
+      raises if receive channel was close and receive? channel was not ready
      raises if receive channel was close and receive? channel was not ready
+      returns nil if receive channel was not ready and receive? channel was closed
      returns nil if receive channel was not ready and receive? channel was closed
+    receive nil-on-close single-channel
+      returns nil if channel was closed
      returns nil if channel was closed
+      types
      types
+    send raise-on-close multi-channel
+      types
      types
+    returns correct index for array argument
    returns correct index for array argument
+    timeout
+      types
      types
+      negative amounts should not trigger timeout
      negative amounts should not trigger timeout
+      send raise-on-close raises if channel was closed while waiting
      send raise-on-close raises if channel was closed while waiting
+      receive raise-on-close raises if channel was closed while waiting
      receive raise-on-close raises if channel was closed while waiting
+      should not trigger timeout
      should not trigger timeout
+      receive nil-on-close returns index of closed while waiting
      receive nil-on-close returns index of closed while waiting
+    receive raise-on-close single-channel
+      types
      types
+    send raise-on-close single-channel
+      types
      types
+    receive raise-on-close multi-channel
+      types
      types
+  .select
+    send raise-on-close multi-channel
+      types
      types
+    receive raise-on-close single-channel
+      types nilable channel
      types nilable channel
+      raises if channel was closed
      raises if channel was closed
+      raises if channel is closed while waiting
      raises if channel is closed while waiting
+      awakes all waiting selects
      awakes all waiting selects
+      types
      types
+    receive nil-on-close multi-channel
+      returns index of closed channel
      returns index of closed channel
+      types
      types
+    send raise-on-close single-channel
+      raises if channel was closed
      raises if channel was closed
+      types nilable channel
      types nilable channel
+      types
      types
+      awakes all waiting selects
      awakes all waiting selects
+      raises if channel is closed while waiting
      raises if channel is closed while waiting
+    mix of receive and receive? multi-channel
+      raises if receive channel was closed and receive? channel was not ready
      raises if receive channel was closed and receive? channel was not ready
+      returns nil if receive channel was not ready and receive? channel was closed
      returns nil if receive channel was not ready and receive? channel was closed
+    timeout
+      receive nil-on-close returns index of closed while waiting
      receive nil-on-close returns index of closed while waiting
+      allows receiving while waiting
      allows receiving while waiting
+      triggers timeout (reverse order)
      triggers timeout (reverse order)
+      triggers timeout
      triggers timeout
+      allows receiving while waiting (reverse order)
      allows receiving while waiting (reverse order)
+      allows receiving while waiting (same fiber multiple times)
      allows receiving while waiting (same fiber multiple times)
+      types
      types
+      triggers timeout (same fiber multiple times)
      triggers timeout (same fiber multiple times)
+      send raise-on-close raises if channel was closed while waiting
      send raise-on-close raises if channel was closed while waiting
+      negative amounts should not trigger timeout
      negative amounts should not trigger timeout
+      receive raise-on-close raises if channel was closed while waiting
      receive raise-on-close raises if channel was closed while waiting
+    receive raise-on-close multi-channel
+      types
      types
+    receive nil-on-close single-channel
+      returns nil if channel was closed
      returns nil if channel was closed
+      types nilable channel
      types nilable channel
+      types
      types
+      returns nil channel is closed while waiting
      returns nil channel is closed while waiting
+      awakes all waiting selects
      awakes all waiting selects
+  creates unbuffered with no arguments
  creates unbuffered with no arguments
+  does receive_first
  does receive_first
+  creates buffered with capacity argument
  creates buffered with capacity argument
+Pointer::Appender(T)
+  #size
  #size
+  #<<
  #<<
+  .new
  .new
+  #to_slice
  #to_slice
+OAuth::Signature
+  does twitter sample
  does twitter sample
+  key
+    gets when token secret is empty
    gets when token secret is empty
+    gets when token secret is not empty
    gets when token secret is not empty
+  base string
+    computes when TLS
    computes when TLS
+    computes with port in host
    computes with port in host
+    computes without port in host
    computes without port in host
+HTTP::Server::RequestProcessor
+  handles IO::Error while reading
  handles IO::Error while reading
+  reads consecutive requests
+    closes connection when Connection: close
    closes connection when Connection: close
+    fail if body is not consumed
    fail if body is not consumed
+    closes connection when request body is not entirely consumed
    closes connection when request body is not entirely consumed
+    continues when request body is entirely consumed
    continues when request body is entirely consumed
+    when body is consumed
    when body is consumed
+    with empty body
    with empty body
+  works
  works
+  handles IO::Error while flushing
  handles IO::Error while flushing
+  does not bleed Log::Context between requests
  does not bleed Log::Context between requests
+  doesn't respond with error when headers were already sent
  doesn't respond with error when headers were already sent
+  handles IO::Error while writing
  handles IO::Error while writing
+  catches raised error on handler and retains context from handler
  catches raised error on handler and retains context from handler
+  flushes output buffer when an error happens and some content was already sent
  flushes output buffer when an error happens and some content was already sent
+Fiber
+  #resumable?
  #resumable?
+HTTP::ChunkedContent
+  #read_byte stops reading after final chunk
  #read_byte stops reading after final chunk
+  long trailer part
+    fails for long single header
    fails for long single header
+    fails for long combined headers
    fails for long combined headers
+  #peek handles interrupted io
  #peek handles interrupted io
+  #read reads empty content
  #read reads empty content
+  #peek handles empty data
  #peek handles empty data
+  #read_byte reads empty content
  #read_byte reads empty content
+  skips (2)
  skips (2)
+  #read stops reading after final chunk
  #read stops reading after final chunk
+  #read_byte handles interrupted io
  #read_byte handles interrupted io
+  #peek stops reading after final chunk
  #peek stops reading after final chunk
+  #gets reads multiple chunks
  #gets reads multiple chunks
+  #peek reads empty content
  #peek reads empty content
+  fails if unterminated chunked trailer part
  fails if unterminated chunked trailer part
+  reads chunk extensions
  reads chunk extensions
+  skips
  skips
+  fails if not properly delimited
  fails if not properly delimited
+  skips (3)
  skips (3)
+  #read handles interrupted io
  #read handles interrupted io
+  #read_byte handles empty data
  #read_byte handles empty data
+  #read handles empty data
  #read handles empty data
+  reads chunked trailer part
  reads chunked trailer part
+  fails if not properly delimited
  fails if not properly delimited
+  #gets reads multiple chunks with 
+
  #gets reads multiple chunks with 
+
+  delays reading the next chunk as soon as one is consumed (#3270)
  delays reading the next chunk as soon as one is consumed (#3270)
+  peeks into next chunk
  peeks into next chunk
+  handles empty io
  handles empty io
+  fails if invalid chunk size
  fails if invalid chunk size
+  peeks
  peeks
+Atomic::Flag
+  #test_and_set
  #test_and_set
+  #clear
  #clear
+HTTP::Client::Response
+  parses response with body without \r
  parses response with body without \r
+  parses response without body but Content-Length == 0, block form (#8461)
  parses response without body but Content-Length == 0, block form (#8461)
+  handle invalid IO
+    unsupported version
    unsupported version
+    invalid status
    invalid status
+    missing HTTP header
    missing HTTP header
+    missing status
    missing status
+  parses response without status message
  parses response without status message
+  returns content type and charset, removes semicolon
  returns content type and charset, removes semicolon
+  sets content length from body
  sets content length from body
+  serialize as not chunked with body_io if HTTP/1.0
  serialize as not chunked with body_io if HTTP/1.0
+  parses 204 response without body but Content-Length == 0 (#2512)
  parses 204 response without body but Content-Length == 0 (#2512)
+  creates Response with status code 204, no body and Content-Length == 0 (#2512)
  creates Response with status code 204, no body and Content-Length == 0 (#2512)
+  returns content type and charset, removes semicolon, with multiple parameters (#2520)
  returns content type and charset, removes semicolon, with multiple parameters (#2520)
+  returns content type and no charset, other parameter (#2520)
  returns content type and no charset, other parameter (#2520)
+  parses response with chunked body of size 0
  parses response with chunked body of size 0
+  sets content length even without body
  sets content length even without body
+  success?
+    returns false for other ranges
    returns false for other ranges
+    returns true for the 2xx
    returns true for the 2xx
+  deletes Content-Encoding and Content-Length headers after gzip decompression
  deletes Content-Encoding and Content-Length headers after gzip decompression
+  parses response with streamed chunked body
  parses response with streamed chunked body
+  doesn't sets content length for 1xx, 204 or 304
  doesn't sets content length for 1xx, 204 or 304
+  parses long headers
  parses long headers
+  parses response without body
  parses response without body
+  returns no content_type when header is missing
  returns no content_type when header is missing
+  parses long request lines
  parses long request lines
+  serialize with body
  serialize with body
+  returns content type and charset, removes quotes
  returns content type and charset, removes quotes
+  returns content type and no charset
  returns content type and no charset
+  serialize as chunked with body_io
  serialize as chunked with body_io
+  parses response with chunked body
  parses response with chunked body
+  returns status_code
  returns status_code
+  parses response with body but without content-length
  parses response with body but without content-length
+  raises when creating 1xx, 204 or 304 with body
  raises when creating 1xx, 204 or 304 with body
+  parses response with empty body but without content-length
  parses response with empty body but without content-length
+  parses response with streamed body, huge content-length
  parses response with streamed body, huge content-length
+  parses response with streamed body
  parses response with streamed body
+  returns content type as nil when empty (#8398)
  returns content type as nil when empty (#8398)
+  parses response with cookies
  parses response with cookies
+  serialize with body and cookies
  serialize with body and cookies
+  parses response ignoring body
  parses response ignoring body
+  parses response with body
  parses response with body
+  deletes Content-Encoding and Content-Length headers after deflate decompression
  deletes Content-Encoding and Content-Length headers after deflate decompression
+  parses response with duplicated headers
  parses response with duplicated headers
+Range
+  sum
+    called with no block is specialized for performance (BigInt)
    called with no block is specialized for performance (BigInt)
+    is equivalent to Enumerable#sum
    is equivalent to Enumerable#sum
+    called with no block is specialized for performance
    called with no block is specialized for performance
+  map
+    works for other types
    works for other types
+    optimizes for int range
    optimizes for int range
+  initialized with new method
  initialized with new method
+  gets basic properties
  gets basic properties
+  #reverse_each
+    gives correct values with exclusive range
    gives correct values with exclusive range
+    gives correct values with inclusive range
    gives correct values with inclusive range
+    is empty with empty inclusive range
    is empty with empty inclusive range
+    iterators on beginless range
    iterators on beginless range
+    raises on endless range
    raises on endless range
+  #each iterator
+    is empty with .. and begin > end
    is empty with .. and begin > end
+    is not empty with ... and begin.succ == end
    is not empty with ... and begin.succ == end
+    is not empty with .. and begin == end
    is not empty with .. and begin == end
+    does next with exclusive range
    does next with exclusive range
+    does with endless range
    does with endless range
+    does next with inclusive range
    does next with inclusive range
+    raises on beginless range
    raises on beginless range
+    cycles
    cycles
+    is empty with ... and begin > end
    is empty with ... and begin > end
+  is not empty with ... and begin.succ == end
  is not empty with ... and begin.succ == end
+  #==
  #==
   does to_s
  does to_s
-  does types
  does types
-  does keys
  does keys
-  #[] with non-literal index
-    gets named tuple value with Symbol key
    gets named tuple value with Symbol key
-    gets named tuple value with String key
    gets named tuple value with String key
-    raises missing key
    raises missing key
-  does has_key? with string
  does has_key? with string
-  computes a hash value
  computes a hash value
-  does each_with_index
  does each_with_index
-  #to_h
-    creates an empty hash from an empty named tuple
    creates an empty hash from an empty named tuple
-    creates a hash
    creates a hash
-  merges with other named tuple
  merges with other named tuple
-Time::Location
-  .load
-    loads Europe/Berlin
    loads Europe/Berlin
-    validating name
-      absolute path
      absolute path
-      dot dot
      dot dot
-    invalid zone file
    invalid zone file
-    name is folder
    name is folder
-    treats UTC as special case
    treats UTC as special case
-    invalid timezone identifier
    invalid timezone identifier
-    with ZONEINFO
-      loads new data if file was changed
      loads new data if file was changed
-      loads from custom zipfile
      loads from custom zipfile
-      loads new data if ZIP file was changed
      loads new data if ZIP file was changed
-      raises if not available
      raises if not available
-      loads from custom directory
      loads from custom directory
-      does not fall back to default sources
      does not fall back to default sources
-      caches result
      caches result
-  .local
  .local
-  .fixed
-    negative
    negative
-    with name
    with name
-    without name
    without name
-    raises if offset to large
    raises if offset to large
-    positive
    positive
-  #lookup
-    handles dst change
    handles dst change
-    reads from cache
    reads from cache
-    first zone
-      Pacific/Fakaofo
      Pacific/Fakaofo
-      PST8PDT
      PST8PDT
-    looks up
    looks up
-    handles value after last transition
    handles value after last transition
-    caches last zone
    caches last zone
-  UTC
  UTC
-  .load_android
-    loads Europe/Berlin
    loads Europe/Berlin
-    loads new data if tzdata file was changed
    loads new data if tzdata file was changed
-  .load_local
-    with unset TZ
    with unset TZ
-    with TZ
    with TZ
-    with empty TZ
    with empty TZ
-IO::Hexdump
-  write
-    prints hexdump
    prints hexdump
-  read
-    prints hexdump
    prints hexdump
+  ===
+    no limits
    no limits
+    exclusive
    exclusive
+    beginless
    beginless
+    endless
    endless
+    inclusive
    inclusive
+  #sample
+    samples with n = 0
    samples with n = 0
+    for a float range
+      samples an exclusive range with n > 1
      samples an exclusive range with n > 1
+      samples an exclusive range without n
      samples an exclusive range without n
+      samples an inclusive range without n
      samples an inclusive range without n
+      samples an inclusive range with n > 1
      samples an inclusive range with n > 1
+      samples an inclusive range with n >= 1 and begin == end
      samples an inclusive range with n >= 1 and begin == end
+      raises on invalid range with n = 0
      raises on invalid range with n = 0
+      samples an exclusive range with n = 1
      samples an exclusive range with n = 1
+      raises on invalid range with n = 1
      raises on invalid range with n = 1
+      samples an inclusive range with n = 1
      samples an inclusive range with n = 1
+      samples an inclusive range with n > 16
      samples an inclusive range with n > 16
+      raises on invalid range with n > 1
      raises on invalid range with n > 1
+    samples a float range as a distribution
    samples a float range as a distribution
+    for an integer range
+      samples an inclusive range with n > 16
      samples an inclusive range with n > 16
+      raises on invalid range with n = 1
      raises on invalid range with n = 1
+      samples an inclusive range with n > 1
      samples an inclusive range with n > 1
+      samples an inclusive range with n equal to or bigger than the available values
      samples an inclusive range with n equal to or bigger than the available values
+      raises on invalid range without n
      raises on invalid range without n
+      samples an inclusive range with n = 1
      samples an inclusive range with n = 1
+      raises on invalid range with n = 0
      raises on invalid range with n = 0
+      samples an exclusive range with n = 1
      samples an exclusive range with n = 1
+      raises on exclusive range that would underflow
      raises on exclusive range that would underflow
+      raises on invalid range with n > 1
      raises on invalid range with n > 1
+      samples an exclusive range without n
      samples an exclusive range without n
+      samples an exclusive range with n > 1
      samples an exclusive range with n > 1
+      samples an inclusive range without n
      samples an inclusive range without n
+    raises on open range
    raises on open range
+    samples a range with nilable types
    samples a range with nilable types
+  is empty with .. and begin > end
  is empty with .. and begin > end
+  #each
+    is empty with empty inclusive range
    is empty with empty inclusive range
+    raises on beginless
    raises on beginless
+    gives correct values with inclusive range
    gives correct values with inclusive range
+    endless
    endless
+    doesn't have Nil as a type for endless each
    doesn't have Nil as a type for endless each
+    gives correct values with exclusive range
    gives correct values with exclusive range
+    doesn't have Nil as a type for beginless each
    doesn't have Nil as a type for beginless each
+  #step
+    "inclusive step over" iterator
    "inclusive step over" iterator
+    "begin.succ == end exclusive" yielding
    "begin.succ == end exclusive" yielding
+    "begin == end exclusive" yielding
    "begin == end exclusive" yielding
+    "exclusive default" iterator
    "exclusive default" iterator
+    "begin.succ == end inclusive" yielding
    "begin.succ == end inclusive" yielding
+    "endless range" iterator
    "endless range" iterator
+    "begin > end inclusive" iterator
    "begin > end inclusive" iterator
+    "begin > end exclusive" iterator
    "begin > end exclusive" iterator
+    "inclusive step" yielding
    "inclusive step" yielding
+    "exclusive step over" yielding
    "exclusive step over" yielding
+    "inclusive default" iterator
    "inclusive default" iterator
+    "Float step" iterator
    "Float step" iterator
+    "Time::Span step" iterator
    "Time::Span step" iterator
+    "begin.succ == end inclusive" iterator
    "begin.succ == end inclusive" iterator
+    "endless range" yielding
    "endless range" yielding
+    "inclusive default" yielding
    "inclusive default" yielding
+    "begin > end exclusive" yielding
    "begin > end exclusive" yielding
+    "begin.succ == end exclusive" iterator
    "begin.succ == end exclusive" iterator
+    "exclusive step" yielding
    "exclusive step" yielding
+    "exclusive step" iterator
    "exclusive step" iterator
+    "inclusive step" iterator
    "inclusive step" iterator
+    "exclusive default" yielding
    "exclusive default" yielding
+    "inclusive step over" yielding
    "inclusive step over" yielding
+    "begin == end inclusive" iterator
    "begin == end inclusive" iterator
+    "begin > end inclusive" yielding
    "begin > end inclusive" yielding
+    "Time::Span step" yielding
    "Time::Span step" yielding
+    "exclusive step over" iterator
    "exclusive step over" iterator
+    "Float step" yielding
    "Float step" yielding
+    with #succ type
+      "at definition range" yielding
      "at definition range" yielding
+      "at definition range by" iterator
      "at definition range by" iterator
+      "at definition range by" yielding
      "at definition range by" yielding
+      "at definition range by" iterator
      "at definition range by" iterator
+      "at definition range by" yielding
      "at definition range by" yielding
+      "missing end by" yielding
      "missing end by" yielding
+      "at definition range" iterator
      "at definition range" iterator
+      "basic by" yielding
      "basic by" yielding
+      "at definition range missing by" yielding
      "at definition range missing by" yielding
+      "missing end by" iterator
      "missing end by" iterator
+      "at definition range missing by" iterator
      "at definition range missing by" iterator
+      "basic by" iterator
      "basic by" iterator
+      "basic" yielding
      "basic" yielding
+      "at definition range missing by" iterator
      "at definition range missing by" iterator
+      "at definition range missing by" yielding
      "at definition range missing by" yielding
+      "basic" iterator
      "basic" iterator
+    "begin == end inclusive" yielding
    "begin == end inclusive" yielding
+    raises on beginless range
    raises on beginless range
+    "begin == end exclusive" iterator
    "begin == end exclusive" iterator
+  bsearch
+    BigInt
    BigInt
+    Int
    Int
+    Float
    Float
+  is empty with ... and begin > end
  is empty with ... and begin > end
+  does inspect
  does inspect
+  includes?
  includes?
+  is not empty with .. and begin == end
  is not empty with .. and begin == end
+  clones
  clones
+  #size
+    raises on beginless range
    raises on beginless range
+    raises on endless range
    raises on endless range
+    works for other types
    works for other types
+    optimizes for int range
    optimizes for int range
+  #reverse_each iterator
+    is empty with ... and begin > end
    is empty with ... and begin > end
+    does next with inclusive range
    does next with inclusive range
+    is not empty with ... and begin.succ == end
    is not empty with ... and begin.succ == end
+    raises on endless range
    raises on endless range
+    does next with exclusive range
    does next with exclusive range
+    does next with beginless range
    does next with beginless range
+    reverse cycles
    reverse cycles
+    is not empty with .. and begin == end
    is not empty with .. and begin == end
+    is empty with .. and begin > end
    is empty with .. and begin > end
+SystemError
+  .from_os_error
+    Can build an error from an errno
    Can build an error from an errno
+Random
+  random_bytes
+    gets random bytes with default number of digits
    gets random bytes with default number of digits
+    generates random bytes
    generates random bytes
+    fills given buffer with random bytes
    fills given buffer with random bytes
+    gets random bytes with requested number of digits
    gets random bytes with requested number of digits
+  hex
+    gets hex with requested number of digits
    gets hex with requested number of digits
+    gets hex with default number of digits
    gets hex with default number of digits
+  does with BigInt range
  does with BigInt range
+  gets a random bool
  gets a random bool
+  raises on invalid number
  raises on invalid number
+  does with inclusive range
  does with inclusive range
+  limited number
  limited number
+  returns a random static array
  returns a random static array
+  works using U/Int128
  works using U/Int128
+  urlsafe_base64
+    keeps padding
    keeps padding
+    gets urlsafe base64 with requested number of digits
    gets urlsafe base64 with requested number of digits
+    gets urlsafe base64 with default number of digits
    gets urlsafe base64 with default number of digits
+  does with exclusive range of floats
  does with exclusive range of floats
+  works with span exceeding int type's range
  works with span exceeding int type's range
+  generates full-range by accumulation
  generates full-range by accumulation
+  generates by truncation
  generates by truncation
+  limited Float32 number
  limited Float32 number
+  does with exclusive range
  does with exclusive range
+  float number
  float number
+  limited Float64 number
  limited Float64 number
+  limited large BigInt
  limited large BigInt
+  allows creating a new default random with a seed
  allows creating a new default random with a seed
+  generates by accumulation
  generates by accumulation
+  generates full-range by truncation
  generates full-range by truncation
+  generates full-range
  generates full-range
+  raises on invalid float number
  raises on invalid float number
+  generates full-range by negation
  generates full-range by negation
+  raises on invalid range
+    Int32 range
    Int32 range
+    BigInt range
    BigInt range
+    Float64 range
    Float64 range
+  base64
+    gets base64 with requested number of digits
    gets base64 with requested number of digits
+    gets base64 with default number of digits
    gets base64 with default number of digits
+  allows creating a new default random
  allows creating a new default random
+  limited BigInt
  limited BigInt
+  does with inclusive range of floats
  does with inclusive range of floats
+  returns a random integer
  returns a random integer
 HTTP::WebSocket
-  handshake fails if server does not switch protocols
  handshake fails if server does not switch protocols
   send_masked
     sends the data with a bitmask
    sends the data with a bitmask
     sends long data with correct header
    sends long data with correct header
-  doesn't compress upgrade response body
  doesn't compress upgrade response body
-  sends correct HTTP basic auth header
  sends correct HTTP basic auth header
-  using IPv4
-    negotiates over HTTP correctly
    negotiates over HTTP correctly
-    negotiates over HTTPS correctly
    negotiates over HTTPS correctly
-  stream
-    sends continuous data and splits it to frames
    sends continuous data and splits it to frames
-    sets opcode of first frame to binary if stream is called with binary = true
    sets opcode of first frame to binary if stream is called with binary = true
-    sends less data than the frame size if necessary
    sends less data than the frame size if necessary
-  ignores body in upgrade response (malformed)
  ignores body in upgrade response (malformed)
-  close
-    closes without message
    closes without message
-    closes with code
    closes with code
-    closes with message and code
    closes with message and code
-    closes with message
    closes with message
-  using IPv6
-    negotiates over HTTP correctly
    negotiates over HTTP correctly
-    negotiates over HTTPS correctly
    negotiates over HTTPS correctly
   receive
+    read ping packet
    read ping packet
     can read masked text message
    can read masked text message
-    read very long packet
    read very long packet
-    can read partial packets
    can read partial packets
     can read fragmented packets
    can read fragmented packets
-    read long packet
    read long packet
     can read a small text packet
    can read a small text packet
+    can read partial packets
    can read partial packets
     can read a close packet
    can read a close packet
+    read very long packet
    read very long packet
+    read long packet
    read long packet
     read ping packet in between fragmented packet
    read ping packet in between fragmented packet
-    read ping packet
    read ping packet
+  using IPv4
+    negotiates over HTTP correctly
    negotiates over HTTP correctly
+    negotiates over HTTPS correctly
    negotiates over HTTPS correctly
+  using IPv6
+    negotiates over HTTP correctly
    negotiates over HTTP correctly
+    negotiates over HTTPS correctly
    negotiates over HTTPS correctly
   handshake fails if server does not verify Sec-WebSocket-Key
     Sec-WebSocket-Accept incorrect
    Sec-WebSocket-Accept incorrect
     Sec-WebSocket-Accept missing
    Sec-WebSocket-Accept missing
+  doesn't compress upgrade response body
  doesn't compress upgrade response body
+  ignores body in upgrade response (malformed)
  ignores body in upgrade response (malformed)
+  close
+    closes with message
    closes with message
+    closes with code
    closes with code
+    closes without message
    closes without message
+    closes with message and code
    closes with message and code
   send
     sends long data with correct header
    sends long data with correct header
     sets binary opcode if used with slice
    sets binary opcode if used with slice
-__umodti3
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-CSV
-  gets row iterator
  gets row iterator
-  parse
-    parses empty quoted string
    parses empty quoted string
-    takes an optional separator argument
    takes an optional separator argument
-    parses two rows
    parses two rows
-    parses one simple row
    parses one simple row
-    parses with double quote
    parses with double quote
-    raises if command, newline or end doesn't follow quote (2)
    raises if command, newline or end doesn't follow quote (2)
-    parses from IO
    parses from IO
-    raises if single quote in the middle
    raises if single quote in the middle
-    parses with quote
    parses with quote
-    raises if command, newline or end doesn't follow quote
    raises if command, newline or end doesn't follow quote
-    parses one row with spaces
    parses one row with spaces
-    parses with quote and newline
    parses with quote and newline
-    parses two rows with the last one having a newline
    parses two rows with the last one having a newline
-    parses empty string
    parses empty string
-    parses some commas
    parses some commas
-    takes an optional quote char argument
    takes an optional quote char argument
-  does CSV.each_row
  does CSV.each_row
-  parses row by row
  parses row by row
-  does CSV.each_row with separator and quotes
  does CSV.each_row with separator and quotes
-Bool
-  |
-    assert
    assert
+  sends correct HTTP basic auth header
  sends correct HTTP basic auth header
+  handshake fails if server does not switch protocols
  handshake fails if server does not switch protocols
+  stream
+    sets opcode of first frame to binary if stream is called with binary = true
    sets opcode of first frame to binary if stream is called with binary = true
+    sends continuous data and splits it to frames
    sends continuous data and splits it to frames
+    sends less data than the frame size if necessary
    sends less data than the frame size if necessary
+MIME::MediaType
+  #type
  #type
+  #fetch
  #fetch
+  #sub_type
  #sub_type
+  #[]=
  #[]=
+  .new
+    create new instance
    create new instance
+    raises for invalid parameter name
    raises for invalid parameter name
+  #each_parameter
  #each_parameter
+  #to_s
  #to_s
+  .parse
+    parses media type
    parses media type
+    sets default charset to utf-8 for text media types
    sets default charset to utf-8 for text media types
+    parses params with encoding
    parses params with encoding
+    parses params
    parses params
+Log.setup_from_env
+  raises on invalid level
  raises on invalid level
+  default_level
+    is not used if LOG_LEVEL is set
    is not used if LOG_LEVEL is set
+    is info
    is info
+    is used if no LOG_LEVEL is set
    is used if no LOG_LEVEL is set
+  default_sources
+    splits sources by comma
    splits sources by comma
+    is used
    is used
+    is *
    is *
+  backend
+    can be changed
    can be changed
+    is a IOBackend
    is a IOBackend
+MIME::Multipart::Parser
+  raises calling #next after errored
  raises calling #next after errored
+  handles padding
  handles padding
+  parses basic multipart messages
  parses basic multipart messages
+  parses messages with preambles and epilogues
  parses messages with preambles and epilogues
+  handles break/next in blocks
  handles break/next in blocks
+  raises calling #next after finished
  raises calling #next after finished
+  handles invalid multipart data
  handles invalid multipart data
+Hash
+  creates with initial capacity and block
  creates with initial capacity and block
+  "#each_key" iterator
  "#each_key" iterator
+  maps
  maps
+  transform values in place with keys included
  transform values in place with keys included
+  gets from union
  gets from union
+  transforms keys
  transforms keys
+  "#each" yielding
  "#each" yielding
+  clone
+    clones recursive hash
    clones recursive hash
+    retains default block on clone
    retains default block on clone
+    clones with size = 1
    clones with size = 1
+    clones empty hash
    clones empty hash
+    clones big hash
    clones big hash
+    clones small hash
    clones small hash
+  reject
     assert
    assert
+    does not change current hash
    does not change current hash
     assert
    assert
     assert
    assert
-  !
     assert
    assert
+  does to to_s with instance that was never instantiated
  does to to_s with instance that was never instantiated
+  "#each_with_index" yielding
  "#each_with_index" yielding
+  gets array of keys
  gets array of keys
+  first_value
+    raises on first value (nilable value)
    raises on first value (nilable value)
+    doesn't raise on first value (nilable value)
    doesn't raise on first value (nilable value)
+    gets first value
    gets first value
+  compacts!
  compacts!
+  compacts
  compacts
+  does to_a
  does to_a
+  key_for
+    raises when no key pairs with the given value
    raises when no key pairs with the given value
+    if block is given,
+      returns the first key with the given value
      returns the first key with the given value
+      yields the argument if no hash key pairs with the value
      yields the argument if no hash key pairs with the value
+    returns the first key with the given value
    returns the first key with the given value
+  selects
  selects
+  merges! with block
  merges! with block
+  transforms keys with values included
  transforms keys with values included
+  transforms keys with type casting
  transforms keys with type casting
+  fetch
+    fetches with block
    fetches with block
+    fetches with default value
    fetches with default value
+  compare_by_identity
+    retains compare_by_identity on dup
    retains compare_by_identity on dup
+    small hash
    small hash
+    retains compare_by_identity on clone
    retains compare_by_identity on clone
+    big hash
    big hash
+  merges other type with block
  merges other type with block
+  transforms values with keys included
  transforms values with keys included
+  "#each_with_index" iterator
  "#each_with_index" iterator
+  gets first
  gets first
+  sets and gets
  sets and gets
+  initializes with default value
  initializes with default value
+  ==
     assert
    assert
-  hash
     assert
    assert
+    compares hash of nested hash
    compares hash of nested hash
+  gets array of values
  gets array of values
+  transforms values with type casting values
  transforms values with type casting values
+  size
+    is the same as size
    is the same as size
+  inserts many
  inserts many
+  rejects!
  rejects!
+  initializes with block
  initializes with block
+  last_key
+    raises on last key (nilable key)
    raises on last key (nilable key)
+    gets last key
    gets last key
+    doesn't raise on last key (nilable key)
    doesn't raise on last key (nilable key)
+  "#each" iterator
  "#each" iterator
+  does each
  does each
+  merges recursive type (#1693)
  merges recursive type (#1693)
+  does each_value
  does each_value
+  all?
+    passes key and value into block
    passes key and value into block
+    evaluates the block for only for as many kv pairs as necessary
    evaluates the block for only for as many kv pairs as necessary
+    returns true if the block evaluates truthy for every kv pair
    returns true if the block evaluates truthy for every kv pair
+  #put_if_absent
+    puts if key doesn't exist
    puts if key doesn't exist
+    returns existing value if key exists
    returns existing value if key exists
+    accepts a block
    accepts a block
+    doesn't put duplicate keys (#14425)
    doesn't put duplicate keys (#14425)
+  merges
  merges
+  fetches from empty hash with default value
  fetches from empty hash with default value
   to_s
     assert
    assert
     assert
    assert
-  ^
-    assert
    assert
-    assert
    assert
-    assert
    assert
+  zips
  zips
+  inserts in one bucket and deletes from the same one
  inserts in one bucket and deletes from the same one
+  select! with non-equality key
  select! with non-equality key
+  key_for?
+    returns the first key with the given value
    returns the first key with the given value
+    returns nil if no key pairs with the given value
    returns nil if no key pairs with the given value
+  does to_a after delete
  does to_a after delete
+  #put
+    puts in a small hash
    puts in a small hash
+    puts in a big hash
    puts in a big hash
+    yields key
    yields key
+  dig
+    gets the value at given path given splat
    gets the value at given path given splat
+    raises KeyError if not found
    raises KeyError if not found
+  does each_key
  does each_key
+  "#each_value" yielding
  "#each_value" yielding
+  returns empty hash when transforming keys of an empty hash
  returns empty hash when transforming keys of an empty hash
+  merges!
  merges!
+  has_value?
+    returns false if does not contain the value
    returns false if does not contain the value
+    returns true if contains the value
    returns true if contains the value
+  select
     assert
    assert
-  &
     assert
    assert
+    does not change current hash
    does not change current hash
     assert
    assert
     assert
    assert
     assert
    assert
-  to_unsafe
+  "#each_with_index(offset)" yielding
  "#each_with_index(offset)" yielding
+  transform values in place
  transform values in place
+  returns empty hash when transforming values of an empty hash
  returns empty hash when transforming values of an empty hash
+  computes hash
  computes hash
+  rejects
  rejects
+  "#each_key" yielding
  "#each_key" yielding
+  clears
  clears
+  []
+    gets
    gets
+  subset/superset operators
+    #superset_of?
+      assert
      assert
+    #proper_subset_of?
+      assert
      assert
+      handles edge case where both values are nil
      handles edge case where both values are nil
+    #subset_of?
+      handles edge case where both values are nil
      handles edge case where both values are nil
+      assert
      assert
+    #proper_superset_of?
+      assert
      assert
+  #rehash
+    rehashes
    rehashes
+    resets @first (#14602)
    resets @first (#14602)
+  creates with initial capacity
  creates with initial capacity
+  gets from literal
  gets from literal
+  delete
+    deletes many in the beginning and then will need a resize
    deletes many in the beginning and then will need a resize
+    with block
+      returns the value if a key is found
      returns the value if a key is found
+      returns nil if key is found and value is nil
      returns nil if key is found and value is nil
+      returns the value of the block if key is not found
      returns the value of the block if key is not found
+    deletes key in the end
    deletes key in the end
+    deletes key in the middle
    deletes key in the middle
+    deletes not found
    deletes not found
+    deletes key in the beginning
    deletes key in the beginning
+    deletes only remaining entry
    deletes only remaining entry
+  select!
     assert
    assert
     assert
    assert
-  clone
+    does change current hash
    does change current hash
     assert
    assert
     assert
    assert
-BigRational Math
-  sqrt
  sqrt
-File
-  .tempname
-    creates a path without creating the file
    creates a path without creating the file
-    accepts dir argument
    accepts dir argument
-    accepts prefix and suffix arguments
    accepts prefix and suffix arguments
-    accepts single suffix argument
    accepts single suffix argument
-    accepts prefix with separator
    accepts prefix with separator
-  .tempfile
-    fails in nonwriteable folder
    fails in nonwriteable folder
-    accepts prefix and suffix arguments
    accepts prefix and suffix arguments
-    accepts single suffix argument
    accepts single suffix argument
-    rejects null byte
    rejects null byte
-    with block
-      accepts prefix and suffix arguments
      accepts prefix and suffix arguments
-      accepts dir argument
      accepts dir argument
-      accepts single suffix argument
      accepts single suffix argument
-      closes file
      closes file
-    accepts dir argument
    accepts dir argument
-    creates and writes
    creates and writes
-HTTP::Handler
-  responds with not found if there's no next handler
  responds with not found if there's no next handler
-HTTP::Client::Response
-  raises when creating 1xx, 204 or 304 with body
  raises when creating 1xx, 204 or 304 with body
-  parses response with chunked body
  parses response with chunked body
-  serialize with body and cookies
  serialize with body and cookies
-  parses long headers
  parses long headers
-  deletes Content-Encoding and Content-Length headers after gzip decompression
  deletes Content-Encoding and Content-Length headers after gzip decompression
-  parses response with body but without content-length
  parses response with body but without content-length
-  returns content type and charset, removes quotes
  returns content type and charset, removes quotes
-  doesn't sets content length for 1xx, 204 or 304
  doesn't sets content length for 1xx, 204 or 304
-  parses response with body without \r
  parses response with body without \r
-  serialize as chunked with body_io
  serialize as chunked with body_io
-  parses response with duplicated headers
  parses response with duplicated headers
-  deletes Content-Encoding and Content-Length headers after deflate decompression
  deletes Content-Encoding and Content-Length headers after deflate decompression
-  sets content length from body
  sets content length from body
-  serialize with body
  serialize with body
-  parses long request lines
  parses long request lines
-  returns content type and charset, removes semicolon, with multiple parameters (#2520)
  returns content type and charset, removes semicolon, with multiple parameters (#2520)
-  returns status_code
  returns status_code
-  handle invalid IO
-    unsupported version
    unsupported version
-    invalid status
    invalid status
-    missing status
    missing status
-    missing HTTP header
    missing HTTP header
-  returns content type and no charset, other parameter (#2520)
  returns content type and no charset, other parameter (#2520)
-  parses response with chunked body of size 0
  parses response with chunked body of size 0
-  creates Response with status code 204, no body and Content-Length == 0 (#2512)
  creates Response with status code 204, no body and Content-Length == 0 (#2512)
-  parses response without status message
  parses response without status message
-  parses 204 response without body but Content-Length == 0 (#2512)
  parses 204 response without body but Content-Length == 0 (#2512)
-  parses response ignoring body
  parses response ignoring body
-  returns content type and charset, removes semicolon
  returns content type and charset, removes semicolon
-  returns no content_type when header is missing
  returns no content_type when header is missing
-  returns content type and no charset
  returns content type and no charset
-  sets content length even without body
  sets content length even without body
-  parses response with streamed body, huge content-length
  parses response with streamed body, huge content-length
-  success?
-    returns false for other ranges
    returns false for other ranges
-    returns true for the 2xx
    returns true for the 2xx
-  parses response with empty body but without content-length
  parses response with empty body but without content-length
-  parses response without body but Content-Length == 0, block form (#8461)
  parses response without body but Content-Length == 0, block form (#8461)
-  parses response without body
  parses response without body
-  returns content type as nil when empty (#8398)
  returns content type as nil when empty (#8398)
-  serialize as not chunked with body_io if HTTP/1.0
  serialize as not chunked with body_io if HTTP/1.0
-  parses response with streamed chunked body
  parses response with streamed chunked body
-  parses response with cookies
  parses response with cookies
-  parses response with streamed body
  parses response with streamed body
-  parses response with body
  parses response with body
-Crystal::Digest::MD5
-  calculates hash of #to_slice
  calculates hash of #to_slice
-  context are independent
  context are independent
-  can't call final twice
  can't call final twice
-  calculates hash from string
  calculates hash from string
-  #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
-  calculates base64'd hash from string
  calculates base64'd hash from string
-  calculates hash from unicode string
  calculates hash from unicode string
-  calculates digest from string
  calculates digest from string
-  return the digest size
  return the digest size
-  can take a block
  can take a block
-  calculates hash from UInt8 slices
  calculates hash from UInt8 slices
-  digest with file content
  digest with file content
-  resets
  resets
-  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
-  .dup
-    leads to not sharing state
    leads to not sharing state
-    preserves value
    preserves value
-    leads to deterministic updates
    leads to deterministic updates
-    preserves type
    preserves type
-Base64
-  urlsafe
-    work
    work
-    encode to stream returns number of written characters
    encode to stream returns number of written characters
-  strict
-    encode to stream returns number of written characters
    encode to stream returns number of written characters
-    encode
    encode
-    with spec symbols
    with spec symbols
-  decode cases
-    raise error when 
- in incorrect place
    raise error when 
- in incorrect place
-    raise error when incorrect size
    raise error when incorrect size
-    decode 
- in multiple places
    decode 
- in multiple places
-    raise error when incorrect symbol
    raise error when incorrect symbol
-    decode 
-
    decode 
-
-    decode small tail after last 
-, was a bug
    decode small tail after last 
-, was a bug
-  encodes static array
  encodes static array
-  encodes byte slice
  encodes byte slice
-  base
-    decode from stream returns number of written bytes
    decode from stream returns number of written bytes
-    decode from strict form
    decode from strict form
-    decode from "U2VuZCByZWluZm9yY2VtZW50cw==\n" to "Send reinforcements"
    decode from "U2VuZCByZWluZm9yY2VtZW50cw==\n" to "Send reinforcements"
-    encode "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" to "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n"
    encode "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" to "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n"
-    works for most characters
    works for most characters
-    encode to stream returns number of written characters
    encode to stream returns number of written characters
-    encode "Now is the time for all good coders\nto learn Crystal" to "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n"
    encode "Now is the time for all good coders\nto learn Crystal" to "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n"
-    big message
    big message
-    encode "Send reinforcements" to "U2VuZCByZWluZm9yY2VtZW50cw==\n"
    encode "Send reinforcements" to "U2VuZCByZWluZm9yY2VtZW50cw==\n"
-    decode from "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n" to "This is line one\nThis is line two\nThis is line three\nAnd so on...\n"
    decode from "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n" to "This is line one\nThis is line two\nThis is line three\nAnd so on...\n"
-    decode from "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n" to "Now is the time for all good coders\nto learn Crystal"
    decode from "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n" to "Now is the time for all good coders\nto learn Crystal"
-    decode from "aGFoYWjiipnik6fiipk=\n" to "hahah⊙ⓧ⊙"
    decode from "aGFoYWjiipnik6fiipk=\n" to "hahah⊙ⓧ⊙"
-    encode "hahah⊙ⓧ⊙" to "aGFoYWjiipnik6fiipk=\n"
    encode "hahah⊙ⓧ⊙" to "aGFoYWjiipnik6fiipk=\n"
-  encodes empty slice
  encodes empty slice
-  simple test
-    decode from "YWJjZGVm\n" to "abcdef"
    decode from "YWJjZGVm\n" to "abcdef"
-    encode "ab" to "YWI=\n"
    encode "ab" to "YWI=\n"
-    encode "" to ""
    encode "" to ""
-    encode "abcde" to "YWJjZGU=\n"
    encode "abcde" to "YWJjZGU=\n"
-    decode from "YQ==\n" to "a"
    decode from "YQ==\n" to "a"
-    decode from "YWI=\n" to "ab"
    decode from "YWI=\n" to "ab"
-    decode from "YWJj\n" to "abc"
    decode from "YWJj\n" to "abc"
-    decode from "YWJjZGU=\n" to "abcde"
    decode from "YWJjZGU=\n" to "abcde"
-    decode from "YWJjZA==\n" to "abcd"
    decode from "YWJjZA==\n" to "abcd"
-    encode "abc" to "YWJj\n"
    encode "abc" to "YWJj\n"
-    encode "abcdef" to "YWJjZGVm\n"
    encode "abcdef" to "YWJjZGVm\n"
-    encode "abcdefg" to "YWJjZGVmZw==\n"
    encode "abcdefg" to "YWJjZGVmZw==\n"
-    decode from "YWJjZGVmZw==\n" to "abcdefg"
    decode from "YWJjZGVmZw==\n" to "abcdefg"
-    decode from "" to ""
    decode from "" to ""
-    encode "abcd" to "YWJjZA==\n"
    encode "abcd" to "YWJjZA==\n"
-    encode "a" to "YQ==\n"
    encode "a" to "YQ==\n"
-  
- in multiple places
-    decode from "YWJj\nZGVm\nZw==\n" to "abcdefg"
    decode from "YWJj\nZGVm\nZw==\n" to "abcdefg"
-    decode from "YWJj\nZGU=\n" to "abcde"
    decode from "YWJj\nZGU=\n" to "abcde"
-    decode from "YWJj\nZA==\n" to "abcd"
    decode from "YWJj\nZA==\n" to "abcd"
-    decode from "YWJj\nZGVm\n" to "abcdef"
    decode from "YWJj\nZGVm\n" to "abcdef"
-.__powidf2
.__powidf2
-YAML::Serializable
-  should parse extra fields (YAMLAttrPersonExtraFields with on_unknown_yaml_attribute)
  should parse extra fields (YAMLAttrPersonExtraFields with on_unknown_yaml_attribute)
-  parses yaml with keywords
  parses yaml with keywords
-  doesn't raises on false value when not-nil
  doesn't raises on false value when not-nil
-  parses array of people with merge, doesn't hang on infinite recursion
  parses array of people with merge, doesn't hang on infinite recursion
-  parses strict person with unknown attributes
  parses strict person with unknown attributes
-  parses yaml with problematic keys
  parses yaml with problematic keys
-  converter with default value
  converter with default value
-  parses person with blank age
  parses person with blank age
-  parses nilable union
  parses nilable union
-  fixes #13337
  fixes #13337
-  parses yaml with defaults
-    bool
    bool
-    create new array every time
    create new array every time
-    with nilable
    with nilable
-    mixed
    mixed
-  uses Time::EpochMillisConverter
  uses Time::EpochMillisConverter
-  works with selective serialization
  works with selective serialization
-  parses array of people
  parses array of people
-  raises if non-nilable attribute is nil
  raises if non-nilable attribute is nil
-  outputs with converter when nilable
  outputs with converter when nilable
-  parses person
  parses person
-  emit_nulls option
  emit_nulls option
-  converter with null value (#13655)
  converter with null value (#13655)
-  raises if data type does not match
  raises if data type does not match
-  uses Time::EpochConverter
  uses Time::EpochConverter
-  YAML::ArrayConverter(Converter)
-    uses converter instance with nested converter instance
    uses converter instance with nested converter instance
-    uses converter instance with nested converter metaclass
    uses converter instance with nested converter metaclass
-    uses converter metaclass
    uses converter metaclass
-  parses recursive array
  parses recursive array
-  serializes YAML with presence markers and ignore_serialize
-    ignore_serialize is set to a method which returns true when value is nil or empty string
-      ignores field when value is nil
      ignores field when value is nil
-      ignores field when value is empty string
      ignores field when value is empty string
-    ignore_serialize is set to conditional expressions 'last_name.nil? && !last_name_present?'
-      does not emit null when value is null and @last_name_present is false
      does not emit null when value is null and @last_name_present is false
-      emits null when value is null and @last_name_present is true
      emits null when value is null and @last_name_present is true
-      emits field when value is not nil and @last_name_present is true
      emits field when value is not nil and @last_name_present is true
-      emits field when value is not nil and @last_name_present is false
      emits field when value is not nil and @last_name_present is false
-  namespaced classes
-    lets default values use the object's own namespace
    lets default values use the object's own namespace
-  checks that non-integer values for integer fields report the expected type
  checks that non-integer values for integer fields report the expected type
-  work with inned class using same module name
+    does not skip elements with an exhaustable enumerable argument (#12736)
    does not skip elements with an exhaustable enumerable argument (#12736)
     assert
    assert
-  parses person without age
  parses person without age
-  with query attributes
-    defines non-query setter and presence methods
    defines non-query setter and presence methods
-    maps non-query attributes
    maps non-query attributes
-    raises if non-nilable attribute is nil
    raises if non-nilable attribute is nil
-    defines query getter
    defines query getter
-    defines query getter with class restriction
    defines query getter with class restriction
-  parses recursive nilable (2)
  parses recursive nilable (2)
-  outputs YAML with Hash
  outputs YAML with Hash
-  parses yaml with any
  parses yaml with any
-  empty class with unmapped
  empty class with unmapped
-  parses recursive nilable (1)
  parses recursive nilable (1)
-  parses recursive
  parses recursive
-  calls #finalize
  calls #finalize
-  checks that values fit into integer types
  checks that values fit into integer types
-  emits null on request when doing to_yaml
  emits null on request when doing to_yaml
-  parses simple mapping
  parses simple mapping
-  raises if not an object
  raises if not an object
-  parses YAML with presence markers
-    parses person with absent attributes
    parses person with absent attributes
-  use_yaml_discriminator
-    deserializes with variable discriminator value type
    deserializes with variable discriminator value type
-    deserializes with discriminator, another recursive type, fixes: #13429
    deserializes with discriminator, another recursive type, fixes: #13429
-    raises if missing discriminator
    raises if missing discriminator
-    raises if unknown discriminator value
    raises if unknown discriminator value
-    deserializes with discriminator
    deserializes with discriminator
-    deserializes type which nests type with discriminator (#9849)
    deserializes type which nests type with discriminator (#9849)
-    deserializes with discriminator, strict recursive type
    deserializes with discriminator, strict recursive type
-  empty class
  empty class
-  outputs with converter when nilable when emit_null is true
  outputs with converter when nilable when emit_null is true
-  parses person with unknown attributes
  parses person with unknown attributes
-  work with module and inheritance
+  clears after shift
  clears after shift
+  reject with non-equality key
  reject with non-equality key
+  has_key?
+    doesn't have key
    doesn't have key
+    has key
    has key
+  some edge cases while changing the implementation to open addressing
+    edge case 1
    edge case 1
+    edge case 2
    edge case 2
+    edge case 3
    edge case 3
+  merges! with block and nilable keys
  merges! with block and nilable keys
+  gets nilable
  gets nilable
+  []=
+    overrides value
    overrides value
+  reject with non-equality key
  reject with non-equality key
+  reject!
     assert
    assert
     assert
    assert
     assert
    assert
+    changes current hash
    changes current hash
     assert
    assert
-  does to_yaml
  does to_yaml
-  allows small types of integer
  allows small types of integer
-  allows setting a nilable property to nil
  allows setting a nilable property to nil
-  works with class with three fields
  works with class with three fields
-  doesn't emit null when doing to_yaml
  doesn't emit null when doing to_yaml
-  parses recursive hash
  parses recursive hash
-  should to store extra fields (YAMLAttrPersonExtraFields with on_to_yaml)
  should to store extra fields (YAMLAttrPersonExtraFields with on_to_yaml)
-  parses array of people with merge
  parses array of people with merge
-  parses yaml with Time::Format converter
  parses yaml with Time::Format converter
-  works with record
  works with record
-raise
-  should set exception's callstack
  should set exception's callstack
-  shouldn't overwrite the callstack on re-raise
  shouldn't overwrite the callstack on re-raise
-CSV
-  gets current row
  gets current row
-  gets row values with integer
  gets row values with integer
-  returns a Tuple(String, String) for current row with indices
  returns a Tuple(String, String) for current row with indices
-  returns a Tuple(String, String) for this row with headers
  returns a Tuple(String, String) for this row with headers
-  gets row values with regex
  gets row values with regex
-  gets headers
  gets headers
-  gets row values with string
  gets row values with string
-  strips
  strips
-  works without headers
  works without headers
-  rewind
-    string based
-      with headers
      with headers
-      without headers
      without headers
-    IO based
-      with headers
      with headers
-      without headers
      without headers
-  works without headers
  works without headers
-  raises if trying to access before first row
  raises if trying to access before first row
-  returns a Tuple(String, String) for this row with indices
  returns a Tuple(String, String) for this row with indices
-  returns a Tuple(String, String) for current row with headers
  returns a Tuple(String, String) for current row with headers
-  can do each
  can do each
-  can do new with block
  can do new with block
-HTTP::FormData::Parser
-  parses formdata
  parses formdata
-Time::Format
-  parses 24h clock with am/pm
  parses 24h clock with am/pm
-  parses milliseconds with %3N
  parses milliseconds with %3N
-  parses zone name
  parses zone name
-  assert
  assert
-  formats rfc3339 with different fraction digits
  formats rfc3339 with different fraction digits
-  parses the correct amount of digits (#853)
  parses the correct amount of digits (#853)
-  parses 24h clock
  parses 24h clock
-  formats
  formats
-  parses nanoseconds with %9N
  parses nanoseconds with %9N
-  parses empty
  parses empty
-  assert
  assert
-  assert
  assert
-  parses milliseconds with %L
  parses milliseconds with %L
-  parses microseconds with %6N
  parses microseconds with %6N
-  assert
  assert
-  parses month blank padded
  parses month blank padded
-  parses hour 12 blank padded
  parses hour 12 blank padded
-  parses centiseconds
  parses centiseconds
-  parses if some decimals are missing
  parses if some decimals are missing
-  gives nice error message when end of input is reached (#12047)
  gives nice error message when end of input is reached (#12047)
-  parses hour 24 blank padded
  parses hour 24 blank padded
-  parses
  parses
-  parses timezone
  parses timezone
-  parses am/pm
  parses am/pm
-  parses day of month blank padded
  parses day of month blank padded
-  assert
  assert
-  raises when time zone missing
  raises when time zone missing
-  parses discarding additional decimals
  parses discarding additional decimals
-  can parse in location
  can parse in location
-  parses nanoseconds
  parses nanoseconds
-  parses day of year
  parses day of year
-  formats standard formats
  formats standard formats
-  assert
  assert
-  parse fails without time zone
  parse fails without time zone
-__floattisf
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  empty
+    size should be zero
    size should be zero
+  merges with block
  merges with block
+  does to_a after shift
  does to_a after shift
+  does to_h
  does to_h
+  shifts?
  shifts?
+  #each_with_object
+    "passes memo, key and value into block" yielding
    "passes memo, key and value into block" yielding
+    reduces the hash to the accumulated value of memo
    reduces the hash to the accumulated value of memo
+    "passes memo, key and value into block" iterator
    "passes memo, key and value into block" iterator
+  last_value
+    doesn't raise on last value (nilable value)
    doesn't raise on last value (nilable value)
+    gets last value
    gets last value
+    raises on last value (nilable value)
    raises on last value (nilable value)
+  any?
+    evaluates the block for only for as many kv pairs as necessary
    evaluates the block for only for as many kv pairs as necessary
+    returns true if the block evaluates truthy for at least one kv pair
    returns true if the block evaluates truthy for at least one kv pair
+    passes key and value into block
    passes key and value into block
+    returns true if the hash contains at least one kv pair and no block is given
    returns true if the hash contains at least one kv pair and no block is given
+  first_key
+    gets first key
    gets first key
+    doesn't raise on first key (nilable key)
    doesn't raise on first key (nilable key)
+    raises on first key (nilable key)
    raises on first key (nilable key)
+  transforms values
  transforms values
+  update
+    inserts a new entry using the default value as input, if key does not exist
    inserts a new entry using the default value as input, if key does not exist
+    inserts a new entry using the value returned by the default block as input, if key does not exist (big hash)
    inserts a new entry using the value returned by the default block as input, if key does not exist (big hash)
+    can update with a nil value
    can update with a nil value
+    returns the default value when key does not exist
    returns the default value when key does not exist
+    raises if key does not exist and no default value specified (big hash)
    raises if key does not exist and no default value specified (big hash)
+    doesn't create a duplicate key, if key does not exist and default block adds the given key (#14416)
    doesn't create a duplicate key, if key does not exist and default block adds the given key (#14416)
+    updates the value of an existing key with the given block
    updates the value of an existing key with the given block
+    inserts a new entry using the default value as input, if key does not exist (big hash)
    inserts a new entry using the default value as input, if key does not exist (big hash)
+    returns the old value when key exists
    returns the old value when key exists
+    updates the value of an existing key with the given block (big hash)
    updates the value of an existing key with the given block (big hash)
+    can update a current nil value with a new value
    can update a current nil value with a new value
+    returns the old value when key exists (big hash)
    returns the old value when key exists (big hash)
+    returns the default value when key does not exist (big hash)
    returns the default value when key does not exist (big hash)
+    inserts a new entry using the value returned by the default block as input, if key does not exist
    inserts a new entry using the value returned by the default block as input, if key does not exist
+    raises if key does not exist and no default value specified
    raises if key does not exist and no default value specified
+  "#each_value" iterator
  "#each_value" iterator
+  dup
+    dups empty hash
    dups empty hash
+    retains default block on dup
    retains default block on dup
+    dups small hash
    dups small hash
+    dups big hash
    dups big hash
+  reduce
+    reduces the hash to the accumulated value of memo
    reduces the hash to the accumulated value of memo
+    passes memo, key and value into block
    passes memo, key and value into block
+  select with non-equality key
  select with non-equality key
+  doesn't generate a negative index for the bucket index (#2321)
  doesn't generate a negative index for the bucket index (#2321)
+  can be wrapped
  can be wrapped
+  creates with initial capacity and default value
  creates with initial capacity and default value
+  shifts
  shifts
+  dig?
+    gets the value at given path given splat
    gets the value at given path given splat
+    returns nil if not found
    returns nil if not found
+  selects!
  selects!
+  values_at
+    works with mixed types
    works with mixed types
+    raises when passed an invalid key
    raises when passed an invalid key
+    returns the given keys
    returns the given keys
+  shifts: delete elements in the middle position and then in the first position
  shifts: delete elements in the middle position and then in the first position
+  "#each_with_index(offset)" iterator
  "#each_with_index(offset)" iterator
+  inverts
  inverts
+__floatuntidf
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
@@ -23067,133 +21270,6 @@
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-LLVM::ABI::X86_Win64
-  abi_info
-    does with structs larger than 128 bits
    does with structs larger than 128 bits
-    does with packed struct not containing unaligned fields
    does with packed struct not containing unaligned fields
-    does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
-    does with packed struct containing unaligned fields (#9873)
    does with packed struct containing unaligned fields (#9873)
-Log::Builder
-  uses last level for a source x backend (single-backend)
  uses last level for a source x backend (single-backend)
-  removes all logs backends on .clear
  removes all logs backends on .clear
-  creates a log with broadcast backend
  creates a log with broadcast backend
-  creates a log with nil backend
  creates a log with nil backend
-  creates a log for same broadcast backend added multiple times
  creates a log for same broadcast backend added multiple times
-  returns log with backend if pattern matches
  returns log with backend if pattern matches
-  does not alter user-provided broadcast backend
  does not alter user-provided broadcast backend
-  uses last level for a source x backend
  uses last level for a source x backend
-  creates a log for broadcast backend
  creates a log for broadcast backend
-  should allow collection of unreferenced logs
  should allow collection of unreferenced logs
-  can turn off parent and allow child source
  can turn off parent and allow child source
-  .matches
-    avoids prefix collision
    avoids prefix collision
-    on first level
    on first level
-    on second level
    on second level
-    on third level
    on third level
-    on top-level
    on top-level
-  can reconfigures existing logs
  can reconfigures existing logs
-  should allow recreation of deallocated logs
  should allow recreation of deallocated logs
-  returns same instance
  returns same instance
-  creates a log with single backend
  creates a log with single backend
-  returns log without backend if pattern does not match
  returns log without backend if pattern does not match
-Log
-  can attach exception to entries
  can attach exception to entries
-  context supports unsigned values
  context supports unsigned values
-  contains the current context
  contains the current context
-  emitter dsl
-    does not emit anything when a nil is emitted
    does not emit anything when a nil is emitted
-    can be used with message and data via named tuple
    can be used with message and data via named tuple
-    can be used with data only via named arguments
    can be used with data only via named arguments
-    can be used with message and data via named arguments
    can be used with message and data via named arguments
-    can be used with message and exception
    can be used with message and exception
-    can be used with message
    can be used with message
-    can be used with message and metadata explicitly
    can be used with message and metadata explicitly
-    can be used with data only via named tuple
    can be used with data only via named tuple
-    can be used with data only explicitly
    can be used with data only explicitly
-    can be used with exception
    can be used with exception
-  level can be changed
  level can be changed
-  filter messages to the backend above level only
  filter messages to the backend above level only
-  context can be changed within the block, yet it's not restored
  context can be changed within the block, yet it's not restored
-  Log::Severity
-    parses
    parses
-    values are ordered
    values are ordered
-UNIXSocket
-  raises when path is too long
  raises when path is too long
-  creates a pair of sockets
  creates a pair of sockets
-  sends and receives messages
  sends and receives messages
-  tests read and write timeouts
  tests read and write timeouts
-  sync flag after accept
  sync flag after accept
-  tests socket options
  tests socket options
-Set
-  checks intersects
  checks intersects
-  does -
  does -
-  add?
-    returns false when object is in the set
    returns false when object is in the set
-    returns true when object is not in the set
    returns true when object is not in the set
-  does to_s
  does to_s
-  does each
  does each
-  concat
-    returns self
    returns self
-    adds all the other elements
    adds all the other elements
-  does subtract
  does subtract
-  does ^
  does ^
-  does subtract
  does subtract
-  "#each" yielding
  "#each" yielding
-  has object_id
  has object_id
-  "#each" iterator
  "#each" iterator
-  does -
  does -
-  does to_a
  does to_a
-  does subtract
  does subtract
-  does -
  does -
-  does ^
  does ^
-  clone
-    creates a clone
    creates a clone
-  does -
  does -
-  new
-    creates new set with enumerable without block
    creates new set with enumerable without block
-  does support giving a block to to_a
  does support giving a block to to_a
-  does ^
  does ^
-  compare_by_identity
-    retains compare_by_identity on clone
    retains compare_by_identity on clone
-    compares by identity
    compares by identity
-    retains compare_by_identity on dup
    retains compare_by_identity on dup
-  does -
  does -
-  #subset_of?
  #subset_of?
-  #proper_superset_of?
  #proper_superset_of?
-  #proper_subset_of?
  #proper_subset_of?
-  dup
-    creates a dup
    creates a dup
-  does subtract
  does subtract
-  does subtract
  does subtract
-  does ^
  does ^
-  does clear
  does clear
-  ==
-    compares two sets
    compares two sets
-  does subtract
  does subtract
-  an empty set
-    has size 0
    has size 0
-    is empty
    is empty
-  does ^
  does ^
-  aliases + to |
  aliases + to |
-  delete
-    returns true when the object was present
    returns true when the object was present
-    returns false when the object was absent
    returns false when the object was absent
-    deletes an object
    deletes an object
-  compares hashes of sets
  compares hashes of sets
-  does ^
  does ^
-  #rehash
-    rehashes
    rehashes
-  does |
  does |
-  does -
  does -
-  add
-    adds and includes
    adds and includes
-    returns self
    returns self
-  does &
  does &
-  #superset_of?
  #superset_of?
-SystemError
-  .from_os_error
-    Can build an error from an errno
    Can build an error from an errno
-__mulodi4
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
@@ -23236,6 +21312,101 @@
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+Float::Printer::RyuPrintf
+  .d2gen
+    Basic
    Basic
+    large precision with fixed notation and scientific notation
    large precision with fixed notation and scientific notation
+    UCRT had trouble with rounding this value
    UCRT had trouble with rounding this value
+    corner cases
    corner cases
+    transitions between fixed notation and scientific notation
    transitions between fixed notation and scientific notation
+    varying precision
    varying precision
+    trim trailing zeros and decimal point, scientific notation
    trim trailing zeros and decimal point, scientific notation
+    tricky corner cases
    tricky corner cases
+    more cases that the UCRT had trouble with (e.g. DevCom-1093399)
    more cases that the UCRT had trouble with (e.g. DevCom-1093399)
+    transitions between values of the scientific exponent X
    transitions between values of the scientific exponent X
+    maximum-length output
    maximum-length output
+    trim trailing zeros
    trim trailing zeros
+    trim trailing zeros and decimal point
    trim trailing zeros and decimal point
+    trim trailing zeros, scientific notation
    trim trailing zeros, scientific notation
+  .d2exp
+    Exponents
    Exponents
+    RoundToEven
    RoundToEven
+    Carrying
    Carrying
+    AllBinaryExponents
    AllBinaryExponents
+    MinMax
    MinMax
+    PrintDecimalPoint
    PrintDecimalPoint
+    RoundToEvenInteger
    RoundToEvenInteger
+    Basic
    Basic
+    AllPowersOfTen
    AllPowersOfTen
+    NonRoundToEvenScenarios
    NonRoundToEvenScenarios
+    Zero
    Zero
+    VaryingPrecision
    VaryingPrecision
+  .d2fixed
+    MinMax
    MinMax
+    Carrying
    Carrying
+    AllBinaryExponents
    AllBinaryExponents
+    RoundToEven
    RoundToEven
+    AllPowersOfTen
    AllPowersOfTen
+    NonRoundToEvenScenarios
    NonRoundToEvenScenarios
+    Zero
    Zero
+    VaryingPrecision
    VaryingPrecision
+    Basic
    Basic
+    RoundingResultZero
    RoundingResultZero
+    Regression
    Regression
+    RoundToEvenInteger
    RoundToEvenInteger
+OAuth::RequestToken
+  creates from response
  creates from response
+  equality
+    checks secret
    checks secret
+    checks token
    checks token
+HTTP
+  generates HTTP date
+    without time zone
    without time zone
+    with local time zone
    with local time zone
+  parses RFC 1123
  parses RFC 1123
+  parses RFC 1036
  parses RFC 1036
+  .dequote_string
+    dequotes a string
    dequotes a string
+  parses and is UTC (#2744)
  parses and is UTC (#2744)
+  parses ANSI C
  parses ANSI C
+  parses and is local (#2744)
  parses and is local (#2744)
+  parses RFC 1123 without day name
  parses RFC 1123 without day name
+  .quote_string
+    raises on invalid characters
    raises on invalid characters
+    quotes a string
    quotes a string
+Spec
+  hooks
+    runs in correct order
    runs in correct order
+Float64 boundaries
+  boundaries max denormal f64
  boundaries max denormal f64
+  boundaries 1.0
  boundaries 1.0
+  boundaries min normal f64
  boundaries min normal f64
+  boundaries min float64
  boundaries min float64
+  boundaries 1.5
  boundaries 1.5
+  boundaries max f64
  boundaries max f64
+Digest::Adler32
+  .dup
+    preserves value
    preserves value
+    leads to deterministic updates
    leads to deterministic updates
+    leads to not sharing state
    leads to not sharing state
+    preserves type
    preserves type
+  can take a block
  can take a block
+  calculates hash of #to_slice
  calculates hash of #to_slice
+  context are independent
  context are independent
+  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
+  can't call final twice
  can't call final twice
+  #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
+  calculates hash from UInt8 slices
  calculates hash from UInt8 slices
+  calculates digest from string
  calculates digest from string
+  should be able to calculate adler32 combined
  should be able to calculate adler32 combined
+  calculates base64'd hash from string
  calculates base64'd hash from string
+  digest with file content
  digest with file content
+  return the digest size
  return the digest size
+  resets
  resets
+  calculates hash from unicode string
  calculates hash from unicode string
+  calculates hash from string
  calculates hash from string
+  should be able to calculate adler32
  should be able to calculate adler32
+__fixsfti
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
@@ -23259,2532 +21430,404 @@
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-Comparable(T)
-  can compare against Int (#2461)
  can compare against Int (#2461)
-  clamp
-    number
-      fails with an exclusive range
      fails with an exclusive range
-      clamps integers
      clamps integers
-      clamps floats
      clamps floats
-    String
-      clamps strings
      clamps strings
-  checks for nil
  checks for nil
-YAML::Schema::FailSafe
-  parses all "\n    foo:\n      bar: 123\n\n    bar:\n      foo: 321\n  "
  parses all "\n    foo:\n      bar: 123\n\n    bar:\n      foo: 321\n  "
-  parses all "\n    context:\n        replace_me: \"Yes please!\"\n  "
  parses all "\n    context:\n        replace_me: \"Yes please!\"\n  "
-  raises on parse all ":"
  raises on parse all ":"
-  parses "321"
  parses "321"
-  parses "\n    first:\n      document:\n\n    second:\n      document:\n  "
  parses "\n    first:\n      document:\n\n    second:\n      document:\n  "
-  raises on parse ":"
  raises on parse ":"
-  raises on parse "\n    this: \"gives\"\n      an: \"error\"\n  "
  raises on parse "\n    this: \"gives\"\n      an: \"error\"\n  "
-  parses "\n    context:\n        replace_me: \"Yes please!\"\n  "
  parses "\n    context:\n        replace_me: \"Yes please!\"\n  "
-  raises on parse all "\n    this: \"raises\"\n      an: \"yaml\"\n        parse: \"exception\"\n  "
  raises on parse all "\n    this: \"raises\"\n      an: \"yaml\"\n        parse: \"exception\"\n  "
-  parses "123"
  parses "123"
-p
-  can be used with tuples
  can be used with tuples
-Crystal::System::File
-  .mktemp
-    creates random file name
    creates random file name
-    raises when no valid path is found
    raises when no valid path is found
-    retries when file exists
    retries when file exists
-HTTP::Cookie::Parser
-  parse_cookies
-    parses special character in name
    parses special character in name
-    parses key=key%3Dvalue
    parses key=key%3Dvalue
-    parses multiple cookies
    parses multiple cookies
-    parses key=key=value
    parses key=key=value
-    parses key="value"
    parses key="value"
-    parses key=value
    parses key=value
-    parses cookie with spaces in value
    parses cookie with spaces in value
-    strips spaces around value only when it's unquoted
    strips spaces around value only when it's unquoted
-    parses key=
    parses key=
-  expired?
-    not expired when max-age and expires are not provided
    not expired when max-age and expires are not provided
-    expired when max-age=0
    expired when max-age=0
-    not expired with future expires
    not expired with future expires
-    not expired with future max-age
    not expired with future max-age
-    expired with old expires date
    expired with old expires date
-  expiration_time
-    sets future expiration_time with expires
    sets future expiration_time with expires
-    sets expiration_time with old date
    sets expiration_time with old date
-    sets future expiration_time with max-age and future cookie creation time
    sets future expiration_time with max-age and future cookie creation time
-    sets future expiration_time with max-age
    sets future expiration_time with max-age
-    sets expiration_time to be current when max-age=0
    sets expiration_time to be current when max-age=0
-    returns nil expiration_time when expires and max-age are not set
    returns nil expiration_time when expires and max-age are not set
-  parse_set_cookie
-    parses path
    parses path
-    leading dots in domain names are ignored
    leading dots in domain names are ignored
-    parses expires rfc1123
    parses expires rfc1123
-    SameSite
-      Strict
-        parses samesite
        parses samesite
-      Lax
-        parses samesite
        parses samesite
-      Invalid
-        parses samesite
        parses samesite
-    parses Secure
    parses Secure
-    parses expires rfc1036
    parses expires rfc1036
-    parses expires iis
    parses expires iis
-    parses HttpOnly
    parses HttpOnly
-    parses expires ansi c
    parses expires ansi c
-    parse domain as IP
    parse domain as IP
-    parses cookie with spaces in value
    parses cookie with spaces in value
-    parses full
    parses full
-    with space
    with space
-    removes leading and trailing whitespaces
    removes leading and trailing whitespaces
-    parse max-age as Time::Span
    parse max-age as Time::Span
-    parses expires ansi c, variant with zone
    parses expires ansi c, variant with zone
-    strips spaces around value only when it's unquoted
    strips spaces around value only when it's unquoted
-    parses domain
    parses domain
-LLVM::ABI::ARM
-  abi_info
-    does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
-    does with primitives
    does with primitives
-    does with structs less than 64 bits
    does with structs less than 64 bits
-    does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
-  size
-    for packed struct
    for packed struct
-    for float
    for float
-    for struct
    for struct
-    for array
    for array
-    for integer
    for integer
-    for double
    for double
-    for pointer
    for pointer
-  align
-    for packed struct
    for packed struct
-    for double
    for double
-    for array
    for array
-    for pointer
    for pointer
-    for float
    for float
-    for integer
    for integer
-    for struct
    for struct
-Class
-  casts, allowing the class to be passed in at runtime
  casts, allowing the class to be passed in at runtime
-  does to_s with name redefined (#7292)
  does to_s with name redefined (#7292)
-  clones
  clones
-  does ===
  does ===
-  does to_s
  does to_s
-  comparison operators
-    <=
    <=
-    >=
    >=
-    >
    >
-    <
    <
-  #nilable?
  #nilable?
-  dups
  dups
-  does |
  does |
-Digest::SHA256
+Crystal::Digest::MD5
   #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
-  does digest for "a"
  does digest for "a"
-  resets
  resets
-  does base64digest for "The quick brown fox jumps over the lazy dog"
  does base64digest for "The quick brown fox jumps over the lazy dog"
-  does hexdigest for "fooø"
  does hexdigest for "fooø"
-  does base64digest for "a"
  does base64digest for "a"
-  does base64digest for "abc"
  does base64digest for "abc"
-  does digest for "abc" in a block
  does digest for "abc" in a block
-  can't call #final more than once
  can't call #final more than once
-  resets
  resets
-  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
-  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
-  does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
  does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
-  context are independent
  context are independent
-  can't call #final more than once
  can't call #final more than once
-  does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
-  resets
  resets
-  resets
  resets
-  does digest for "abc"
  does digest for "abc"
-  does digest for ""
  does digest for ""
-  does hexdigest for "abc"
  does hexdigest for "abc"
-  does base64digest for "fooø"
  does base64digest for "fooø"
-  does hexdigest for "a"
  does hexdigest for "a"
-  returns the digest_size
  returns the digest_size
-  digest with file content
  digest with file content
-  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
-  does digest for "The quick brown fox jumps over the lazy dog" in a block
  does digest for "The quick brown fox jumps over the lazy dog" in a block
   #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
-  resets
  resets
-  can't call #final more than once
  can't call #final more than once
-  does base64digest for ""
  does base64digest for ""
-  does digest for "fooø"
  does digest for "fooø"
-  can't call #final more than once
  can't call #final more than once
-  does digest for "The quick brown fox jumps over the lazy dog"
  does digest for "The quick brown fox jumps over the lazy dog"
-  does hexdigest for ""
  does hexdigest for ""
-  does hexdigest for "The quick brown fox jumps over the lazy dog"
  does hexdigest for "The quick brown fox jumps over the lazy dog"
-  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
+  calculates hash from unicode string
  calculates hash from unicode string
+  calculates base64'd hash from string
  calculates base64'd hash from string
   .dup
-    leads to not sharing state
    leads to not sharing state
-    preserves type
    preserves type
     leads to deterministic updates
    leads to deterministic updates
     preserves value
    preserves value
-  can't call #final more than once
  can't call #final more than once
-  resets
  resets
-  does digest for "" in a block
  does digest for "" in a block
-  can't call #final more than once
  can't call #final more than once
-  does digest for "a" in a block
  does digest for "a" in a block
-  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
-  can't call #final more than once
  can't call #final more than once
-  resets
  resets
-  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
-  does digest for "fooø" in a block
  does digest for "fooø" in a block
-Benchmark::IPS::Job
-  works in general / integration test
  works in general / integration test
-Socket::IPAddress
-  #address
  #address
-  .valid_v6?
  .valid_v6?
-  .v4
-    raises on out of bound port number
    raises on out of bound port number
-    raises on out of bound field
    raises on out of bound field
-    constructs an IPv4 address
    constructs an IPv4 address
-    constructs from StaticArray
    constructs from StaticArray
-  .valid?
  .valid?
-  .parse_v4_fields?
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  won't resolve domains
  won't resolve domains
-  #unspecified?
  #unspecified?
-  #to_s
  #to_s
-  #==
  #==
-  .v6
-    constructs from StaticArray
    constructs from StaticArray
-    raises on out of bound field
    raises on out of bound field
-    raises on out of bound port number
    raises on out of bound port number
-    constructs an IPv6 address
    constructs an IPv6 address
-  errors on out of range port numbers
  errors on out of range port numbers
-  transforms an IPv6 address into a C struct and back
  transforms an IPv6 address into a C struct and back
-  #link_local?
  #link_local?
-  .parse_v6_fields?
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  #private?
  #private?
-  .v4_mapped_v6
-    constructs from StaticArray
    constructs from StaticArray
-    raises on out of bound port number
    raises on out of bound port number
-    constructs an IPv4-mapped IPv6 address
    constructs an IPv4-mapped IPv6 address
-    raises on out of bound field
    raises on out of bound field
-  .valid_v4?
  .valid_v4?
-  #loopback?
  #loopback?
-  transforms an IPv4 address into a C struct and back
  transforms an IPv4 address into a C struct and back
-  .parse
-    fails with missing port
    fails with missing port
-    parses IPv6
    parses IPv6
-    fails with missing host
    fails with missing host
-    ignores path and params
    ignores path and params
-    parses IPv4
    parses IPv4
-    fails host name
    fails host name
-  .valid_port?
  .valid_port?
-MIME::Multipart
-  .parse_boundary
-    parses quoted boundaries
    parses quoted boundaries
-    parses unquoted boundaries
    parses unquoted boundaries
-  .parse
-    parses multipart messages
    parses multipart messages
-  .parse
-    parses multipart messages
    parses multipart messages
-    parses multipart messages from HTTP client responses
    parses multipart messages from HTTP client responses
-Random::Secure
-  returns a random integer in range (#8219)
  returns a random integer in range (#8219)
-  fully fills a large buffer
  fully fills a large buffer
-  returns random number from a secure system source
  returns random number from a secure system source
-Digest::SHA512
-  does #hexdigest for "abc"
  does #hexdigest for "abc"
-  does .hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
  does .hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
-  returns the digest_size
  returns the digest_size
-  does base64digest for "The quick brown fox jumps over the lazy dog"
  does base64digest for "The quick brown fox jumps over the lazy dog"
-  can't call #final more than once
  can't call #final more than once
-  does base64digest for "abc"
  does base64digest for "abc"
-  does .hexdigest for "abc"
  does .hexdigest for "abc"
-  resets
  resets
-  does digest for ""
  does digest for ""
-  can't call #final more than once
  can't call #final more than once
-  resets
  resets
-  context are independent
  context are independent
-  can't call #final more than once
  can't call #final more than once
-  does digest for "fooø"
  does digest for "fooø"
-  does digest for "The quick brown fox jumps over the lazy dog"
  does digest for "The quick brown fox jumps over the lazy dog"
-  does .hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does .hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
-  does #hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
  does #hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
-  does #hexdigest for ""
  does #hexdigest for ""
-  does base64digest for "a"
  does base64digest for "a"
-  can't call #final more than once
  can't call #final more than once
-  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
-  does digest for "a"
  does digest for "a"
-  #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
-  digest with file content
  digest with file content
-  does .hexdigest for "a"
  does .hexdigest for "a"
-  does digest for "abc" in a block
  does digest for "abc" in a block
-  does .hexdigest for "The quick brown fox jumps over the lazy dog"
  does .hexdigest for "The quick brown fox jumps over the lazy dog"
-  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
-  does #hexdigest for "a"
  does #hexdigest for "a"
-  does #hexdigest for "fooø"
  does #hexdigest for "fooø"
-  resets
  resets
-  can't call #final more than once
  can't call #final more than once
-  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
-  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
-  does digest for "abc"
  does digest for "abc"
-  can't call #final more than once
  can't call #final more than once
-  does base64digest for ""
  does base64digest for ""
-  does .hexdigest for ""
  does .hexdigest for ""
-  does #hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does #hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
-  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
-  does digest for "" in a block
  does digest for "" in a block
-  does digest for "a" in a block
  does digest for "a" in a block
-  resets
  resets
-  does #hexdigest for "The quick brown fox jumps over the lazy dog"
  does #hexdigest for "The quick brown fox jumps over the lazy dog"
-  .dup
-    leads to deterministic updates
    leads to deterministic updates
     leads to not sharing state
    leads to not sharing state
-    preserves value
    preserves value
     preserves type
    preserves type
-  does .hexdigest for "fooø"
  does .hexdigest for "fooø"
-  can't call #final more than once
  can't call #final more than once
-  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
-  resets
  resets
-  does base64digest for "fooø"
  does base64digest for "fooø"
-  resets
  resets
-  does digest for "fooø" in a block
  does digest for "fooø" in a block
-  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
-  does digest for "The quick brown fox jumps over the lazy dog" in a block
  does digest for "The quick brown fox jumps over the lazy dog" in a block
+  calculates hash from UInt8 slices
  calculates hash from UInt8 slices
+  context are independent
  context are independent
+  can't call final twice
  can't call final twice
+  digest with file content
  digest with file content
+  can take a block
  can take a block
+  calculates hash from string
  calculates hash from string
+  calculates hash of #to_slice
  calculates hash of #to_slice
+  return the digest size
  return the digest size
+  calculates digest from string
  calculates digest from string
   resets
  resets
-URI
-  .encode_path_segment
  .encode_path_segment
-  #normalize
-    prefixes relative path with colon with `./`
    prefixes relative path with colon with `./`
-    doesn't modify instance
    doesn't modify instance
-    normalizes scheme
    normalizes scheme
-    removes default port
    removes default port
-    removes dot notation from path
    removes dot notation from path
-    normalizes host
    normalizes host
-  #==
-    assert
    assert
-  #update_query_params
-    commits changes to the URI::Object
    commits changes to the URI::Object
-    returns self
    returns self
-  #resolve
-    ...
    ...
-    removes dot-segments
    removes dot-segments
-    relative base
    relative base
-    path-absolute URI references
    path-absolute URI references
-    absolute URI references
    absolute URI references
-    Extras
    Extras
-    scheme-relative
    scheme-relative
-    path relative references
    path relative references
-    RFC 3986: 5.4.2. Abnormal Examples
    RFC 3986: 5.4.2. Abnormal Examples
-    fragment
    fragment
-    RFC 3986: 5.4.1. Normal Examples
    RFC 3986: 5.4.1. Normal Examples
-    encoded characters
    encoded characters
-    opaque URIs
    opaque URIs
-    multiple slashes
    multiple slashes
-  #request_target
-    assert
    assert
-    assert
    assert
-    does not add '?' to the end if the query params are empty
    does not add '?' to the end if the query params are empty
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
+Time::Location::Zone
+  #inspect
  #inspect
+  #name
  #name
+URI::Params::Serializable
+  .from_www_form
+    nested type
+      doubly nested
      doubly nested
+      missing required nested property
      missing required nested property
+      missing nilable nested data
      missing nilable nested data
+      happy path
      happy path
+    with nilable values
    with nilable values
+    with default values
    with default values
+    simple type
    simple type
+    child type
    child type
+    with custom converter
    with custom converter
+    with nilable default
    with nilable default
+    missing required property
    missing required property
+  #to_www_form
+    nested type path
    nested type path
+    doubly nested
    doubly nested
+    simple type
    simple type
+UDPSocket
+  #connect with a IPv6 address
  #connect with a IPv6 address
+  #remote_address resets after connect
  #remote_address resets after connect
+  sends broadcast message
  sends broadcast message
+  using IPv6
+    #bind
    #bind
+    joins and transmits to multicast groups
    joins and transmits to multicast groups
+    sends and receives messages
    sends and receives messages
+  using IPv4
+    sends and receives messages
    sends and receives messages
+    joins and transmits to multicast groups
    joins and transmits to multicast groups
+    #bind
    #bind
+Compress::Zip
+  reads big file
  reads big file
+  reads zip file with different extra in local file header and central directory header
  reads zip file with different extra in local file header and central directory header
+  writes comment
  writes comment
+  reads file from file system
  reads file from file system
+  writes over int16 files to make sure we can parse
  writes over int16 files to make sure we can parse
+  reads zip comment
  reads zip comment
+  reads file from memory
  reads file from memory
+Signal
+  CHLD.trap is called after default Crystal child handler
  CHLD.trap is called after default Crystal child handler
+  CHLD.reset sets default Crystal child handler
  CHLD.reset sets default Crystal child handler
+  runs a signal handler
  runs a signal handler
+  ignores a signal
  ignores a signal
+  CHLD.ignore sets default Crystal child handler
  CHLD.ignore sets default Crystal child handler
+  CHLD.reset removes previously set trap
  CHLD.reset removes previously set trap
+  has constants required by C
  has constants required by C
+  allows chaining of signals
  allows chaining of signals
+Math
+  Mathematical constants
+    E
    E
+    LOG2
    LOG2
+    LOG10
    LOG10
+  Order-related functions
     assert
    assert
     assert
    assert
-  .encode_path
  .encode_path
+  fma
  fma
+  Inverse trigonometric functions
+    asin
    asin
+    atan2
    atan2
+    atan
    atan
+    acos
    acos
+  Roots
+    cbrt
    cbrt
+    isqrt
    isqrt
+    sqrt
    sqrt
+  .pw2ceil
+    Int8
    Int8
+    UInt64
    UInt64
+    Int16
    Int16
+    UInt128
    UInt128
+    UInt32
    UInt32
+    Int32
    Int32
+    UInt16
    UInt16
+    Int64
    Int64
+    Int128
    Int128
+    UInt8
    UInt8
+  Exponents
+    scalbln
    scalbln
+    scalbn
    scalbn
+    ilogb
    ilogb
+    expm1
    expm1
+    logb
    logb
+    ldexp
    ldexp
+    exp2
    exp2
+    frexp
    frexp
+    exp
    exp
+  Functions for computing quotient and remainder
  Functions for computing quotient and remainder
+  Bessel functions
+    bessely0
    bessely0
+    besselj0
    besselj0
+    bessely
    bessely
+    besselj
    besselj
+    besselj1
    besselj1
+    bessely1
    bessely1
+  Gauss error functions
+    erf
    erf
+    erfc
    erfc
+  Functions manipulating signs
+    copysign
    copysign
+  Hyperbolic functions
+    sinh
    sinh
+    tanh
    tanh
+    cosh
    cosh
+  Inverse hyperbolic functions
+    atanh
    atanh
+    acosh
    acosh
+    asinh
    asinh
+  Trigonometric functions
+    tan
    tan
+    hypot
    hypot
+    sin
    sin
+    cos
    cos
+  Gamma functions
+    gamma
    gamma
+    lgamma
    lgamma
+  Logarithms
+    log1p
    log1p
+    log
    log
+    log10
    log10
+    log2
    log2
+System
+  hostname
+    returns current hostname
    returns current hostname
+  cpu_count
+    returns current CPU count
    returns current CPU count
+MIME
+  .register
+    fails for invalid extension
    fails for invalid extension
+    registers new type
    registers new type
+  parses media types
  parses media types
+  .extensions
+    returns empty set
    returns empty set
+    lists extensions
    lists extensions
+    recognizes overridden types
    recognizes overridden types
+  .load_mime_database
  .load_mime_database
+  .from_extension
  .from_extension
+  .from_filename
+    Path
    Path
+    String
    String
+  .init
+    loads defaults
    loads defaults
+    skips loading defaults
    skips loading defaults
+    loads file
    loads file
+  .from_filename?
+    Path
    Path
+    String
    String
+  .from_extension?
  .from_extension?
+OAuth2::AccessToken::Mac
+  computes signature
  computes signature
+  authenticates request
  authenticates request
+  builds with null refresh token
  builds with null refresh token
+  builds from json
  builds from json
+  dumps to json
  dumps to json
+HTTP::FormData
+  .parse(IO, String)
+    parses formdata
    parses formdata
+  .parse(HTTP::Request)
+    raises on invalid Content-Type
    raises on invalid Content-Type
+    raises on empty body
    raises on empty body
+    raises on no Content-Type
    raises on no Content-Type
+    parses formdata
    parses formdata
+  .parse_content_disposition(String)
+    parses all Content-Disposition fields
    parses all Content-Disposition fields
+  .build(HTTP::Server::Response, String)
+    builds a message
    builds a message
+  .build(IO, String)
+    builds a message
    builds a message
+IO::Hexdump
+  read
+    prints hexdump
    prints hexdump
+  write
+    prints hexdump
    prints hexdump
+grisu3
+  float32
+    largest denormal
    largest denormal
+    large number, rounding
    large number, rounding
+    smallest normal
    smallest normal
+    general whole number, rounding
    general whole number, rounding
+    general with rounding down
    general with rounding down
+    general with rounding up
    general with rounding up
+    general whole number, rounding
    general whole number, rounding
+    min
    min
+    small number
    small number
+    max
    max
+    general no rounding
    general no rounding
+  float64
+    largest denormal
    largest denormal
+    max float
    max float
+    min float
    min float
+    small number
    small number
+    point at end
    point at end
+    smallest normal
    smallest normal
+    failure case
    failure case
+    another no point move
    another no point move
+    large number
    large number
+Thread::Mutex
+  synchronizes
  synchronizes
+  won't lock recursively
  won't lock recursively
+  won't unlock from another thread
  won't unlock from another thread
+JSON::Any
+  can compare with ===
  can compare with ===
+  .new
  .new
+  dig
+    gets the value at given path given splat
    gets the value at given path given splat
+    raises if not found
    raises if not found
+  casts
+    gets nil
    gets nil
+    gets int64
    gets int64
+    gets float32
    gets float32
+    gets hash
    gets hash
+    gets float32 from JSON integer (#8618)
    gets float32 from JSON integer (#8618)
+    gets float64
    gets float64
+    gets float64 from JSON integer (#8618)
    gets float64 from JSON integer (#8618)
+    gets int32
    gets int32
+    gets array
    gets array
+    gets bool
    gets bool
+    gets string
    gets string
+  dups
  dups
   #to_yaml
  #to_yaml
-  .reserved?
  .reserved?
-  .new
-    with query params
    with query params
-  #query_params=
-    empty
    empty
-    params with values
    params with values
-  #relative?
-    assert
    assert
-  #authority
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  .unwrap_ipv6
  .unwrap_ipv6
-  .unreserved?
  .unreserved?
-  .parse
-    `https://alice:pa55w0rd@www.example.com`
    `https://alice:pa55w0rd@www.example.com`
-    `//user@foo/path?q=b`
    `//user@foo/path?q=b`
-    `?q=1`
    `?q=1`
-    `http://www.example.com/foo`
    `http://www.example.com/foo`
-    `http://[::1]:81`
    `http://[::1]:81`
-    `ldap://[2001:db8::7]/c=GB?objectClass?one`
    `ldap://[2001:db8::7]/c=GB?objectClass?one`
-    `http://[::1]:81/`
    `http://[::1]:81/`
-    `http://user@/foo`
    `http://user@/foo`
-    assert
    assert
-    `http:..`
    `http:..`
-    assert
    assert
-    `magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn`
    `magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn`
-    `https://example.com.:8443/`
    `https://example.com.:8443/`
-    `http://www.example.com`
    `http://www.example.com`
-    bad urls
-      assert
      assert
-    `http://`
    `http://`
-    `news:comp.infosystems.www.servers.unix`
    `news:comp.infosystems.www.servers.unix`
-    `http://www.foo-bar.example.com`
    `http://www.foo-bar.example.com`
-    `//foo`
    `//foo`
-    `http://#`
    `http://#`
-    unescaped @ in user/password should not confuse host
    unescaped @ in user/password should not confuse host
-    `?a+b=c%2Bd`
    `?a+b=c%2Bd`
-    `http://user:pass@bitfission.com:8080/path?a=b#frag`
    `http://user:pass@bitfission.com:8080/path?a=b#frag`
-    `foo/another@url/[]and{}`
    `foo/another@url/[]and{}`
-    `https://www.example.com/#top`
    `https://www.example.com/#top`
-    `mailto:foo@example.org`
    `mailto:foo@example.org`
-    `test:/test`
    `test:/test`
-    `http:`
    `http:`
-    `https://%3AD:%40_%40@www.example.com`
    `https://%3AD:%40_%40@www.example.com`
-    `https://example.com./`
    `https://example.com./`
-    `http://host/!$&'()*+,;=:@[hello]`
    `http://host/!$&'()*+,;=:@[hello]`
-    assert
    assert
-    `http://:8000`
    `http://:8000`
-    `http:?#`
    `http:?#`
-    `file:///C:/FooBar/Baz.txt`
    `file:///C:/FooBar/Baz.txt`
-    `http://www.example.com:81`
    `http://www.example.com:81`
-    `https://alice@www.example.com`
    `https://alice@www.example.com`
-    `http://www.example.com:81/`
    `http://www.example.com:81/`
-    `urn:oasis:names:specification:docbook:dtd:xml:4.1.2`
    `urn:oasis:names:specification:docbook:dtd:xml:4.1.2`
-    `http:`
    `http:`
-    `http:.`
    `http:.`
-    `http:?`
    `http:?`
-    `/path?a=b#frag`
    `/path?a=b#frag`
-    `mysql://a,b,c/bar`
    `mysql://a,b,c/bar`
-    `http:#`
    `http:#`
-    `tcp://[2020::2020:20:2020:2020%25Windows%20Loves%20Spaces]:2020`
    `tcp://[2020::2020:20:2020:2020%25Windows%20Loves%20Spaces]:2020`
-    `http://192.0.2.16:81`
    `http://192.0.2.16:81`
+  traverses big structure
  traverses big structure
+  #dig?
+    returns nil if not found
    returns nil if not found
+    returns nil for non-Hash/Array intermediary values
    returns nil for non-Hash/Array intermediary values
+    gets the value at given path given splat
    gets the value at given path given splat
+  #size
+    of hash
    of hash
+    of array
    of array
+  #[]
+    of array
    of array
+    of hash
    of hash
+  clones
  clones
+  #[]?
+    of hash
    of hash
+    of array
    of array
+  compares to other objects
  compares to other objects
+  exposes $~ when doing Regex#===
  exposes $~ when doing Regex#===
+Int
+  #humanize_bytes
     assert
    assert
-    `http://www.example.com/`
    `http://www.example.com/`
-    `tel:+1-816-555-1212`
    `tel:+1-816-555-1212`
-    `file:///etc/fstab`
    `file:///etc/fstab`
-    `http://www.example.com/foo?`
    `http://www.example.com/foo?`
-    `?query=http://example.com`
    `?query=http://example.com`
-    `http://www.example.com/foo?q=1`
    `http://www.example.com/foo?q=1`
-    `http://example.com//foo`
    `http://example.com//foo`
-    `http://:8000/foo`
    `http://:8000/foo`
-    `http://192.0.2.16:81/`
    `http://192.0.2.16:81/`
-    `scheme://!$&'()*+,;=hello!:12/path`
    `scheme://!$&'()*+,;=hello!:12/path`
-    `//user:pass@bitfission.com:8080/path?a=b#frag`
    `//user:pass@bitfission.com:8080/path?a=b#frag`
-    `https://alice:@www.example.com`
    `https://alice:@www.example.com`
-    `?q=1?`
    `?q=1?`
-    `http://user@`
    `http://user@`
-    `telnet://192.0.2.16:80/`
    `telnet://192.0.2.16:80/`
-    `/foo?q=1`
    `/foo?q=1`
-    `http://?#`
    `http://?#`
-    `file://localhost/etc/fstab`
    `file://localhost/etc/fstab`
-    `http:example.com/?q=foo`
    `http:example.com/?q=foo`
-    `http://[fe80::1%25en0]:8080/`
    `http://[fe80::1%25en0]:8080/`
-    `/foo`
    `/foo`
-    `///foo`
    `///foo`
-    `http://?`
    `http://?`
-  #userinfo
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  #normalize!
-    modifies the instance
    modifies the instance
-  .from_yaml
  .from_yaml
-  .from_json
  .from_json
-  #absolute?
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  .encode_www_form
-    encodes ""
    encodes ""
-    encodes "a b+"
    encodes "a b+"
-    encodes "abc"
    encodes "abc"
-    encodes " ?&=#+%!<>#\"{}|\\^[]`☺\t:/@$'()*,;"
    encodes " ?&=#+%!<>#\"{}|\\^[]`☺\t:/@$'()*,;"
-    encodes "* foo=bar baz&hello/"
    encodes "* foo=bar baz&hello/"
-    encodes "a b+"
    encodes "a b+"
-    encodes "1%41"
    encodes "1%41"
-    encodes "10%"
    encodes "10%"
-  #hostname
     assert
    assert
     assert
    assert
     assert
    assert
-  .set_default_port
-    unregisters port for scheme
    unregisters port for scheme
-    treats scheme case insensitively
    treats scheme case insensitively
-    registers port for scheme
    registers port for scheme
-  #to_json
  #to_json
-  #opaque?
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  #query_params
-    when there is no query parameters
-      returns an empty instance of URI::Params
      returns an empty instance of URI::Params
-    returns a URI::Params instance based on the query parameters
    returns a URI::Params instance based on the query parameters
-  #hash
     assert
    assert
-  .default_port
-    returns nil for unknown schemes
    returns nil for unknown schemes
-    treats scheme case insensitively
    treats scheme case insensitively
-    returns default port for well known schemes
    returns default port for well known schemes
-  .decode_www_form
-    encodes "hello+"
    encodes "hello+"
-    encodes "hello+world"
    encodes "hello+world"
-    decodes "123%45%6"
    decodes "123%45%6"
-    decodes ""
    decodes ""
-    decodes "%4a"
    decodes "%4a"
-    decodes "+%2B %20"
    decodes "+%2B %20"
-    decodes "abc"
    decodes "abc"
-    decodes "%20%3F%26%3D%23%2B%25%21%3C%3E%23%22%7B%7D%7C%5C%5E%5B%5D%60%E2%98%BA%09%3A%2F%40%24%27%28%29%2A%2C%3B"
    decodes "%20%3F%26%3D%23%2B%25%21%3C%3E%23%22%7B%7D%7C%5C%5E%5B%5D%60%E2%98%BA%09%3A%2F%40%24%27%28%29%2A%2C%3B"
-    decodes "1%41"
    decodes "1%41"
-    decodes "a+b"
    decodes "a+b"
-    encodes "hello%2+world"
    encodes "hello%2+world"
-    decodes "%1"
    decodes "%1"
-    decodes "%"
    decodes "%"
-    decodes "a%20b"
    decodes "a%20b"
-    decodes "1%41%42%43"
    decodes "1%41%42%43"
-    decodes "%zzzzz"
    decodes "%zzzzz"
-    encodes "'Stop!' said Fred"
    encodes "'Stop!' said Fred"
-  #relativize
-    opaque base
    opaque base
-    identical
    identical
-    ...
    ...
-    relative base
    relative base
-    encoded characters
    encoded characters
-    absolute URI references
    absolute URI references
-    RFC 3986: 5.4.2. Abnormal Examples
    RFC 3986: 5.4.2. Abnormal Examples
-    ignore base path with dot-segments
    ignore base path with dot-segments
-    RFC 3986: 5.4.1. Normal Examples
    RFC 3986: 5.4.1. Normal Examples
-    fragment
    fragment
-    path relative references
    path relative references
-  .decode
-    decodes "hello%20world"
    decodes "hello%20world"
-    decodes "hello%2Bworld"
    decodes "hello%2Bworld"
-    decodes "hello%"
    decodes "hello%"
-    decodes "%27Stop%21%27+said+Fred"
    decodes "%27Stop%21%27+said+Fred"
-    decodes "hello+world"
    decodes "hello+world"
-    decodes "hello+world"
    decodes "hello+world"
-    decodes "hello%2%2Bworld"
    decodes "hello%2%2Bworld"
-    decodes "hello%2"
    decodes "hello%2"
-    decodes "hello"
    decodes "hello"
-    decodes "%E3%81%AA%E3%81%AA"
    decodes "%E3%81%AA%E3%81%AA"
-    decodes "hello%2B"
    decodes "hello%2B"
-    does not decode string when block returns true
    does not decode string when block returns true
-    decodes "%e3%81%aa%e3%81%aa"
    decodes "%e3%81%aa%e3%81%aa"
-    decodes "+%2B %20"
    decodes "+%2B %20"
-  .encode
-    encodes "hello world"
    encodes "hello world"
-    encodes "なな"
    encodes "なな"
-    encodes "hello%"
    encodes "hello%"
-    encodes "hello world"
    encodes "hello world"
-    encodes "hello+world"
    encodes "hello+world"
-    does not encode character when block returns true
    does not encode character when block returns true
-    encodes "hello"
    encodes "hello"
-    encodes "'Stop!' said Fred"
    encodes "'Stop!' said Fred"
-    encodes "https://en.wikipedia.org/wiki/Crystal (programming language)"
    encodes "https://en.wikipedia.org/wiki/Crystal (programming language)"
-    encodes "hello%2"
    encodes "hello%2"
-    encodes "hello+"
    encodes "hello+"
-    encodes "\n"
    encodes "\n"
-    encodes "hello%2+world"
    encodes "hello%2+world"
-    encodes "'Stop!' said Fred"
    encodes "'Stop!' said Fred"
-    encodes "\xFF"
    encodes "\xFF"
+BigInt Math
+  sqrt
  sqrt
+  pw2ceil
  pw2ceil
+  isqrt
  isqrt
+Enum
+  different enums classes not eq always
  different enums classes not eq always
+  does +
  does +
+  gets value with to_i
  gets value with to_i
   #to_s
-    assert
    assert
-    preserves port for unknown scheme
    preserves port for unknown scheme
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    preserves port for nil scheme
    preserves port for nil scheme
-    preserves non-default port
    preserves non-default port
-Log::Metadata
-  []
  []
-  extend against empty values without creating a new instance
  extend against empty values without creating a new instance
-  empty
  empty
-  ==
  ==
-  json
  json
-  defrags
  defrags
-  []?
  []?
-  empty?
  empty?
-  #dup
-    creates a shallow copy
    creates a shallow copy
-  extend
  extend
-Spec
-  hooks
-    runs in correct order
    runs in correct order
-HTTP::Headers
-  it allows indifferent access for underscore and dash separated keys
  it allows indifferent access for underscore and dash separated keys
-  doesn't match word with comma separated value, partial match (array)
  doesn't match word with comma separated value, partial match (array)
-  does to_s
  does to_s
-  clones
  clones
-  #serialize
  #serialize
-  matches word
  matches word
-  matches word with comma separated value, partial match
  matches word with comma separated value, partial match
-  is empty
  is empty
-  should retain the input casing
  should retain the input casing
-  fetches with default value
  fetches with default value
-  adds string
  adds string
-  does not matches word if missing header
  does not matches word if missing header
-  doesn't match word with comma separated value, partial match
  doesn't match word with comma separated value, partial match
-  matches word with comma separated value, partial match (array)
  matches word with comma separated value, partial match (array)
-  #==
-    different internal representation
    different internal representation
-    equals other instance
    equals other instance
-    case-insensitive keys
    case-insensitive keys
-  has key
  has key
-  doesn't match empty string
  doesn't match empty string
-  fetches with block
  fetches with block
-  adds array of string
  adds array of string
-  raises an error if header value contains invalid character
  raises an error if header value contains invalid character
-  can create header value with all US-ASCII visible chars (#2999)
  can create header value with all US-ASCII visible chars (#2999)
-  matches word with comma separated value
  matches word with comma separated value
-  merges and return self
  merges and return self
-  dups
  dups
-  deletes
  deletes
-  validates content
  validates content
-  is case insensitive
  is case insensitive
-  gets all values
  gets all values
-  matches word among headers
  matches word among headers
-  matches word with comma separated value, case insensitive (#3626)
  matches word with comma separated value, case insensitive (#3626)
-  is gets with []?
  is gets with []?
-.__ashrti3
.__ashrti3
-Reference
-  calls #finalize on #dup'ed objects
  calls #finalize on #dup'ed objects
-  does to_s for class if virtual
  does to_s for class if virtual
-  returns itself
  returns itself
-  dups
  dups
-  does to_s
  does to_s
-  does inspect for class
  does inspect for class
-  should not be nil
  should not be nil
-  clones with def_clone (recursive type)
  clones with def_clone (recursive type)
-  can dup class that inherits abstract class
  can dup class that inherits abstract class
-  compares reference to other reference
  compares reference to other reference
-  pretty_print
  pretty_print
-  does inspect
  does inspect
-  does to_s for class
  does to_s for class
-  should be false when negated
  should be false when negated
-  clones with def_clone
  clones with def_clone
-MIME::Multipart::Parser
-  raises calling #next after errored
  raises calling #next after errored
-  parses messages with preambles and epilogues
  parses messages with preambles and epilogues
-  handles break/next in blocks
  handles break/next in blocks
-  raises calling #next after finished
  raises calling #next after finished
-  parses basic multipart messages
  parses basic multipart messages
-  handles invalid multipart data
  handles invalid multipart data
-  handles padding
  handles padding
-Log::ProcFormatter
-  formats
  formats
-ARGV
-  accepts UTF-8 command-line arguments
  accepts UTF-8 command-line arguments
-Crypto::Blowfish
-  encrypt and decrypt pair
  encrypt and decrypt pair
-Tuple
-  does compare
  does compare
-  gets last? element
  gets last? element
-  does == with different types but same size
  does == with different types but same size
-  does comparison
  does comparison
-  checks empty?
  checks empty?
-  does reverse
  does reverse
-  does types
  does types
-  does Tuple.new, with type vars
  does Tuple.new, with type vars
-  does clone
  does clone
-  does at
  does at
-  does dup
  does dup
-  does compare with different sizes
  does compare with different sizes
-  #[]? with non-literal index
-    gets tuple element or nil
    gets tuple element or nil
-  "#each" yielding
  "#each" yielding
-  gets first? element
  gets first? element
-  does map
  does map
-  does map_with_index
  does map_with_index
-  does ==
  does ==
-  does map_with_index, with offset
  does map_with_index, with offset
-  #[] with non-literal index
-    gets tuple element
    gets tuple element
-    raises index out of bounds
    raises index out of bounds
-  does to_s
  does to_s
-  does each
  does each
-  gets last element
  gets last element
-  "#each" iterator
  "#each" iterator
-  does ===
  does ===
-  does size
  does size
-  does <=> with the same beginning and different size
  does <=> with the same beginning and different size
-  "#reverse_each" iterator
  "#reverse_each" iterator
-  does to_a
  does to_a
-  clones empty tuple
  clones empty tuple
-  .[]? with non-literal index
-    gets tuple metaclass element or nil
    gets tuple metaclass element or nil
-  does == with another type
  does == with another type
-  does Tuple#from
  does Tuple#from
-  does Tuple.from
  does Tuple.from
-  does <=> for equality
  does <=> for equality
-  values_at
-    works with mixed types
    works with mixed types
-    returns the given indexes
    returns the given indexes
-    raises when passed an invalid index
    raises when passed an invalid index
-  gets first element
  gets first element
-  "#reverse_each" yielding
  "#reverse_each" yielding
-  does Tuple.new, without type vars
  does Tuple.new, without type vars
-  #to_static_array
  #to_static_array
-  .[] with non-literal index
-    gets tuple metaclass element
    gets tuple metaclass element
-    raises index out of bounds
    raises index out of bounds
-UInt
-  compares with <=>
  compares with <=>
-  &-
-    returns the wrapped negation
    returns the wrapped negation
-IO::FileDescriptor
-  reopens
  reopens
-  #tty?
-    returns false for null device
    returns false for null device
-    returns false for standard streams redirected to null device
    returns false for standard streams redirected to null device
-  close_on_exec
-    can be disabled and reenabled
    can be disabled and reenabled
-    is enabled by default (pipe)
    is enabled by default (pipe)
-    is copied on reopen
    is copied on reopen
-    sets close on exec on the reopened standard descriptors
    sets close on exec on the reopened standard descriptors
-    is enabled by default (open)
    is enabled by default (open)
-  #initialize
-    handles closed file descriptor gracefully
    handles closed file descriptor gracefully
-  #finalize
-    does not flush
    does not flush
-    closes
    closes
-  opens STDERR in binary mode
  opens STDERR in binary mode
-  opens STDIN in binary mode
  opens STDIN in binary mode
-  opens STDOUT in binary mode
  opens STDOUT in binary mode
-  reopen STDIN with the right mode
  reopen STDIN with the right mode
-  does not close if close_on_finalize is false
  does not close if close_on_finalize is false
-FileUtils
-  tests mkdir with multiples existing paths
  tests mkdir with multiples existing paths
-  tests mkdir and rmdir with a new path
  tests mkdir and rmdir with a new path
-  .ln_sf
-    overwrites a destination dir in dir
    overwrites a destination dir in dir
-    overwrites a destination named pipe
    overwrites a destination named pipe
-    creates a symlink even if there's nothing to overwrite
    creates a symlink even if there's nothing to overwrite
-    creates multiple symlinks in a destination dir, with overwrites
    creates multiple symlinks in a destination dir, with overwrites
-    overwrites a destination file inside a dir
    overwrites a destination file inside a dir
-    overwrites a destination file
    overwrites a destination file
-  tests rm with nonexistent path
  tests rm with nonexistent path
-  tests mkdir and rmdir with multiple new paths
  tests mkdir and rmdir with multiple new paths
-  tests rmdir with a path that cannot be removed
  tests rmdir with a path that cannot be removed
-  .cmp
-    compares two equal files
    compares two equal files
-    compares two different files
    compares two different files
-  .cd
-    accepts a block
    accepts a block
-    should work
    should work
-    raises
    raises
-  tests rm with multiple existing paths
  tests rm with multiple existing paths
-  tests rmdir with an nonexistent path
  tests rmdir with an nonexistent path
-  .ln_s
-    creates a symlink inside a destination dir
    creates a symlink inside a destination dir
-    works with a nonexistent source
    works with a nonexistent source
-    fails with an existing destination
    fails with an existing destination
-    creates a symlink
    creates a symlink
-    creates multiple symlinks inside a destination dir
    creates multiple symlinks inside a destination dir
-  tests rm with an existing path
  tests rm with an existing path
-  tests mkdir with an existing path
  tests mkdir with an existing path
-  .ln
-    creates a hardlink
    creates a hardlink
-    creates multiple hardlinks inside a destination dir
    creates multiple hardlinks inside a destination dir
-    fails with an extant destination
    fails with an extant destination
-    fails with a nonexistent source
    fails with a nonexistent source
-    creates a hardlink inside a destination dir
    creates a hardlink inside a destination dir
-  .rm_r
-    doesn't follow symlinks
    doesn't follow symlinks
-    deletes a directory recursively
    deletes a directory recursively
-  .mv
-    moves multiple files to one place
    moves multiple files to one place
-    raises an error if dest is non correct
    raises an error if dest is non correct
-    moves a file from one place to another
    moves a file from one place to another
-    moves all existing files to destination
    moves all existing files to destination
-    raises an error if non correct arguments
    raises an error if non correct arguments
-  tests rm with some nonexistent paths
  tests rm with some nonexistent paths
-  .pwd
-    returns the current working directory
    returns the current working directory
-  tests mkdir_p with multiples new path
  tests mkdir_p with multiples new path
-  tests rmdir with multiple nonexistent path
  tests rmdir with multiple nonexistent path
-  .rm_rf
-    delete recursively multiple directory
    delete recursively multiple directory
-    delete recursively a directory
    delete recursively a directory
-    doesn't return error on nonexistent file
    doesn't return error on nonexistent file
-    doesn't return error on nonexistent files
    doesn't return error on nonexistent files
-  .touch
-    creates multiple files if they don't exists
    creates multiple files if they don't exists
-    creates file if it doesn't exist
    creates file if it doesn't exist
-  tests rmdir with multiple path that cannot be removed
  tests rmdir with multiple path that cannot be removed
-  .cp_r
-    copies a directory recursively if destination exists and is empty
    copies a directory recursively if destination exists and is empty
-    copies a directory recursively if destination exists leaving existing files
    copies a directory recursively if destination exists leaving existing files
-    copies a directory recursively
    copies a directory recursively
-  .cp
-    copies a file
    copies a file
-    copies multiple files
    copies multiple files
-    copies permissions
    copies permissions
-    raises an error if the directory doesn't exist
    raises an error if the directory doesn't exist
-  tests mkdir_p with multiple existing path
  tests mkdir_p with multiple existing path
-IO::ARGF
-  reads from ARGV if specified
  reads from ARGV if specified
-  reads when is more data left to read
  reads when is more data left to read
-  reads from STDIN if ARGV isn't specified
  reads from STDIN if ARGV isn't specified
-  peek
-    peeks from ARGV if specified
    peeks from ARGV if specified
-    peeks from STDIN if ARGV isn't specified
    peeks from STDIN if ARGV isn't specified
-  gets
-    reads from STDIN if ARGV isn't specified
    reads from STDIN if ARGV isn't specified
-    reads from ARGV if specified
    reads from ARGV if specified
-    reads from STDIN if ARGV isn't specified, chomp = false
    reads from STDIN if ARGV isn't specified, chomp = false
-Deque
-  last
-    gets last when non empty
    gets last when non empty
-    raises when empty
    raises when empty
-  rotate!
-    rotates with size=capacity
    rotates with size=capacity
-    rotates with size=1
    rotates with size=1
-    rotates
    rotates
-    rotates with size=0
    rotates with size=0
-  ==
-    compares empty
    compares empty
-    compares elements
    compares elements
-    compares other
    compares other
-    compares other types
    compares other types
-  size
-    has size 2
    has size 2
-    has size 0
    has size 0
-  each iterator
-    "#each" iterator
    "#each" iterator
-    "#each" yielding
    "#each" yielding
-    works while modifying deque
    works while modifying deque
-  push
-    returns the deque
    returns the deque
-    adds one element to the deque
    adds one element to the deque
-    has the << alias
    has the << alias
-  first
-    gets first when non empty
    gets first when non empty
-    raises when empty
    raises when empty
-  first?
-    gives nil when empty
    gives nil when empty
-    gets first? when non empty
    gets first? when non empty
-  does dup
  does dup
-  pop
-    raises when empty
    raises when empty
-    pops more elements than what is available
    pops more elements than what is available
-    pops negative count raises
    pops negative count raises
-    pops when non empty
    pops when non empty
-    pops many elements
    pops many elements
-  does clone with recursive type
  does clone with recursive type
-  "#reverse_each" iterator
  "#reverse_each" iterator
-  reject!
-    with pattern
    with pattern
-    with block
    with block
-  does clear
  does clear
-  shift
-    raises when empty
    raises when empty
-    shifts more than what is available
    shifts more than what is available
-    shifts negative count raises
    shifts negative count raises
-    shifts many elements
    shifts many elements
-    shifts when non empty
    shifts when non empty
-  +
-    does +
    does +
-    does + with different types
    does + with different types
-  "#reverse_each" yielding
  "#reverse_each" yielding
-  []=
-    sets on positive index
    sets on positive index
-    sets on negative index
    sets on negative index
-  "#cycle" yielding
  "#cycle" yielding
-  each_index iterator
-    works while modifying deque
    works while modifying deque
-    "#each_index" yielding
    "#each_index" yielding
-    "#each_index" iterator
    "#each_index" iterator
-  empty
-    is not empty
    is not empty
-    is empty
    is empty
-  does each
  does each
-  "#cycle(limit)" iterator
  "#cycle(limit)" iterator
-  select!
-    with block
    with block
-    with pattern
    with pattern
-  swap
-    swaps but raises out of bounds on right
    swaps but raises out of bounds on right
-    swaps but raises out of bounds on left
    swaps but raises out of bounds on left
-    swaps with negative indices
    swaps with negative indices
-    swaps
    swaps
-  delete_at
-    deletes out of bounds
    deletes out of bounds
-    deletes negative index
    deletes negative index
-    deletes positive index
    deletes positive index
-  to_s
-    does to_s
    does to_s
-    does with recursive
    does with recursive
-  concat
-    concats indexable
    concats indexable
-    concats deque
    concats deque
-    concats enumerable
    concats enumerable
-    concats itself
    concats itself
-    concats large deques
    concats large deques
-  delete
-    delete not found
    delete not found
-    deletes many
    deletes many
-  does hash
  does hash
-  insert
-    inserts with negative index (2)
    inserts with negative index (2)
-    inserts with negative index
    inserts with negative index
-    inserts with positive index
    inserts with positive index
-    inserts out of range
    inserts out of range
-  "#cycle" iterator
  "#cycle" iterator
-  implementation
-    works the same as array
    works the same as array
-    works the same as array when inserting at 1/8 size and deleting at 3/4 size
    works the same as array when inserting at 1/8 size and deleting at 3/4 size
-    works the same as array when inserting at 3/4 size and deleting at 1/8 size
    works the same as array when inserting at 3/4 size and deleting at 1/8 size
-  []
-    gets on negative index
    gets on negative index
-    gets on positive index
    gets on positive index
-    gets nilable
    gets nilable
-  does clone
  does clone
-  does each_index
  does each_index
-  new
-    creates from an array
    creates from an array
-    raises on negative capacity
    raises on negative capacity
-    raises on negative count
    raises on negative count
-    creates with default value in block
    creates with default value in block
-    creates with default value
    creates with default value
-  inspect
-    assert
    assert
-  does equals? with custom block
  does equals? with custom block
-  "#cycle(limit)" yielding
  "#cycle(limit)" yielding
-  does unshift
  does unshift
-OpenSSL::Digest
-  returns the digest size
  returns the digest size
-  returns the block size
  returns the block size
-  raises a UnsupportedError if digest is unsupported
  raises a UnsupportedError if digest is unsupported
-  should be able to calculate SHA1
  should be able to calculate SHA1
-  correctly reads from IO
  correctly reads from IO
-  should be able to calculate SHA256
  should be able to calculate SHA256
-  .dup
-    preserves value
    preserves value
-    leads to deterministic updates
    leads to deterministic updates
-    leads to not sharing state
    leads to not sharing state
-    preserves type
    preserves type
-  should be able to calculate SHA512
  should be able to calculate SHA512
-  digest with file content
  digest with file content
-  can't call #final more than once
  can't call #final more than once
-Float64#to_s
-  converts 12345678.0 to "12345678.0"
  converts 12345678.0 to "12345678.0"
-  highly-trimmed powers of 2
-    converts 0x1p960 to "9.7453140114e+288"
    converts 0x1p960 to "9.7453140114e+288"
-    converts 0x1p959 to "4.8726570057e+288"
    converts 0x1p959 to "4.8726570057e+288"
-  converts 9007199254740992.0 to "9.007199254740992e+15"
  converts 9007199254740992.0 to "9.007199254740992e+15"
-  converts 1000000001000000.0 to "1.000000001e+15"
  converts 1000000001000000.0 to "1.000000001e+15"
-  converts 1.2 to "1.2"
  converts 1.2 to "1.2"
-  converts 1000000000010000.0 to "1.00000000001e+15"
  converts 1000000000010000.0 to "1.00000000001e+15"
-  converts 10000.0 to "10000.0"
  converts 10000.0 to "10000.0"
-  converts 1.23456789012 to "1.23456789012"
  converts 1.23456789012 to "1.23456789012"
-  converts 549755813888000.0 to "549755813888000.0"
  converts 549755813888000.0 to "549755813888000.0"
-  converts 1000001000000000.0 to "1.000001e+15"
  converts 1000001000000000.0 to "1.000001e+15"
-  converts 1234567.0 to "1234567.0"
  converts 1234567.0 to "1234567.0"
-  converts 70368744177664.0 to "70368744177664.0"
  converts 70368744177664.0 to "70368744177664.0"
-  converts 123456789012.0 to "123456789012.0"
  converts 123456789012.0 to "123456789012.0"
-  converts 1001000000000000.0 to "1.001e+15"
  converts 1001000000000000.0 to "1.001e+15"
-  one-digit cases, where the decimal point can't appear between digits like "17.29"
-    converts 7e+0 to "7.0"
    converts 7e+0 to "7.0"
-    converts 7e-3 to "0.007"
    converts 7e-3 to "0.007"
-    converts 7e-1 to "0.7"
    converts 7e-1 to "0.7"
-    converts 7e+2 to "700.0"
    converts 7e+2 to "700.0"
-    converts 7e-2 to "0.07"
    converts 7e-2 to "0.07"
-    converts 7e+1 to "70.0"
    converts 7e+1 to "70.0"
-    converts 7e+3 to "7000.0"
    converts 7e+3 to "7000.0"
-  converts 8589934592.0 to "8589934592.0"
  converts 8589934592.0 to "8589934592.0"
-  converts 12345.0 to "12345.0"
  converts 12345.0 to "12345.0"
-  converts 1.0 to "1.0"
  converts 1.0 to "1.0"
-  converts 68719476736.0 to "68719476736.0"
  converts 68719476736.0 to "68719476736.0"
-  converts 1000000000100000.0 to "1.0000000001e+15"
  converts 1000000000100000.0 to "1.0000000001e+15"
-  converts 549755813888.0 to "549755813888.0"
  converts 549755813888.0 to "549755813888.0"
-  converts 1100000000000000.0 to "1.1e+15"
  converts 1100000000000000.0 to "1.1e+15"
-  converts 10000000000.0 to "10000000000.0"
  converts 10000000000.0 to "10000000000.0"
-  anomalous values
-    converts 0x1p378 to "6.156563468186638e+113"
    converts 0x1p378 to "6.156563468186638e+113"
-    converts 0x1p89 to "6.189700196426902e+26"
    converts 0x1p89 to "6.189700196426902e+26"
-    converts 0x1p803 to "5.334411546303884e+241"
    converts 0x1p803 to "5.334411546303884e+241"
-    converts 0x1p-808 to "5.858190679279809e-244"
    converts 0x1p-808 to "5.858190679279809e-244"
-    converts 0x1p534 to "5.623642243178996e+160"
    converts 0x1p534 to "5.623642243178996e+160"
-    converts 0x1p-957 to "8.209073602596753e-289"
    converts 0x1p-957 to "8.209073602596753e-289"
-    converts 0x1p-24 to "5.960464477539063e-8"
    converts 0x1p-24 to "5.960464477539063e-8"
-    converts 0x1p182 to "6.129982163463556e+54"
    converts 0x1p182 to "6.129982163463556e+54"
-    converts 0x1p-77 to "6.617444900424222e-24"
    converts 0x1p-77 to "6.617444900424222e-24"
-    converts 0x1p-652 to "5.351097043477547e-197"
    converts 0x1p-652 to "5.351097043477547e-197"
-    converts 0x1p-1017 to "7.120236347223045e-307"
    converts 0x1p-1017 to "7.120236347223045e-307"
-    converts 0x1p-489 to "6.256509672447191e-148"
    converts 0x1p-489 to "6.256509672447191e-148"
-    converts 0x1p481 to "6.243497100631985e+144"
    converts 0x1p481 to "6.243497100631985e+144"
-    converts 0x1p544 to "5.758609657015292e+163"
    converts 0x1p544 to "5.758609657015292e+163"
-    converts 0x1p-366 to "6.653062250012736e-111"
    converts 0x1p-366 to "6.653062250012736e-111"
-    converts 0x1p710 to "5.386379163185535e+213"
    converts 0x1p710 to "5.386379163185535e+213"
-    converts 0x1p-296 to "7.854549544476363e-90"
    converts 0x1p-296 to "7.854549544476363e-90"
-    converts 0x1p574 to "6.183260036827614e+172"
    converts 0x1p574 to "6.183260036827614e+172"
-    converts 0x1p-549 to "5.426657103235053e-166"
    converts 0x1p-549 to "5.426657103235053e-166"
-    converts 0x1p-705 to "5.940911144672375e-213"
    converts 0x1p-705 to "5.940911144672375e-213"
-    converts 0x1p-695 to "6.083493012144512e-210"
    converts 0x1p-695 to "6.083493012144512e-210"
-    converts 0x1p132 to "5.444517870735016e+39"
    converts 0x1p132 to "5.444517870735016e+39"
-    converts 0x1p172 to "5.986310706507379e+51"
    converts 0x1p172 to "5.986310706507379e+51"
-    converts 0x1p-788 to "6.142758149716505e-238"
    converts 0x1p-788 to "6.142758149716505e-238"
-    converts 0x1p-509 to "5.966672584960166e-154"
    converts 0x1p-509 to "5.966672584960166e-154"
-    converts 0x1p896 to "5.282945311356653e+269"
    converts 0x1p896 to "5.282945311356653e+269"
-    converts 0x1p-921 to "5.641232424577593e-278"
    converts 0x1p-921 to "5.641232424577593e-278"
-    converts 0x1p-1007 to "7.291122019556398e-304"
    converts 0x1p-1007 to "7.291122019556398e-304"
-    converts 0x1p122 to "5.316911983139664e+36"
    converts 0x1p122 to "5.316911983139664e+36"
-    converts 0x1p863 to "6.150157786156811e+259"
    converts 0x1p863 to "6.150157786156811e+259"
-    converts 0x1p-140 to "7.174648137343064e-43"
    converts 0x1p-140 to "7.174648137343064e-43"
-    converts 0x1p-383 to "5.075883674631299e-116"
    converts 0x1p-383 to "5.075883674631299e-116"
-    converts 0x1p-778 to "6.290184345309701e-235"
    converts 0x1p-778 to "6.290184345309701e-235"
-    converts 0x1p594 to "6.483618076376552e+178"
    converts 0x1p594 to "6.483618076376552e+178"
-    converts 0x1p275 to "6.070840288205404e+82"
    converts 0x1p275 to "6.070840288205404e+82"
-    converts 0x1p398 to "6.455624695217272e+119"
    converts 0x1p398 to "6.455624695217272e+119"
-    converts 0x1p-791 to "7.678447687145631e-239"
    converts 0x1p-791 to "7.678447687145631e-239"
-    converts 0x1p-44 to "5.684341886080802e-14"
    converts 0x1p-44 to "5.684341886080802e-14"
-    converts 0x1p305 to "6.518515124270356e+91"
    converts 0x1p305 to "6.518515124270356e+91"
-    converts 0x1p976 to "6.386688990511104e+293"
    converts 0x1p976 to "6.386688990511104e+293"
-    converts 0x1p-496 to "4.887898181599368e-150"
    converts 0x1p-496 to "4.887898181599368e-150"
-    converts 0x1p554 to "5.896816288783659e+166"
    converts 0x1p554 to "5.896816288783659e+166"
-    converts 0x1p405 to "8.263199609878108e+121"
    converts 0x1p405 to "8.263199609878108e+121"
-    converts 0x1p345 to "7.167183174968974e+103"
    converts 0x1p345 to "7.167183174968974e+103"
-    converts 0x1p-97 to "6.310887241768095e-30"
    converts 0x1p-97 to "6.310887241768095e-30"
-    converts 0x1p-662 to "5.225680706521042e-200"
    converts 0x1p-662 to "5.225680706521042e-200"
-  Ryu d2s_test.cc MinMaxShift
-    converts 0x1.fffffffffffffp+54 to "3.6028797018963964e+16"
    converts 0x1.fffffffffffffp+54 to "3.6028797018963964e+16"
-    converts 0x1.fffffffffffffp-1016 to "2.8480945388892175e-306"
    converts 0x1.fffffffffffffp-1016 to "2.8480945388892175e-306"
-    converts 0x1.fffffffffffffp-716 to "5.801671039719115e-216"
    converts 0x1.fffffffffffffp-716 to "5.801671039719115e-216"
-    converts 0x1.0000000000000p-1019 to "1.7800590868057611e-307"
    converts 0x1.0000000000000p-1019 to "1.7800590868057611e-307"
-    converts 0x1.0000000000000p+54 to "1.8014398509481984e+16"
    converts 0x1.0000000000000p+54 to "1.8014398509481984e+16"
-    converts 0x1.0000000000000p-716 to "2.900835519859558e-216"
    converts 0x1.0000000000000p-716 to "2.900835519859558e-216"
-    converts 0x1.0000000000000p-982 to "2.446494580089078e-296"
    converts 0x1.0000000000000p-982 to "2.446494580089078e-296"
-    converts 0x1.fffffffffffffp-982 to "4.8929891601781557e-296"
    converts 0x1.fffffffffffffp-982 to "4.8929891601781557e-296"
-    converts 0x1.fa7161a4d6e0cp-89 to "3.196104012172126e-27"
    converts 0x1.fa7161a4d6e0cp-89 to "3.196104012172126e-27"
-  Ryu d2s_test.cc 32-bit Chunking
-    converts 4.294967297 to "4.294967297"
    converts 4.294967297 to "4.294967297"
-    converts 4.294967298 to "4.294967298"
    converts 4.294967298 to "4.294967298"
-    converts 4.294967296 to "4.294967296"
    converts 4.294967296 to "4.294967296"
-    converts 4.294967295 to "4.294967295"
    converts 4.294967295 to "4.294967295"
-    converts 4.294967294 to "4.294967294"
    converts 4.294967294 to "4.294967294"
-  converts 1000000000000000.0 to "1.0e+15"
  converts 1000000000000000.0 to "1.0e+15"
-  converts 1000000000.0 to "1000000000.0"
  converts 1000000000.0 to "1000000000.0"
-  converts 1234567890123456.0 to "1.234567890123456e+15"
  converts 1234567890123456.0 to "1.234567890123456e+15"
-  converts 1.234567890123456 to "1.234567890123456"
  converts 1.234567890123456 to "1.234567890123456"
-  Grisu failures
-    converts 3.5844466002796428e+298 to "3.5844466002796428e+298"
    converts 3.5844466002796428e+298 to "3.5844466002796428e+298"
-    converts 5.547e-6 to "5.547e-6"
    converts 5.547e-6 to "5.547e-6"
-    converts 0x1.e0ffed391517ep-186 to "1.9156918820264798e-56"
    converts 0x1.e0ffed391517ep-186 to "1.9156918820264798e-56"
-    converts 0x1.a6c767640cd71p+879 to "6.6564021122018745e+264"
    converts 0x1.a6c767640cd71p+879 to "6.6564021122018745e+264"
-    converts 1.0e+23 to "1.0e+23"
    converts 1.0e+23 to "1.0e+23"
-    converts 4.91e-6 to "4.91e-6"
    converts 4.91e-6 to "4.91e-6"
-  converts 1.0 to "1.0"
  converts 1.0 to "1.0"
-  converts 12345678901.0 to "12345678901.0"
  converts 12345678901.0 to "12345678901.0"
-  converts 100.0 to "100.0"
  converts 100.0 to "100.0"
-  converts 100000000000000.0 to "100000000000000.0"
  converts 100000000000000.0 to "100000000000000.0"
-  converts 8589934592000.0 to "8589934592000.0"
  converts 8589934592000.0 to "8589934592000.0"
-  converts 10.0 to "10.0"
  converts 10.0 to "10.0"
-  converts 64000.0 to "64000.0"
  converts 64000.0 to "64000.0"
-  special cases
-    converts 0.0 to "0.0"
    converts 0.0 to "0.0"
-    converts 9221120237041090560_u64.unsafe_as(Float64) to "NaN"
    converts 9221120237041090560_u64.unsafe_as(Float64) to "NaN"
-    converts Float64::MIN_SUBNORMAL to "5.0e-324"
    converts Float64::MIN_SUBNORMAL to "5.0e-324"
-    converts Float64::MIN_POSITIVE to "2.2250738585072014e-308"
    converts Float64::MIN_POSITIVE to "2.2250738585072014e-308"
-    converts -Float64::INFINITY to "-Infinity"
    converts -Float64::INFINITY to "-Infinity"
-    converts Float64::MIN_POSITIVE.prev_float to "2.225073858507201e-308"
    converts Float64::MIN_POSITIVE.prev_float to "2.225073858507201e-308"
-    converts Float64::INFINITY to "Infinity"
    converts Float64::INFINITY to "Infinity"
-    converts -0.0 to "-0.0"
    converts -0.0 to "-0.0"
-    converts 18444492273895866368_u64.unsafe_as(Float64) to "NaN"
    converts 18444492273895866368_u64.unsafe_as(Float64) to "NaN"
-    converts Float64::MAX to "1.7976931348623157e+308"
    converts Float64::MAX to "1.7976931348623157e+308"
-  converts 100000000000.0 to "100000000000.0"
  converts 100000000000.0 to "100000000000.0"
-  converts 8796093022208.0 to "8796093022208.0"
  converts 8796093022208.0 to "8796093022208.0"
-  converts 8192.0 to "8192.0"
  converts 8192.0 to "8192.0"
-  converts 1000000000000001.0 to "1.000000000000001e+15"
  converts 1000000000000001.0 to "1.000000000000001e+15"
-  converts 1000100000000000.0 to "1.0001e+15"
  converts 1000100000000000.0 to "1.0001e+15"
-  converts 8.0 to "8.0"
  converts 8.0 to "8.0"
-  converts 12.0 to "12.0"
  converts 12.0 to "12.0"
-  converts 100000.0 to "100000.0"
  converts 100000.0 to "100000.0"
-  converts 1000000000000.0 to "1000000000000.0"
  converts 1000000000000.0 to "1000000000000.0"
-  converts 1000.0 to "1000.0"
  converts 1000.0 to "1000.0"
-  converts 65536000.0 to "65536000.0"
  converts 65536000.0 to "65536000.0"
-  converts 1.23 to "1.23"
  converts 1.23 to "1.23"
-  converts 1000000010000000.0 to "1.00000001e+15"
  converts 1000000010000000.0 to "1.00000001e+15"
-  converts 123456.0 to "123456.0"
  converts 123456.0 to "123456.0"
-  converts 1.2345678901 to "1.2345678901"
  converts 1.2345678901 to "1.2345678901"
-  converts 68719476736000.0 to "68719476736000.0"
  converts 68719476736000.0 to "68719476736000.0"
-  converts 1.2345 to "1.2345"
  converts 1.2345 to "1.2345"
-  converts 512000.0 to "512000.0"
  converts 512000.0 to "512000.0"
-  converts 1.2345678901234 to "1.2345678901234"
  converts 1.2345678901234 to "1.2345678901234"
-  converts 562949953421312.0 to "562949953421312.0"
  converts 562949953421312.0 to "562949953421312.0"
-  converts 524288000.0 to "524288000.0"
  converts 524288000.0 to "524288000.0"
-  converts 65536.0 to "65536.0"
  converts 65536.0 to "65536.0"
-  converts 1.23456 to "1.23456"
  converts 1.23456 to "1.23456"
-  converts 1000000000000100.0 to "1.0000000000001e+15"
  converts 1000000000000100.0 to "1.0000000000001e+15"
-  converts 123.0 to "123.0"
  converts 123.0 to "123.0"
-  converts 123456789.0 to "123456789.0"
  converts 123456789.0 to "123456789.0"
-  Ryu d2s_test.cc Regression
-    converts 9.0608011534336e15 to "9.0608011534336e+15"
    converts 9.0608011534336e15 to "9.0608011534336e+15"
-    converts 4.940656e-318 to "4.940656e-318"
    converts 4.940656e-318 to "4.940656e-318"
-    converts 2.989102097996e-312 to "2.989102097996e-312"
    converts 2.989102097996e-312 to "2.989102097996e-312"
-    converts -2.109808898695963e16 to "-2.109808898695963e+16"
    converts -2.109808898695963e16 to "-2.109808898695963e+16"
-    converts 4.708356024711512e18 to "4.708356024711512e+18"
    converts 4.708356024711512e18 to "4.708356024711512e+18"
-    converts 1.18575755e-316 to "1.18575755e-316"
    converts 1.18575755e-316 to "1.18575755e-316"
-    converts 9.409340012568248e18 to "9.409340012568248e+18"
    converts 9.409340012568248e18 to "9.409340012568248e+18"
-  converts 8796093022208000.0 to "8.796093022208e+15"
  converts 8796093022208000.0 to "8.796093022208e+15"
-  converts 512.0 to "512.0"
  converts 512.0 to "512.0"
-  converts 524288.0 to "524288.0"
  converts 524288.0 to "524288.0"
-  converts 8192000.0 to "8192000.0"
  converts 8192000.0 to "8192000.0"
-  converts 8388608.0 to "8388608.0"
  converts 8388608.0 to "8388608.0"
-  converts 536870912.0 to "536870912.0"
  converts 536870912.0 to "536870912.0"
-  converts 1.0 to "1.0"
  converts 1.0 to "1.0"
-  converts 10000000.0 to "10000000.0"
  converts 10000000.0 to "10000000.0"
-  converts 1.234 to "1.234"
  converts 1.234 to "1.234"
-  converts 1.23456789012345 to "1.23456789012345"
  converts 1.23456789012345 to "1.23456789012345"
-  converts 64.0 to "64.0"
  converts 64.0 to "64.0"
-  almost-but-not-quite-anomalous values
-    converts 0x1p-569 to "5.17526350329881e-172"
    converts 0x1p-569 to "5.17526350329881e-172"
-    converts 0x1p890 to "8.25460204899477e+267"
    converts 0x1p890 to "8.25460204899477e+267"
-    converts 0x1p966 to "6.237000967296e+290"
    converts 0x1p966 to "6.237000967296e+290"
-    converts 0x1p740 to "5.78358058743443e+222"
    converts 0x1p740 to "5.78358058743443e+222"
-    converts 0x1p149 to "7.1362384635298e+44"
    converts 0x1p149 to "7.1362384635298e+44"
-    converts 0x1p-499 to "6.10987272699921e-151"
    converts 0x1p-499 to "6.10987272699921e-151"
-    converts 0x1p-645 to "6.84940421565126e-195"
    converts 0x1p-645 to "6.84940421565126e-195"
-    converts 0x1p956 to "6.090821257125e+287"
    converts 0x1p956 to "6.090821257125e+287"
-  converts 1.23456789 to "1.23456789"
  converts 1.23456789 to "1.23456789"
-  converts 1000010000000000.0 to "1.00001e+15"
  converts 1000010000000000.0 to "1.00001e+15"
-  converts 1234.0 to "1234.0"
  converts 1234.0 to "1234.0"
-  converts 536870912000.0 to "536870912000.0"
  converts 536870912000.0 to "536870912000.0"
-  converts 1.234567 to "1.234567"
  converts 1.234567 to "1.234567"
-  converts 67108864000.0 to "67108864000.0"
  converts 67108864000.0 to "67108864000.0"
-  converts 100000000.0 to "100000000.0"
  converts 100000000.0 to "100000000.0"
-  converts 1.2345678 to "1.2345678"
  converts 1.2345678 to "1.2345678"
-  converts 67108864.0 to "67108864.0"
  converts 67108864.0 to "67108864.0"
-  converts 1.234567890123 to "1.234567890123"
  converts 1.234567890123 to "1.234567890123"
-  converts 1.2345678901234567 to "1.2345678901234567"
  converts 1.2345678901234567 to "1.2345678901234567"
-  converts 8388608000.0 to "8388608000.0"
  converts 8388608000.0 to "8388608000.0"
-  converts 1010000000000000.0 to "1.01e+15"
  converts 1010000000000000.0 to "1.01e+15"
-  converts 1234567895.0 to "1234567895.0"
  converts 1234567895.0 to "1234567895.0"
-  Ryu d2s_test.cc LooksLikePow5
-    converts 0x1.0f0cf064dd592p+132 to "5.764607523034235e+39"
    converts 0x1.0f0cf064dd592p+132 to "5.764607523034235e+39"
-    converts 0x1.0f0cf064dd592p+134 to "2.305843009213694e+40"
    converts 0x1.0f0cf064dd592p+134 to "2.305843009213694e+40"
-    converts 0x1.0f0cf064dd592p+133 to "1.152921504606847e+40"
    converts 0x1.0f0cf064dd592p+133 to "1.152921504606847e+40"
-  all exponents
-    converts 1.729e+64 to "1.729e+64"
    converts 1.729e+64 to "1.729e+64"
-    converts 1.729e+124 to "1.729e+124"
    converts 1.729e+124 to "1.729e+124"
-    converts 1.729e+160 to "1.729e+160"
    converts 1.729e+160 to "1.729e+160"
-    converts 1.729e+26 to "1.729e+26"
    converts 1.729e+26 to "1.729e+26"
-    converts 1.729e+108 to "1.729e+108"
    converts 1.729e+108 to "1.729e+108"
-    converts 1.729e+246 to "1.729e+246"
    converts 1.729e+246 to "1.729e+246"
-    converts 1.729e-23 to "1.729e-23"
    converts 1.729e-23 to "1.729e-23"
-    converts 1.729e-183 to "1.729e-183"
    converts 1.729e-183 to "1.729e-183"
-    converts 1.729e+269 to "1.729e+269"
    converts 1.729e+269 to "1.729e+269"
-    converts 1.729e+265 to "1.729e+265"
    converts 1.729e+265 to "1.729e+265"
-    converts 1.729e-247 to "1.729e-247"
    converts 1.729e-247 to "1.729e-247"
-    converts 1.729e+158 to "1.729e+158"
    converts 1.729e+158 to "1.729e+158"
-    converts 1.729e-178 to "1.729e-178"
    converts 1.729e-178 to "1.729e-178"
-    converts 1.729e+46 to "1.729e+46"
    converts 1.729e+46 to "1.729e+46"
-    converts 1.729e+110 to "1.729e+110"
    converts 1.729e+110 to "1.729e+110"
-    converts 1.729e+90 to "1.729e+90"
    converts 1.729e+90 to "1.729e+90"
-    converts 1.729e+19 to "1.729e+19"
    converts 1.729e+19 to "1.729e+19"
-    converts 1.729e-87 to "1.729e-87"
    converts 1.729e-87 to "1.729e-87"
-    converts 1.729e+122 to "1.729e+122"
    converts 1.729e+122 to "1.729e+122"
-    converts 1.729e+20 to "1.729e+20"
    converts 1.729e+20 to "1.729e+20"
-    converts 1.729e+63 to "1.729e+63"
    converts 1.729e+63 to "1.729e+63"
-    converts 1.729e+130 to "1.729e+130"
    converts 1.729e+130 to "1.729e+130"
-    converts 1.729e-94 to "1.729e-94"
    converts 1.729e-94 to "1.729e-94"
-    converts 1.729e-187 to "1.729e-187"
    converts 1.729e-187 to "1.729e-187"
-    converts 1.729e-321 to "1.73e-321"
    converts 1.729e-321 to "1.73e-321"
-    converts 1.729e+13 to "17290000000000.0"
    converts 1.729e+13 to "17290000000000.0"
-    converts 1.729e-101 to "1.729e-101"
    converts 1.729e-101 to "1.729e-101"
-    converts 1.729e+275 to "1.729e+275"
    converts 1.729e+275 to "1.729e+275"
-    converts 1.729e-213 to "1.729e-213"
    converts 1.729e-213 to "1.729e-213"
-    converts 1.729e-260 to "1.729e-260"
    converts 1.729e-260 to "1.729e-260"
-    converts 1.729e+247 to "1.729e+247"
    converts 1.729e+247 to "1.729e+247"
-    converts 1.729e+184 to "1.729e+184"
    converts 1.729e+184 to "1.729e+184"
-    converts 1.729e+103 to "1.729e+103"
    converts 1.729e+103 to "1.729e+103"
-    converts 1.729e+194 to "1.729e+194"
    converts 1.729e+194 to "1.729e+194"
-    converts 1.729e+60 to "1.729e+60"
    converts 1.729e+60 to "1.729e+60"
-    converts 1.729e-111 to "1.729e-111"
    converts 1.729e-111 to "1.729e-111"
-    converts 1.729e+159 to "1.729e+159"
    converts 1.729e+159 to "1.729e+159"
-    converts 1.729e+67 to "1.729e+67"
    converts 1.729e+67 to "1.729e+67"
-    converts 1.729e-147 to "1.729e-147"
    converts 1.729e-147 to "1.729e-147"
-    converts 1.729e-281 to "1.729e-281"
    converts 1.729e-281 to "1.729e-281"
-    converts 1.729e-233 to "1.729e-233"
    converts 1.729e-233 to "1.729e-233"
-    converts 1.729e-305 to "1.729e-305"
    converts 1.729e-305 to "1.729e-305"
-    converts 1.729e-64 to "1.729e-64"
    converts 1.729e-64 to "1.729e-64"
-    converts 1.729e-28 to "1.729e-28"
    converts 1.729e-28 to "1.729e-28"
-    converts 1.729e-302 to "1.729e-302"
    converts 1.729e-302 to "1.729e-302"
-    converts 1.729e+66 to "1.729e+66"
    converts 1.729e+66 to "1.729e+66"
-    converts 1.729e-44 to "1.729e-44"
    converts 1.729e-44 to "1.729e-44"
-    converts 1.729e+244 to "1.729e+244"
    converts 1.729e+244 to "1.729e+244"
-    converts 1.729e+273 to "1.729e+273"
    converts 1.729e+273 to "1.729e+273"
-    converts 1.729e-89 to "1.729e-89"
    converts 1.729e-89 to "1.729e-89"
-    converts 1.729e-173 to "1.729e-173"
    converts 1.729e-173 to "1.729e-173"
-    converts 1.729e+8 to "172900000.0"
    converts 1.729e+8 to "172900000.0"
-    converts 1.729e+277 to "1.729e+277"
    converts 1.729e+277 to "1.729e+277"
-    converts 1.729e+274 to "1.729e+274"
    converts 1.729e+274 to "1.729e+274"
-    converts 1.729e+272 to "1.729e+272"
    converts 1.729e+272 to "1.729e+272"
-    converts 1.729e-24 to "1.729e-24"
    converts 1.729e-24 to "1.729e-24"
-    converts 1.729e-244 to "1.729e-244"
    converts 1.729e-244 to "1.729e-244"
-    converts 1.729e-300 to "1.729e-300"
    converts 1.729e-300 to "1.729e-300"
-    converts 1.729e-301 to "1.729e-301"
    converts 1.729e-301 to "1.729e-301"
-    converts 1.729e+252 to "1.729e+252"
    converts 1.729e+252 to "1.729e+252"
-    converts 1.729e+290 to "1.729e+290"
    converts 1.729e+290 to "1.729e+290"
-    converts 1.729e-215 to "1.729e-215"
    converts 1.729e-215 to "1.729e-215"
-    converts 1.729e+235 to "1.729e+235"
    converts 1.729e+235 to "1.729e+235"
-    converts 1.729e+189 to "1.729e+189"
    converts 1.729e+189 to "1.729e+189"
-    converts 1.729e+271 to "1.729e+271"
    converts 1.729e+271 to "1.729e+271"
-    converts 1.729e-227 to "1.729e-227"
    converts 1.729e-227 to "1.729e-227"
-    converts 1.729e+223 to "1.729e+223"
    converts 1.729e+223 to "1.729e+223"
-    converts 1.729e-191 to "1.729e-191"
    converts 1.729e-191 to "1.729e-191"
-    converts 1.729e-318 to "1.729e-318"
    converts 1.729e-318 to "1.729e-318"
-    converts 1.729e-63 to "1.729e-63"
    converts 1.729e-63 to "1.729e-63"
-    converts 1.729e-122 to "1.729e-122"
    converts 1.729e-122 to "1.729e-122"
-    converts 1.729e-163 to "1.729e-163"
    converts 1.729e-163 to "1.729e-163"
-    converts 1.729e+185 to "1.729e+185"
    converts 1.729e+185 to "1.729e+185"
-    converts 1.729e+170 to "1.729e+170"
    converts 1.729e+170 to "1.729e+170"
-    converts 1.729e+256 to "1.729e+256"
    converts 1.729e+256 to "1.729e+256"
-    converts 1.729e+45 to "1.729e+45"
    converts 1.729e+45 to "1.729e+45"
-    converts 1.729e-199 to "1.729e-199"
    converts 1.729e-199 to "1.729e-199"
-    converts 1.729e+98 to "1.729e+98"
    converts 1.729e+98 to "1.729e+98"
-    converts 1.729e-236 to "1.729e-236"
    converts 1.729e-236 to "1.729e-236"
-    converts 1.729e+4 to "17290.0"
    converts 1.729e+4 to "17290.0"
-    converts 1.729e+76 to "1.729e+76"
    converts 1.729e+76 to "1.729e+76"
-    converts 1.729e+186 to "1.729e+186"
    converts 1.729e+186 to "1.729e+186"
-    converts 1.729e+261 to "1.729e+261"
    converts 1.729e+261 to "1.729e+261"
-    converts 1.729e-189 to "1.729e-189"
    converts 1.729e-189 to "1.729e-189"
-    converts 1.729e+40 to "1.729e+40"
    converts 1.729e+40 to "1.729e+40"
-    converts 1.729e-182 to "1.729e-182"
    converts 1.729e-182 to "1.729e-182"
-    converts 1.729e+147 to "1.729e+147"
    converts 1.729e+147 to "1.729e+147"
-    converts 1.729e+105 to "1.729e+105"
    converts 1.729e+105 to "1.729e+105"
-    converts 1.729e+175 to "1.729e+175"
    converts 1.729e+175 to "1.729e+175"
-    converts 1.729e+50 to "1.729e+50"
    converts 1.729e+50 to "1.729e+50"
-    converts 1.729e+10 to "17290000000.0"
    converts 1.729e+10 to "17290000000.0"
-    converts 1.729e-207 to "1.729e-207"
    converts 1.729e-207 to "1.729e-207"
-    converts 1.729e+65 to "1.729e+65"
    converts 1.729e+65 to "1.729e+65"
-    converts 1.729e-299 to "1.729e-299"
    converts 1.729e-299 to "1.729e-299"
-    converts 1.729e-263 to "1.729e-263"
    converts 1.729e-263 to "1.729e-263"
-    converts 1.729e-268 to "1.729e-268"
    converts 1.729e-268 to "1.729e-268"
-    converts 1.729e+225 to "1.729e+225"
    converts 1.729e+225 to "1.729e+225"
-    converts 1.729e+249 to "1.729e+249"
    converts 1.729e+249 to "1.729e+249"
-    converts 1.729e-71 to "1.729e-71"
    converts 1.729e-71 to "1.729e-71"
-    converts 1.729e-204 to "1.729e-204"
    converts 1.729e-204 to "1.729e-204"
-    converts 1.729e-17 to "1.729e-17"
    converts 1.729e-17 to "1.729e-17"
-    converts 1.729e+298 to "1.729e+298"
    converts 1.729e+298 to "1.729e+298"
-    converts 1.729e+127 to "1.729e+127"
    converts 1.729e+127 to "1.729e+127"
-    converts 1.729e+199 to "1.729e+199"
    converts 1.729e+199 to "1.729e+199"
-    converts 1.729e+123 to "1.729e+123"
    converts 1.729e+123 to "1.729e+123"
-    converts 1.729e+162 to "1.729e+162"
    converts 1.729e+162 to "1.729e+162"
-    converts 1.729e+33 to "1.729e+33"
    converts 1.729e+33 to "1.729e+33"
-    converts 1.729e+43 to "1.729e+43"
    converts 1.729e+43 to "1.729e+43"
-    converts 1.729e+49 to "1.729e+49"
    converts 1.729e+49 to "1.729e+49"
-    converts 1.729e+69 to "1.729e+69"
    converts 1.729e+69 to "1.729e+69"
-    converts 1.729e-294 to "1.729e-294"
    converts 1.729e-294 to "1.729e-294"
-    converts 1.729e+228 to "1.729e+228"
    converts 1.729e+228 to "1.729e+228"
-    converts 1.729e-41 to "1.729e-41"
    converts 1.729e-41 to "1.729e-41"
-    converts 1.729e-35 to "1.729e-35"
    converts 1.729e-35 to "1.729e-35"
-    converts 1.729e+209 to "1.729e+209"
    converts 1.729e+209 to "1.729e+209"
-    converts 1.729e-137 to "1.729e-137"
    converts 1.729e-137 to "1.729e-137"
-    converts 1.729e+111 to "1.729e+111"
    converts 1.729e+111 to "1.729e+111"
-    converts 1.729e-145 to "1.729e-145"
    converts 1.729e-145 to "1.729e-145"
-    converts 1.729e+300 to "1.729e+300"
    converts 1.729e+300 to "1.729e+300"
-    converts 1.729e+157 to "1.729e+157"
    converts 1.729e+157 to "1.729e+157"
-    converts 1.729e+72 to "1.729e+72"
    converts 1.729e+72 to "1.729e+72"
-    converts 1.729e-103 to "1.729e-103"
    converts 1.729e-103 to "1.729e-103"
-    converts 1.729e-33 to "1.729e-33"
    converts 1.729e-33 to "1.729e-33"
-    converts 1.729e+9 to "1729000000.0"
    converts 1.729e+9 to "1729000000.0"
-    converts 1.729e+106 to "1.729e+106"
    converts 1.729e+106 to "1.729e+106"
-    converts 1.729e+238 to "1.729e+238"
    converts 1.729e+238 to "1.729e+238"
-    converts 1.729e+87 to "1.729e+87"
    converts 1.729e+87 to "1.729e+87"
-    converts 1.729e+31 to "1.729e+31"
    converts 1.729e+31 to "1.729e+31"
-    converts 1.729e+34 to "1.729e+34"
    converts 1.729e+34 to "1.729e+34"
-    converts 1.729e-250 to "1.729e-250"
    converts 1.729e-250 to "1.729e-250"
-    converts 1.729e+233 to "1.729e+233"
    converts 1.729e+233 to "1.729e+233"
-    converts 1.729e+113 to "1.729e+113"
    converts 1.729e+113 to "1.729e+113"
-    converts 1.729e+5 to "172900.0"
    converts 1.729e+5 to "172900.0"
-    converts 1.729e+81 to "1.729e+81"
    converts 1.729e+81 to "1.729e+81"
-    converts 1.729e-60 to "1.729e-60"
    converts 1.729e-60 to "1.729e-60"
-    converts 1.729e-219 to "1.729e-219"
    converts 1.729e-219 to "1.729e-219"
-    converts 1.729e-138 to "1.729e-138"
    converts 1.729e-138 to "1.729e-138"
-    converts 1.729e-277 to "1.729e-277"
    converts 1.729e-277 to "1.729e-277"
-    converts 1.729e+38 to "1.729e+38"
    converts 1.729e+38 to "1.729e+38"
-    converts 1.729e+207 to "1.729e+207"
    converts 1.729e+207 to "1.729e+207"
-    converts 1.729e-193 to "1.729e-193"
    converts 1.729e-193 to "1.729e-193"
-    converts 1.729e+132 to "1.729e+132"
    converts 1.729e+132 to "1.729e+132"
-    converts 1.729e-211 to "1.729e-211"
    converts 1.729e-211 to "1.729e-211"
-    converts 1.729e-97 to "1.729e-97"
    converts 1.729e-97 to "1.729e-97"
-    converts 1.729e-85 to "1.729e-85"
    converts 1.729e-85 to "1.729e-85"
-    converts 1.729e+187 to "1.729e+187"
    converts 1.729e+187 to "1.729e+187"
-    converts 1.729e-264 to "1.729e-264"
    converts 1.729e-264 to "1.729e-264"
-    converts 1.729e+84 to "1.729e+84"
    converts 1.729e+84 to "1.729e+84"
-    converts 1.729e+227 to "1.729e+227"
    converts 1.729e+227 to "1.729e+227"
-    converts 1.729e-32 to "1.729e-32"
    converts 1.729e-32 to "1.729e-32"
-    converts 1.729e-100 to "1.729e-100"
    converts 1.729e-100 to "1.729e-100"
-    converts 1.729e+176 to "1.729e+176"
    converts 1.729e+176 to "1.729e+176"
-    converts 1.729e+302 to "1.729e+302"
    converts 1.729e+302 to "1.729e+302"
-    converts 1.729e-91 to "1.729e-91"
    converts 1.729e-91 to "1.729e-91"
-    converts 1.729e-15 to "1.729e-15"
    converts 1.729e-15 to "1.729e-15"
-    converts 1.729e-56 to "1.729e-56"
    converts 1.729e-56 to "1.729e-56"
-    converts 1.729e-293 to "1.729e-293"
    converts 1.729e-293 to "1.729e-293"
-    converts 1.729e-303 to "1.729e-303"
    converts 1.729e-303 to "1.729e-303"
-    converts 1.729e+270 to "1.729e+270"
    converts 1.729e+270 to "1.729e+270"
-    converts 1.729e+96 to "1.729e+96"
    converts 1.729e+96 to "1.729e+96"
-    converts 1.729e+41 to "1.729e+41"
    converts 1.729e+41 to "1.729e+41"
-    converts 1.729e-126 to "1.729e-126"
    converts 1.729e-126 to "1.729e-126"
-    converts 1.729e-3 to "0.001729"
    converts 1.729e-3 to "0.001729"
-    converts 1.729e-262 to "1.729e-262"
    converts 1.729e-262 to "1.729e-262"
-    converts 1.729e+55 to "1.729e+55"
    converts 1.729e+55 to "1.729e+55"
-    converts 1.729e-67 to "1.729e-67"
    converts 1.729e-67 to "1.729e-67"
-    converts 1.729e-267 to "1.729e-267"
    converts 1.729e-267 to "1.729e-267"
-    converts 1.729e-158 to "1.729e-158"
    converts 1.729e-158 to "1.729e-158"
-    converts 1.729e-99 to "1.729e-99"
    converts 1.729e-99 to "1.729e-99"
-    converts 1.729e+89 to "1.729e+89"
    converts 1.729e+89 to "1.729e+89"
-    converts 1.729e-308 to "1.729e-308"
    converts 1.729e-308 to "1.729e-308"
-    converts 1.729e-58 to "1.729e-58"
    converts 1.729e-58 to "1.729e-58"
-    converts 1.729e-205 to "1.729e-205"
    converts 1.729e-205 to "1.729e-205"
-    converts 1.729e-177 to "1.729e-177"
    converts 1.729e-177 to "1.729e-177"
-    converts 1.729e+121 to "1.729e+121"
    converts 1.729e+121 to "1.729e+121"
-    converts 1.729e+101 to "1.729e+101"
    converts 1.729e+101 to "1.729e+101"
-    converts 1.729e-162 to "1.729e-162"
    converts 1.729e-162 to "1.729e-162"
-    converts 1.729e-212 to "1.729e-212"
    converts 1.729e-212 to "1.729e-212"
-    converts 1.729e+165 to "1.729e+165"
    converts 1.729e+165 to "1.729e+165"
-    converts 1.729e+301 to "1.729e+301"
    converts 1.729e+301 to "1.729e+301"
-    converts 1.729e+259 to "1.729e+259"
    converts 1.729e+259 to "1.729e+259"
-    converts 1.729e+23 to "1.729e+23"
    converts 1.729e+23 to "1.729e+23"
-    converts 1.729e-288 to "1.729e-288"
    converts 1.729e-288 to "1.729e-288"
-    converts 1.729e-84 to "1.729e-84"
    converts 1.729e-84 to "1.729e-84"
-    converts 1.729e-181 to "1.729e-181"
    converts 1.729e-181 to "1.729e-181"
-    converts 1.729e+172 to "1.729e+172"
    converts 1.729e+172 to "1.729e+172"
-    converts 1.729e+114 to "1.729e+114"
    converts 1.729e+114 to "1.729e+114"
-    converts 1.729e-201 to "1.729e-201"
    converts 1.729e-201 to "1.729e-201"
-    converts 1.729e+232 to "1.729e+232"
    converts 1.729e+232 to "1.729e+232"
-    converts 1.729e-297 to "1.729e-297"
    converts 1.729e-297 to "1.729e-297"
-    converts 1.729e-1 to "0.1729"
    converts 1.729e-1 to "0.1729"
-    converts 1.729e-180 to "1.729e-180"
    converts 1.729e-180 to "1.729e-180"
-    converts 1.729e+237 to "1.729e+237"
    converts 1.729e+237 to "1.729e+237"
-    converts 1.729e+48 to "1.729e+48"
    converts 1.729e+48 to "1.729e+48"
-    converts 1.729e-179 to "1.729e-179"
    converts 1.729e-179 to "1.729e-179"
-    converts 1.729e-72 to "1.729e-72"
    converts 1.729e-72 to "1.729e-72"
-    converts 1.729e+217 to "1.729e+217"
    converts 1.729e+217 to "1.729e+217"
-    converts 1.729e+263 to "1.729e+263"
    converts 1.729e+263 to "1.729e+263"
-    converts 1.729e-197 to "1.729e-197"
    converts 1.729e-197 to "1.729e-197"
-    converts 1.729e+42 to "1.729e+42"
    converts 1.729e+42 to "1.729e+42"
-    converts 1.729e+200 to "1.729e+200"
    converts 1.729e+200 to "1.729e+200"
-    converts 1.729e+6 to "1729000.0"
    converts 1.729e+6 to "1729000.0"
-    converts 1.729e+80 to "1.729e+80"
    converts 1.729e+80 to "1.729e+80"
-    converts 1.729e+62 to "1.729e+62"
    converts 1.729e+62 to "1.729e+62"
-    converts 1.729e+288 to "1.729e+288"
    converts 1.729e+288 to "1.729e+288"
-    converts 1.729e+47 to "1.729e+47"
    converts 1.729e+47 to "1.729e+47"
-    converts 1.729e-81 to "1.729e-81"
    converts 1.729e-81 to "1.729e-81"
-    converts 1.729e-70 to "1.729e-70"
    converts 1.729e-70 to "1.729e-70"
-    converts 1.729e+141 to "1.729e+141"
    converts 1.729e+141 to "1.729e+141"
-    converts 1.729e-190 to "1.729e-190"
    converts 1.729e-190 to "1.729e-190"
-    converts 1.729e+266 to "1.729e+266"
    converts 1.729e+266 to "1.729e+266"
-    converts 1.729e-317 to "1.729e-317"
    converts 1.729e-317 to "1.729e-317"
-    converts 1.729e-220 to "1.729e-220"
    converts 1.729e-220 to "1.729e-220"
-    converts 1.729e-314 to "1.729e-314"
    converts 1.729e-314 to "1.729e-314"
-    converts 1.729e-156 to "1.729e-156"
    converts 1.729e-156 to "1.729e-156"
-    converts 1.729e+1 to "17.29"
    converts 1.729e+1 to "17.29"
-    converts 1.729e-195 to "1.729e-195"
    converts 1.729e-195 to "1.729e-195"
-    converts 1.729e+11 to "172900000000.0"
    converts 1.729e+11 to "172900000000.0"
-    converts 1.729e-306 to "1.729e-306"
    converts 1.729e-306 to "1.729e-306"
-    converts 1.729e-164 to "1.729e-164"
    converts 1.729e-164 to "1.729e-164"
-    converts 1.729e-319 to "1.729e-319"
    converts 1.729e-319 to "1.729e-319"
-    converts 1.729e+125 to "1.729e+125"
    converts 1.729e+125 to "1.729e+125"
-    converts 1.729e+140 to "1.729e+140"
    converts 1.729e+140 to "1.729e+140"
-    converts 1.729e+154 to "1.729e+154"
    converts 1.729e+154 to "1.729e+154"
-    converts 1.729e-52 to "1.729e-52"
    converts 1.729e-52 to "1.729e-52"
-    converts 1.729e-57 to "1.729e-57"
    converts 1.729e-57 to "1.729e-57"
-    converts 1.729e-270 to "1.729e-270"
    converts 1.729e-270 to "1.729e-270"
-    converts 1.729e-275 to "1.729e-275"
    converts 1.729e-275 to "1.729e-275"
-    converts 1.729e+102 to "1.729e+102"
    converts 1.729e+102 to "1.729e+102"
-    converts 1.729e+258 to "1.729e+258"
    converts 1.729e+258 to "1.729e+258"
-    converts 1.729e-124 to "1.729e-124"
    converts 1.729e-124 to "1.729e-124"
-    converts 1.729e+153 to "1.729e+153"
    converts 1.729e+153 to "1.729e+153"
-    converts 1.729e+92 to "1.729e+92"
    converts 1.729e+92 to "1.729e+92"
-    converts 1.729e-223 to "1.729e-223"
    converts 1.729e-223 to "1.729e-223"
-    converts 1.729e-170 to "1.729e-170"
    converts 1.729e-170 to "1.729e-170"
-    converts 1.729e+52 to "1.729e+52"
    converts 1.729e+52 to "1.729e+52"
-    converts 1.729e-21 to "1.729e-21"
    converts 1.729e-21 to "1.729e-21"
-    converts 1.729e-185 to "1.729e-185"
    converts 1.729e-185 to "1.729e-185"
-    converts 1.729e+205 to "1.729e+205"
    converts 1.729e+205 to "1.729e+205"
-    converts 1.729e-256 to "1.729e-256"
    converts 1.729e-256 to "1.729e-256"
-    converts 1.729e+36 to "1.729e+36"
    converts 1.729e+36 to "1.729e+36"
-    converts 1.729e+219 to "1.729e+219"
    converts 1.729e+219 to "1.729e+219"
-    converts 1.729e-274 to "1.729e-274"
    converts 1.729e-274 to "1.729e-274"
-    converts 1.729e-74 to "1.729e-74"
    converts 1.729e-74 to "1.729e-74"
-    converts 1.729e+254 to "1.729e+254"
    converts 1.729e+254 to "1.729e+254"
-    converts 1.729e+75 to "1.729e+75"
    converts 1.729e+75 to "1.729e+75"
-    converts 1.729e-271 to "1.729e-271"
    converts 1.729e-271 to "1.729e-271"
-    converts 1.729e+181 to "1.729e+181"
    converts 1.729e+181 to "1.729e+181"
-    converts 1.729e+177 to "1.729e+177"
    converts 1.729e+177 to "1.729e+177"
-    converts 1.729e-51 to "1.729e-51"
    converts 1.729e-51 to "1.729e-51"
-    converts 1.729e+27 to "1.729e+27"
    converts 1.729e+27 to "1.729e+27"
-    converts 1.729e+169 to "1.729e+169"
    converts 1.729e+169 to "1.729e+169"
-    converts 1.729e-174 to "1.729e-174"
    converts 1.729e-174 to "1.729e-174"
-    converts 1.729e+25 to "1.729e+25"
    converts 1.729e+25 to "1.729e+25"
-    converts 1.729e-171 to "1.729e-171"
    converts 1.729e-171 to "1.729e-171"
-    converts 1.729e+305 to "1.729e+305"
    converts 1.729e+305 to "1.729e+305"
-    converts 1.729e-230 to "1.729e-230"
    converts 1.729e-230 to "1.729e-230"
-    converts 1.729e+306 to "1.729e+306"
    converts 1.729e+306 to "1.729e+306"
-    converts 1.729e+308 to "1.729e+308"
    converts 1.729e+308 to "1.729e+308"
-    converts 1.729e-19 to "1.729e-19"
    converts 1.729e-19 to "1.729e-19"
-    converts 1.729e+163 to "1.729e+163"
    converts 1.729e+163 to "1.729e+163"
-    converts 1.729e+202 to "1.729e+202"
    converts 1.729e+202 to "1.729e+202"
-    converts 1.729e-141 to "1.729e-141"
    converts 1.729e-141 to "1.729e-141"
-    converts 1.729e+257 to "1.729e+257"
    converts 1.729e+257 to "1.729e+257"
-    converts 1.729e-34 to "1.729e-34"
    converts 1.729e-34 to "1.729e-34"
-    converts 1.729e-40 to "1.729e-40"
    converts 1.729e-40 to "1.729e-40"
-    converts 1.729e+245 to "1.729e+245"
    converts 1.729e+245 to "1.729e+245"
-    converts 1.729e-218 to "1.729e-218"
    converts 1.729e-218 to "1.729e-218"
-    converts 1.729e+188 to "1.729e+188"
    converts 1.729e+188 to "1.729e+188"
-    converts 1.729e-258 to "1.729e-258"
    converts 1.729e-258 to "1.729e-258"
-    converts 1.729e-112 to "1.729e-112"
    converts 1.729e-112 to "1.729e-112"
-    converts 1.729e+100 to "1.729e+100"
    converts 1.729e+100 to "1.729e+100"
-    converts 1.729e-206 to "1.729e-206"
    converts 1.729e-206 to "1.729e-206"
-    converts 1.729e-217 to "1.729e-217"
    converts 1.729e-217 to "1.729e-217"
-    converts 1.729e+131 to "1.729e+131"
    converts 1.729e+131 to "1.729e+131"
-    converts 1.729e+297 to "1.729e+297"
    converts 1.729e+297 to "1.729e+297"
-    converts 1.729e+28 to "1.729e+28"
    converts 1.729e+28 to "1.729e+28"
-    converts 1.729e-165 to "1.729e-165"
    converts 1.729e-165 to "1.729e-165"
-    converts 1.729e-292 to "1.729e-292"
    converts 1.729e-292 to "1.729e-292"
-    converts 1.729e-298 to "1.729e-298"
    converts 1.729e-298 to "1.729e-298"
-    converts 1.729e-114 to "1.729e-114"
    converts 1.729e-114 to "1.729e-114"
-    converts 1.729e-116 to "1.729e-116"
    converts 1.729e-116 to "1.729e-116"
-    converts 1.729e-61 to "1.729e-61"
    converts 1.729e-61 to "1.729e-61"
-    converts 1.729e+224 to "1.729e+224"
    converts 1.729e+224 to "1.729e+224"
-    converts 1.729e+29 to "1.729e+29"
    converts 1.729e+29 to "1.729e+29"
-    converts 1.729e-241 to "1.729e-241"
    converts 1.729e-241 to "1.729e-241"
-    converts 1.729e-296 to "1.729e-296"
    converts 1.729e-296 to "1.729e-296"
-    converts 1.729e-9 to "1.729e-9"
    converts 1.729e-9 to "1.729e-9"
-    converts 1.729e+211 to "1.729e+211"
    converts 1.729e+211 to "1.729e+211"
-    converts 1.729e-117 to "1.729e-117"
    converts 1.729e-117 to "1.729e-117"
-    converts 1.729e-76 to "1.729e-76"
    converts 1.729e-76 to "1.729e-76"
-    converts 1.729e+293 to "1.729e+293"
    converts 1.729e+293 to "1.729e+293"
-    converts 1.729e-136 to "1.729e-136"
    converts 1.729e-136 to "1.729e-136"
-    converts 1.729e+174 to "1.729e+174"
    converts 1.729e+174 to "1.729e+174"
-    converts 1.729e+51 to "1.729e+51"
    converts 1.729e+51 to "1.729e+51"
-    converts 1.729e+79 to "1.729e+79"
    converts 1.729e+79 to "1.729e+79"
-    converts 1.729e-192 to "1.729e-192"
    converts 1.729e-192 to "1.729e-192"
-    converts 1.729e+32 to "1.729e+32"
    converts 1.729e+32 to "1.729e+32"
-    converts 1.729e-11 to "1.729e-11"
    converts 1.729e-11 to "1.729e-11"
-    converts 1.729e+118 to "1.729e+118"
    converts 1.729e+118 to "1.729e+118"
-    converts 1.729e+77 to "1.729e+77"
    converts 1.729e+77 to "1.729e+77"
-    converts 1.729e+192 to "1.729e+192"
    converts 1.729e+192 to "1.729e+192"
-    converts 1.729e+215 to "1.729e+215"
    converts 1.729e+215 to "1.729e+215"
-    converts 1.729e+17 to "1.729e+17"
    converts 1.729e+17 to "1.729e+17"
-    converts 1.729e+73 to "1.729e+73"
    converts 1.729e+73 to "1.729e+73"
-    converts 1.729e-234 to "1.729e-234"
    converts 1.729e-234 to "1.729e-234"
-    converts 1.729e-269 to "1.729e-269"
    converts 1.729e-269 to "1.729e-269"
-    converts 1.729e-265 to "1.729e-265"
    converts 1.729e-265 to "1.729e-265"
-    converts 1.729e+168 to "1.729e+168"
    converts 1.729e+168 to "1.729e+168"
-    converts 1.729e-37 to "1.729e-37"
    converts 1.729e-37 to "1.729e-37"
-    converts 1.729e+68 to "1.729e+68"
    converts 1.729e+68 to "1.729e+68"
-    converts 1.729e+116 to "1.729e+116"
    converts 1.729e+116 to "1.729e+116"
-    converts 1.729e-243 to "1.729e-243"
    converts 1.729e-243 to "1.729e-243"
-    converts 1.729e-224 to "1.729e-224"
    converts 1.729e-224 to "1.729e-224"
-    converts 1.729e+148 to "1.729e+148"
    converts 1.729e+148 to "1.729e+148"
-    converts 1.729e+204 to "1.729e+204"
    converts 1.729e+204 to "1.729e+204"
-    converts 1.729e+74 to "1.729e+74"
    converts 1.729e+74 to "1.729e+74"
-    converts 1.729e+253 to "1.729e+253"
    converts 1.729e+253 to "1.729e+253"
-    converts 1.729e-53 to "1.729e-53"
    converts 1.729e-53 to "1.729e-53"
-    converts 1.729e+280 to "1.729e+280"
    converts 1.729e+280 to "1.729e+280"
-    converts 1.729e-39 to "1.729e-39"
    converts 1.729e-39 to "1.729e-39"
-    converts 1.729e-55 to "1.729e-55"
    converts 1.729e-55 to "1.729e-55"
-    converts 1.729e-169 to "1.729e-169"
    converts 1.729e-169 to "1.729e-169"
-    converts 1.729e+78 to "1.729e+78"
    converts 1.729e+78 to "1.729e+78"
-    converts 1.729e-108 to "1.729e-108"
    converts 1.729e-108 to "1.729e-108"
-    converts 1.729e-209 to "1.729e-209"
    converts 1.729e-209 to "1.729e-209"
-    converts 1.729e-107 to "1.729e-107"
    converts 1.729e-107 to "1.729e-107"
-    converts 1.729e-235 to "1.729e-235"
    converts 1.729e-235 to "1.729e-235"
-    converts 1.729e-315 to "1.729e-315"
    converts 1.729e-315 to "1.729e-315"
-    converts 1.729e+44 to "1.729e+44"
    converts 1.729e+44 to "1.729e+44"
-    converts 1.729e-45 to "1.729e-45"
    converts 1.729e-45 to "1.729e-45"
-    converts 1.729e+201 to "1.729e+201"
    converts 1.729e+201 to "1.729e+201"
-    converts 1.729e+137 to "1.729e+137"
    converts 1.729e+137 to "1.729e+137"
-    converts 1.729e+171 to "1.729e+171"
    converts 1.729e+171 to "1.729e+171"
-    converts 1.729e-133 to "1.729e-133"
    converts 1.729e-133 to "1.729e-133"
-    converts 1.729e+126 to "1.729e+126"
    converts 1.729e+126 to "1.729e+126"
-    converts 1.729e-253 to "1.729e-253"
    converts 1.729e-253 to "1.729e-253"
-    converts 1.729e+231 to "1.729e+231"
    converts 1.729e+231 to "1.729e+231"
-    converts 1.729e+292 to "1.729e+292"
    converts 1.729e+292 to "1.729e+292"
-    converts 1.729e+255 to "1.729e+255"
    converts 1.729e+255 to "1.729e+255"
-    converts 1.729e-65 to "1.729e-65"
    converts 1.729e-65 to "1.729e-65"
-    converts 1.729e+167 to "1.729e+167"
    converts 1.729e+167 to "1.729e+167"
-    converts 1.729e-239 to "1.729e-239"
    converts 1.729e-239 to "1.729e-239"
-    converts 1.729e-221 to "1.729e-221"
    converts 1.729e-221 to "1.729e-221"
-    converts 1.729e+86 to "1.729e+86"
    converts 1.729e+86 to "1.729e+86"
-    converts 1.729e-291 to "1.729e-291"
    converts 1.729e-291 to "1.729e-291"
-    converts 1.729e-102 to "1.729e-102"
    converts 1.729e-102 to "1.729e-102"
-    converts 1.729e-196 to "1.729e-196"
    converts 1.729e-196 to "1.729e-196"
-    converts 1.729e+218 to "1.729e+218"
    converts 1.729e+218 to "1.729e+218"
-    converts 1.729e+210 to "1.729e+210"
    converts 1.729e+210 to "1.729e+210"
-    converts 1.729e-13 to "1.729e-13"
    converts 1.729e-13 to "1.729e-13"
-    converts 1.729e+299 to "1.729e+299"
    converts 1.729e+299 to "1.729e+299"
-    converts 1.729e-286 to "1.729e-286"
    converts 1.729e-286 to "1.729e-286"
-    converts 1.729e-259 to "1.729e-259"
    converts 1.729e-259 to "1.729e-259"
-    converts 1.729e-143 to "1.729e-143"
    converts 1.729e-143 to "1.729e-143"
-    converts 1.729e-285 to "1.729e-285"
    converts 1.729e-285 to "1.729e-285"
-    converts 1.729e-22 to "1.729e-22"
    converts 1.729e-22 to "1.729e-22"
-    converts 1.729e+24 to "1.729e+24"
    converts 1.729e+24 to "1.729e+24"
-    converts 1.729e+119 to "1.729e+119"
    converts 1.729e+119 to "1.729e+119"
-    converts 1.729e+203 to "1.729e+203"
    converts 1.729e+203 to "1.729e+203"
-    converts 1.729e-90 to "1.729e-90"
    converts 1.729e-90 to "1.729e-90"
-    converts 1.729e+279 to "1.729e+279"
    converts 1.729e+279 to "1.729e+279"
-    converts 1.729e-261 to "1.729e-261"
    converts 1.729e-261 to "1.729e-261"
-    converts 1.729e-113 to "1.729e-113"
    converts 1.729e-113 to "1.729e-113"
-    converts 1.729e-284 to "1.729e-284"
    converts 1.729e-284 to "1.729e-284"
-    converts 1.729e+283 to "1.729e+283"
    converts 1.729e+283 to "1.729e+283"
-    converts 1.729e+104 to "1.729e+104"
    converts 1.729e+104 to "1.729e+104"
-    converts 1.729e-47 to "1.729e-47"
    converts 1.729e-47 to "1.729e-47"
-    converts 1.729e+287 to "1.729e+287"
    converts 1.729e+287 to "1.729e+287"
-    converts 1.729e-255 to "1.729e-255"
    converts 1.729e-255 to "1.729e-255"
-    converts 1.729e-38 to "1.729e-38"
    converts 1.729e-38 to "1.729e-38"
-    converts 1.729e+242 to "1.729e+242"
    converts 1.729e+242 to "1.729e+242"
-    converts 1.729e-131 to "1.729e-131"
    converts 1.729e-131 to "1.729e-131"
-    converts 1.729e-309 to "1.729e-309"
    converts 1.729e-309 to "1.729e-309"
-    converts 1.729e-148 to "1.729e-148"
    converts 1.729e-148 to "1.729e-148"
-    converts 1.729e-78 to "1.729e-78"
    converts 1.729e-78 to "1.729e-78"
-    converts 1.729e-168 to "1.729e-168"
    converts 1.729e-168 to "1.729e-168"
-    converts 1.729e+30 to "1.729e+30"
    converts 1.729e+30 to "1.729e+30"
-    converts 1.729e+15 to "1.729e+15"
    converts 1.729e+15 to "1.729e+15"
-    converts 1.729e+291 to "1.729e+291"
    converts 1.729e+291 to "1.729e+291"
-    converts 1.729e-8 to "1.729e-8"
    converts 1.729e-8 to "1.729e-8"
-    converts 1.729e+222 to "1.729e+222"
    converts 1.729e+222 to "1.729e+222"
-    converts 1.729e-310 to "1.729e-310"
    converts 1.729e-310 to "1.729e-310"
-    converts 1.729e-66 to "1.729e-66"
    converts 1.729e-66 to "1.729e-66"
-    converts 1.729e+2 to "172.9"
    converts 1.729e+2 to "172.9"
-    converts 1.729e-93 to "1.729e-93"
    converts 1.729e-93 to "1.729e-93"
-    converts 1.729e+179 to "1.729e+179"
    converts 1.729e+179 to "1.729e+179"
-    converts 1.729e-120 to "1.729e-120"
    converts 1.729e-120 to "1.729e-120"
-    converts 1.729e+268 to "1.729e+268"
    converts 1.729e+268 to "1.729e+268"
-    converts 1.729e-82 to "1.729e-82"
    converts 1.729e-82 to "1.729e-82"
-    converts 1.729e+193 to "1.729e+193"
    converts 1.729e+193 to "1.729e+193"
-    converts 1.729e-240 to "1.729e-240"
    converts 1.729e-240 to "1.729e-240"
-    converts 1.729e+281 to "1.729e+281"
    converts 1.729e+281 to "1.729e+281"
-    converts 1.729e-161 to "1.729e-161"
    converts 1.729e-161 to "1.729e-161"
-    converts 1.729e-226 to "1.729e-226"
    converts 1.729e-226 to "1.729e-226"
-    converts 1.729e-115 to "1.729e-115"
    converts 1.729e-115 to "1.729e-115"
-    converts 1.729e+295 to "1.729e+295"
    converts 1.729e+295 to "1.729e+295"
-    converts 1.729e-43 to "1.729e-43"
    converts 1.729e-43 to "1.729e-43"
-    converts 1.729e+117 to "1.729e+117"
    converts 1.729e+117 to "1.729e+117"
-    converts 1.729e+144 to "1.729e+144"
    converts 1.729e+144 to "1.729e+144"
-    converts 1.729e-202 to "1.729e-202"
    converts 1.729e-202 to "1.729e-202"
-    converts 1.729e+95 to "1.729e+95"
    converts 1.729e+95 to "1.729e+95"
-    converts 1.729e-4 to "0.0001729"
    converts 1.729e-4 to "0.0001729"
-    converts 1.729e-304 to "1.729e-304"
    converts 1.729e-304 to "1.729e-304"
-    converts 1.729e+151 to "1.729e+151"
    converts 1.729e+151 to "1.729e+151"
-    converts 1.729e-144 to "1.729e-144"
    converts 1.729e-144 to "1.729e-144"
-    converts 1.729e+180 to "1.729e+180"
    converts 1.729e+180 to "1.729e+180"
-    converts 1.729e+221 to "1.729e+221"
    converts 1.729e+221 to "1.729e+221"
-    converts 1.729e+145 to "1.729e+145"
    converts 1.729e+145 to "1.729e+145"
-    converts 1.729e+61 to "1.729e+61"
    converts 1.729e+61 to "1.729e+61"
-    converts 1.729e-10 to "1.729e-10"
    converts 1.729e-10 to "1.729e-10"
-    converts 1.729e+260 to "1.729e+260"
    converts 1.729e+260 to "1.729e+260"
-    converts 1.729e-237 to "1.729e-237"
    converts 1.729e-237 to "1.729e-237"
-    converts 1.729e+35 to "1.729e+35"
    converts 1.729e+35 to "1.729e+35"
-    converts 1.729e-134 to "1.729e-134"
    converts 1.729e-134 to "1.729e-134"
-    converts 1.729e-216 to "1.729e-216"
    converts 1.729e-216 to "1.729e-216"
-    converts 1.729e-323 to "1.5e-323"
    converts 1.729e-323 to "1.5e-323"
-    converts 1.729e-31 to "1.729e-31"
    converts 1.729e-31 to "1.729e-31"
-    converts 1.729e-248 to "1.729e-248"
    converts 1.729e-248 to "1.729e-248"
-    converts 1.729e-245 to "1.729e-245"
    converts 1.729e-245 to "1.729e-245"
-    converts 1.729e+59 to "1.729e+59"
    converts 1.729e+59 to "1.729e+59"
-    converts 1.729e+85 to "1.729e+85"
    converts 1.729e+85 to "1.729e+85"
-    converts 1.729e-150 to "1.729e-150"
    converts 1.729e-150 to "1.729e-150"
-    converts 1.729e+12 to "1729000000000.0"
    converts 1.729e+12 to "1729000000000.0"
-    converts 1.729e-127 to "1.729e-127"
    converts 1.729e-127 to "1.729e-127"
-    converts 1.729e+107 to "1.729e+107"
    converts 1.729e+107 to "1.729e+107"
-    converts 1.729e-118 to "1.729e-118"
    converts 1.729e-118 to "1.729e-118"
-    converts 1.729e+18 to "1.729e+18"
    converts 1.729e+18 to "1.729e+18"
-    converts 1.729e-203 to "1.729e-203"
    converts 1.729e-203 to "1.729e-203"
-    converts 1.729e-257 to "1.729e-257"
    converts 1.729e-257 to "1.729e-257"
-    converts 1.729e-30 to "1.729e-30"
    converts 1.729e-30 to "1.729e-30"
-    converts 1.729e-186 to "1.729e-186"
    converts 1.729e-186 to "1.729e-186"
-    converts 1.729e+236 to "1.729e+236"
    converts 1.729e+236 to "1.729e+236"
-    converts 1.729e-228 to "1.729e-228"
    converts 1.729e-228 to "1.729e-228"
-    converts 1.729e-29 to "1.729e-29"
    converts 1.729e-29 to "1.729e-29"
-    converts 1.729e-123 to "1.729e-123"
    converts 1.729e-123 to "1.729e-123"
-    converts 1.729e-282 to "1.729e-282"
    converts 1.729e-282 to "1.729e-282"
-    converts 1.729e+3 to "1729.0"
    converts 1.729e+3 to "1729.0"
-    converts 1.729e-88 to "1.729e-88"
    converts 1.729e-88 to "1.729e-88"
-    converts 1.729e+149 to "1.729e+149"
    converts 1.729e+149 to "1.729e+149"
-    converts 1.729e-59 to "1.729e-59"
    converts 1.729e-59 to "1.729e-59"
-    converts 1.729e+161 to "1.729e+161"
    converts 1.729e+161 to "1.729e+161"
-    converts 1.729e+112 to "1.729e+112"
    converts 1.729e+112 to "1.729e+112"
-    converts 1.729e-36 to "1.729e-36"
    converts 1.729e-36 to "1.729e-36"
-    converts 7.29e-324 to "5.0e-324"
    converts 7.29e-324 to "5.0e-324"
-    converts 1.729e-210 to "1.729e-210"
    converts 1.729e-210 to "1.729e-210"
-    converts 1.729e-42 to "1.729e-42"
    converts 1.729e-42 to "1.729e-42"
-    converts 1.729e-184 to "1.729e-184"
    converts 1.729e-184 to "1.729e-184"
-    converts 1.729e-280 to "1.729e-280"
    converts 1.729e-280 to "1.729e-280"
-    converts 1.729e-238 to "1.729e-238"
    converts 1.729e-238 to "1.729e-238"
-    converts 1.729e+143 to "1.729e+143"
    converts 1.729e+143 to "1.729e+143"
-    converts 1.729e-154 to "1.729e-154"
    converts 1.729e-154 to "1.729e-154"
-    converts 1.729e-254 to "1.729e-254"
    converts 1.729e-254 to "1.729e-254"
-    converts 1.729e-27 to "1.729e-27"
    converts 1.729e-27 to "1.729e-27"
-    converts 1.729e-80 to "1.729e-80"
    converts 1.729e-80 to "1.729e-80"
-    converts 1.729e+142 to "1.729e+142"
    converts 1.729e+142 to "1.729e+142"
-    converts 1.729e+214 to "1.729e+214"
    converts 1.729e+214 to "1.729e+214"
-    converts 1.729e+39 to "1.729e+39"
    converts 1.729e+39 to "1.729e+39"
-    converts 1.729e+37 to "1.729e+37"
    converts 1.729e+37 to "1.729e+37"
-    converts 1.729e+243 to "1.729e+243"
    converts 1.729e+243 to "1.729e+243"
-    converts 1.729e+120 to "1.729e+120"
    converts 1.729e+120 to "1.729e+120"
-    converts 1.729e-16 to "1.729e-16"
    converts 1.729e-16 to "1.729e-16"
-    converts 1.729e+195 to "1.729e+195"
    converts 1.729e+195 to "1.729e+195"
-    converts 1.729e+230 to "1.729e+230"
    converts 1.729e+230 to "1.729e+230"
-    converts 1.729e+197 to "1.729e+197"
    converts 1.729e+197 to "1.729e+197"
-    converts 1.729e+136 to "1.729e+136"
    converts 1.729e+136 to "1.729e+136"
-    converts 1.729e-175 to "1.729e-175"
    converts 1.729e-175 to "1.729e-175"
-    converts 1.729e+196 to "1.729e+196"
    converts 1.729e+196 to "1.729e+196"
-    converts 1.729e-79 to "1.729e-79"
    converts 1.729e-79 to "1.729e-79"
-    converts 1.729e-276 to "1.729e-276"
    converts 1.729e-276 to "1.729e-276"
-    converts 1.729e-104 to "1.729e-104"
    converts 1.729e-104 to "1.729e-104"
-    converts 1.729e+239 to "1.729e+239"
    converts 1.729e+239 to "1.729e+239"
-    converts 1.729e+173 to "1.729e+173"
    converts 1.729e+173 to "1.729e+173"
-    converts 1.729e-151 to "1.729e-151"
    converts 1.729e-151 to "1.729e-151"
-    converts 1.729e+134 to "1.729e+134"
    converts 1.729e+134 to "1.729e+134"
-    converts 1.729e+57 to "1.729e+57"
    converts 1.729e+57 to "1.729e+57"
-    converts 1.729e-222 to "1.729e-222"
    converts 1.729e-222 to "1.729e-222"
-    converts 1.729e-95 to "1.729e-95"
    converts 1.729e-95 to "1.729e-95"
-    converts 1.729e-20 to "1.729e-20"
    converts 1.729e-20 to "1.729e-20"
-    converts 1.729e-12 to "1.729e-12"
    converts 1.729e-12 to "1.729e-12"
-    converts 1.729e+226 to "1.729e+226"
    converts 1.729e+226 to "1.729e+226"
-    converts 1.729e-295 to "1.729e-295"
    converts 1.729e-295 to "1.729e-295"
-    converts 1.729e+16 to "1.729e+16"
    converts 1.729e+16 to "1.729e+16"
-    converts 1.729e+71 to "1.729e+71"
    converts 1.729e+71 to "1.729e+71"
-    converts 1.729e-50 to "1.729e-50"
    converts 1.729e-50 to "1.729e-50"
-    converts 1.729e-132 to "1.729e-132"
    converts 1.729e-132 to "1.729e-132"
-    converts 1.729e+139 to "1.729e+139"
    converts 1.729e+139 to "1.729e+139"
-    converts 1.729e+83 to "1.729e+83"
    converts 1.729e+83 to "1.729e+83"
-    converts 1.729e+115 to "1.729e+115"
    converts 1.729e+115 to "1.729e+115"
-    converts 1.729e+294 to "1.729e+294"
    converts 1.729e+294 to "1.729e+294"
-    converts 1.729e-86 to "1.729e-86"
    converts 1.729e-86 to "1.729e-86"
-    converts 1.729e+190 to "1.729e+190"
    converts 1.729e+190 to "1.729e+190"
-    converts 1.729e+289 to "1.729e+289"
    converts 1.729e+289 to "1.729e+289"
-    converts 1.729e-316 to "1.729e-316"
    converts 1.729e-316 to "1.729e-316"
-    converts 1.729e+307 to "1.729e+307"
    converts 1.729e+307 to "1.729e+307"
-    converts 1.729e+216 to "1.729e+216"
    converts 1.729e+216 to "1.729e+216"
-    converts 1.729e-77 to "1.729e-77"
    converts 1.729e-77 to "1.729e-77"
-    converts 1.729e+278 to "1.729e+278"
    converts 1.729e+278 to "1.729e+278"
-    converts 1.729e-49 to "1.729e-49"
    converts 1.729e-49 to "1.729e-49"
-    converts 1.729e+164 to "1.729e+164"
    converts 1.729e+164 to "1.729e+164"
-    converts 1.729e-176 to "1.729e-176"
    converts 1.729e-176 to "1.729e-176"
-    converts 1.729e-135 to "1.729e-135"
    converts 1.729e-135 to "1.729e-135"
-    converts 1.729e-231 to "1.729e-231"
    converts 1.729e-231 to "1.729e-231"
-    converts 1.729e+212 to "1.729e+212"
    converts 1.729e+212 to "1.729e+212"
-    converts 1.729e-48 to "1.729e-48"
    converts 1.729e-48 to "1.729e-48"
-    converts 1.729e-68 to "1.729e-68"
    converts 1.729e-68 to "1.729e-68"
-    converts 1.729e+150 to "1.729e+150"
    converts 1.729e+150 to "1.729e+150"
-    converts 1.729e+133 to "1.729e+133"
    converts 1.729e+133 to "1.729e+133"
-    converts 1.729e-105 to "1.729e-105"
    converts 1.729e-105 to "1.729e-105"
-    converts 1.729e-246 to "1.729e-246"
    converts 1.729e-246 to "1.729e-246"
-    converts 1.729e+286 to "1.729e+286"
    converts 1.729e+286 to "1.729e+286"
-    converts 1.729e+213 to "1.729e+213"
    converts 1.729e+213 to "1.729e+213"
-    converts 1.729e+303 to "1.729e+303"
    converts 1.729e+303 to "1.729e+303"
-    converts 1.729e-251 to "1.729e-251"
    converts 1.729e-251 to "1.729e-251"
-    converts 1.729e+58 to "1.729e+58"
    converts 1.729e+58 to "1.729e+58"
-    converts 1.729e+267 to "1.729e+267"
    converts 1.729e+267 to "1.729e+267"
-    converts 1.729e-128 to "1.729e-128"
    converts 1.729e-128 to "1.729e-128"
-    converts 1.729e+250 to "1.729e+250"
    converts 1.729e+250 to "1.729e+250"
-    converts 1.729e+191 to "1.729e+191"
    converts 1.729e+191 to "1.729e+191"
-    converts 1.729e-54 to "1.729e-54"
    converts 1.729e-54 to "1.729e-54"
-    converts 1.729e+56 to "1.729e+56"
    converts 1.729e+56 to "1.729e+56"
-    converts 1.729e+229 to "1.729e+229"
    converts 1.729e+229 to "1.729e+229"
-    converts 1.729e+82 to "1.729e+82"
    converts 1.729e+82 to "1.729e+82"
-    converts 1.729e+284 to "1.729e+284"
    converts 1.729e+284 to "1.729e+284"
-    converts 1.729e-5 to "1.729e-5"
    converts 1.729e-5 to "1.729e-5"
-    converts 1.729e-160 to "1.729e-160"
    converts 1.729e-160 to "1.729e-160"
-    converts 1.729e+138 to "1.729e+138"
    converts 1.729e+138 to "1.729e+138"
-    converts 1.729e-313 to "1.729e-313"
    converts 1.729e-313 to "1.729e-313"
-    converts 1.729e+135 to "1.729e+135"
    converts 1.729e+135 to "1.729e+135"
-    converts 1.729e+276 to "1.729e+276"
    converts 1.729e+276 to "1.729e+276"
-    converts 1.729e-273 to "1.729e-273"
    converts 1.729e-273 to "1.729e-273"
-    converts 1.729e+296 to "1.729e+296"
    converts 1.729e+296 to "1.729e+296"
-    converts 1.729e-152 to "1.729e-152"
    converts 1.729e-152 to "1.729e-152"
-    converts 1.729e-159 to "1.729e-159"
    converts 1.729e-159 to "1.729e-159"
-    converts 1.729e-311 to "1.729e-311"
    converts 1.729e-311 to "1.729e-311"
-    converts 1.729e+166 to "1.729e+166"
    converts 1.729e+166 to "1.729e+166"
-    converts 1.729e-7 to "1.729e-7"
    converts 1.729e-7 to "1.729e-7"
-    converts 1.729e+183 to "1.729e+183"
    converts 1.729e+183 to "1.729e+183"
-    converts 1.729e-214 to "1.729e-214"
    converts 1.729e-214 to "1.729e-214"
-    converts 1.729e-149 to "1.729e-149"
    converts 1.729e-149 to "1.729e-149"
-    converts 1.729e+208 to "1.729e+208"
    converts 1.729e+208 to "1.729e+208"
-    converts 1.729e-194 to "1.729e-194"
    converts 1.729e-194 to "1.729e-194"
-    converts 1.729e+182 to "1.729e+182"
    converts 1.729e+182 to "1.729e+182"
-    converts 1.729e-225 to "1.729e-225"
    converts 1.729e-225 to "1.729e-225"
-    converts 1.729e-106 to "1.729e-106"
    converts 1.729e-106 to "1.729e-106"
-    converts 1.729e-25 to "1.729e-25"
    converts 1.729e-25 to "1.729e-25"
-    converts 1.729e+248 to "1.729e+248"
    converts 1.729e+248 to "1.729e+248"
-    converts 1.729e+198 to "1.729e+198"
    converts 1.729e+198 to "1.729e+198"
-    converts 1.729e+240 to "1.729e+240"
    converts 1.729e+240 to "1.729e+240"
-    converts 1.729e-278 to "1.729e-278"
    converts 1.729e-278 to "1.729e-278"
-    converts 1.729e-272 to "1.729e-272"
    converts 1.729e-272 to "1.729e-272"
-    converts 1.729e+262 to "1.729e+262"
    converts 1.729e+262 to "1.729e+262"
-    converts 1.729e+0 to "1.729"
    converts 1.729e+0 to "1.729"
-    converts 1.729e+220 to "1.729e+220"
    converts 1.729e+220 to "1.729e+220"
-    converts 1.729e-26 to "1.729e-26"
    converts 1.729e-26 to "1.729e-26"
-    converts 1.729e-283 to "1.729e-283"
    converts 1.729e-283 to "1.729e-283"
-    converts 1.729e-232 to "1.729e-232"
    converts 1.729e-232 to "1.729e-232"
-    converts 1.729e+152 to "1.729e+152"
    converts 1.729e+152 to "1.729e+152"
-    converts 1.729e+264 to "1.729e+264"
    converts 1.729e+264 to "1.729e+264"
-    converts 1.729e-83 to "1.729e-83"
    converts 1.729e-83 to "1.729e-83"
-    converts 1.729e+54 to "1.729e+54"
    converts 1.729e+54 to "1.729e+54"
-    converts 1.729e-73 to "1.729e-73"
    converts 1.729e-73 to "1.729e-73"
-    converts 1.729e+304 to "1.729e+304"
    converts 1.729e+304 to "1.729e+304"
-    converts 1.729e-287 to "1.729e-287"
    converts 1.729e-287 to "1.729e-287"
-    converts 1.729e-98 to "1.729e-98"
    converts 1.729e-98 to "1.729e-98"
-    converts 1.729e-249 to "1.729e-249"
    converts 1.729e-249 to "1.729e-249"
-    converts 1.729e-75 to "1.729e-75"
    converts 1.729e-75 to "1.729e-75"
-    converts 1.729e-279 to "1.729e-279"
    converts 1.729e-279 to "1.729e-279"
-    converts 1.729e+129 to "1.729e+129"
    converts 1.729e+129 to "1.729e+129"
-    converts 1.729e-142 to "1.729e-142"
    converts 1.729e-142 to "1.729e-142"
-    converts 1.729e+91 to "1.729e+91"
    converts 1.729e+91 to "1.729e+91"
-    converts 1.729e-198 to "1.729e-198"
    converts 1.729e-198 to "1.729e-198"
-    converts 1.729e+21 to "1.729e+21"
    converts 1.729e+21 to "1.729e+21"
-    converts 1.729e+156 to "1.729e+156"
    converts 1.729e+156 to "1.729e+156"
-    converts 1.729e+22 to "1.729e+22"
    converts 1.729e+22 to "1.729e+22"
-    converts 1.729e-172 to "1.729e-172"
    converts 1.729e-172 to "1.729e-172"
-    converts 1.729e+282 to "1.729e+282"
    converts 1.729e+282 to "1.729e+282"
-    converts 1.729e-109 to "1.729e-109"
    converts 1.729e-109 to "1.729e-109"
-    converts 1.729e-229 to "1.729e-229"
    converts 1.729e-229 to "1.729e-229"
-    converts 1.729e-200 to "1.729e-200"
    converts 1.729e-200 to "1.729e-200"
-    converts 1.729e+7 to "17290000.0"
    converts 1.729e+7 to "17290000.0"
-    converts 1.729e-166 to "1.729e-166"
    converts 1.729e-166 to "1.729e-166"
-    converts 1.729e-139 to "1.729e-139"
    converts 1.729e-139 to "1.729e-139"
-    converts 1.729e-69 to "1.729e-69"
    converts 1.729e-69 to "1.729e-69"
-    converts 1.729e-110 to "1.729e-110"
    converts 1.729e-110 to "1.729e-110"
-    converts 1.729e-14 to "1.729e-14"
    converts 1.729e-14 to "1.729e-14"
-    converts 1.729e-2 to "0.01729"
    converts 1.729e-2 to "0.01729"
-    converts 1.729e-157 to "1.729e-157"
    converts 1.729e-157 to "1.729e-157"
-    converts 1.729e+94 to "1.729e+94"
    converts 1.729e+94 to "1.729e+94"
-    converts 1.729e+206 to "1.729e+206"
    converts 1.729e+206 to "1.729e+206"
-    converts 1.729e+88 to "1.729e+88"
    converts 1.729e+88 to "1.729e+88"
-    converts 1.729e-208 to "1.729e-208"
    converts 1.729e-208 to "1.729e-208"
-    converts 1.729e+155 to "1.729e+155"
    converts 1.729e+155 to "1.729e+155"
-    converts 1.729e-96 to "1.729e-96"
    converts 1.729e-96 to "1.729e-96"
-    converts 1.729e+128 to "1.729e+128"
    converts 1.729e+128 to "1.729e+128"
-    converts 1.729e-153 to "1.729e-153"
    converts 1.729e-153 to "1.729e-153"
-    converts 1.729e-62 to "1.729e-62"
    converts 1.729e-62 to "1.729e-62"
-    converts 1.729e-119 to "1.729e-119"
    converts 1.729e-119 to "1.729e-119"
-    converts 1.729e-266 to "1.729e-266"
    converts 1.729e-266 to "1.729e-266"
-    converts 1.729e-167 to "1.729e-167"
    converts 1.729e-167 to "1.729e-167"
-    converts 1.729e-188 to "1.729e-188"
    converts 1.729e-188 to "1.729e-188"
-    converts 1.729e-92 to "1.729e-92"
    converts 1.729e-92 to "1.729e-92"
-    converts 1.729e+53 to "1.729e+53"
    converts 1.729e+53 to "1.729e+53"
-    converts 1.729e+93 to "1.729e+93"
    converts 1.729e+93 to "1.729e+93"
-    converts 1.729e-18 to "1.729e-18"
    converts 1.729e-18 to "1.729e-18"
-    converts 1.729e+251 to "1.729e+251"
    converts 1.729e+251 to "1.729e+251"
-    converts 1.729e-125 to "1.729e-125"
    converts 1.729e-125 to "1.729e-125"
-    converts 1.729e-140 to "1.729e-140"
    converts 1.729e-140 to "1.729e-140"
-    converts 1.729e-146 to "1.729e-146"
    converts 1.729e-146 to "1.729e-146"
-    converts 1.729e+146 to "1.729e+146"
    converts 1.729e+146 to "1.729e+146"
-    converts 1.729e+70 to "1.729e+70"
    converts 1.729e+70 to "1.729e+70"
-    converts 1.729e+285 to "1.729e+285"
    converts 1.729e+285 to "1.729e+285"
-    converts 1.729e-312 to "1.729e-312"
    converts 1.729e-312 to "1.729e-312"
-    converts 1.729e-289 to "1.729e-289"
    converts 1.729e-289 to "1.729e-289"
-    converts 1.729e+178 to "1.729e+178"
    converts 1.729e+178 to "1.729e+178"
-    converts 1.729e+241 to "1.729e+241"
    converts 1.729e+241 to "1.729e+241"
-    converts 1.729e-46 to "1.729e-46"
    converts 1.729e-46 to "1.729e-46"
-    converts 1.729e+109 to "1.729e+109"
    converts 1.729e+109 to "1.729e+109"
-    converts 1.729e-252 to "1.729e-252"
    converts 1.729e-252 to "1.729e-252"
-    converts 1.729e-320 to "1.729e-320"
    converts 1.729e-320 to "1.729e-320"
-    converts 1.729e-129 to "1.729e-129"
    converts 1.729e-129 to "1.729e-129"
-    converts 1.729e+97 to "1.729e+97"
    converts 1.729e+97 to "1.729e+97"
-    converts 1.729e-322 to "1.73e-322"
    converts 1.729e-322 to "1.73e-322"
-    converts 1.729e-290 to "1.729e-290"
    converts 1.729e-290 to "1.729e-290"
-    converts 1.729e-307 to "1.729e-307"
    converts 1.729e-307 to "1.729e-307"
-    converts 1.729e-130 to "1.729e-130"
    converts 1.729e-130 to "1.729e-130"
-    converts 1.729e-6 to "1.729e-6"
    converts 1.729e-6 to "1.729e-6"
-    converts 1.729e+14 to "172900000000000.0"
    converts 1.729e+14 to "172900000000000.0"
-    converts 1.729e-121 to "1.729e-121"
    converts 1.729e-121 to "1.729e-121"
-    converts 1.729e+234 to "1.729e+234"
    converts 1.729e+234 to "1.729e+234"
-    converts 1.729e-242 to "1.729e-242"
    converts 1.729e-242 to "1.729e-242"
-    converts 1.729e-155 to "1.729e-155"
    converts 1.729e-155 to "1.729e-155"
-    converts 1.729e+99 to "1.729e+99"
    converts 1.729e+99 to "1.729e+99"
-  Ryu d2s_test.cc SmallIntegers
-    converts 9007199254740991.0 to "9.007199254740991e+15"
    converts 9007199254740991.0 to "9.007199254740991e+15"
-    converts 9007199254740992.0 to "9.007199254740992e+15"
    converts 9007199254740992.0 to "9.007199254740992e+15"
-  converts 1.234567895 to "1.234567895"
  converts 1.234567895 to "1.234567895"
-  converts 1000000000001000.0 to "1.000000000001e+15"
  converts 1000000000001000.0 to "1.000000000001e+15"
-  converts 1234567890.0 to "1234567890.0"
  converts 1234567890.0 to "1234567890.0"
-  converts 12345678901234.0 to "12345678901234.0"
  converts 12345678901234.0 to "12345678901234.0"
-  converts 1000000100000000.0 to "1.0000001e+15"
  converts 1000000100000000.0 to "1.0000001e+15"
-  converts 1000000000000010.0 to "1.00000000000001e+15"
  converts 1000000000000010.0 to "1.00000000000001e+15"
-  converts 10000000000000.0 to "10000000000000.0"
  converts 10000000000000.0 to "10000000000000.0"
-  converts 123456789012345.0 to "123456789012345.0"
  converts 123456789012345.0 to "123456789012345.0"
-  converts 8000.0 to "8000.0"
  converts 8000.0 to "8000.0"
-  converts 1000000.0 to "1000000.0"
  converts 1000000.0 to "1000000.0"
-  Ryu d2s_test.cc LotsOfTrailingZeros
-    converts 2.98023223876953125e-8 to "2.9802322387695312e-8"
    converts 2.98023223876953125e-8 to "2.9802322387695312e-8"
-  converts 1234567890123.0 to "1234567890123.0"
  converts 1234567890123.0 to "1234567890123.0"
-  odd mantissas (unaffected by shifting)
-    converts 115292150459e7 to "1.15292150459e+18"
    converts 115292150459e7 to "1.15292150459e+18"
-    converts 81192061763584e18 to "8.1192061763584e+31"
    converts 81192061763584e18 to "8.1192061763584e+31"
-    converts 2361e18 to "2.361e+21"
    converts 2361e18 to "2.361e+21"
-    converts 2882303761517e5 to "2.882303761517e+17"
    converts 2882303761517e5 to "2.882303761517e+17"
-    converts 302230528e15 to "3.02230528e+23"
    converts 302230528e15 to "3.02230528e+23"
-    converts 36893489e12 to "3.6893489e+19"
    converts 36893489e12 to "3.6893489e+19"
-    converts 360287970189639e2 to "3.60287970189639e+16"
    converts 360287970189639e2 to "3.60287970189639e+16"
-    converts 72057594037927e3 to "7.2057594037927e+16"
    converts 72057594037927e3 to "7.2057594037927e+16"
-    converts 4611686019e9 to "4.611686019e+18"
    converts 4611686019e9 to "4.611686019e+18"
-    converts 23058430091e8 to "2.3058430091e+18"
    converts 23058430091e8 to "2.3058430091e+18"
-    converts 302232576e15 to "3.02232576e+23"
    converts 302232576e15 to "3.02232576e+23"
-    converts 14411518807587e4 to "1.4411518807587e+17"
    converts 14411518807587e4 to "1.4411518807587e+17"
-    converts 4611686017e9 to "4.611686017e+18"
    converts 4611686017e9 to "4.611686017e+18"
-    converts 2882303761519e5 to "2.882303761519e+17"
    converts 2882303761519e5 to "2.882303761519e+17"
-    converts 7378697e13 to "7.378697e+19"
    converts 7378697e13 to "7.378697e+19"
-    converts 11807e17 to "1.1807e+21"
    converts 11807e17 to "1.1807e+21"
-    converts 59031e16 to "5.9031e+20"
    converts 59031e16 to "5.9031e+20"
-    converts 295147e15 to "2.95147e+20"
    converts 295147e15 to "2.95147e+20"
-    converts 1475739e14 to "1.475739e+20"
    converts 1475739e14 to "1.475739e+20"
-    converts 471e19 to "4.71e+21"
    converts 471e19 to "4.71e+21"
-    converts 81123342286848e18 to "8.1123342286848e+31"
    converts 81123342286848e18 to "8.1123342286848e+31"
-    converts 17e21 to "1.7e+22"
    converts 17e21 to "1.7e+22"
-    converts 576460752303e6 to "5.76460752303e+17"
    converts 576460752303e6 to "5.76460752303e+17"
-    converts 11805e17 to "1.1805e+21"
    converts 11805e17 to "1.1805e+21"
-    converts 922337205e10 to "9.22337205e+18"
    converts 922337205e10 to "9.22337205e+18"
-    converts 36893487e12 to "3.6893487e+19"
    converts 36893487e12 to "3.6893487e+19"
-    converts 360287970189641e2 to "3.60287970189641e+16"
    converts 360287970189641e2 to "3.60287970189641e+16"
-    converts 115292150461e7 to "1.15292150461e+18"
    converts 115292150461e7 to "1.15292150461e+18"
-    converts 473e19 to "4.73e+21"
    converts 473e19 to "4.73e+21"
-    converts 95e20 to "9.5e+21"
    converts 95e20 to "9.5e+21"
-    converts 576460752305e6 to "5.76460752305e+17"
    converts 576460752305e6 to "5.76460752305e+17"
-    converts 7378699e13 to "7.378699e+19"
    converts 7378699e13 to "7.378699e+19"
-    converts 1801439850948197e1 to "1.801439850948197e+16"
    converts 1801439850948197e1 to "1.801439850948197e+16"
-    converts 59029e16 to "5.9029e+20"
    converts 59029e16 to "5.9029e+20"
-    converts 295149e15 to "2.95149e+20"
    converts 295149e15 to "2.95149e+20"
-    converts 184467439e11 to "1.84467439e+19"
    converts 184467439e11 to "1.84467439e+19"
-    converts 72057594037929e3 to "7.2057594037929e+16"
    converts 72057594037929e3 to "7.2057594037929e+16"
-    converts 3e22 to "3.0e+22"
    converts 3e22 to "3.0e+22"
-    converts 2363e18 to "2.363e+21"
    converts 2363e18 to "2.363e+21"
-    converts 23058430093e8 to "2.3058430093e+18"
    converts 23058430093e8 to "2.3058430093e+18"
-    converts 184467441e11 to "1.84467441e+19"
    converts 184467441e11 to "1.84467441e+19"
-    converts 1475741e14 to "1.475741e+20"
    converts 1475741e14 to "1.475741e+20"
-    converts 19e21 to "1.9e+22"
    converts 19e21 to "1.9e+22"
-    converts 14411518807585e4 to "1.4411518807585e+17"
    converts 14411518807585e4 to "1.4411518807585e+17"
-    converts 1801439850948199e1 to "1.801439850948199e+16"
    converts 1801439850948199e1 to "1.801439850948199e+16"
-    converts 5e22 to "5.0e+22"
    converts 5e22 to "5.0e+22"
-    converts 93e20 to "9.3e+21"
    converts 93e20 to "9.3e+21"
-    converts 922337203e10 to "9.22337203e+18"
    converts 922337203e10 to "9.22337203e+18"
-StringPool
-  gets string
  gets string
-  #get?
  #get?
-  doesn't fail if initial capacity is not a power of 2
  doesn't fail if initial capacity is not a power of 2
-  doesn't fail if initial capacity is too small
  doesn't fail if initial capacity is too small
-  gets slice
  gets slice
-  gets pointer with size
  gets pointer with size
-  gets string IO
  gets string IO
-  can be created with larger initial capacity
  can be created with larger initial capacity
-  is empty
  is empty
-  puts many
  puts many
-OAuth::Signature
-  base string
-    computes with port in host
    computes with port in host
-    computes when TLS
    computes when TLS
-    computes without port in host
    computes without port in host
-  key
-    gets when token secret is empty
    gets when token secret is empty
-    gets when token secret is not empty
    gets when token secret is not empty
-  does twitter sample
  does twitter sample
-Proc
-  does ==
  does ==
-  #arity
  #arity
-  does to_s when closured
  does to_s when closured
-  does new
  does new
-  clones
  clones
-  gets closure data for closure
  gets closure data for closure
-  does to_s(io) when closured
  does to_s(io) when closured
-  does to_s
  does to_s
-  #partial
  #partial
-  gets closure data for non-closure
  gets closure data for non-closure
-  gets pointer
  gets pointer
-  does to_s(io)
  does to_s(io)
-ENV
-  gets non existent key as nilable
  gets non existent key as nilable
-  gets non existent key raises
  gets non existent key raises
-  sets to empty string
  sets to empty string
-  does .values
  does .values
-  fetch
-    fetches and raises
    fetches and raises
-    fetches with block
    fetches with block
-    fetches with one argument
    fetches with one argument
-    fetches with default value
    fetches with default value
-    fetches arbitrary default value
    fetches arbitrary default value
-  handles unicode
  handles unicode
-  does has_key?
  does has_key?
-  does not have an empty key
  does not have an empty key
-  does .keys
  does .keys
-  []=
-    disallows NUL-bytes in value
    disallows NUL-bytes in value
-    disallows NUL-bytes in key if value is nil
    disallows NUL-bytes in key if value is nil
-    disallows NUL-bytes in key
    disallows NUL-bytes in key
-  #to_h
  #to_h
-  sets and gets case-sensitive
  sets and gets case-sensitive
-  set and gets
  set and gets
-  sets to nil (same as delete)
  sets to nil (same as delete)
-  deletes a key
  deletes a key
-OpenSSL::Cipher
-  encrypts/decrypts
  encrypts/decrypts
-  authenticated?
  authenticated?
-File
-  exists?
-    follows symlinks
    follows symlinks
-    gives false
    gives false
-    gives true
    gives true
-    gives false when a component of the path is a file
    gives false when a component of the path is a file
-  raises when writing to a file with no permission
  raises when writing to a file with no permission
-  symlink?
-    gives false
    gives false
-    gives false when the symlink doesn't exist
    gives false when the symlink doesn't exist
-    gives false when a component of the path is a file
    gives false when a component of the path is a file
-  iterates with each_byte
  iterates with each_byte
-  File::Info
-    gets for open file
    gets for open file
-    .writable?
-      gives false when the file has no write permissions
      gives false when the file has no write permissions
-      gives false when a component of the path is a file
      gives false when a component of the path is a file
-      gives false when the file doesn't exist
      gives false when the file doesn't exist
-      follows symlinks
      follows symlinks
-      gives true
      gives true
-      gives false when the symbolic link destination doesn't exist
      gives false when the symbolic link destination doesn't exist
-    tests equal for the same directory
    tests equal for the same directory
-    gets for this file
    gets for this file
-    .executable?
-      follows symlinks
      follows symlinks
-      gives true
      gives true
-      gives false
      gives false
-      gives false when the file doesn't exist
      gives false when the file doesn't exist
-      gives false when a component of the path is a file
      gives false when a component of the path is a file
-    gets for a character device
    gets for a character device
-    tests unequal for different files
    tests unequal for different files
-    .readable?
-      gives false when the symbolic link destination doesn't exist
      gives false when the symbolic link destination doesn't exist
-      gives false when a component of the path is a file
      gives false when a component of the path is a file
-      follows symlinks
      follows symlinks
-      gives true
      gives true
-      gives false when the file has no read permissions
      gives false when the file has no read permissions
-      gives false when the file has no permissions
      gives false when the file has no permissions
-      gives false when the file doesn't exist
      gives false when the file doesn't exist
-    tests equal for the same file
    tests equal for the same file
-    gets for non-existent file and raises
    gets for non-existent file and raises
-    tests unequal for file and directory
    tests unequal for file and directory
-    gets for a symlink
    gets for a symlink
-    gets for pipe
    gets for pipe
-    gets mtime for new file
    gets mtime for new file
-    gets for this directory
    gets for this directory
-  File::Permissions
-    does to_s
    does to_s
-  reads lines from file with each
  reads lines from file with each
-  blocking
-    reads non-blocking file
    reads non-blocking file
-    opens fifo file as non-blocking
    opens fifo file as non-blocking
-    opens regular file as blocking
    opens regular file as blocking
-    writes and reads large non-blocking file
    writes and reads large non-blocking file
-    opens character device
    opens character device
-    opens regular file as non-blocking
    opens regular file as non-blocking
-  raises when reading a file with no permission
  raises when reading a file with no permission
-  opens with perm (int)
  opens with perm (int)
-  encoding
-    opens with encoding
    opens with encoding
-    does each line with encoding
    does each line with encoding
-    reads with encoding
    reads with encoding
-    reads lines with encoding
    reads lines with encoding
-    writes with encoding
    writes with encoding
-  opens with perm (File::Permissions)
  opens with perm (File::Permissions)
-  gets basename removing suffix
  gets basename removing suffix
-  .delete
-    raises when file doesn't exist
    raises when file doesn't exist
-    deletes a file
    deletes a file
-    deletes? a file
    deletes? a file
-    deletes a symlink directory
    deletes a symlink directory
-    deletes a read-only file
    deletes a read-only file
-    deletes an open file
    deletes an open file
-  .same_content?
-    compares two different files
    compares two different files
-    compares two equal files
    compares two equal files
-  does not overwrite existing content in append mode
  does not overwrite existing content in append mode
-  clears the read buffer after a seek
  clears the read buffer after a seek
-  gets path
  gets path
-  supports the `b` mode flag
  supports the `b` mode flag
-  directory?
-    gives false when the directory doesn't exist
    gives false when the directory doesn't exist
-    gives true
    gives true
-    gives false
    gives false
-    gives false when a component of the path is a file
    gives false when a component of the path is a file
-  closed stream
-    raises if writing on a closed stream
    raises if writing on a closed stream
-  flock
-    blocking: false
-      #flock_shared soft blocking fiber
      #flock_shared soft blocking fiber
-      #flock_exclusive soft blocking fiber
      #flock_exclusive soft blocking fiber
-      #flock_shared
      #flock_shared
-    blocking: true
-      #flock_shared soft blocking fiber
      #flock_shared soft blocking fiber
-      #flock_exclusive soft blocking fiber
      #flock_exclusive soft blocking fiber
-      #flock_shared
      #flock_shared
-    #flock_exclusive
    #flock_exclusive
-  close
-    does to_s when closed
    does to_s when closed
-    should not raise when closing twice
    should not raise when closing twice
-    is closed when closed
    is closed when closed
-    is not closed when opening
    is not closed when opening
-  chown
  chown
-  truncates file opened in append mode (#14702)
  truncates file opened in append mode (#14702)
-  iterates with each_char
  iterates with each_char
-  rename
-    renames a File instance
    renames a File instance
-    replaces a file
    replaces a file
-    raises if old file doesn't exist
    raises if old file doesn't exist
-    renames a file
    renames a file
-  #realpath
-    expands paths of symlinks
    expands paths of symlinks
-    raises if file doesn't exist
    raises if file doesn't exist
-    expands multiple layers of symlinks
    expands multiple layers of symlinks
-    expands paths for normal files
    expands paths for normal files
-  gets dirname
  gets dirname
-  .expand_path
-    converts a pathname to an absolute pathname
    converts a pathname to an absolute pathname
-  empty?
-    raises an error when the file does not exist
    raises an error when the file does not exist
-    gives false when file is not empty
    gives false when file is not empty
-    gives true when file is empty
    gives true when file is empty
-    raises an error when a component of the path is a file
    raises an error when a component of the path is a file
-  returns the current write position with tell
  returns the current write position with tell
-  .copy
-    copies a file
    copies a file
-    overwrites existing destination and permissions
    overwrites existing destination and permissions
-    copies permissions
    copies permissions
-  does to_s and inspect
  does to_s and inspect
-  file?
-    gives true
    gives true
-    gives false with dir
    gives false with dir
-    gives false when a component of the path is a file
    gives false when a component of the path is a file
-    gives false when the file doesn't exist
    gives false when the file doesn't exist
-  same?
-    compares following symlinks only if requested
    compares following symlinks only if requested
-  .touch
-    raises if path contains non-existent directory
    raises if path contains non-existent directory
-    touches existing
-      directory
      directory
-      file
      file
-    raises if file cannot be accessed
    raises if file cannot be accessed
-    sets file times to current time if no time argument given
    sets file times to current time if no time argument given
-    creates file if it doesn't exist
    creates file if it doesn't exist
-    sets file times to given time
    sets file times to given time
-  reads lines from file with chomp = false
  reads lines from file with chomp = false
-  returns the current read position with tell
  returns the current read position with tell
-  .match?
-    alternates
    alternates
-    matches multiple expansions
    matches multiple expansions
-    special chars
    special chars
-    * don't match path separator
    * don't match path separator
-    escape
    escape
-    classes escapes
    classes escapes
-    matches basics
    matches basics
-    ** matches path separator
    ** matches path separator
-    matches unicode characters
    matches unicode characters
-    classes
    classes
-  reads lines from file with each, chomp = false
  reads lines from file with each, chomp = false
-  returns the actual position with tell after append
  returns the actual position with tell after append
-  #delete
-    deletes
    deletes
-  gets extname
  gets extname
-  link
-    creates a hard link
    creates a hard link
-  truncate
-    requires a file opened for writing
    requires a file opened for writing
-    truncates completely when no size is passed
    truncates completely when no size is passed
-    truncates
    truncates
-  rewinds
  rewinds
-  utime
-    sets times with class method
    sets times with class method
-    sets times with instance method
    sets times with instance method
-    raises if file not found
    raises if file not found
-  size
-    raises an error when the file does not exist
    raises an error when the file does not exist
-    raises an error when a component of the path is a file
    raises an error when a component of the path is a file
-    assert
    assert
-    assert
    assert
-  reads entire file
  reads entire file
-  seeks from the current position
  seeks from the current position
-  raises on null byte
-    errors on dirname
    errors on dirname
-    errors on executable?
    errors on executable?
-    errors on join
    errors on join
-    errors on symlink, first arg
    errors on symlink, first arg
-    errors on rename (second arg)
    errors on rename (second arg)
-    errors on size
    errors on size
-    errors on extname
    errors on extname
-    errors on rename (first arg)
    errors on rename (first arg)
-    errors on basename
    errors on basename
-    errors on expand_path, first arg
    errors on expand_path, first arg
-    errors on expand_path, second arg
    errors on expand_path, second arg
-    errors on readable?
    errors on readable?
-    errors on directory?
    errors on directory?
-    errors on writable?
    errors on writable?
-    errors on info?
    errors on info?
-    errors on link, first arg
    errors on link, first arg
-    errors on info
    errors on info
-    errors on symlink, second arg
    errors on symlink, second arg
-    errors on basename 2, second arg
    errors on basename 2, second arg
-    errors on new
    errors on new
-    errors on link, second arg
    errors on link, second arg
-    errors on symlink?
    errors on symlink?
-    errors on file?
    errors on file?
-    errors on basename 2, first arg
    errors on basename 2, first arg
-    errors on delete
    errors on delete
-    errors on exists?
    errors on exists?
-  write
-    can write to a file
    can write to a file
-    can create a new file in append mode
    can create a new file in append mode
-    writes io
    writes io
-    can append to an existing file
    can append to an existing file
-    raises if trying to write to a file not opened for writing
    raises if trying to write to a file not opened for writing
-    writes bytes
    writes bytes
-  raises if invoking tell with a closed file
  raises if invoking tell with a closed file
-  gets basename
  gets basename
-  chmod
-    changes file permissions with instance method
    changes file permissions with instance method
-    raises when destination doesn't exist
    raises when destination doesn't exist
-    can take File::Permissions
    can take File::Permissions
-    changes dir permissions
    changes dir permissions
-    follows symlinks
    follows symlinks
-    changes file permissions with class method
    changes file permissions with class method
-  reads lines from file
  reads lines from file
-  raises if invoking seek with a closed file
  raises if invoking seek with a closed file
-  reads at offset
  reads at offset
-  raises if opening a non-existent file
  raises if opening a non-existent file
-  reads entire file from proc virtual filesystem
  reads entire file from proc virtual filesystem
-  locks file opened in append mode (#14702)
  locks file opened in append mode (#14702)
-  fsync
-    syncs OS file buffer to disk
    syncs OS file buffer to disk
-  can navigate with pos
  can navigate with pos
-  .readlink
-    reads link
    reads link
-  symlink
-    creates a symbolic link
    creates a symbolic link
-    works if destination contains forward slashes (#14520)
    works if destination contains forward slashes (#14520)
-  constructs a path from parts
  constructs a path from parts
-  raises when reading at offset outside of bounds
  raises when reading at offset outside of bounds
-Crypto::Bcrypt::Base64
-  decodes
  decodes
-  encodes
  encodes
-Digest::CRC32
-  calculates hash from string
  calculates hash from string
-  calculates hash from unicode string
  calculates hash from unicode string
-  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
-  can't call final twice
  can't call final twice
-  #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
-  should be able to calculate crc32 combined
  should be able to calculate crc32 combined
-  return the digest size
  return the digest size
-  should be able to calculate crc32
  should be able to calculate crc32
-  calculates hash from UInt8 slices
  calculates hash from UInt8 slices
-  digest with file content
  digest with file content
-  resets
  resets
-  calculates base64'd hash from string
  calculates base64'd hash from string
-  .dup
-    leads to not sharing state
    leads to not sharing state
-    preserves value
    preserves value
-    leads to deterministic updates
    leads to deterministic updates
-    preserves type
    preserves type
-  calculates hash of #to_slice
  calculates hash of #to_slice
-  calculates digest from string
  calculates digest from string
-  can take a block
  can take a block
-  context are independent
  context are independent
-BigFloat Math
-  .ilogb
  .ilogb
-  .sqrt
  .sqrt
-  .frexp
  .frexp
-  .logb
  .logb
-  .copysign
  .copysign
-  .scalbln
  .scalbln
-  .ldexp
  .ldexp
-  .scalbn
  .scalbn
-Regex::MatchData
-  #inspect
  #inspect
-  #string
  #string
-  #pretty_print
  #pretty_print
-  #pre_match
-    works with unicode
    works with unicode
-    returns the part of the string before the match
    returns the part of the string before the match
-    returns an empty string when there's nothing before
    returns an empty string when there's nothing before
-  #==
  #==
-  #named_captures
-    gets a hash of named captures with optional
    gets a hash of named captures with optional
-    gets a hash of named captures
    gets a hash of named captures
-    gets a hash of named captures with duplicated name
    gets a hash of named captures with duplicated name
-    gets more than 127 named captures
    gets more than 127 named captures
-  #[]
-    Range
-      can use start and count
      can use start and count
-      can use range
      can use range
-    Int
-      raises exception on optional empty group
      raises exception on optional empty group
-      can use negative index
      can use negative index
-      captures empty group
      captures empty group
-      raises if outside match range with []
      raises if outside match range with []
-      raises if special variable accessed on invalid capture group
      raises if special variable accessed on invalid capture group
-    String
-      raises exception when named group doesn't exist
      raises exception when named group doesn't exist
-      capture named group
      capture named group
-      named groups with same prefix
      named groups with same prefix
-      captures duplicated named group
      captures duplicated named group
-      captures empty group
      captures empty group
-      raises exception on optional empty group
      raises exception on optional empty group
-  #byte_begin
-    with unmatched capture
    with unmatched capture
-    char index
    char index
-  #to_s
  #to_s
-  #captures
-    gets an array of unnamed captures
    gets an array of unnamed captures
-    doesn't get named captures when there are more than 255
    doesn't get named captures when there are more than 255
-    gets an array of unnamed captures with optional
    gets an array of unnamed captures with optional
-  #end
-    char index
    char index
-    no captures
    no captures
-    with capture
    with capture
-    with unmatched capture
    with unmatched capture
-    out of range
    out of range
-  #byte_end
-    char index
    char index
-    with unmatched capture
    with unmatched capture
-  #hash
  #hash
-  #begin
-    out of range
    out of range
-    char index
    char index
-    with capture
    with capture
-    no captures
    no captures
-    with unmatched capture
    with unmatched capture
-  #to_a
-    converts into an array
    converts into an array
-    converts into an array having nil
    converts into an array having nil
-  #[]?
-    Int
-      capture empty group
      capture empty group
-      returns nil if outside match range with []
      returns nil if outside match range with []
-      can use negative index
      can use negative index
-      capture optional empty group
      capture optional empty group
-    Range
-      can use start and count
      can use start and count
-      can use range
      can use range
-    String
-      capture empty group
      capture empty group
-      captures duplicated named group
      captures duplicated named group
-      capture optional empty group
      capture optional empty group
-      capture named group
      capture named group
-      returns nil exception when named group doesn't exist
      returns nil exception when named group doesn't exist
-  #regex
  #regex
-  #post_match
-    returns the part of the string after the match
    returns the part of the string after the match
-    works with unicode
    works with unicode
-    returns an empty string when there's nothing after
    returns an empty string when there's nothing after
-  #size
  #size
-  #to_h
-    converts into a hash with duplicated names
    converts into a hash with duplicated names
-    converts into a hash having nil
    converts into a hash having nil
-    converts into a hash
    converts into a hash
-URI
-  serializes
-    #to_json
    #to_json
-    from_json_object_key?
    from_json_object_key?
-#to_www_form
-  Time
  Time
-  Nil
  Nil
-  Bool
  Bool
-  String
  String
-  Enum
  Enum
-  Number
  Number
-  Array(T)
-    of a union of types
    of a union of types
-    of a single type
    of a single type
-concurrent
-  accepts method call with receiver
  accepts method call with receiver
-  schedules intermitting sleeps
  schedules intermitting sleeps
-  spawn
-    spawns named with macro
    spawns named with macro
-    spawns named
    spawns named
-    uses spawn macro
    uses spawn macro
-pp
-  can be used with tuples
  can be used with tuples
-HTTP::Status
-  #client_error?
-    returns true when given 4xx status code
    returns true when given 4xx status code
-    returns false unless given 4xx status code
    returns false unless given 4xx status code
-  .new
-    returns an instance when given undefined status code
    returns an instance when given undefined status code
-    raises when given invalid status code
    raises when given invalid status code
-    returns an instance when given defined status code
    returns an instance when given defined status code
-  #server_error?
-    returns false unless given 5xx status code
    returns false unless given 5xx status code
-    returns true when given 5xx status code
    returns true when given 5xx status code
-  #code
-    returns the status code
    returns the status code
-  #redirection?
-    returns false unless given 3xx status code
    returns false unless given 3xx status code
-    returns true when given 3xx status code
    returns true when given 3xx status code
-  #success?
-    returns false unless given 2xx status code
    returns false unless given 2xx status code
-    returns true when given 2xx status code
    returns true when given 2xx status code
-  #description
-    returns default description for status 200
    returns default description for status 200
-    returns nil on non-existent status
    returns nil on non-existent status
-  #informational?
-    returns false unless given 1xx status code
    returns false unless given 1xx status code
-    returns true when given 1xx status code
    returns true when given 1xx status code
-WaitGroup
-  #wait
-    immediately returns when counter is zero
    immediately returns when counter is zero
-    raises when counter is positive after wake up
    raises when counter is positive after wake up
-    immediately raises when counter is negative
    immediately raises when counter is negative
-  #add
-    can't decrement to a negative counter
    can't decrement to a negative counter
-    can't increment after reaching negative counter
    can't increment after reaching negative counter
-    resumes waiters when reaching negative counter
    resumes waiters when reaching negative counter
-  stress add/done/wait
  stress add/done/wait
-  waits until concurrent executions are finished
  waits until concurrent executions are finished
-  increments the counter from executing fibers
  increments the counter from executing fibers
-  takes a block to WaitGroup.wait
  takes a block to WaitGroup.wait
-  #done
-    resumes waiters when reaching negative counter
    resumes waiters when reaching negative counter
-    can't decrement to a negative counter
    can't decrement to a negative counter
-Dir
-  gets dir iterator
  gets dir iterator
-  cd
-    accepts path
    accepts path
-    raises
    raises
-    accepts string
    accepts string
-    accepts a block with string
    accepts a block with string
-    accepts a block with path
    accepts a block with path
-  glob
-    tests a glob with recursion inside alternation
    tests a glob with recursion inside alternation
-    tests with relative path
    tests with relative path
-    matches symlink dir
    matches symlink dir
-    with path
-      windows path
      windows path
-      posix path
      posix path
-    tests with \
    tests with \
-    tests with relative path (starts with .)
    tests with relative path (starts with .)
-    tests with ** (same as *)
    tests with ** (same as *)
-    tests a recursive glob
    tests a recursive glob
-    root pattern
    root pattern
-    tests glob with a single pattern with extra slashes
    tests glob with a single pattern with extra slashes
-    tests with relative path starting recursive
    tests with relative path starting recursive
-    tests with relative path (starts with ..)
    tests with relative path (starts with ..)
-    tests glob with a single pattern with block
    tests glob with a single pattern with block
-    empty pattern
    empty pattern
-    pattern ending with */..
    pattern ending with */..
-    pattern ending with */.
    pattern ending with */.
-    pattern ending with .
    pattern ending with .
-    tests a recursive glob with alternation
    tests a recursive glob with alternation
-    tests double recursive matcher, multiple paths
    tests double recursive matcher, multiple paths
-    tests glob with multiple patterns
    tests glob with multiple patterns
-    tests with {}
    tests with {}
-    tests double recursive matcher (#10807)
    tests double recursive matcher (#10807)
-    tests glob with a single pattern
    tests glob with a single pattern
-    tests a recursive glob with nested alternations
    tests a recursive glob with nested alternations
-    tests with []
    tests with []
-    matches symlinks
    matches symlinks
-    tests with *
    tests with *
-    pattern ending with ..
    pattern ending with ..
-    match: :dot_files / match_hidden
-      ignores hidden files
      ignores hidden files
-      matches dot files
      matches dot files
-      ignores hidden files recursively
      ignores hidden files recursively
-    tests with */
    tests with */
-    tests a recursive glob with '?'
    tests a recursive glob with '?'
-  opens with open
  opens with open
-  tests exists? on nonexistent directory
  tests exists? on nonexistent directory
-  double close doesn't error
  double close doesn't error
-  lists children
  lists children
-  .delete
-    raises with an nonexistent path
    raises with an nonexistent path
-    raises with symlink directory
    raises with symlink directory
-    raises with a path that cannot be removed
    raises with a path that cannot be removed
-    deletes a read-only directory
    deletes a read-only directory
-  .current
-    follows $PWD
    follows $PWD
-    matches shell
    matches shell
-  tests exists? on existing directory
  tests exists? on existing directory
-  lists entries
  lists entries
-  .tempdir
-    returns default directory for tempfiles
    returns default directory for tempfiles
-    returns configure directory for tempfiles
    returns configure directory for tempfiles
-  does to_s
  does to_s
-  .mkdir_p
-    path exists
-      fails when path is a file
      fails when path is a file
-      noop when path is a directory
      noop when path is a directory
-    with a new path
    with a new path
-  tests mkdir and rmdir with a new path
  tests mkdir and rmdir with a new path
-  tests mkdir with an existing path
  tests mkdir with an existing path
-  opens with new
  opens with new
-  tests info on existing directory
  tests info on existing directory
-  tests exists? on existing file
  tests exists? on existing file
-  empty?
-    tests empty? on nonexistent directory
    tests empty? on nonexistent directory
-    tests empty? on a full directory
    tests empty? on a full directory
-    tests empty? on an empty directory
    tests empty? on an empty directory
-    tests empty? on a directory path to a file
    tests empty? on a directory path to a file
-  tests mkdir and delete with a new path
  tests mkdir and delete with a new path
-  #path
-    returns init value
    returns init value
-  gets child iterator
  gets child iterator
-  raises on null byte
-    errors on new
    errors on new
-    errors on mkdir_p
    errors on mkdir_p
-    errors on cd
    errors on cd
-    errors on delete
    errors on delete
-    errors on exists?
    errors on exists?
-    errors on mkdir
    errors on mkdir
-  tests exists? on a directory path to a file
  tests exists? on a directory path to a file
-  tests mkdir and delete? with a new path
  tests mkdir and delete? with a new path
-Spec::RootContext
-  #run_filters
-    by focus
-      on an example
      on an example
-      on a context
      on a context
-    by locations
-      on a context's start line'
      on a context's start line'
-      in an example
      in an example
-      on an example's start line
      on an example's start line
-      between examples
      between examples
-      on an example's end line
      on an example's end line
-      on a context's end line'
      on a context's end line'
-    by line
-      between examples
      between examples
-      on an example's start line
      on an example's start line
-      in an example
      in an example
-      on an example's end line
      on an example's end line
-      on a context's end line'
      on a context's end line'
-      on a context's start line'
      on a context's start line'
-    by tags
-      on an example
      on an example
-      on a context
      on a context
-    by anti_tags
-      on a context
      on a context
-      on an example
      on an example
-    by pattern
-      on a context
      on a context
-      on an example
      on an example
-select
-  non-blocking raise-on-close multi-channel
-    types and exec when (2)
    types and exec when (2)
-    raises if channel was closed (1)
    raises if channel was closed (1)
-    exec else if no message was ready
    exec else if no message was ready
-    raises if channel was closed (2)
    raises if channel was closed (2)
-    types and exec when (1)
    types and exec when (1)
-  select many receivers
  select many receivers
-  blocking nil-on-close single-channel
-    types and exec when
    types and exec when
-    types and exec when with nil if channel was closed
    types and exec when with nil if channel was closed
-  select fiber has one chance to be enqueued into scheduler (1)
  select fiber has one chance to be enqueued into scheduler (1)
-  select same channel multiple times
  select same channel multiple times
-  blocking raise-on-close single-channel
-    types and exec when
    types and exec when
-    raises if channel was closed
    raises if channel was closed
-  select many receivers, senders
  select many receivers, senders
-  stress select with send/receive in multiple fibers
  stress select with send/receive in multiple fibers
-  blocking nil-on-close multi-channel
-    types and exec when (1)
    types and exec when (1)
-    types and exec when with nil if channel is closed while waiting (1)
    types and exec when with nil if channel is closed while waiting (1)
-    types and exec when with nil if channel is closed while waiting (2)
    types and exec when with nil if channel is closed while waiting (2)
-    types and exec when with nil if channel was closed (1)
    types and exec when with nil if channel was closed (1)
-    types and exec when (2)
    types and exec when (2)
-    types and exec when with nil if channel was closed (2)
    types and exec when with nil if channel was closed (2)
-  prioritize by order when entering in a select
  prioritize by order when entering in a select
-  blocking raise-on-close multi-channel
-    types and exec when (2)
    types and exec when (2)
-    raises if channel was closed (1)
    raises if channel was closed (1)
-    raises if channel was closed (2)
    raises if channel was closed (2)
-    types and exec when (1)
    types and exec when (1)
-  non-blocking nil-on-close multi-channel
-    types and exec when (2)
    types and exec when (2)
-    types and exec when with nil if channel is closed while waiting (2)
    types and exec when with nil if channel is closed while waiting (2)
-    types and exec when with nil if channel is closed while waiting (1)
    types and exec when with nil if channel is closed while waiting (1)
-    types and exec when (1)
    types and exec when (1)
-    types and exec when with nil if channel was closed (2)
    types and exec when with nil if channel was closed (2)
-    types and exec when with nil if channel was closed (1)
    types and exec when with nil if channel was closed (1)
-    exec else if no message was ready
    exec else if no message was ready
-  select fiber has one chance to be enqueued into scheduler (2)
  select fiber has one chance to be enqueued into scheduler (2)
-  non-blocking nil-on-close single-channel
-    types and exec when
    types and exec when
-    types and exec when with nil if channel was closed
    types and exec when with nil if channel was closed
-    exec else if no message was ready
    exec else if no message was ready
-  select should work with send which started before receive, fixed #3862
  select should work with send which started before receive, fixed #3862
-  non-blocking raise-on-close single-channel
-    exec else if no message was ready
    exec else if no message was ready
-    raises if channel was closed
    raises if channel was closed
-    types and exec when if message was ready
    types and exec when if message was ready
-  select many senders
  select many senders
-__floatuntidf
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+    for simple enum
    for simple enum
+    for flags enum
    for flags enum
+    for private enum
    for private enum
+  gets value
  gets value
+  values
+    for simple enum
    for simple enum
+    for flags enum
    for flags enum
+  has hash
  has hash
+  gets value with to_u<bit>
  gets value with to_u<bit>
+  #inspect
+    for flags enum
    for flags enum
+    for private enum
    for private enum
+    for simple enum
    for simple enum
+  .parse?
  .parse?
+  each
+    yields each member
    yields each member
+    won't yield All
    won't yield All
+    won't yield None
    won't yield None
+    private enum
    private enum
+  names
+    for simple enum
    for simple enum
+    for flags enum
    for flags enum
+  .[]
+    non-flags enum
    non-flags enum
+    flags enum
    flags enum
+    private flags enum
    private flags enum
+  gets value with to_i<bit>
  gets value with to_i<bit>
+  does -
  does -
+  valid?
+    for simple enum
    for simple enum
+    for Int64 enum
    for Int64 enum
+    for flags enum
    for flags enum
+  creates an enum instance from an auto-casted symbol (#8573)
  creates an enum instance from an auto-casted symbol (#8573)
+  from_value
+    for simple enum
    for simple enum
+    for flags enum
    for flags enum
+    for private enum
    for private enum
+  .flags
+    private flags enum
    private flags enum
+    non-flags enum
    non-flags enum
+    flags enum
    flags enum
+  sorts
  sorts
+  .parse
  .parse
+  from_value?
+    for flags enum
    for flags enum
+    for simple enum
    for simple enum
+  each
+    iterates each member
    iterates each member
+    iterates private enum members
    iterates private enum members
+    iterates each flag
    iterates each flag
+  does includes?
  does includes?
+  clones
  clones
+BigFloat Math
+  .ilogb
  .ilogb
+  .logb
  .logb
+  .scalbln
  .scalbln
+  .ldexp
  .ldexp
+  .scalbn
  .scalbn
+  .copysign
  .copysign
+  .sqrt
  .sqrt
+  .frexp
  .frexp
+Time::Span
+  test compare
  test compare
+  min milliseconds
  min milliseconds
+  min days
  min days
+  max milliseconds
  max milliseconds
+  test equals
  test equals
+  initializes with big seconds value
  initializes with big seconds value
+  #negative?
  #negative?
+  max seconds
  max seconds
+  arithmetic
+    #sign
    #sign
+    #/(self)
    #/(self)
+    #+
    #+
+    #-
    #-
+    #/(Number)
    #/(Number)
+    #*
    #*
+  negative timespan
  negative timespan
+  can substract big amount using milliseconds
  can substract big amount using milliseconds
+  converts units
  converts units
+  #step
+    "basic" yielding
    "basic" yielding
+    "basic" iterator
    "basic" iterator
+  test float extension methods
  test float extension methods
+  test properties
  test properties
+  test to_s
  test to_s
+  test negate and abs
  test negate and abs
+  min seconds
  min seconds
+  #zero?
  #zero?
+  test int extension methods
  test int extension methods
+  test hash code
  test hash code
+  can substract big amount using microseconds
  can substract big amount using microseconds
+  should sum
  should sum
+  initializes with type restrictions
  initializes with type restrictions
+  test totals
  test totals
+  days overflows
  days overflows
+  max days
  max days
+  initializes
  initializes
+  #positive?
  #positive?
+Log::TestFormatter
+  formats
  formats
+Thread::ConditionVariable
+  resumes before timeout
  resumes before timeout
+  timeouts
  timeouts
+  signals & broadcasts
  signals & broadcasts
+  signals
  signals
+__divti3
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
@@ -25795,6 +21838,122 @@
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+PROGRAM_NAME
+  works for UTF-8 name
  works for UTF-8 name
+Proc
+  does to_s
  does to_s
+  does new
  does new
+  #arity
  #arity
+  does to_s when closured
  does to_s when closured
+  gets pointer
  gets pointer
+  does ==
  does ==
+  does to_s(io)
  does to_s(io)
+  does to_s(io) when closured
  does to_s(io) when closured
+  #partial
  #partial
+  gets closure data for closure
  gets closure data for closure
+  clones
  clones
+  gets closure data for non-closure
  gets closure data for non-closure
+Time::Format
+  ISO_8601_DATE
+    parses ordinal date
    parses ordinal date
+    parses week date
    parses week date
+    parses calendar date
    parses calendar date
+    formats default format
    formats default format
+  RFC_3339
+    parses regular format
    parses regular format
+  ISO_8601_DATE_TIME
+    parses ordinal date
    parses ordinal date
+    parses calendar date
    parses calendar date
+    parses hour
    parses hour
+    week date
    week date
+    formats default format
    formats default format
+    parses hour:minutes
    parses hour:minutes
+    parses decimal fractions
    parses decimal fractions
+  RFC_2822
+    parses regular format
    parses regular format
+Log::IOBackend
+  yields message
  yields message
+  logs context
  logs context
+  logs any object
  logs any object
+  uses custom formatter
  uses custom formatter
+  creates with defaults
  creates with defaults
+  logs messages
  logs messages
+  allows setting formatter in initializer
  allows setting formatter in initializer
+  formats message
  formats message
+OpenSSL::Cipher
+  authenticated?
  authenticated?
+  encrypts/decrypts
  encrypts/decrypts
+Log
+  level can be changed
  level can be changed
+  context can be changed within the block, yet it's not restored
  context can be changed within the block, yet it's not restored
+  Log::Severity
+    parses
    parses
+    values are ordered
    values are ordered
+  emitter dsl
+    can be used with message
    can be used with message
+    can be used with message and metadata explicitly
    can be used with message and metadata explicitly
+    does not emit anything when a nil is emitted
    does not emit anything when a nil is emitted
+    can be used with message and data via named tuple
    can be used with message and data via named tuple
+    can be used with data only explicitly
    can be used with data only explicitly
+    can be used with data only via named tuple
    can be used with data only via named tuple
+    can be used with message and exception
    can be used with message and exception
+    can be used with exception
    can be used with exception
+    can be used with message and data via named arguments
    can be used with message and data via named arguments
+    can be used with data only via named arguments
    can be used with data only via named arguments
+  context supports unsigned values
  context supports unsigned values
+  filter messages to the backend above level only
  filter messages to the backend above level only
+  contains the current context
  contains the current context
+  can attach exception to entries
  can attach exception to entries
+HTTP::Cookie::Parser
+  parse_set_cookie
+    with space
    with space
+    parses expires rfc1036
    parses expires rfc1036
+    parses path
    parses path
+    parse domain as IP
    parse domain as IP
+    parses full
    parses full
+    parses cookie with spaces in value
    parses cookie with spaces in value
+    parses expires ansi c, variant with zone
    parses expires ansi c, variant with zone
+    parses expires rfc1123
    parses expires rfc1123
+    parses expires ansi c
    parses expires ansi c
+    parse max-age as Time::Span
    parse max-age as Time::Span
+    parses Secure
    parses Secure
+    SameSite
+      Invalid
+        parses samesite
        parses samesite
+      Strict
+        parses samesite
        parses samesite
+      Lax
+        parses samesite
        parses samesite
+    leading dots in domain names are ignored
    leading dots in domain names are ignored
+    parses domain
    parses domain
+    parses HttpOnly
    parses HttpOnly
+    strips spaces around value only when it's unquoted
    strips spaces around value only when it's unquoted
+    parses expires iis
    parses expires iis
+    removes leading and trailing whitespaces
    removes leading and trailing whitespaces
+  parse_cookies
+    parses key=
    parses key=
+    parses multiple cookies
    parses multiple cookies
+    strips spaces around value only when it's unquoted
    strips spaces around value only when it's unquoted
+    parses cookie with spaces in value
    parses cookie with spaces in value
+    parses key="value"
    parses key="value"
+    parses special character in name
    parses special character in name
+    parses key=value
    parses key=value
+    parses key=key%3Dvalue
    parses key=key%3Dvalue
+    parses key=key=value
    parses key=key=value
+  expired?
+    not expired with future max-age
    not expired with future max-age
+    expired with old expires date
    expired with old expires date
+    not expired when max-age and expires are not provided
    not expired when max-age and expires are not provided
+    expired when max-age=0
    expired when max-age=0
+    not expired with future expires
    not expired with future expires
+  expiration_time
+    sets future expiration_time with expires
    sets future expiration_time with expires
+    returns nil expiration_time when expires and max-age are not set
    returns nil expiration_time when expires and max-age are not set
+    sets expiration_time to be current when max-age=0
    sets expiration_time to be current when max-age=0
+    sets future expiration_time with max-age and future cookie creation time
    sets future expiration_time with max-age and future cookie creation time
+    sets future expiration_time with max-age
    sets future expiration_time with max-age
+    sets expiration_time with old date
    sets expiration_time with old date
+__floatuntisf
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
@@ -25837,1310 +21996,168 @@
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-Hash
-  "#each_value" yielding
  "#each_value" yielding
-  dup
-    dups big hash
    dups big hash
-    dups empty hash
    dups empty hash
-    retains default block on dup
    retains default block on dup
-    dups small hash
    dups small hash
-  size
-    is the same as size
    is the same as size
-  compacts!
  compacts!
-  gets array of keys
  gets array of keys
-  transform values in place with keys included
  transform values in place with keys included
-  reject with non-equality key
  reject with non-equality key
-  #each_with_object
-    "passes memo, key and value into block" iterator
    "passes memo, key and value into block" iterator
-    reduces the hash to the accumulated value of memo
    reduces the hash to the accumulated value of memo
-    "passes memo, key and value into block" yielding
    "passes memo, key and value into block" yielding
-  key_for
-    raises when no key pairs with the given value
    raises when no key pairs with the given value
-    returns the first key with the given value
    returns the first key with the given value
-    if block is given,
-      returns the first key with the given value
      returns the first key with the given value
-      yields the argument if no hash key pairs with the value
      yields the argument if no hash key pairs with the value
-  []=
-    overrides value
    overrides value
-  "#each_with_index(offset)" iterator
  "#each_with_index(offset)" iterator
-  has_key?
-    doesn't have key
    doesn't have key
-    has key
    has key
-  ==
-    compares hash of nested hash
    compares hash of nested hash
+Dir
+  tests exists? on a directory path to a file
  tests exists? on a directory path to a file
+  .mkdir_p
+    with a new path
    with a new path
+    path exists
+      noop when path is a directory
      noop when path is a directory
+      fails when path is a file
      fails when path is a file
+  tests mkdir with an existing path
  tests mkdir with an existing path
+  opens with new
  opens with new
+  gets dir iterator
  gets dir iterator
+  tests mkdir and delete with a new path
  tests mkdir and delete with a new path
+  #path
+    returns init value
    returns init value
+  does to_s
  does to_s
+  lists children
  lists children
+  lists entries
  lists entries
+  cd
+    accepts string
    accepts string
+    accepts a block with string
    accepts a block with string
+    raises
    raises
+    accepts path
    accepts path
+    accepts a block with path
    accepts a block with path
+  double close doesn't error
  double close doesn't error
+  tests mkdir and rmdir with a new path
  tests mkdir and rmdir with a new path
+  gets child iterator
  gets child iterator
+  tests exists? on existing file
  tests exists? on existing file
+  empty?
+    tests empty? on an empty directory
    tests empty? on an empty directory
+    tests empty? on a directory path to a file
    tests empty? on a directory path to a file
+    tests empty? on a full directory
    tests empty? on a full directory
+    tests empty? on nonexistent directory
    tests empty? on nonexistent directory
+  .tempdir
+    returns configure directory for tempfiles
    returns configure directory for tempfiles
+    returns default directory for tempfiles
    returns default directory for tempfiles
+  .delete
+    raises with symlink directory
    raises with symlink directory
+    raises with an nonexistent path
    raises with an nonexistent path
+    raises with a path that cannot be removed
    raises with a path that cannot be removed
+    deletes a read-only directory
    deletes a read-only directory
+  tests mkdir and delete? with a new path
  tests mkdir and delete? with a new path
+  tests exists? on nonexistent directory
  tests exists? on nonexistent directory
+  raises on null byte
+    errors on exists?
    errors on exists?
+    errors on mkdir
    errors on mkdir
+    errors on delete
    errors on delete
+    errors on cd
    errors on cd
+    errors on mkdir_p
    errors on mkdir_p
+    errors on new
    errors on new
+  tests info on existing directory
  tests info on existing directory
+  opens with open
  opens with open
+  tests exists? on existing directory
  tests exists? on existing directory
+  glob
+    tests with *
    tests with *
+    tests with []
    tests with []
+    matches symlink dir
    matches symlink dir
+    tests with */
    tests with */
+    pattern ending with ..
    pattern ending with ..
+    tests a recursive glob with '?'
    tests a recursive glob with '?'
+    tests with {}
    tests with {}
+    tests a recursive glob with alternation
    tests a recursive glob with alternation
+    tests with relative path
    tests with relative path
+    tests a glob with recursion inside alternation
    tests a glob with recursion inside alternation
+    tests a recursive glob
    tests a recursive glob
+    tests glob with a single pattern with extra slashes
    tests glob with a single pattern with extra slashes
+    tests with ** (same as *)
    tests with ** (same as *)
+    match: :dot_files / match_hidden
+      ignores hidden files
      ignores hidden files
+      ignores hidden files recursively
      ignores hidden files recursively
+      matches dot files
      matches dot files
+    tests double recursive matcher (#10807)
    tests double recursive matcher (#10807)
+    empty pattern
    empty pattern
+    tests with relative path starting recursive
    tests with relative path starting recursive
+    root pattern
    root pattern
+    tests with relative path (starts with ..)
    tests with relative path (starts with ..)
+    tests with \
    tests with \
+    pattern ending with .
    pattern ending with .
+    with path
+      windows path
      windows path
+      posix path
      posix path
+    tests a recursive glob with nested alternations
    tests a recursive glob with nested alternations
+    pattern ending with */.
    pattern ending with */.
+    tests glob with a single pattern with block
    tests glob with a single pattern with block
+    pattern ending with */..
    pattern ending with */..
+    tests with relative path (starts with .)
    tests with relative path (starts with .)
+    tests glob with a single pattern
    tests glob with a single pattern
+    tests double recursive matcher, multiple paths
    tests double recursive matcher, multiple paths
+    tests glob with multiple patterns
    tests glob with multiple patterns
+    matches symlinks
    matches symlinks
+  .current
+    matches shell
    matches shell
+    follows $PWD
    follows $PWD
+IO::ARGF
+  peek
+    peeks from STDIN if ARGV isn't specified
    peeks from STDIN if ARGV isn't specified
+    peeks from ARGV if specified
    peeks from ARGV if specified
+  reads when is more data left to read
  reads when is more data left to read
+  gets
+    reads from STDIN if ARGV isn't specified
    reads from STDIN if ARGV isn't specified
+    reads from ARGV if specified
    reads from ARGV if specified
+    reads from STDIN if ARGV isn't specified, chomp = false
    reads from STDIN if ARGV isn't specified, chomp = false
+  reads from ARGV if specified
  reads from ARGV if specified
+  reads from STDIN if ARGV isn't specified
  reads from STDIN if ARGV isn't specified
+Websocket integration tests
+  streams less than the buffer frame size
  streams less than the buffer frame size
+  streams single messages made up of multiple parts that eventually become more than the buffer frame size
  streams single messages made up of multiple parts that eventually become more than the buffer frame size
+  sends single text messages
  sends single text messages
+  streams single messages more than the buffer frame size
  streams single messages more than the buffer frame size
+WeakRef(T)
+  should get dereferenced object in data section
  should get dereferenced object in data section
+  FinalizeState counts released objects
  FinalizeState counts released objects
+  Referenced object should not be released
  Referenced object should not be released
+  Weak referenced object should be released if no other reference
  Weak referenced object should be released if no other reference
+  should get dereferenced object
  should get dereferenced object
+  should not crash with object in data section during GC
  should not crash with object in data section during GC
+expectations
+  be_falsey
     assert
    assert
     assert
    assert
-  "#each" yielding
  "#each" yielding
-  rejects!
  rejects!
-  empty
-    size should be zero
    size should be zero
-  []
-    gets
    gets
-  gets from literal
  gets from literal
-  "#each_with_index" yielding
  "#each_with_index" yielding
-  dig?
-    returns nil if not found
    returns nil if not found
-    gets the value at given path given splat
    gets the value at given path given splat
-  inverts
  inverts
-  returns empty hash when transforming keys of an empty hash
  returns empty hash when transforming keys of an empty hash
-  "#each_key" yielding
  "#each_key" yielding
-  "#each_value" iterator
  "#each_value" iterator
-  zips
  zips
-  select! with non-equality key
  select! with non-equality key
-  selects
  selects
-  compacts
  compacts
-  #rehash
-    resets @first (#14602)
    resets @first (#14602)
-    rehashes
    rehashes
-  clears after shift
  clears after shift
-  key_for?
-    returns nil if no key pairs with the given value
    returns nil if no key pairs with the given value
-    returns the first key with the given value
    returns the first key with the given value
-  inserts many
  inserts many
-  select
     assert
    assert
-    does not change current hash
    does not change current hash
     assert
    assert
+  be
     assert
    assert
     assert
    assert
     assert
    assert
-  "#each_with_index(offset)" yielding
  "#each_with_index(offset)" yielding
-  initializes with default value
  initializes with default value
-  transforms keys
  transforms keys
-  rejects
  rejects
-  transforms values with keys included
  transforms values with keys included
-  select!
     assert
    assert
-    does change current hash
    does change current hash
     assert
    assert
     assert
    assert
+  end_with
     assert
    assert
     assert
    assert
-    does not skip elements with an exhaustable enumerable argument (#12736)
    does not skip elements with an exhaustable enumerable argument (#12736)
-  gets nilable
  gets nilable
-  selects!
  selects!
-  does to to_s with instance that was never instantiated
  does to to_s with instance that was never instantiated
-  inserts in one bucket and deletes from the same one
  inserts in one bucket and deletes from the same one
-  reduce
-    reduces the hash to the accumulated value of memo
    reduces the hash to the accumulated value of memo
-    passes memo, key and value into block
    passes memo, key and value into block
-  can be wrapped
  can be wrapped
-  some edge cases while changing the implementation to open addressing
-    edge case 2
    edge case 2
-    edge case 1
    edge case 1
-    edge case 3
    edge case 3
-  delete
-    deletes only remaining entry
    deletes only remaining entry
-    deletes not found
    deletes not found
-    deletes key in the end
    deletes key in the end
-    deletes key in the beginning
    deletes key in the beginning
-    deletes key in the middle
    deletes key in the middle
-    with block
-      returns the value of the block if key is not found
      returns the value of the block if key is not found
-      returns nil if key is found and value is nil
      returns nil if key is found and value is nil
-      returns the value if a key is found
      returns the value if a key is found
-    deletes many in the beginning and then will need a resize
    deletes many in the beginning and then will need a resize
-  fetches from empty hash with default value
  fetches from empty hash with default value
-  last_value
-    raises on last value (nilable value)
    raises on last value (nilable value)
-    gets last value
    gets last value
-    doesn't raise on last value (nilable value)
    doesn't raise on last value (nilable value)
-  merges recursive type (#1693)
  merges recursive type (#1693)
-  does to_a after delete
  does to_a after delete
-  dig
-    gets the value at given path given splat
    gets the value at given path given splat
-    raises KeyError if not found
    raises KeyError if not found
-  select with non-equality key
  select with non-equality key
-  reject
     assert
    assert
     assert
    assert
     assert
    assert
-    does not change current hash
    does not change current hash
     assert
    assert
-  reject!
-    changes current hash
    changes current hash
+  be_a
     assert
    assert
     assert
    assert
+    restricts type on should
    restricts type on should
     assert
    assert
     assert
    assert
-  subset/superset operators
-    #superset_of?
-      assert
      assert
-    #proper_subset_of?
-      handles edge case where both values are nil
      handles edge case where both values are nil
-      assert
      assert
-    #subset_of?
-      handles edge case where both values are nil
      handles edge case where both values are nil
-      assert
      assert
-    #proper_superset_of?
-      assert
      assert
-  merges
  merges
-  gets array of values
  gets array of values
-  transforms values with type casting values
  transforms values with type casting values
-  merges with block
  merges with block
-  computes hash
  computes hash
-  clone
-    clones recursive hash
    clones recursive hash
-    clones big hash
    clones big hash
-    clones small hash
    clones small hash
-    clones with size = 1
    clones with size = 1
-    clones empty hash
    clones empty hash
-    retains default block on clone
    retains default block on clone
-  all?
-    evaluates the block for only for as many kv pairs as necessary
    evaluates the block for only for as many kv pairs as necessary
-    passes key and value into block
    passes key and value into block
-    returns true if the block evaluates truthy for every kv pair
    returns true if the block evaluates truthy for every kv pair
-  doesn't generate a negative index for the bucket index (#2321)
  doesn't generate a negative index for the bucket index (#2321)
-  compare_by_identity
-    retains compare_by_identity on clone
    retains compare_by_identity on clone
-    big hash
    big hash
-    small hash
    small hash
-    retains compare_by_identity on dup
    retains compare_by_identity on dup
-  shifts
  shifts
-  transforms values
  transforms values
-  does to_h
  does to_h
-  maps
  maps
-  does to_a after shift
  does to_a after shift
-  does each
  does each
-  update
-    raises if key does not exist and no default value specified (big hash)
    raises if key does not exist and no default value specified (big hash)
-    inserts a new entry using the default value as input, if key does not exist
    inserts a new entry using the default value as input, if key does not exist
-    can update with a nil value
    can update with a nil value
-    can update a current nil value with a new value
    can update a current nil value with a new value
-    returns the old value when key exists (big hash)
    returns the old value when key exists (big hash)
-    inserts a new entry using the value returned by the default block as input, if key does not exist
    inserts a new entry using the value returned by the default block as input, if key does not exist
-    returns the default value when key does not exist
    returns the default value when key does not exist
-    returns the old value when key exists
    returns the old value when key exists
-    raises if key does not exist and no default value specified
    raises if key does not exist and no default value specified
-    updates the value of an existing key with the given block (big hash)
    updates the value of an existing key with the given block (big hash)
-    inserts a new entry using the default value as input, if key does not exist (big hash)
    inserts a new entry using the default value as input, if key does not exist (big hash)
-    returns the default value when key does not exist (big hash)
    returns the default value when key does not exist (big hash)
-    inserts a new entry using the value returned by the default block as input, if key does not exist (big hash)
    inserts a new entry using the value returned by the default block as input, if key does not exist (big hash)
-    updates the value of an existing key with the given block
    updates the value of an existing key with the given block
-    doesn't create a duplicate key, if key does not exist and default block adds the given key (#14416)
    doesn't create a duplicate key, if key does not exist and default block adds the given key (#14416)
-  sets and gets
  sets and gets
-  transform values in place
  transform values in place
-  does each_key
  does each_key
-  does to_a
  does to_a
-  gets from union
  gets from union
-  "#each_with_index" iterator
  "#each_with_index" iterator
-  "#each_key" iterator
  "#each_key" iterator
-  shifts?
  shifts?
-  last_key
-    doesn't raise on last key (nilable key)
    doesn't raise on last key (nilable key)
-    gets last key
    gets last key
-    raises on last key (nilable key)
    raises on last key (nilable key)
-  creates with initial capacity and default value
  creates with initial capacity and default value
-  creates with initial capacity and block
  creates with initial capacity and block
-  merges!
  merges!
-  transforms keys with values included
  transforms keys with values included
-  fetch
-    fetches with block
    fetches with block
-    fetches with default value
    fetches with default value
-  "#each" iterator
  "#each" iterator
-  shifts: delete elements in the middle position and then in the first position
  shifts: delete elements in the middle position and then in the first position
-  merges! with block and nilable keys
  merges! with block and nilable keys
-  first_key
-    doesn't raise on first key (nilable key)
    doesn't raise on first key (nilable key)
-    gets first key
    gets first key
-    raises on first key (nilable key)
    raises on first key (nilable key)
-  does each_value
  does each_value
-  clears
  clears
-  merges! with block
  merges! with block
-  merges other type with block
  merges other type with block
-  values_at
-    works with mixed types
    works with mixed types
-    raises when passed an invalid key
    raises when passed an invalid key
-    returns the given keys
    returns the given keys
-  creates with initial capacity
  creates with initial capacity
-  reject with non-equality key
  reject with non-equality key
-  any?
-    returns true if the block evaluates truthy for at least one kv pair
    returns true if the block evaluates truthy for at least one kv pair
-    evaluates the block for only for as many kv pairs as necessary
    evaluates the block for only for as many kv pairs as necessary
-    passes key and value into block
    passes key and value into block
-    returns true if the hash contains at least one kv pair and no block is given
    returns true if the hash contains at least one kv pair and no block is given
-  initializes with block
  initializes with block
-  #put
-    puts in a big hash
    puts in a big hash
-    puts in a small hash
    puts in a small hash
-    yields key
    yields key
-  #put_if_absent
-    puts if key doesn't exist
    puts if key doesn't exist
-    doesn't put duplicate keys (#14425)
    doesn't put duplicate keys (#14425)
-    accepts a block
    accepts a block
-    returns existing value if key exists
    returns existing value if key exists
-  gets first
  gets first
-  first_value
-    gets first value
    gets first value
-    doesn't raise on first value (nilable value)
    doesn't raise on first value (nilable value)
-    raises on first value (nilable value)
    raises on first value (nilable value)
-  returns empty hash when transforming values of an empty hash
  returns empty hash when transforming values of an empty hash
-  to_s
+    restricts type on should_not
    restricts type on should_not
+  be_nil
     assert
    assert
     assert
    assert
-  has_value?
-    returns false if does not contain the value
    returns false if does not contain the value
-    returns true if contains the value
    returns true if contains the value
-  transforms keys with type casting
  transforms keys with type casting
-#errors
-  makes errors accessible
  makes errors accessible
-HTTP::ErrorHandler
-  doesn't write errors when there is some output already sent
  doesn't write errors when there is some output already sent
-  rescues from exception
  rescues from exception
-  log debug message when the output is closed
  log debug message when the output is closed
-  can return a generic error message
  can return a generic error message
-  logs to custom logger
  logs to custom logger
-Crystal::Hasher
-  to_s
-    should not expose internal data
    should not expose internal data
-  inspect
-    should not expose internal data
    should not expose internal data
-  normalization of numbers
-    should 1_f32 and 1.to_big_i hashes equal
    should 1_f32 and 1.to_big_i hashes equal
-    should 1_f32 and 1.to_big_r hashes equal
    should 1_f32 and 1.to_big_r hashes equal
-    should 1_f32 and 1.to_big_f hashes equal
    should 1_f32 and 1.to_big_f hashes equal
-    should 1_i32 and 1_f64 hashes equal
    should 1_i32 and 1_f64 hashes equal
-  behavior
-    #char should change state and differ
    #char should change state and differ
-    #string should change state and differ
    #string should change state and differ
-    #enum should change state and differ
    #enum should change state and differ
-    #float should change state and differ
    #float should change state and differ
-    #int should change state and differ
    #int should change state and differ
-    #symbol should change state and differ
    #symbol should change state and differ
-    128bit types should be hashed ok
    128bit types should be hashed ok
-    #bytes should change state and differ
    #bytes should change state and differ
-    #reference should change state and differ
    #reference should change state and differ
-    #int should be equal for different types
    #int should be equal for different types
-    #bool should change state and differ
    #bool should change state and differ
-    #class should change state and differ
    #class should change state and differ
-    #nil should change hasher state
    #nil should change hasher state
-    Big i64 numbers should be hashed ok
    Big i64 numbers should be hashed ok
-  .reduce_num
-    reduces BigDecimal
    reduces BigDecimal
-    reduces primitive float
    reduces primitive float
-    reduces BigFloat
    reduces BigFloat
-    reduces primitive int
    reduces primitive int
-    reduces BigRational
    reduces BigRational
-    reduces BigInt
    reduces BigInt
-  funny_hash
-    #bool should match test vectors
    #bool should match test vectors
-    #nil should match test vectors
    #nil should match test vectors
-    #int should match test vectors
    #int should match test vectors
-    #string should match test vectors
    #string should match test vectors
-    #float should match test vectors
    #float should match test vectors
-    result should work
    result should work
-Indexable::Mutable(T)
-  #rotate!
-    left-shifts all elements
    left-shifts all elements
-  #shuffle!
-    randomizes the order of all elements
    randomizes the order of all elements
-  #fill
-    with block + range
-      raises on out of bound start index
      raises on out of bound start index
-      sets zero elements
      sets zero elements
-      yields index to the block and sets elements in a subrange
      yields index to the block and sets elements in a subrange
-    with block + start + count
-      yields index to the block and sets elements in a subrange
      yields index to the block and sets elements in a subrange
-      raises on out of bound start index
      raises on out of bound start index
-      sets zero elements
      sets zero elements
-    with block + offset
-      yields index plus offset to the block and sets all elements
      yields index plus offset to the block and sets all elements
-    without block
-      sets all elements to the same value
      sets all elements to the same value
-    with block
-      yields index to the block and sets all elements
      yields index to the block and sets all elements
-    without block, with range
-      sets a subrange of elements to the same value
      sets a subrange of elements to the same value
-      raises on out of bound start index
      raises on out of bound start index
-      sets zero elements
      sets zero elements
-    without block, with start + count
-      sets a subrange of elements to the same value
      sets a subrange of elements to the same value
-      sets zero elements
      sets zero elements
-      raises on out of bound start index
      raises on out of bound start index
-  #map_with_index!
-    with offset
-      yields each element and index plus offset to the block
      yields each element and index plus offset to the block
-    without offset
-      yields each element and index to the block
      yields each element and index to the block
-  #reverse!
-    reverses the order of all elements in place
    reverses the order of all elements in place
-  #[]=
-    sets the value at the given index
    sets the value at the given index
-    wraps negative indices
    wraps negative indices
-    raises on out-of-bound indices
    raises on out-of-bound indices
-  #update
-    raises on out-of-bound indices
    raises on out-of-bound indices
-    wraps negative indices
    wraps negative indices
-    updates the value at the given index with the block
    updates the value at the given index with the block
-  #map!
-    replaces each element with the block value
    replaces each element with the block value
-  #swap
-    exchanges the values at two indices
    exchanges the values at two indices
-    wraps negative indices
    wraps negative indices
-    raises on out-of-bound indices
    raises on out-of-bound indices
-HTTP::Cookie
-  #valid? & #validate!
-    raises on invalid cookie with __Host- prefix
    raises on invalid cookie with __Host- prefix
-    with a __Secure- prefix, but @secure is somehow `nil`
    with a __Secure- prefix, but @secure is somehow `nil`
-    raises on invalid cookie with __Secure- prefix
    raises on invalid cookie with __Secure- prefix
-  #name=
-    automatically configures the cookie __Secure- prefix and related properties are unset
    automatically configures the cookie __Secure- prefix and related properties are unset
-    automatically configures the cookie __Host- prefix and related unset properties
    automatically configures the cookie __Host- prefix and related unset properties
-    doesn't raise on invalid cookie with __Secure- prefix
    doesn't raise on invalid cookie with __Secure- prefix
-    doesn't raise on invalid cookie with __Host- prefix
    doesn't raise on invalid cookie with __Host- prefix
-    raises on invalid name
    raises on invalid name
-  #to_set_cookie_header
+    restricts type on should_not
    restricts type on should_not
     assert
    assert
+  contain
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-    samesite
    samesite
-  #value=
-    raises on invalid value
    raises on invalid value
-  .new
-    raises on invalid name
    raises on invalid name
-    raises on invalid value
    raises on invalid value
-    with a security prefix
-      raises on invalid cookie with prefix
      raises on invalid cookie with prefix
-      automatically configures the cookie if it has the __Host- prefix and no explicit values provided
      automatically configures the cookie if it has the __Host- prefix and no explicit values provided
-      automatically makes the cookie secure if it has the __Secure- prefix and no explicit *secure* value is provided
      automatically makes the cookie secure if it has the __Secure- prefix and no explicit *secure* value is provided
-  #==
  #==
-UUID
-  serializes
-    #from_yaml
    #from_yaml
-    #to_yaml
    #to_yaml
-System::Group
-  #id
-    is the same as the source ID
    is the same as the source ID
-  #to_s
-    returns a string representation
    returns a string representation
-  #name
-    is the same as the source name
    is the same as the source name
-  .find_by(*, id)
-    raises on nonexistent group name
    raises on nonexistent group name
-    returns a group by id
    returns a group by id
-  .find_by?(*, name)
-    returns a group by name
    returns a group by name
-    returns nil on nonexistent group
    returns nil on nonexistent group
-  .find_by(*, name)
-    raises on nonexistent group
    raises on nonexistent group
-    returns a group by name
    returns a group by name
-  .find_by?(*, id)
-    returns nil on nonexistent group id
    returns nil on nonexistent group id
-    returns a group by id
    returns a group by id
-Time
-  #day_of_week
-    2012-1-2 is 1
    2012-1-2 is 1
-    2013-1-1 is 2
    2013-1-1 is 2
-    2014-1-1 is 3
    2014-1-1 is 3
-    2024-1-1 is 1
    2024-1-1 is 1
-    2011-1-3 is 1
    2011-1-3 is 1
-    2012-12-31 is 1
    2012-12-31 is 1
-    2011-1-10 is 1
    2011-1-10 is 1
-    2023-1-1 is 7
    2023-1-1 is 7
-    2015-1-1 is 4
    2015-1-1 is 4
-    2016-1-1 is 5
    2016-1-1 is 5
-    2012-1-8 is 7
    2012-1-8 is 7
-    1985-1-1 is 2
    1985-1-1 is 2
-    2021-1-1 is 5
    2021-1-1 is 5
-    1996-1-8 is 1
    1996-1-8 is 1
-    2011-1-2 is 7
    2011-1-2 is 7
-    2027-1-1 is 5
    2027-1-1 is 5
-    2011-1-7 is 5
    2011-1-7 is 5
-    1993-1-1 is 5
    1993-1-1 is 5
-    2017-1-1 is 7
    2017-1-1 is 7
-    1995-1-2 is 1
    1995-1-2 is 1
-    2012-1-1 is 7
    2012-1-1 is 7
-    2039-1-1 is 6
    2039-1-1 is 6
-    2011-1-8 is 6
    2011-1-8 is 6
-    2011-1-1 is 6
    2011-1-1 is 6
-    1984-1-1 is 7
    1984-1-1 is 7
-    1996-1-7 is 7
    1996-1-7 is 7
-    1982-1-1 is 5
    1982-1-1 is 5
-    2011-6-13 is 1
    2011-6-13 is 1
-    2036-1-1 is 2
    2036-1-1 is 2
-    2025-1-1 is 3
    2025-1-1 is 3
-    1981-1-1 is 4
    1981-1-1 is 4
-    2013-12-30 is 1
    2013-12-30 is 1
-    2014-1-5 is 7
    2014-1-5 is 7
-    2018-1-1 is 1
    2018-1-1 is 1
-    1997-1-1 is 3
    1997-1-1 is 3
-    1991-1-1 is 2
    1991-1-1 is 2
-    2033-1-1 is 6
    2033-1-1 is 6
-    1986-1-1 is 3
    1986-1-1 is 3
-    2012-12-30 is 7
    2012-12-30 is 7
-    2020-1-1 is 3
    2020-1-1 is 3
-    2011-1-11 is 2
    2011-1-11 is 2
-    2011-6-12 is 7
    2011-6-12 is 7
-    2011-12-27 is 2
    2011-12-27 is 2
-    1987-1-1 is 4
    1987-1-1 is 4
-    1995-1-1 is 7
    1995-1-1 is 7
-    2002-1-1 is 2
    2002-1-1 is 2
-    2011-12-28 is 3
    2011-12-28 is 3
-    2008-1-1 is 2
    2008-1-1 is 2
-    2000-1-1 is 6
    2000-1-1 is 6
-    2029-1-1 is 1
    2029-1-1 is 1
-    1992-1-1 is 3
    1992-1-1 is 3
-    2032-1-1 is 4
    2032-1-1 is 4
-    2009-1-1 is 4
    2009-1-1 is 4
-    2010-1-1 is 5
    2010-1-1 is 5
-    2011-12-31 is 6
    2011-12-31 is 6
-    2007-1-1 is 1
    2007-1-1 is 1
-    2011-12-25 is 7
    2011-12-25 is 7
-    2011-1-5 is 3
    2011-1-5 is 3
-    gets day of week
    gets day of week
-    2011-12-29 is 4
    2011-12-29 is 4
-    2004-1-1 is 4
    2004-1-1 is 4
-    2022-1-1 is 6
    2022-1-1 is 6
-    1989-1-1 is 7
    1989-1-1 is 7
-    2011-12-30 is 5
    2011-12-30 is 5
-    2031-1-1 is 3
    2031-1-1 is 3
-    2012-12-24 is 1
    2012-12-24 is 1
-    2012-12-23 is 7
    2012-12-23 is 7
-    1990-1-1 is 1
    1990-1-1 is 1
-    2013-12-23 is 1
    2013-12-23 is 1
-    1998-1-1 is 4
    1998-1-1 is 4
-    2013-12-22 is 7
    2013-12-22 is 7
-    2026-1-1 is 4
    2026-1-1 is 4
-    2019-1-1 is 2
    2019-1-1 is 2
-    2003-1-1 is 3
    2003-1-1 is 3
-    2011-12-26 is 1
    2011-12-26 is 1
-    2001-1-1 is 1
    2001-1-1 is 1
-    2011-1-4 is 2
    2011-1-4 is 2
-    2037-1-1 is 4
    2037-1-1 is 4
-    1988-1-1 is 5
    1988-1-1 is 5
-    2006-1-1 is 7
    2006-1-1 is 7
-    2038-1-1 is 5
    2038-1-1 is 5
-    1996-1-1 is 1
    1996-1-1 is 1
-    2013-1-7 is 1
    2013-1-7 is 1
-    2034-1-1 is 7
    2034-1-1 is 7
-    2010-1-1 is 5
    2010-1-1 is 5
-    1999-1-1 is 5
    1999-1-1 is 5
-    2013-12-29 is 7
    2013-12-29 is 7
-    2040-1-1 is 7
    2040-1-1 is 7
-    2030-1-1 is 2
    2030-1-1 is 2
-    2014-1-6 is 1
    2014-1-6 is 1
-    2035-1-1 is 1
    2035-1-1 is 1
-    1983-1-1 is 6
    1983-1-1 is 6
-    2012-1-9 is 1
    2012-1-9 is 1
-    1985-4-12 is 5
    1985-4-12 is 5
-    2011-1-6 is 4
    2011-1-6 is 4
-    2028-1-1 is 6
    2028-1-1 is 6
-    2011-1-9 is 7
    2011-1-9 is 7
-    1994-1-1 is 6
    1994-1-1 is 6
-    2013-1-6 is 7
    2013-1-6 is 7
-    2005-1-1 is 6
    2005-1-1 is 6
-  answers day name predicates
  answers day name predicates
-  #calendar_week
-    2011-1-9 to 2011-1
    2011-1-9 to 2011-1
-    1995-1-1 to 1994-52
    1995-1-1 to 1994-52
-    2003-1-1 to 2003-1
    2003-1-1 to 2003-1
-    2004-1-1 to 2004-1
    2004-1-1 to 2004-1
-    1997-1-1 to 1997-1
    1997-1-1 to 1997-1
-    2015-1-1 to 2015-1
    2015-1-1 to 2015-1
-    2025-1-1 to 2025-1
    2025-1-1 to 2025-1
-    2033-1-1 to 2032-53
    2033-1-1 to 2032-53
-    2010-1-1 to 2009-53
    2010-1-1 to 2009-53
-    2012-1-8 to 2012-1
    2012-1-8 to 2012-1
-    2011-1-4 to 2011-1
    2011-1-4 to 2011-1
-    1994-1-1 to 1993-52
    1994-1-1 to 1993-52
-    2012-12-31 to 2013-1
    2012-12-31 to 2013-1
-    1987-1-1 to 1987-1
    1987-1-1 to 1987-1
-    1990-1-1 to 1990-1
    1990-1-1 to 1990-1
-    1996-1-1 to 1996-1
    1996-1-1 to 1996-1
-    1988-1-1 to 1987-53
    1988-1-1 to 1987-53
-    2026-1-1 to 2026-1
    2026-1-1 to 2026-1
-    2021-1-1 to 2020-53
    2021-1-1 to 2020-53
-    2011-12-28 to 2011-52
    2011-12-28 to 2011-52
-    2012-1-1 to 2011-52
    2012-1-1 to 2011-52
-    2011-1-1 to 2010-52
    2011-1-1 to 2010-52
-    2029-1-1 to 2029-1
    2029-1-1 to 2029-1
-    1983-1-1 to 1982-52
    1983-1-1 to 1982-52
-    2028-1-1 to 2027-52
    2028-1-1 to 2027-52
-    2011-1-10 to 2011-2
    2011-1-10 to 2011-2
-    2011-12-31 to 2011-52
    2011-12-31 to 2011-52
-    2013-1-1 to 2013-1
    2013-1-1 to 2013-1
-    2011-12-27 to 2011-52
    2011-12-27 to 2011-52
-    2036-1-1 to 2036-1
    2036-1-1 to 2036-1
-    2030-1-1 to 2030-1
    2030-1-1 to 2030-1
-    2011-1-3 to 2011-1
    2011-1-3 to 2011-1
-    2031-1-1 to 2031-1
    2031-1-1 to 2031-1
-    1986-1-1 to 1986-1
    1986-1-1 to 1986-1
-    2023-1-1 to 2022-52
    2023-1-1 to 2022-52
-    2032-1-1 to 2032-1
    2032-1-1 to 2032-1
-    1996-1-8 to 1996-2
    1996-1-8 to 1996-2
-    1981-1-1 to 1981-1
    1981-1-1 to 1981-1
-    1984-1-1 to 1983-52
    1984-1-1 to 1983-52
-    2011-1-6 to 2011-1
    2011-1-6 to 2011-1
-    2009-1-1 to 2009-1
    2009-1-1 to 2009-1
-    2034-1-1 to 2033-52
    2034-1-1 to 2033-52
-    1992-1-1 to 1992-1
    1992-1-1 to 1992-1
-    2039-1-1 to 2038-52
    2039-1-1 to 2038-52
-    2012-1-2 to 2012-1
    2012-1-2 to 2012-1
-    2011-1-7 to 2011-1
    2011-1-7 to 2011-1
-    2011-12-29 to 2011-52
    2011-12-29 to 2011-52
-    2013-12-22 to 2013-51
    2013-12-22 to 2013-51
-    2011-12-30 to 2011-52
    2011-12-30 to 2011-52
-    2017-1-1 to 2016-52
    2017-1-1 to 2016-52
-    2001-1-1 to 2001-1
    2001-1-1 to 2001-1
-    2011-6-13 to 2011-24
    2011-6-13 to 2011-24
-    2022-1-1 to 2021-52
    2022-1-1 to 2021-52
-    2011-12-25 to 2011-51
    2011-12-25 to 2011-51
-    2018-1-1 to 2018-1
    2018-1-1 to 2018-1
-    2013-12-30 to 2014-1
    2013-12-30 to 2014-1
-    2002-1-1 to 2002-1
    2002-1-1 to 2002-1
-    1999-1-1 to 1998-53
    1999-1-1 to 1998-53
-    2024-1-1 to 2024-1
    2024-1-1 to 2024-1
-    2013-1-6 to 2013-1
    2013-1-6 to 2013-1
-    1989-1-1 to 1988-52
    1989-1-1 to 1988-52
-    1995-1-2 to 1995-1
    1995-1-2 to 1995-1
-    1993-1-1 to 1992-53
    1993-1-1 to 1992-53
-    2011-12-26 to 2011-52
    2011-12-26 to 2011-52
-    2020-1-1 to 2020-1
    2020-1-1 to 2020-1
-    2016-1-1 to 2015-53
    2016-1-1 to 2015-53
-    2012-12-24 to 2012-52
    2012-12-24 to 2012-52
-    2040-1-1 to 2039-52
    2040-1-1 to 2039-52
-    2005-1-1 to 2004-53
    2005-1-1 to 2004-53
-    2011-1-5 to 2011-1
    2011-1-5 to 2011-1
-    2012-12-23 to 2012-51
    2012-12-23 to 2012-51
-    2011-1-2 to 2010-52
    2011-1-2 to 2010-52
-    2010-1-1 to 2009-53
    2010-1-1 to 2009-53
-    2037-1-1 to 2037-1
    2037-1-1 to 2037-1
-    2035-1-1 to 2035-1
    2035-1-1 to 2035-1
-    2013-12-29 to 2013-52
    2013-12-29 to 2013-52
-    1991-1-1 to 1991-1
    1991-1-1 to 1991-1
-    2019-1-1 to 2019-1
    2019-1-1 to 2019-1
-    2011-1-11 to 2011-2
    2011-1-11 to 2011-2
-    2000-1-1 to 1999-52
    2000-1-1 to 1999-52
-    2011-6-12 to 2011-23
    2011-6-12 to 2011-23
-    1998-1-1 to 1998-1
    1998-1-1 to 1998-1
-    2012-12-30 to 2012-52
    2012-12-30 to 2012-52
-    2006-1-1 to 2005-52
    2006-1-1 to 2005-52
-    2014-1-5 to 2014-1
    2014-1-5 to 2014-1
-    2007-1-1 to 2007-1
    2007-1-1 to 2007-1
-    2013-12-23 to 2013-52
    2013-12-23 to 2013-52
-    1985-1-1 to 1985-1
    1985-1-1 to 1985-1
-    2038-1-1 to 2037-53
    2038-1-1 to 2037-53
-    2011-1-8 to 2011-1
    2011-1-8 to 2011-1
-    2012-1-9 to 2012-2
    2012-1-9 to 2012-2
-    2013-1-7 to 2013-2
    2013-1-7 to 2013-2
-    1985-4-12 to 1985-15
    1985-4-12 to 1985-15
-    2014-1-6 to 2014-2
    2014-1-6 to 2014-2
-    1982-1-1 to 1981-53
    1982-1-1 to 1981-53
-    2027-1-1 to 2026-53
    2027-1-1 to 2026-53
-    1996-1-7 to 1996-1
    1996-1-7 to 1996-1
-    2014-1-1 to 2014-1
    2014-1-1 to 2014-1
-    2008-1-1 to 2008-1
    2008-1-1 to 2008-1
-  #shift
-    adds zero span
    adds zero span
-    adds days
-      out of range min
      out of range min
-      over dst
      over dst
-      out of range max
      out of range max
-      simple
      simple
-      out of range min (shift days)
      out of range min (shift days)
-      out of range max (shift days)
      out of range max (shift days)
-    raises out of range min
    raises out of range min
-    covers date boundaries with zone offset (#8741)
    covers date boundaries with zone offset (#8741)
-    adds nanoseconds
    adds nanoseconds
-    adds months
    adds months
-    checks boundary at time max
    checks boundary at time max
-    raises out of range max
    raises out of range max
-    adds hours
    adds hours
-    preserves location when adding
    preserves location when adding
-    adds hours, minutes, seconds
    adds hours, minutes, seconds
-    checks boundary at time min
    checks boundary at time min
-    covers date boundaries with zone offset (#10869)
    covers date boundaries with zone offset (#10869)
-    adds years
    adds years
-    irregular calendaric unit ratios
-      shifts by conceptual hour even if elapsed time is less
      shifts by conceptual hour even if elapsed time is less
-      shifts by a week if one day is left out
      shifts by a week if one day is left out
-  #step
-    "advent" yielding
    "advent" yielding
-    "advent" iterator
    "advent" iterator
-  #clone
  #clone
-  .unix_ns
-    supports minimum valid time
    supports minimum valid time
-    supports maximum valid time
    supports maximum valid time
-    supports Int64 values
    supports Int64 values
-  #<=>
-    compares different locations
    compares different locations
-    compares
    compares
-  #in
-    changes location
    changes location
-  .unix
  .unix
-  .monotonic
-    returns always increasing monotonic clock
    returns always increasing monotonic clock
-  .days_in_month
-    raises exception for invalid year
    raises exception for invalid year
-    raises exception for invalid month
    raises exception for invalid month
-    returns days for valid month and year
    returns days for valid month and year
-  #year
  #year
-  #time_of_day
  #time_of_day
-  .local without arguments
-    current time is similar in different locations
    current time is similar in different locations
-  .leap_year?
-    knows that 400-year centuries are leap years
    knows that 400-year centuries are leap years
-    knows that typical non-century leap years are divisible by 4
    knows that typical non-century leap years are divisible by 4
-    knows that 100-year centuries are normal years
    knows that 100-year centuries are normal years
-    knows years *not* divisible by 4 are normal
    knows years *not* divisible by 4 are normal
-  .local
-    initializes
    initializes
-    fails with negative nanosecond
    fails with negative nanosecond
-    checks boundary at time min
    checks boundary at time min
-    fails with too big nanoseconds
    fails with too big nanoseconds
-    checks boundary at time max
    checks boundary at time max
-    initializes max value
    initializes max value
-    accepts midnight 24:00
    accepts midnight 24:00
-  #day_of_year
  #day_of_year
-  #to_s
-    prints offset for fixed location
    prints offset for fixed location
-    prints offset for location
    prints offset for location
-    prints string
    prints string
-    prints date-time fields
    prints date-time fields
-    prints local time
    prints local time
-    omits nanoseconds
    omits nanoseconds
-  .measure
-    measures elapsed time
    measures elapsed time
-  .week_date
-    verify test data
-      W2010-52-7 eq 2011-1-2
      W2010-52-7 eq 2011-1-2
-      W1988-52-7 eq 1989-1-1
      W1988-52-7 eq 1989-1-1
-      W1992-53-5 eq 1993-1-1
      W1992-53-5 eq 1993-1-1
-      W2011-52-1 eq 2011-12-26
      W2011-52-1 eq 2011-12-26
-      W2014-1-1 eq 2013-12-30
      W2014-1-1 eq 2013-12-30
-      W2008-1-2 eq 2008-1-1
      W2008-1-2 eq 2008-1-1
-      W2026-1-4 eq 2026-1-1
      W2026-1-4 eq 2026-1-1
-      W1982-52-6 eq 1983-1-1
      W1982-52-6 eq 1983-1-1
-      W2035-1-1 eq 2035-1-1
      W2035-1-1 eq 2035-1-1
-      W2014-1-3 eq 2014-1-1
      W2014-1-3 eq 2014-1-1
-      W2009-53-5 eq 2010-1-1
      W2009-53-5 eq 2010-1-1
-      W1981-53-5 eq 1982-1-1
      W1981-53-5 eq 1982-1-1
-      W2011-1-3 eq 2011-1-5
      W2011-1-3 eq 2011-1-5
-      W2013-52-1 eq 2013-12-23
      W2013-52-1 eq 2013-12-23
-      W1998-53-5 eq 1999-1-1
      W1998-53-5 eq 1999-1-1
-      W2015-1-4 eq 2015-1-1
      W2015-1-4 eq 2015-1-1
-      W1983-52-7 eq 1984-1-1
      W1983-52-7 eq 1984-1-1
-      W2011-1-7 eq 2011-1-9
      W2011-1-7 eq 2011-1-9
-      W2024-1-1 eq 2024-1-1
      W2024-1-1 eq 2024-1-1
-      W2009-1-4 eq 2009-1-1
      W2009-1-4 eq 2009-1-1
-      W2001-1-1 eq 2001-1-1
      W2001-1-1 eq 2001-1-1
-      W2021-52-6 eq 2022-1-1
      W2021-52-6 eq 2022-1-1
-      W2007-1-1 eq 2007-1-1
      W2007-1-1 eq 2007-1-1
-      W2020-53-5 eq 2021-1-1
      W2020-53-5 eq 2021-1-1
-      W2011-51-7 eq 2011-12-25
      W2011-51-7 eq 2011-12-25
-      W2014-2-1 eq 2014-1-6
      W2014-2-1 eq 2014-1-6
-      W2032-1-4 eq 2032-1-1
      W2032-1-4 eq 2032-1-1
-      W2011-1-5 eq 2011-1-7
      W2011-1-5 eq 2011-1-7
-      W1996-1-1 eq 1996-1-1
      W1996-1-1 eq 1996-1-1
-      W2012-52-7 eq 2012-12-30
      W2012-52-7 eq 2012-12-30
-      W2022-52-7 eq 2023-1-1
      W2022-52-7 eq 2023-1-1
-      W2011-52-2 eq 2011-12-27
      W2011-52-2 eq 2011-12-27
-      W2036-1-2 eq 2036-1-1
      W2036-1-2 eq 2036-1-1
-      W1998-1-4 eq 1998-1-1
      W1998-1-4 eq 1998-1-1
-      W2013-2-1 eq 2013-1-7
      W2013-2-1 eq 2013-1-7
-      W2013-1-7 eq 2013-1-6
      W2013-1-7 eq 2013-1-6
-      W1997-1-3 eq 1997-1-1
      W1997-1-3 eq 1997-1-1
-      W2011-1-4 eq 2011-1-6
      W2011-1-4 eq 2011-1-6
-      W1996-2-1 eq 1996-1-8
      W1996-2-1 eq 1996-1-8
-      W1991-1-2 eq 1991-1-1
      W1991-1-2 eq 1991-1-1
-      W2031-1-3 eq 2031-1-1
      W2031-1-3 eq 2031-1-1
-      W2014-1-7 eq 2014-1-5
      W2014-1-7 eq 2014-1-5
-      W2011-1-1 eq 2011-1-3
      W2011-1-1 eq 2011-1-3
-      W1994-52-7 eq 1995-1-1
      W1994-52-7 eq 1995-1-1
-      W2015-53-5 eq 2016-1-1
      W2015-53-5 eq 2016-1-1
-      W2011-1-2 eq 2011-1-4
      W2011-1-2 eq 2011-1-4
-      W2011-24-1 eq 2011-6-13
      W2011-24-1 eq 2011-6-13
-      W2011-52-3 eq 2011-12-28
      W2011-52-3 eq 2011-12-28
-      W2011-23-7 eq 2011-6-12
      W2011-23-7 eq 2011-6-12
-      W2030-1-2 eq 2030-1-1
      W2030-1-2 eq 2030-1-1
-      W2032-53-6 eq 2033-1-1
      W2032-53-6 eq 2033-1-1
-      W2029-1-1 eq 2029-1-1
      W2029-1-1 eq 2029-1-1
-      W2011-52-6 eq 2011-12-31
      W2011-52-6 eq 2011-12-31
-      W1987-1-4 eq 1987-1-1
      W1987-1-4 eq 1987-1-1
-      W2012-52-1 eq 2012-12-24
      W2012-52-1 eq 2012-12-24
-      W2012-2-1 eq 2012-1-9
      W2012-2-1 eq 2012-1-9
-      W2005-52-7 eq 2006-1-1
      W2005-52-7 eq 2006-1-1
-      W2038-52-6 eq 2039-1-1
      W2038-52-6 eq 2039-1-1
-      W1996-1-7 eq 1996-1-7
      W1996-1-7 eq 1996-1-7
-      W1992-1-3 eq 1992-1-1
      W1992-1-3 eq 1992-1-1
-      W2013-52-7 eq 2013-12-29
      W2013-52-7 eq 2013-12-29
-      W2037-53-5 eq 2038-1-1
      W2037-53-5 eq 2038-1-1
-      W2011-1-6 eq 2011-1-8
      W2011-1-6 eq 2011-1-8
-      W1993-52-6 eq 1994-1-1
      W1993-52-6 eq 1994-1-1
-      W1981-1-4 eq 1981-1-1
      W1981-1-4 eq 1981-1-1
-      W2003-1-3 eq 2003-1-1
      W2003-1-3 eq 2003-1-1
-      W1987-53-5 eq 1988-1-1
      W1987-53-5 eq 1988-1-1
-      W2037-1-4 eq 2037-1-1
      W2037-1-4 eq 2037-1-1
-      W2011-2-2 eq 2011-1-11
      W2011-2-2 eq 2011-1-11
-      W2010-52-6 eq 2011-1-1
      W2010-52-6 eq 2011-1-1
-      W2025-1-3 eq 2025-1-1
      W2025-1-3 eq 2025-1-1
-      W2011-2-1 eq 2011-1-10
      W2011-2-1 eq 2011-1-10
-      W1999-52-6 eq 2000-1-1
      W1999-52-6 eq 2000-1-1
-      W2027-52-6 eq 2028-1-1
      W2027-52-6 eq 2028-1-1
-      W2004-53-6 eq 2005-1-1
      W2004-53-6 eq 2005-1-1
-      W2002-1-2 eq 2002-1-1
      W2002-1-2 eq 2002-1-1
-      W1985-15-5 eq 1985-4-12
      W1985-15-5 eq 1985-4-12
-      W2016-52-7 eq 2017-1-1
      W2016-52-7 eq 2017-1-1
-      W2013-1-2 eq 2013-1-1
      W2013-1-2 eq 2013-1-1
-      W2018-1-1 eq 2018-1-1
      W2018-1-1 eq 2018-1-1
-      W2009-53-5 eq 2010-1-1
      W2009-53-5 eq 2010-1-1
-      W1985-1-2 eq 1985-1-1
      W1985-1-2 eq 1985-1-1
-      W2026-53-5 eq 2027-1-1
      W2026-53-5 eq 2027-1-1
-      W2012-51-7 eq 2012-12-23
      W2012-51-7 eq 2012-12-23
-      W2020-1-3 eq 2020-1-1
      W2020-1-3 eq 2020-1-1
-      W2011-52-7 eq 2012-1-1
      W2011-52-7 eq 2012-1-1
-      W2033-52-7 eq 2034-1-1
      W2033-52-7 eq 2034-1-1
-      W2004-1-4 eq 2004-1-1
      W2004-1-4 eq 2004-1-1
-      W2012-1-7 eq 2012-1-8
      W2012-1-7 eq 2012-1-8
-      W2039-52-7 eq 2040-1-1
      W2039-52-7 eq 2040-1-1
-      W2013-51-7 eq 2013-12-22
      W2013-51-7 eq 2013-12-22
-      W2013-1-1 eq 2012-12-31
      W2013-1-1 eq 2012-12-31
-      W2019-1-2 eq 2019-1-1
      W2019-1-2 eq 2019-1-1
-      W2011-52-4 eq 2011-12-29
      W2011-52-4 eq 2011-12-29
-      W1986-1-3 eq 1986-1-1
      W1986-1-3 eq 1986-1-1
-      W2012-1-1 eq 2012-1-2
      W2012-1-1 eq 2012-1-2
-      W1995-1-1 eq 1995-1-2
      W1995-1-1 eq 1995-1-2
-      W1990-1-1 eq 1990-1-1
      W1990-1-1 eq 1990-1-1
-      W2011-52-5 eq 2011-12-30
      W2011-52-5 eq 2011-12-30
-    accepts time arguments
    accepts time arguments
-  .days_in_year
  .days_in_year
-  #to_s
  #to_s
-  does diff of utc vs local time
  does diff of utc vs local time
-  #to_local_in
-    keeps wall clock
    keeps wall clock
-    is the difference of offsets apart
    is the difference of offsets apart
-  Time::DayOfWeek
-    .from_value
    .from_value
-    #value
    #value
-    .new does not identify 0 as Sunday
    .new does not identify 0 as Sunday
-  .unix_ms
  .unix_ms
-  #inspect
  #inspect
-  at methods
  at methods
-  #to_unix
-    gets unix seconds
    gets unix seconds
-    gets unix seconds at GMT
    gets unix seconds at GMT
-  UNIX_EPOCH
  UNIX_EPOCH
-Fiber
-  #resumable?
  #resumable?
-log/spec
-  fails on non-consecutive logs
  fails on non-consecutive logs
-  can capture from all sources
  can capture from all sources
-  it does not capture below level
  it does not capture below level
-  can get the entry matched by next
  can get the entry matched by next
-  can capture with source pattern
  can capture with source pattern
-  allows matching logs
  allows matching logs
-  fails on non-empty logs
  fails on non-empty logs
-  allows matching with regex
  allows matching with regex
-  allows matching logs strictly
  allows matching logs strictly
-  can get the entry matched by check
  can get the entry matched by check
-  allows matching non-consecutive logs
  allows matching non-consecutive logs
-  entries can be cleared
  entries can be cleared
-  yield and returns the dsl
  yield and returns the dsl
-  can capture in different checkers
  can capture in different checkers
-Log::BroadcastBackend
-  writes to the backend based on level
  writes to the backend based on level
-  overwriting log level overwrites to all backends
  overwriting log level overwrites to all backends
-  #min_level
-    on empty
    on empty
-    single backend
    single backend
-    multiple backends
    multiple backends
-Iterator(T)
-  each
-    yields the individual elements to the block
    yields the individual elements to the block
-  #cons
-    conses
    conses
-    reuse
-      reuse as deque
      reuse as deque
-      reuse as Bool
      reuse as Bool
-      reuse as nil
      reuse as nil
-      reuse as Array
      reuse as Array
-  #cons_pair
-    doesn't include stop in return type
    doesn't include stop in return type
-    conses
    conses
-  first
-    is cool to first 0 elements
    is cool to first 0 elements
-    does first with Range iterator
    does first with Range iterator
-    raises ArgumentError if negative size is provided
    raises ArgumentError if negative size is provided
-    does first with more than available
    does first with more than available
-  cycle
-    does not cycle provided 0
    does not cycle provided 0
-    cycles an empty array
    cycles an empty array
-    does not cycle provided a negative size
    does not cycle provided a negative size
-    does cycle from range
    does cycle from range
-    cycles N times
    cycles N times
-  skip
-    is cool to skip 0 elements
    is cool to skip 0 elements
-    does skip with Range iterator
    does skip with Range iterator
-    raises ArgumentError if negative size is provided
    raises ArgumentError if negative size is provided
-  integration
-    combines many iterators
    combines many iterators
-  compact_map
-    does not return nil values
    does not return nil values
-  with object
-    does with object, with block
    does with object, with block
-    does with object
    does with object
-  select
-    does with pattern
    does with pattern
-    does select with Range iterator
    does select with Range iterator
-    does with type
    does with type
-  #accumulate
-    generic cumulative fold, with init
-      accumulates values
      accumulates values
-      preserves initial type
      preserves initial type
-      empty iterator returns only initial value
      empty iterator returns only initial value
-    prefix sums
-      empty iterator stops immediately
      empty iterator stops immediately
-      returns prefix sums
      returns prefix sums
-    prefix sums, with init
-      empty iterator returns only initial value
      empty iterator returns only initial value
-      preserves initial type
      preserves initial type
-      returns prefix sums
      returns prefix sums
-    generic cumulative fold
-      empty iterator stops immediately
      empty iterator stops immediately
-      accumulates values
      accumulates values
-  #slice_before
-    slices before: non-bool block
    slices before: non-bool block
-    slices before pattern
    slices before pattern
-    slices before: #rewind
    slices before: #rewind
-    slices before nil
    slices before nil
-    slices before pattern with reuse = true
    slices before pattern with reuse = true
-    slices before
    slices before
-    slices before with reuse = true
    slices before with reuse = true
-    slices before with reuse = array
    slices before with reuse = array
-    slices before: #to_a
    slices before: #to_a
-    slices before: first element matches
    slices before: first element matches
-  #flat_map
-    flattens returned values
    flattens returned values
-    flattens returned iterators
    flattens returned iterators
-    flattens returned arrays
    flattens returned arrays
-    flattens returned values of mixed element types in #to_a
    flattens returned values of mixed element types in #to_a
-    flattens returned items
    flattens returned items
-  in_groups_of
-    still works with other iterator methods like to_a
    still works with other iterator methods like to_a
-    creates a group of two with reuse = true
    creates a group of two with reuse = true
-    fills up with the fill up argument
    fills up with the fill up argument
-    creates groups of one
    creates groups of one
-    creates a group of two
    creates a group of two
-    raises argument error if size is less than 0
    raises argument error if size is less than 0
-  compact_map
-    applies the function and removes nil values
    applies the function and removes nil values
-    sums after compact_map to_a
    sums after compact_map to_a
-  zip
-    takes multiple Iterators
    takes multiple Iterators
-    does skip with Range iterator
    does skip with Range iterator
-  take_while
-    does take_while with more than available
    does take_while with more than available
-    only calls the block as much as needed
    only calls the block as much as needed
-    does take_while with Range iterator
    does take_while with Range iterator
-  #chunk_while
-    chunks while
    chunks while
-  flatten
-    flattens an iterator of mixed-type iterators
    flattens an iterator of mixed-type iterators
-    flattens an iterator of mixed-type elements and iterators and iterators of iterators
    flattens an iterator of mixed-type elements and iterators and iterators of iterators
-    flattens a variety of edge cases
    flattens a variety of edge cases
-    return iterator itself by rewind
    return iterator itself by rewind
-    flattens a deeply-nested iterables and arrays (#3703)
    flattens a deeply-nested iterables and arrays (#3703)
-    flattens an iterator of mixed-type elements and iterators
    flattens an iterator of mixed-type elements and iterators
-    flattens deeply-nested and mixed type iterators
    flattens deeply-nested and mixed type iterators
-    flattens nested struct iterators with internal state being value types
    flattens nested struct iterators with internal state being value types
-  #with_index
-    "with default offset" iterator
    "with default offset" iterator
-    "with explicit offset" iterator
    "with explicit offset" iterator
-    "with default offset" yielding
    "with default offset" yielding
-    "with non-Int32 offset" iterator
    "with non-Int32 offset" iterator
-    "with non-Int32 offset" yielding
    "with non-Int32 offset" yielding
-    "with explicit offset" yielding
    "with explicit offset" yielding
-  uniq
-    without block
    without block
-    with block
    with block
-  map
-    does map with Range iterator
    does map with Range iterator
-  skip_while
-    does skip_while with an array
    does skip_while with an array
-    only calls the block as much as needed
    only calls the block as much as needed
-    can skip everything
    can skip everything
-    returns the full array if the condition is false for the first item
    returns the full array if the condition is false for the first item
-  chain
-    does not experience tuple upcase bug of #13411
    does not experience tuple upcase bug of #13411
-    chain indeterminate number of iterators
-      chains array of empty
      chains array of empty
-      chains all together
      chains all together
-      chains iterators of different type
      chains iterators of different type
-      rewinds
      rewinds
-      chains empty
      chains empty
-    chains
    chains
-  #slice_after
-    slices after pattern with reuse = true
    slices after pattern with reuse = true
-    slices after: non-bool block
    slices after: non-bool block
-    slices after: #to_a
    slices after: #to_a
-    slices after with reuse = true
    slices after with reuse = true
-    slices after pattern
    slices after pattern
-    slices after: #rewind
    slices after: #rewind
-    slices after
    slices after
-    slices after with reuse = array
    slices after with reuse = array
-  each_slice
-    returns each_slice iterator with reuse = array
    returns each_slice iterator with reuse = array
-    also works if it does not add up
    also works if it does not add up
-    returns each_slice iterator with reuse = true
    returns each_slice iterator with reuse = true
-    gets all the slices of the size n
    gets all the slices of the size n
-  #slice_when
-    slices when: single value
    slices when: single value
-    slices when: non-bool block
    slices when: non-bool block
-    slices when with reuse = array
    slices when with reuse = array
-    slices when: two values
    slices when: two values
-    slices when: #to_a
    slices when: #to_a
-    slices when
    slices when
-    slices when with reuse = true
    slices when with reuse = true
-    slices when: #rewind
    slices when: #rewind
-  step
-    returns every third element
    returns every third element
-    returns every element
    returns every element
-    raises with nonsensical steps
    raises with nonsensical steps
-    returns every other element
    returns every other element
-  tap
-    taps
    taps
-  slice
-    slices
    slices
-    doesnt conflict with `::Slice` type
    doesnt conflict with `::Slice` type
-  Iterator.of
-    creates singleton from block can call Iterator.stop
    creates singleton from block can call Iterator.stop
-    creates singleton from block
    creates singleton from block
-    creates singleton
    creates singleton
-  reject
-    does reject with Range iterator
    does reject with Range iterator
-    does with type
    does with type
-    does with pattern
    does with pattern
-PROGRAM_NAME
-  works for UTF-8 name
  works for UTF-8 name
-UUID
-  v7
-    generates a v7 UUID
    generates a v7 UUID
-    generates UUIDs that are sortable with 1ms precision
    generates UUIDs that are sortable with 1ms precision
-  initializes with slice
  initializes with slice
-  v2
-    returns true if UUID is v2, false otherwise
    returns true if UUID is v2, false otherwise
-  v5
-    generates OID based names correctly
    generates OID based names correctly
-    generates X500 based names correctly
    generates X500 based names correctly
-    generates DNS based names correctly
    generates DNS based names correctly
-    generates URL based names correctly
    generates URL based names correctly
-  random initialize
-    works with no options
    works with no options
-    does inspect
    does inspect
-    works with variant
    works with variant
-    works with version
    works with version
-  v3
-    generates X500 based names correctly
    generates X500 based names correctly
-    generates URL based names correctly
    generates URL based names correctly
-    generates OID based names correctly
    generates OID based names correctly
-    generates DNS based names correctly
    generates DNS based names correctly
-  parsing strings
-    returns nil if it has the wrong number of characters
    returns nil if it has the wrong number of characters
-    returns nil if it has incorrect characters
    returns nil if it has incorrect characters
-    returns a properly parsed UUID
    returns a properly parsed UUID
-  #<=>
-    correctly compares two UUIDs
    correctly compares two UUIDs
-  v4?
-    returns true if UUID is v4, false otherwise
    returns true if UUID is v4, false otherwise
-  initialize from static array
-    works with static array and variant
    works with static array and variant
-    works with static array, variant and version
    works with static array, variant and version
-    works with static array only
    works with static array only
-    works with static array and version
    works with static array and version
-  v4!
-    returns true if UUID is v4, raises otherwise
    returns true if UUID is v4, raises otherwise
-  initialize with String
-    works with string and variant
    works with string and variant
-    can be built from strings
    can be built from strings
-    works with string only
    works with string only
-    works with string and version
    works with string and version
-  initializes zeroed UUID
  initializes zeroed UUID
-  supports different string formats
-    normal output
    normal output
-    hexstring
    hexstring
-    urn
    urn
-  #==
-    matches identical UUIDs
    matches identical UUIDs
-  v1
-    returns true if UUID is v1, false otherwise
    returns true if UUID is v1, false otherwise
-  fails on invalid arguments when creating
  fails on invalid arguments when creating
-  initializes from UUID
  initializes from UUID
-LLVM
-  .default_target_triple
  .default_target_triple
-  .normalize_triple
-    works
    works
-    substitutes unknown for empty components
    substitutes unknown for empty components
-Compress::Gzip
-  writes and reads to memory
  writes and reads to memory
-  rewinds
  rewinds
-  reads file with extra fields from file system
  reads file with extra fields from file system
-  writes and reads file with extra fields
  writes and reads file with extra fields
-HTTP::Params
-  is alias for URI::Params
  is alias for URI::Params
-.from_www_form
-  Bool
-    a truthy value
    a truthy value
-    any other value
    any other value
-    a falsey value
    a falsey value
-  Array(T)
  Array(T)
-  Enum
-    invalid value
    invalid value
-    valid value
    valid value
-  Union(*T)
-    valid
    valid
-    invalid
    invalid
-  Time
-    invalid value
    invalid value
-    valid value
    valid value
-  String
-    scalar string
    scalar string
-    with alternate casing
    with alternate casing
-    empty value
    empty value
-    with missing key
    with missing key
-    with key
    with key
-  Nil
-    invalid value
    invalid value
-    valid values
    valid values
-  Number
-    Int
-      with whitespace
      with whitespace
-      valid numbers
      valid numbers
-      empty value
      empty value
-    Float
-      empty value
      empty value
-      valid numbers
      valid numbers
-      with whitespace
      with whitespace
-Socket
-  ==
  ==
-  .ip?
  .ip?
-XML
-  #namespace_scopes
-    gets root namespaces scopes
    gets root namespaces scopes
-    returns empty array if no namespaces scopes exists
    returns empty array if no namespaces scopes exists
-    includes parent namespaces
    includes parent namespaces
-  .build
  .build
-  raises exception on empty string
  raises exception on empty string
-  gets empty content
  gets empty content
-  #namespace_definitions
-    returns namespaces explicitly defined
    returns namespaces explicitly defined
-    returns an empty array if no namespaces are defined
    returns an empty array if no namespaces are defined
-  #namespace
-    when the element does not have a namespace, but has namespace declarations
-      should return nil
      should return nil
-    when the node does not have namespace
-      should return nil
      should return nil
-    when the node has a namespace
-      without an explicit declaration on the node
-        returns the related namespace
        returns the related namespace
-      with a prefix
-        return the prefixed namespace
        return the prefixed namespace
-      with a default prefix
-        return the default namespace
        return the default namespace
-  doesn't set invalid node content
  doesn't set invalid node content
-  sets node name
  sets node name
-  navigates in tree
  navigates in tree
-  sets node text/content
  sets node text/content
-  parses XML UTF-8 from IO (#13703)
  parses XML UTF-8 from IO (#13703)
-  .build_fragment
-    builds fragment without XML declaration
    builds fragment without XML declaration
-    closes open elements
    closes open elements
-  gets version
  gets version
-  changes an attribute
  changes an attribute
-  does to_s with correct encoding (#2319)
  does to_s with correct encoding (#2319)
-  unlinks nodes
  unlinks nodes
-  gets encoding
  gets encoding
-  parses HTML UTF-8 from memory (#13703)
  parses HTML UTF-8 from memory (#13703)
-  does to_s
  does to_s
-  sets an attribute
  sets an attribute
-  doesn't set invalid node name
  doesn't set invalid node name
-  shows content when inspecting attribute
  shows content when inspecting attribute
-  #namespaces
-    returns an empty hash if there are no namespaces
    returns an empty hash if there are no namespaces
-    gets root namespaces as hash
    gets root namespaces as hash
-    includes parent namespaces
    includes parent namespaces
-  escapes content HTML fragment
  escapes content HTML fragment
-  #errors
  #errors
-  gets encoding when nil
  gets encoding when nil
-  escapes content
  escapes content
-  reads big xml file (#1455)
  reads big xml file (#1455)
-  parses XML UTF-8 from memory (#13703)
  parses XML UTF-8 from memory (#13703)
-  parses from io
  parses from io
-  deletes an attribute
  deletes an attribute
-  parses
  parses
-  parses HTML UTF-8 from IO (#13703)
  parses HTML UTF-8 from IO (#13703)
-Float64
-  #to_hexfloat
-    exponents
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    trimming
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    hexits
-      assert
      assert
-      assert
      assert
-    corner cases
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-    special cases
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-  .parse_hexfloat
-    round-to-nearest, ties-to-even
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
     assert
    assert
     assert
    assert
     assert
    assert
+  be_truthy
     assert
    assert
     assert
    assert
     assert
    assert
-    values close to MIN_POSITIVE and MAX
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
     assert
    assert
+  empty
     assert
    assert
     assert
    assert
     assert
    assert
@@ -27148,40 +22165,152 @@
     assert
    assert
     assert
    assert
     assert
    assert
+  be_close
     assert
    assert
     assert
    assert
+  eq
     assert
    assert
     assert
    assert
+  be
+    works with module type (#14920)
    works with module type (#14920)
     assert
    assert
     assert
    assert
+    works with type that does not implement `#object_id`
    works with type that does not implement `#object_id`
+  match
     assert
    assert
     assert
    assert
     assert
    assert
+  expect_raises
+    pass if raises MyError
    pass if raises MyError
+  start_with
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-    special cases
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
     assert
    assert
     assert
    assert
+  be_false
     assert
    assert
     assert
    assert
-    values close to zero
-      assert
      assert
-      assert
      assert
-      assert
      assert
-      assert
      assert
+    assert
    assert
+    assert
    assert
+  be_true
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  accept a custom failure message
+    assert
    assert
+    assert
    assert
+Crystal::System
+  .printf
+    supports %u
    supports %u
+    works
    works
+    supports %p
    supports %p
+    supports %l width
    supports %l width
+    supports %s
    supports %s
+    supports %x
    supports %x
+    supports %d
    supports %d
+OptionParser
+  does to_s with multi line description (#5832)
  does to_s with multi line description (#5832)
+  gets short option with value that looks like flag
  gets short option with value that looks like flag
+  has required option with =
  has required option with =
+  doesn't raise if optional option is not specified with short flag
  doesn't raise if optional option is not specified with short flag
+  parses argument when only referenced in long flag
  parses argument when only referenced in long flag
+  raises on invalid option if value is given to none value handler (short flag, #9553) 
  raises on invalid option if value is given to none value handler (short flag, #9553) 
+  parses argument when referenced in long and short flag
  parses argument when referenced in long and short flag
+  can run a callback on every argument
  can run a callback on every argument
+  doesn't raise if required option is not specified
  doesn't raise if required option is not specified
+  gets long option with value -- (#8937)
  gets long option with value -- (#8937)
+  has required option with = (2)
  has required option with = (2)
+  unregisters subcommands on call
  unregisters subcommands on call
+  gnu_optional_args
+    doesn't get optional argument for long flag after space
    doesn't get optional argument for long flag after space
+    doesn't get optional argument for short flag after space
    doesn't get optional argument for short flag after space
+  raises if missing required argument separated from long flag
  raises if missing required argument separated from long flag
+  has flag
  has flag
+  multiple times
+    gets a double flag option multiple times
    gets a double flag option multiple times
+    gets a single flag option multiple times
    gets a single flag option multiple times
+    gets an existence flag multiple times
    gets an existence flag multiple times
+  has required option with space
  has required option with space
+  has required option separated from long flag
  has required option separated from long flag
+  calls the handler for invalid options
  calls the handler for invalid options
+  has flag with double dash
  has flag with double dash
+  has required option separated from flag
  has required option separated from flag
+  raises if flag pair doesn't start with dash (#4001)
  raises if flag pair doesn't start with dash (#4001)
+  doesn't raise if optional option is not specified with separated short flag
  doesn't raise if optional option is not specified with separated short flag
+  doesn't have flag
  doesn't have flag
+  raises if missing required option with space
  raises if missing required option with space
+  does to_s with separators
  does to_s with separators
+  handles subcommands
  handles subcommands
+  forward-match
+    distinguishes between '--lamb VALUE' and '--lambda VALUE'
    distinguishes between '--lamb VALUE' and '--lambda VALUE'
+    distinguishes between '--lamb=VALUE' and '--lambda=VALUE'
    distinguishes between '--lamb=VALUE' and '--lambda=VALUE'
+  raises if missing option next to flag
  raises if missing option next to flag
+  handles subcommand --help well (top level)
  handles subcommand --help well (top level)
+  has required option next to flag
  has required option next to flag
+  stops when asked
  stops when asked
+  has required option with long flag space
  has required option with long flag space
+  does to_s with banner
  does to_s with banner
+  gets short option with value -- (#8937)
  gets short option with value -- (#8937)
+  does to_s with very long flag (#3305)
  does to_s with very long flag (#3305)
+  doesn't have flag with double dash
  doesn't have flag with double dash
+  handles subcommand --help well (subcommand)
  handles subcommand --help well (subcommand)
+  calls the handler for missing options
  calls the handler for missing options
+  doesn't raise if optional option is not specified with long flag
  doesn't raise if optional option is not specified with long flag
+  has required option separated from flag but given together
  has required option separated from flag but given together
+  raises on invalid option if value is given to none value handler (long flag, #9553)
  raises on invalid option if value is given to none value handler (long flag, #9553)
+  parses with subcommands twice
  parses with subcommands twice
+  has required option with = (3) handles empty
  has required option with = (3) handles empty
+  raises on invalid option
  raises on invalid option
+  handles subcommands with hyphen
  handles subcommands with hyphen
+  has required option next to flag but given separated
  has required option next to flag but given separated
+  has flag with many letters
  has flag with many letters
+  doesn't raise if required option is not specified with separated short flag
  doesn't raise if required option is not specified with separated short flag
+  Consumption of flags following an ungiven optional argument
+    Given a long option with an optional value
+      doesn't eat further short options
      doesn't eat further short options
+      doesn't eat further long options
      doesn't eat further long options
+    Given a short option with an optional value
+      doesn't eat a following long option
      doesn't eat a following long option
+      does eat a value that looks like an option
      does eat a value that looks like an option
+      doesn't eat a following short option
      doesn't eat a following short option
+  --
+    initializes without block and does parse!
    initializes without block and does parse!
+    ignores everything after -- with bool flag
    ignores everything after -- with bool flag
+    returns a pair with things coming before and after --
    returns a pair with things coming before and after --
+    gets `-` as argument
    gets `-` as argument
+    ignores everything after -- with double flag
    ignores everything after -- with double flag
+    ignores everything after -- with single flag)
    ignores everything after -- with single flag)
+    returns a pair with things coming before and after --, without --
    returns a pair with things coming before and after --, without --
+String
+  gets each_line with chomp = false
  gets each_line with chomp = false
+  interpolation
+    of a single string
    of a single string
+    of multiple strings
    of multiple strings
+    of a single non-string
    of a single non-string
+    of string and char
    of string and char
+    of char and string
    of char and string
+    of multiple possibly non-strings
    of multiple possibly non-strings
+  escapes with unicode
  escapes with unicode
+  does each_char_with_index, with offset
  does each_char_with_index, with offset
+  creating from a slice
+    allows creating from an empty slice
    allows creating from an empty slice
+  raises if String.build negative capacity
  raises if String.build negative capacity
+  to_i
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    to_i128
       assert
      assert
       assert
      assert
       assert
      assert
@@ -27190,6 +22319,8 @@
       assert
      assert
       assert
      assert
       assert
      assert
+    assert
    assert
+    to_i16
       assert
      assert
       assert
      assert
       assert
      assert
@@ -27198,6 +22329,12 @@
       assert
      assert
       assert
      assert
       assert
      assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    to_i32
       assert
      assert
       assert
      assert
       assert
      assert
@@ -27206,6 +22343,13 @@
       assert
      assert
       assert
      assert
       assert
      assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    to_u32
       assert
      assert
       assert
      assert
       assert
      assert
@@ -27214,6 +22358,11 @@
       assert
      assert
       assert
      assert
       assert
      assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    to_i64
       assert
      assert
       assert
      assert
       assert
      assert
@@ -27226,11 +22375,7 @@
     assert
    assert
     assert
    assert
     assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    invalid hexfloats
+    to_u16
       assert
      assert
       assert
      assert
       assert
      assert
@@ -27239,10 +22384,18 @@
       assert
      assert
       assert
      assert
       assert
      assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    to_u64
+      assert
      assert
+      assert
      assert
+      assert
      assert
       assert
      assert
       assert
      assert
       assert
      assert
       assert
      assert
+    to_i8
       assert
      assert
       assert
      assert
       assert
      assert
@@ -27251,6 +22404,9 @@
       assert
      assert
       assert
      assert
       assert
      assert
+    assert
    assert
+    assert
    assert
+    to_u8
       assert
      assert
       assert
      assert
       assert
      assert
@@ -27270,2070 +22426,17 @@
     assert
    assert
     assert
    assert
     assert
    assert
-WinError
-  .value
  .value
-  #message
  #message
-  .wsa_value
  .wsa_value
-OpenSSL::SSL::HostnameValidation
-  matches_hostname?
-    literal matches
    literal matches
-    matches IDNA label
    matches IDNA label
-    normalizes case
    normalizes case
-    matches leading dot
    matches leading dot
-    wildcard matches according to RFC 6125, section 6.4.3
    wildcard matches according to RFC 6125, section 6.4.3
-    skips trailing dot
    skips trailing dot
-  validate_hostname
-    falls back to CN entry (unless SAN entry is defined)
    falls back to CN entry (unless SAN entry is defined)
-    verifies all SAN entries
    verifies all SAN entries
-    matches domains from certificate SAN entries
    matches domains from certificate SAN entries
-    matches IP from certificate SAN entries
    matches IP from certificate SAN entries
-GC
-  .prof_stats
  .prof_stats
-  compiles GC.stats
  compiles GC.stats
-  .stats
  .stats
-  raises if calling enable when not disabled
  raises if calling enable when not disabled
-Compress::Zlib::Reader
-  can be closed with sync (1)
  can be closed with sync (1)
-  can be closed without sync
  can be closed without sync
-  should be able to read
  should be able to read
-  should not read from empty stream
  should not read from empty stream
-  rewinds
  rewinds
-  can be closed with sync (2)
  can be closed with sync (2)
-  should not freeze when reading empty slice
  should not freeze when reading empty slice
-  should raise buffer error on error (#6575)
  should raise buffer error on error (#6575)
-Crypto::Bcrypt
-  validates salt size
  validates salt size
-  validates password size
  validates password size
-  computes digest vectors
  computes digest vectors
-  doesn't have the sign expansion (high 8bit) security flaw
  doesn't have the sign expansion (high 8bit) security flaw
-  validates cost
  validates cost
-Range
-  #each
-    doesn't have Nil as a type for beginless each
    doesn't have Nil as a type for beginless each
-    gives correct values with exclusive range
    gives correct values with exclusive range
-    raises on beginless
    raises on beginless
-    endless
    endless
-    doesn't have Nil as a type for endless each
    doesn't have Nil as a type for endless each
-    gives correct values with inclusive range
    gives correct values with inclusive range
-    is empty with empty inclusive range
    is empty with empty inclusive range
-  #size
-    raises on endless range
    raises on endless range
-    optimizes for int range
    optimizes for int range
-    works for other types
    works for other types
-    raises on beginless range
    raises on beginless range
-  is empty with ... and begin > end
  is empty with ... and begin > end
-  does inspect
  does inspect
-  #==
  #==
-  clones
  clones
-  gets basic properties
  gets basic properties
-  sum
-    called with no block is specialized for performance (BigInt)
    called with no block is specialized for performance (BigInt)
-    is equivalent to Enumerable#sum
    is equivalent to Enumerable#sum
-    called with no block is specialized for performance
    called with no block is specialized for performance
-  initialized with new method
  initialized with new method
-  does to_s
  does to_s
-  #step
-    "begin == end exclusive" yielding
    "begin == end exclusive" yielding
-    "begin > end exclusive" iterator
    "begin > end exclusive" iterator
-    raises on beginless range
    raises on beginless range
-    "exclusive step over" iterator
    "exclusive step over" iterator
-    "Float step" yielding
    "Float step" yielding
-    "begin == end inclusive" yielding
    "begin == end inclusive" yielding
-    "begin > end exclusive" yielding
    "begin > end exclusive" yielding
-    "Time::Span step" yielding
    "Time::Span step" yielding
-    "begin.succ == end inclusive" iterator
    "begin.succ == end inclusive" iterator
-    "endless range" iterator
    "endless range" iterator
-    "begin.succ == end exclusive" yielding
    "begin.succ == end exclusive" yielding
-    "inclusive step" iterator
    "inclusive step" iterator
-    "endless range" yielding
    "endless range" yielding
-    "inclusive step over" iterator
    "inclusive step over" iterator
-    "Float step" iterator
    "Float step" iterator
-    "inclusive default" yielding
    "inclusive default" yielding
-    "begin.succ == end exclusive" iterator
    "begin.succ == end exclusive" iterator
-    "exclusive default" iterator
    "exclusive default" iterator
-    "begin == end exclusive" iterator
    "begin == end exclusive" iterator
-    "exclusive step" yielding
    "exclusive step" yielding
-    "inclusive step" yielding
    "inclusive step" yielding
-    "exclusive step" iterator
    "exclusive step" iterator
-    "begin.succ == end inclusive" yielding
    "begin.succ == end inclusive" yielding
-    "begin == end inclusive" iterator
    "begin == end inclusive" iterator
-    "Time::Span step" iterator
    "Time::Span step" iterator
-    "begin > end inclusive" iterator
    "begin > end inclusive" iterator
-    "inclusive step over" yielding
    "inclusive step over" yielding
-    "exclusive default" yielding
    "exclusive default" yielding
-    with #succ type
-      "at definition range by" yielding
      "at definition range by" yielding
-      "at definition range missing by" iterator
      "at definition range missing by" iterator
-      "basic" yielding
      "basic" yielding
-      "missing end by" yielding
      "missing end by" yielding
-      "at definition range missing by" iterator
      "at definition range missing by" iterator
-      "missing end by" iterator
      "missing end by" iterator
-      "at definition range" iterator
      "at definition range" iterator
-      "basic by" yielding
      "basic by" yielding
-      "at definition range by" iterator
      "at definition range by" iterator
-      "at definition range missing by" yielding
      "at definition range missing by" yielding
-      "at definition range by" iterator
      "at definition range by" iterator
-      "basic" iterator
      "basic" iterator
-      "at definition range by" yielding
      "at definition range by" yielding
-      "at definition range missing by" yielding
      "at definition range missing by" yielding
-      "basic by" iterator
      "basic by" iterator
-      "at definition range" yielding
      "at definition range" yielding
-    "exclusive step over" yielding
    "exclusive step over" yielding
-    "begin > end inclusive" yielding
    "begin > end inclusive" yielding
-    "inclusive default" iterator
    "inclusive default" iterator
-  #each iterator
-    is not empty with ... and begin.succ == end
    is not empty with ... and begin.succ == end
-    is not empty with .. and begin == end
    is not empty with .. and begin == end
-    is empty with ... and begin > end
    is empty with ... and begin > end
-    does next with inclusive range
    does next with inclusive range
-    is empty with .. and begin > end
    is empty with .. and begin > end
-    raises on beginless range
    raises on beginless range
-    does next with exclusive range
    does next with exclusive range
-    cycles
    cycles
-    does with endless range
    does with endless range
-  includes?
  includes?
-  is not empty with ... and begin.succ == end
  is not empty with ... and begin.succ == end
-  is not empty with .. and begin == end
  is not empty with .. and begin == end
-  #sample
-    for an integer range
-      raises on exclusive range that would underflow
      raises on exclusive range that would underflow
-      samples an inclusive range with n = 1
      samples an inclusive range with n = 1
-      raises on invalid range with n > 1
      raises on invalid range with n > 1
-      samples an inclusive range with n > 1
      samples an inclusive range with n > 1
-      samples an exclusive range with n > 1
      samples an exclusive range with n > 1
-      samples an inclusive range without n
      samples an inclusive range without n
-      raises on invalid range with n = 1
      raises on invalid range with n = 1
-      samples an inclusive range with n equal to or bigger than the available values
      samples an inclusive range with n equal to or bigger than the available values
-      samples an inclusive range with n > 16
      samples an inclusive range with n > 16
-      raises on invalid range with n = 0
      raises on invalid range with n = 0
-      samples an exclusive range with n = 1
      samples an exclusive range with n = 1
-      samples an exclusive range without n
      samples an exclusive range without n
-      raises on invalid range without n
      raises on invalid range without n
-    samples a range with nilable types
    samples a range with nilable types
-    for a float range
-      samples an exclusive range with n > 1
      samples an exclusive range with n > 1
-      samples an inclusive range with n > 1
      samples an inclusive range with n > 1
-      samples an exclusive range without n
      samples an exclusive range without n
-      samples an inclusive range with n > 16
      samples an inclusive range with n > 16
-      samples an exclusive range with n = 1
      samples an exclusive range with n = 1
-      samples an inclusive range with n >= 1 and begin == end
      samples an inclusive range with n >= 1 and begin == end
-      raises on invalid range with n = 1
      raises on invalid range with n = 1
-      raises on invalid range with n > 1
      raises on invalid range with n > 1
-      samples an inclusive range without n
      samples an inclusive range without n
-      raises on invalid range with n = 0
      raises on invalid range with n = 0
-      samples an inclusive range with n = 1
      samples an inclusive range with n = 1
-    raises on open range
    raises on open range
-    samples with n = 0
    samples with n = 0
-    samples a float range as a distribution
    samples a float range as a distribution
-  is empty with .. and begin > end
  is empty with .. and begin > end
-  ===
-    endless
    endless
-    beginless
    beginless
-    inclusive
    inclusive
-    exclusive
    exclusive
-    no limits
    no limits
-  #reverse_each iterator
-    is empty with .. and begin > end
    is empty with .. and begin > end
-    raises on endless range
    raises on endless range
-    is not empty with ... and begin.succ == end
    is not empty with ... and begin.succ == end
-    reverse cycles
    reverse cycles
-    does next with inclusive range
    does next with inclusive range
-    does next with beginless range
    does next with beginless range
-    is empty with ... and begin > end
    is empty with ... and begin > end
-    is not empty with .. and begin == end
    is not empty with .. and begin == end
-    does next with exclusive range
    does next with exclusive range
-  bsearch
-    Float
    Float
-    Int
    Int
-    BigInt
    BigInt
-  map
-    optimizes for int range
    optimizes for int range
-    works for other types
    works for other types
-  #reverse_each
-    iterators on beginless range
    iterators on beginless range
-    is empty with empty inclusive range
    is empty with empty inclusive range
-    gives correct values with exclusive range
    gives correct values with exclusive range
-    gives correct values with inclusive range
    gives correct values with inclusive range
-    raises on endless range
    raises on endless range
-Random::ISAAC
-  generates random numbers as generated official implementation
  generates random numbers as generated official implementation
-  different instances generate different numbers (#7976)
  different instances generate different numbers (#7976)
-  can be initialized without explicit seed
  can be initialized without explicit seed
-Path
-  #absolute?
-     "C:/foo/bar" (posix)
     "C:/foo/bar" (posix)
-     "C:\foo" (posix)
     "C:\foo" (posix)
-     "C:\" (windows)
     "C:\" (windows)
-     "C:/foo/bar" (windows)
     "C:/foo/bar" (windows)
-     "\\some\share\" (posix)
     "\\some\share\" (posix)
-     "./foo" (posix)
     "./foo" (posix)
-     ".\foo" (posix)
     ".\foo" (posix)
-     "./foo" (windows)
     "./foo" (windows)
-     "~\foo" (posix)
     "~\foo" (posix)
-     "c:\\" (posix)
     "c:\\" (posix)
-     "//some/share/" (posix)
     "//some/share/" (posix)
-     "\.\foo" (posix)
     "\.\foo" (posix)
-     "C:/" (windows)
     "C:/" (windows)
-     "//some/share" (posix)
     "//some/share" (posix)
-     "/foo" (windows)
     "/foo" (windows)
-     "//some/share/" (windows)
     "//some/share/" (windows)
-     "C:/foo" (windows)
     "C:/foo" (windows)
-     "foo" (windows)
     "foo" (windows)
-     "C:/foo" (posix)
     "C:/foo" (posix)
-     "C:" (windows)
     "C:" (windows)
-     "foo" (posix)
     "foo" (posix)
-     "C:" (posix)
     "C:" (posix)
-     "\foo" (windows)
     "\foo" (windows)
-     "C:\" (posix)
     "C:\" (posix)
-     ".\foo" (windows)
     ".\foo" (windows)
-     "\\some\share" (posix)
     "\\some\share" (posix)
-     "\foo" (posix)
     "\foo" (posix)
-     "foo" (windows)
     "foo" (windows)
-     "/foo" (posix)
     "/foo" (posix)
-     "~\foo" (windows)
     "~\foo" (windows)
-     "C:\foo" (windows)
     "C:\foo" (windows)
-     "/./foo" (windows)
     "/./foo" (windows)
-     "//some/share" (windows)
     "//some/share" (windows)
-     "C:/" (posix)
     "C:/" (posix)
-     "foo" (posix)
     "foo" (posix)
-     "\\some\share" (windows)
     "\\some\share" (windows)
-     "\\some\share\" (windows)
     "\\some\share\" (windows)
-     "/./foo" (posix)
     "/./foo" (posix)
-     "\.\foo" (windows)
     "\.\foo" (windows)
-     "~/foo" (posix)
     "~/foo" (posix)
-     "c:\\" (windows)
     "c:\\" (windows)
-     "~/foo" (windows)
     "~/foo" (windows)
-  #parents
-     "////" (windows)
     "////" (windows)
-     "" (posix)
     "" (posix)
-     "/" (windows)
     "/" (windows)
-     "foo\" (posix)
     "foo\" (posix)
-     "foo/../bar/" (posix)
     "foo/../bar/" (posix)
-     "C:\." (posix)
     "C:\." (posix)
-     "\Users/foo\bar.cr" (windows)
     "\Users/foo\bar.cr" (windows)
-     "foo/bar/.." (windows)
     "foo/bar/.." (windows)
-     "C:\" (windows)
     "C:\" (windows)
-     "foo/bar/../." (posix)
     "foo/bar/../." (posix)
-     "foo/./bar/" (windows)
     "foo/./bar/" (windows)
-     "C:\\folder" (posix)
     "C:\\folder" (posix)
-     "foo/./bar/." (windows)
     "foo/./bar/." (windows)
-     ".\foo" (posix)
     ".\foo" (posix)
-     "foo/bar/./." (windows)
     "foo/bar/./." (windows)
-     "/Users/foo/bar.cr" (windows)
     "/Users/foo/bar.cr" (windows)
-     "\" (windows)
     "\" (windows)
-     "/m" (windows)
     "/m" (windows)
-     "foo" (posix)
     "foo" (posix)
-     "m/.gitignore" (windows)
     "m/.gitignore" (windows)
-     "foo/../bar/" (windows)
     "foo/../bar/" (windows)
-     "/foo" (posix)
     "/foo" (posix)
-     "C:/" (posix)
     "C:/" (posix)
-     "C:\Users\foo\bar.cr" (posix)
     "C:\Users\foo\bar.cr" (posix)
-     "m//" (posix)
     "m//" (posix)
-     "foo/../bar/." (posix)
     "foo/../bar/." (posix)
-     "foo\bar\" (windows)
     "foo\bar\" (windows)
-     "foo/../bar/." (windows)
     "foo/../bar/." (windows)
-     "/." (posix)
     "/." (posix)
-     "/" (posix)
     "/" (posix)
-     "foo/bar/./." (posix)
     "foo/bar/./." (posix)
-     "foo/bar/" (windows)
     "foo/bar/" (windows)
-     "\" (posix)
     "\" (posix)
-     "C:\" (posix)
     "C:\" (posix)
-     "." (posix)
     "." (posix)
-     "Users/foo/bar.cr" (posix)
     "Users/foo/bar.cr" (posix)
-     "/m/" (windows)
     "/m/" (windows)
-     "m/" (posix)
     "m/" (posix)
-     "\Users\foo\bar.cr" (windows)
     "\Users\foo\bar.cr" (windows)
-     "/m" (posix)
     "/m" (posix)
-     "m//" (windows)
     "m//" (windows)
-     "./foo" (windows)
     "./foo" (windows)
-     "\Users\foo\bar.cr" (posix)
     "\Users\foo\bar.cr" (posix)
-     "C:\folder" (windows)
     "C:\folder" (windows)
-     "/foo" (windows)
     "/foo" (windows)
-     "foo/bar/." (posix)
     "foo/bar/." (posix)
-     "." (windows)
     "." (windows)
-     "m" (windows)
     "m" (windows)
-     "/m/" (posix)
     "/m/" (posix)
-     ".\foo" (windows)
     ".\foo" (windows)
-     "m//a/b" (windows)
     "m//a/b" (windows)
-     "foo/bar/." (posix)
     "foo/bar/." (posix)
-     "m/.gitignore" (posix)
     "m/.gitignore" (posix)
-     "C:folder" (windows)
     "C:folder" (windows)
-     "C:" (windows)
     "C:" (windows)
-     "m//a/b" (posix)
     "m//a/b" (posix)
-     "////" (posix)
     "////" (posix)
-     "m/" (windows)
     "m/" (windows)
-     "C:\\folder" (windows)
     "C:\\folder" (windows)
-     "C:\Users\foo\bar.cr" (windows)
     "C:\Users\foo\bar.cr" (windows)
-     "\Users/foo\bar.cr" (posix)
     "\Users/foo\bar.cr" (posix)
-     "C:" (posix)
     "C:" (posix)
-     "m" (posix)
     "m" (posix)
-     "foo" (windows)
     "foo" (windows)
-     "foo/bar/../." (windows)
     "foo/bar/../." (windows)
-     "" (windows)
     "" (windows)
-     "foo/bar/." (windows)
     "foo/bar/." (windows)
-     "foo\" (windows)
     "foo\" (windows)
-     "/." (windows)
     "/." (windows)
-     "C:\folder" (posix)
     "C:\folder" (posix)
-     "Users/foo/bar.cr" (windows)
     "Users/foo/bar.cr" (windows)
-     "foo/bar/" (posix)
     "foo/bar/" (posix)
-     "foo/./bar/." (posix)
     "foo/./bar/." (posix)
-     "foo/bar/." (windows)
     "foo/bar/." (windows)
-     "foo/./bar/" (posix)
     "foo/./bar/" (posix)
-     "C:\." (windows)
     "C:\." (windows)
-     "foo/" (windows)
     "foo/" (windows)
-     "foo/bar/.." (posix)
     "foo/bar/.." (posix)
-     "foo\bar\" (posix)
     "foo\bar\" (posix)
-     "/Users/foo/bar.cr" (posix)
     "/Users/foo/bar.cr" (posix)
-     "C:/" (windows)
     "C:/" (windows)
-     "C:folder" (posix)
     "C:folder" (posix)
-     "./foo" (posix)
     "./foo" (posix)
-     "foo/" (posix)
     "foo/" (posix)
-  #extension
-     "test.ext/" (posix)
     "test.ext/" (posix)
-     "test/." (posix)
     "test/." (posix)
-     "test.ext/foo" (windows)
     "test.ext/foo" (windows)
-     "/foo/bar/foo." (posix)
     "/foo/bar/foo." (posix)
-     "test.ext/" (windows)
     "test.ext/" (windows)
-     "/foo/bar/baz.cr" (windows)
     "/foo/bar/baz.cr" (windows)
-     "test.ext/foo" (posix)
     "test.ext/foo" (posix)
-     "/foo/bar/foo." (windows)
     "/foo/bar/foo." (windows)
-     "/foo/bar/baz.cr.cz" (windows)
     "/foo/bar/baz.cr.cz" (windows)
-     "test" (windows)
     "test" (windows)
-     "/foo/bar/.profile.sh" (windows)
     "/foo/bar/.profile.sh" (windows)
-     "test\." (posix)
     "test\." (posix)
-     "test/." (windows)
     "test/." (windows)
-     "/foo/bar/baz.cr.cz" (posix)
     "/foo/bar/baz.cr.cz" (posix)
-     "/foo/bar/.profile.sh" (posix)
     "/foo/bar/.profile.sh" (posix)
-     "test.ext\" (windows)
     "test.ext\" (windows)
-     "/foo/bar/.profile" (posix)
     "/foo/bar/.profile" (posix)
-     "/foo/bar/baz.cr" (posix)
     "/foo/bar/baz.cr" (posix)
-     "/foo/bar/.profile" (windows)
     "/foo/bar/.profile" (windows)
-     "test.ext\" (posix)
     "test.ext\" (posix)
-     "test.ext/foo/" (posix)
     "test.ext/foo/" (posix)
-     "test\." (windows)
     "test\." (windows)
-     "test.ext/foo/" (windows)
     "test.ext/foo/" (windows)
-     "test" (posix)
     "test" (posix)
-  #relative_to
-    relativizable paths
    relativizable paths
-    mixed input paths
    mixed input paths
-    paths that can't be relativized
    paths that can't be relativized
-  #normalize
-    paths with backslash
-      removes trailing slash
-        normalizes "abc\def\" (posix)
        normalizes "abc\def\" (posix)
-        normalizes "..\" (windows)
        normalizes "..\" (windows)
-        normalizes "abc\def\" (windows)
        normalizes "abc\def\" (windows)
-        normalizes "..\..\" (posix)
        normalizes "..\..\" (posix)
-        normalizes ".\" (posix)
        normalizes ".\" (posix)
-        normalizes "abc\" (windows)
        normalizes "abc\" (windows)
-        normalizes "a\b\c\" (windows)
        normalizes "a\b\c\" (windows)
-        normalizes "\abc\" (windows)
        normalizes "\abc\" (windows)
-        normalizes "abc\" (posix)
        normalizes "abc\" (posix)
-        normalizes "..\..\" (windows)
        normalizes "..\..\" (windows)
-        normalizes "a\b\c\" (posix)
        normalizes "a\b\c\" (posix)
-        normalizes "..\" (posix)
        normalizes "..\" (posix)
-        normalizes "\abc\" (posix)
        normalizes "\abc\" (posix)
-        normalizes ".\" (windows)
        normalizes ".\" (windows)
-      removes .
-        normalizes "abc\." (posix)
        normalizes "abc\." (posix)
-        normalizes "\.\abc\def" (posix)
        normalizes "\.\abc\def" (posix)
-        normalizes "abc\.\def" (posix)
        normalizes "abc\.\def" (posix)
-        normalizes "abc\.\def" (windows)
        normalizes "abc\.\def" (windows)
-        normalizes "\.\abc\def" (windows)
        normalizes "\.\abc\def" (windows)
-        normalizes "abc\." (windows)
        normalizes "abc\." (windows)
-      already clean
-        normalizes "..\.." (posix)
        normalizes "..\.." (posix)
-        normalizes "\abc" (posix)
        normalizes "\abc" (posix)
-        normalizes "a\b\c" (posix)
        normalizes "a\b\c" (posix)
-        normalizes "\" (posix)
        normalizes "\" (posix)
-        normalizes "..\.." (windows)
        normalizes "..\.." (windows)
-        normalizes "\abc" (windows)
        normalizes "\abc" (windows)
-        normalizes "abc\def" (windows)
        normalizes "abc\def" (windows)
-        normalizes "\" (windows)
        normalizes "\" (windows)
-        normalizes "abc\def" (posix)
        normalizes "abc\def" (posix)
-        normalizes "a\b\c" (windows)
        normalizes "a\b\c" (windows)
-        normalizes "..\..\abc" (posix)
        normalizes "..\..\abc" (posix)
-        normalizes "..\..\abc" (windows)
        normalizes "..\..\abc" (windows)
-      removes ..
-        normalizes "abc\def\..\ghi\..\jkl" (posix)
        normalizes "abc\def\..\ghi\..\jkl" (posix)
-        normalizes "abc\def\..\.." (posix)
        normalizes "abc\def\..\.." (posix)
-        normalizes "abc\def\.." (windows)
        normalizes "abc\def\.." (windows)
-        normalizes "abc\def\.." (posix)
        normalizes "abc\def\.." (posix)
-        normalizes "abc\def\..\ghi\..\jkl" (windows)
        normalizes "abc\def\..\ghi\..\jkl" (windows)
-        normalizes "abc\def\..\..\.." (windows)
        normalizes "abc\def\..\..\.." (windows)
-        normalizes "abc\def\..\..\.." (posix)
        normalizes "abc\def\..\..\.." (posix)
-        normalizes "\abc\def\..\..\.." (posix)
        normalizes "\abc\def\..\..\.." (posix)
-        normalizes "\abc\def\..\..\.." (windows)
        normalizes "\abc\def\..\..\.." (windows)
-        normalizes "abc\def\ghi\..\jkl" (windows)
        normalizes "abc\def\ghi\..\jkl" (windows)
-        normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (posix)
        normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (posix)
-        normalizes "\abc\def\..\.." (windows)
        normalizes "\abc\def\..\.." (windows)
-        normalizes "\abc\def\..\.." (posix)
        normalizes "\abc\def\..\.." (posix)
-        normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (windows)
        normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (windows)
-        normalizes "abc\def\ghi\..\jkl" (posix)
        normalizes "abc\def\ghi\..\jkl" (posix)
-        normalizes "abc\def\..\.." (windows)
        normalizes "abc\def\..\.." (windows)
-      combinations
-        normalizes "abc\.\..\def" (windows)
        normalizes "abc\.\..\def" (windows)
-        normalizes "abc\\.\..\def" (posix)
        normalizes "abc\\.\..\def" (posix)
-        normalizes "abc\\.\..\def" (windows)
        normalizes "abc\\.\..\def" (windows)
-        normalizes "abc\..\..\.\.\..\def" (windows)
        normalizes "abc\..\..\.\.\..\def" (windows)
-        normalizes "abc\.\..\def" (posix)
        normalizes "abc\.\..\def" (posix)
-        normalizes "abc\..\..\.\.\..\def" (posix)
        normalizes "abc\..\..\.\.\..\def" (posix)
-      removes double slash
-        normalizes "\\\abc" (windows)
        normalizes "\\\abc" (windows)
-        normalizes "abc\\def\\ghi" (windows)
        normalizes "abc\\def\\ghi" (windows)
-        normalizes "\\abc\\" (windows)
        normalizes "\\abc\\" (windows)
-        normalizes "\\\abc" (posix)
        normalizes "\\\abc" (posix)
-        normalizes "\\abc" (windows)
        normalizes "\\abc" (windows)
-        normalizes "abc\\def\\ghi" (posix)
        normalizes "abc\\def\\ghi" (posix)
-        normalizes "abc\\" (windows)
        normalizes "abc\\" (windows)
-        normalizes "\\abc" (posix)
        normalizes "\\abc" (posix)
-        normalizes "\\abc\\" (posix)
        normalizes "\\abc\\" (posix)
-        normalizes "abc\\" (posix)
        normalizes "abc\\" (posix)
-    path with forward slash
-      removes ..
-        normalizes "abc/def/../../../ghi/jkl/../../../mno" (posix)
        normalizes "abc/def/../../../ghi/jkl/../../../mno" (posix)
-        normalizes "abc/def/../../../ghi/jkl/../../../mno" (windows)
        normalizes "abc/def/../../../ghi/jkl/../../../mno" (windows)
-        normalizes "abc/def/../../.." (windows)
        normalizes "abc/def/../../.." (windows)
-        normalizes "/abc/def/../../.." (windows)
        normalizes "/abc/def/../../.." (windows)
-        normalizes "abc/def/.." (windows)
        normalizes "abc/def/.." (windows)
-        normalizes "/abc/def/../.." (windows)
        normalizes "/abc/def/../.." (windows)
-        normalizes "abc/def/ghi/../jkl" (posix)
        normalizes "abc/def/ghi/../jkl" (posix)
-        normalizes "abc/def/.." (posix)
        normalizes "abc/def/.." (posix)
-        normalizes "abc/def/../ghi/../jkl" (windows)
        normalizes "abc/def/../ghi/../jkl" (windows)
-        normalizes "/abc/def/../../.." (posix)
        normalizes "/abc/def/../../.." (posix)
-        normalizes "/abc/def/../.." (posix)
        normalizes "/abc/def/../.." (posix)
-        normalizes "abc/def/../ghi/../jkl" (posix)
        normalizes "abc/def/../ghi/../jkl" (posix)
-        normalizes "abc/def/../.." (posix)
        normalizes "abc/def/../.." (posix)
-        normalizes "abc/def/../.." (windows)
        normalizes "abc/def/../.." (windows)
-        normalizes "abc/def/ghi/../jkl" (windows)
        normalizes "abc/def/ghi/../jkl" (windows)
-        normalizes "abc/def/../../.." (posix)
        normalizes "abc/def/../../.." (posix)
-      already clean
-        normalizes "" (posix)
        normalizes "" (posix)
-        normalizes "a/b/c" (windows)
        normalizes "a/b/c" (windows)
-        normalizes ".." (posix)
        normalizes ".." (posix)
-        normalizes "/abc" (windows)
        normalizes "/abc" (windows)
-        normalizes "abc/def" (posix)
        normalizes "abc/def" (posix)
-        normalizes "" (windows)
        normalizes "" (windows)
-        normalizes "../.." (windows)
        normalizes "../.." (windows)
-        normalizes "abc" (windows)
        normalizes "abc" (windows)
-        normalizes "." (windows)
        normalizes "." (windows)
-        normalizes "../.." (posix)
        normalizes "../.." (posix)
-        normalizes "../../abc" (windows)
        normalizes "../../abc" (windows)
-        normalizes "/" (posix)
        normalizes "/" (posix)
-        normalizes "." (posix)
        normalizes "." (posix)
-        normalizes "../../abc" (posix)
        normalizes "../../abc" (posix)
-        normalizes "/" (windows)
        normalizes "/" (windows)
-        normalizes "a/b/c" (posix)
        normalizes "a/b/c" (posix)
-        normalizes ".." (windows)
        normalizes ".." (windows)
-        normalizes "/abc" (posix)
        normalizes "/abc" (posix)
-        normalizes "abc" (posix)
        normalizes "abc" (posix)
-        normalizes "abc/def" (windows)
        normalizes "abc/def" (windows)
-      removes double slash
-        normalizes "abc//" (windows)
        normalizes "abc//" (windows)
-        normalizes "//abc//" (windows)
        normalizes "//abc//" (windows)
-        normalizes "abc//" (posix)
        normalizes "abc//" (posix)
-        normalizes "//abc//" (posix)
        normalizes "//abc//" (posix)
-        normalizes "abc//def//ghi" (windows)
        normalizes "abc//def//ghi" (windows)
-        normalizes "//abc" (windows)
        normalizes "//abc" (windows)
-        normalizes "abc//def//ghi" (posix)
        normalizes "abc//def//ghi" (posix)
-        normalizes "///abc" (windows)
        normalizes "///abc" (windows)
-        normalizes "///abc" (posix)
        normalizes "///abc" (posix)
-        normalizes "//abc" (posix)
        normalizes "//abc" (posix)
-      removes trailing slash
-        normalizes "a/b/c/" (posix)
        normalizes "a/b/c/" (posix)
-        normalizes "abc/def/" (posix)
        normalizes "abc/def/" (posix)
-        normalizes "./" (windows)
        normalizes "./" (windows)
-        normalizes "../../" (windows)
        normalizes "../../" (windows)
-        normalizes "/abc/" (windows)
        normalizes "/abc/" (windows)
-        normalizes "a/b/c/" (windows)
        normalizes "a/b/c/" (windows)
-        normalizes "../" (windows)
        normalizes "../" (windows)
-        normalizes "./" (posix)
        normalizes "./" (posix)
-        normalizes "/abc/" (posix)
        normalizes "/abc/" (posix)
-        normalizes "../../" (posix)
        normalizes "../../" (posix)
-        normalizes "abc/" (windows)
        normalizes "abc/" (windows)
-        normalizes "../" (posix)
        normalizes "../" (posix)
-        normalizes "abc/def/" (windows)
        normalizes "abc/def/" (windows)
-        normalizes "abc/" (posix)
        normalizes "abc/" (posix)
-      combinations
-        normalizes "abc//./../def" (posix)
        normalizes "abc//./../def" (posix)
-        normalizes "abc/./../def" (windows)
        normalizes "abc/./../def" (windows)
-        normalizes "abc/../../././../def" (windows)
        normalizes "abc/../../././../def" (windows)
-        normalizes "abc/./../def" (posix)
        normalizes "abc/./../def" (posix)
-        normalizes "abc/../../././../def" (posix)
        normalizes "abc/../../././../def" (posix)
-        normalizes "abc//./../def" (windows)
        normalizes "abc//./../def" (windows)
-      removes .
-        normalizes "abc/./def" (posix)
        normalizes "abc/./def" (posix)
-        normalizes "/./abc/def" (posix)
        normalizes "/./abc/def" (posix)
-        normalizes "abc/./def" (windows)
        normalizes "abc/./def" (windows)
-        normalizes "abc/." (posix)
        normalizes "abc/." (posix)
-        normalizes "/./abc/def" (windows)
        normalizes "/./abc/def" (windows)
-        normalizes "abc/." (windows)
        normalizes "abc/." (windows)
-    with drive
-      normalizes "C:/foo" (posix)
      normalizes "C:/foo" (posix)
-      normalizes "C:/" (posix)
      normalizes "C:/" (posix)
-      normalizes "C:\" (posix)
      normalizes "C:\" (posix)
-      normalizes "C:/foo" (windows)
      normalizes "C:/foo" (windows)
-      normalizes "C:" (posix)
      normalizes "C:" (posix)
-      normalizes "C:" (windows)
      normalizes "C:" (windows)
-      normalizes "C:foo" (posix)
      normalizes "C:foo" (posix)
-      normalizes "C:\" (windows)
      normalizes "C:\" (windows)
-      normalizes "C:/" (windows)
      normalizes "C:/" (windows)
-      normalizes "C:\foo" (posix)
      normalizes "C:\foo" (posix)
-      normalizes "C:\foo" (windows)
      normalizes "C:\foo" (windows)
-      normalizes "C:foo" (windows)
      normalizes "C:foo" (windows)
-  #<=>
-    case sensitivity
    case sensitivity
-  #expand
-    supports ~\ for Windows paths only
-      (base: "") "~\a" (posix)
      (base: "") "~\a" (posix)
-      (base: "") "~\a" (windows)
      (base: "") "~\a" (windows)
-    converts a pathname to an absolute pathname, using ~ (home) as base
-      (base: "~/b") "~/a" (windows)
      (base: "~/b") "~/a" (windows)
-      (base: "/tmp/gumby/ddd") "~/a" (windows)
      (base: "/tmp/gumby/ddd") "~/a" (windows)
-      (base: "/tmp/gumby/ddd") "~/a" (posix)
      (base: "/tmp/gumby/ddd") "~/a" (posix)
-      (base: "/tmp/gumby/ddd") "~" (posix)
      (base: "/tmp/gumby/ddd") "~" (posix)
-      (base: "") "~/" (windows)
      (base: "") "~/" (windows)
-      (base: "") ".." (windows)
      (base: "") ".." (windows)
-      (base: "") ".." (posix)
      (base: "") ".." (posix)
-      (base: "") "~/..badfilename" (windows)
      (base: "") "~/..badfilename" (windows)
-      (base: "/tmp/gumby/ddd") "~" (windows)
      (base: "/tmp/gumby/ddd") "~" (windows)
-      (base: "~/b") "~/a" (posix)
      (base: "~/b") "~/a" (posix)
-      (base: "") "~/..badfilename" (posix)
      (base: "") "~/..badfilename" (posix)
-      (base: "") "~" (posix)
      (base: "") "~" (posix)
-      (base: "") "~/" (posix)
      (base: "") "~/" (posix)
-      (base: "") "~" (windows)
      (base: "") "~" (windows)
-    replaces multiple / with a single /
-      (base: "") "////some/path" (posix)
      (base: "") "////some/path" (posix)
-      (base: "") "//some/path" (posix)
      (base: "") "//some/path" (posix)
-      (base: "") "/some////path" (posix)
      (base: "") "/some////path" (posix)
-      (base: "") "/some////path" (windows)
      (base: "") "/some////path" (windows)
-      (base: "") "////some/path" (windows)
      (base: "") "////some/path" (windows)
-      (base: "") "//some/path" (windows)
      (base: "") "//some/path" (windows)
-    doesn't expand ~
    doesn't expand ~
-    checks all possible types for expand(home:)
-      (base: "") "~/a" (posix)
      (base: "") "~/a" (posix)
-      (base: "") "~/a" (windows)
      (base: "") "~/a" (windows)
-      (base: "") "~/a" (windows)
      (base: "") "~/a" (windows)
-      (base: "") "~/a" (posix)
      (base: "") "~/a" (posix)
-      (base: "") "~/a" (windows)
      (base: "") "~/a" (windows)
-      (base: "") "~/a" (posix)
      (base: "") "~/a" (posix)
-    ignores name starting with ~
-      (base: "/current") "~foo.txt" (posix)
      (base: "/current") "~foo.txt" (posix)
-      (base: "/current") "~foo.txt" (windows)
      (base: "/current") "~foo.txt" (windows)
-    with drive
-      (base: "D:") "\foo" (windows)
      (base: "D:") "\foo" (windows)
-      (base: "D:\") "C:" (posix)
      (base: "D:\") "C:" (posix)
-      (base: "D:\") "foo" (windows)
      (base: "D:\") "foo" (windows)
-      (base: "D:\") "foo" (posix)
      (base: "D:\") "foo" (posix)
-      (base: "D:\") "foo" (windows)
      (base: "D:\") "foo" (windows)
-      (base: "D:/") "C:foo" (posix)
      (base: "D:/") "C:foo" (posix)
-      (base: "D:\") "C:/foo" (windows)
      (base: "D:\") "C:/foo" (windows)
-      (base: "D:") "C:" (windows)
      (base: "D:") "C:" (windows)
-      (base: "D:\") "C:\foo" (windows)
      (base: "D:\") "C:\foo" (windows)
-      (base: "D:") "/foo" (posix)
      (base: "D:") "/foo" (posix)
-      (base: "D:\") "C:foo" (windows)
      (base: "D:\") "C:foo" (windows)
-      (base: "D:\") "C:/" (posix)
      (base: "D:\") "C:/" (posix)
-      (base: "D:") "foo" (posix)
      (base: "D:") "foo" (posix)
-      (base: "D:/") "C:\" (windows)
      (base: "D:/") "C:\" (windows)
-      (base: "D:\") "/foo" (windows)
      (base: "D:\") "/foo" (windows)
-      (base: "D:") "C:/foo" (windows)
      (base: "D:") "C:/foo" (windows)
-      (base: "D:\") "foo" (posix)
      (base: "D:\") "foo" (posix)
-      (base: "D:\") "\foo" (posix)
      (base: "D:\") "\foo" (posix)
-      (base: "D:") "\foo" (posix)
      (base: "D:") "\foo" (posix)
-      (base: "D:\") "C:" (posix)
      (base: "D:\") "C:" (posix)
-      (base: "D:\") "C:\" (posix)
      (base: "D:\") "C:\" (posix)
-      (base: "D:\") "C:\foo" (posix)
      (base: "D:\") "C:\foo" (posix)
-      (base: "D:\") "C:" (windows)
      (base: "D:\") "C:" (windows)
-      (base: "D:\") "C:/" (windows)
      (base: "D:\") "C:/" (windows)
-      (base: "D:/") "C:\" (posix)
      (base: "D:/") "C:\" (posix)
-      (base: "D:\") "C:\foo" (posix)
      (base: "D:\") "C:\foo" (posix)
-      (base: "D:\") "C:" (windows)
      (base: "D:\") "C:" (windows)
-      (base: "D:\") "C:/" (posix)
      (base: "D:\") "C:/" (posix)
-      (base: "D:/") "C:/" (posix)
      (base: "D:/") "C:/" (posix)
-      (base: "D:/") "C:\foo" (windows)
      (base: "D:/") "C:\foo" (windows)
-      (base: "D:\") "C:/foo" (windows)
      (base: "D:\") "C:/foo" (windows)
-      (base: "D:\") "C:\" (windows)
      (base: "D:\") "C:\" (windows)
-      (base: "D:\") "C:/" (windows)
      (base: "D:\") "C:/" (windows)
-      (base: "D:\") "C:foo" (posix)
      (base: "D:\") "C:foo" (posix)
-      (base: "D:/") "\foo" (windows)
      (base: "D:/") "\foo" (windows)
-      (base: "D:") "foo" (windows)
      (base: "D:") "foo" (windows)
-      (base: "D:/") "C:foo" (windows)
      (base: "D:/") "C:foo" (windows)
-      (base: "D:") "C:/" (posix)
      (base: "D:") "C:/" (posix)
-      (base: "D:") "C:foo" (windows)
      (base: "D:") "C:foo" (windows)
-      (base: "D:/") "\foo" (posix)
      (base: "D:/") "\foo" (posix)
-      (base: "D:") "C:" (posix)
      (base: "D:") "C:" (posix)
-      (base: "D:/") "C:/" (windows)
      (base: "D:/") "C:/" (windows)
-      (base: "D:/") "/foo" (posix)
      (base: "D:/") "/foo" (posix)
-      (base: "D:/") "C:" (posix)
      (base: "D:/") "C:" (posix)
-      (base: "D:\") "C:\" (windows)
      (base: "D:\") "C:\" (windows)
-      (base: "D:\") "C:\" (posix)
      (base: "D:\") "C:\" (posix)
-      (base: "D:") "C:/" (windows)
      (base: "D:") "C:/" (windows)
-      (base: "D:\") "C:/foo" (posix)
      (base: "D:\") "C:/foo" (posix)
-      (base: "D:/") "foo" (windows)
      (base: "D:/") "foo" (windows)
-      (base: "D:\") "\foo" (posix)
      (base: "D:\") "\foo" (posix)
-      (base: "D:/") "C:/foo" (posix)
      (base: "D:/") "C:/foo" (posix)
-      (base: "D:/") "C:\foo" (posix)
      (base: "D:/") "C:\foo" (posix)
-      (base: "D:") "C:\foo" (posix)
      (base: "D:") "C:\foo" (posix)
-      (base: "D:/") "C:/foo" (windows)
      (base: "D:/") "C:/foo" (windows)
-      (base: "D:") "C:foo" (posix)
      (base: "D:") "C:foo" (posix)
-      (base: "D:\") "C:/foo" (posix)
      (base: "D:\") "C:/foo" (posix)
-      (base: "D:") "C:\" (posix)
      (base: "D:") "C:\" (posix)
-      (base: "D:/") "foo" (posix)
      (base: "D:/") "foo" (posix)
-      (base: "D:\") "C:\foo" (windows)
      (base: "D:\") "C:\foo" (windows)
-      (base: "D:\") "C:foo" (posix)
      (base: "D:\") "C:foo" (posix)
-      (base: "D:") "/foo" (windows)
      (base: "D:") "/foo" (windows)
-      (base: "D:\") "C:foo" (windows)
      (base: "D:\") "C:foo" (windows)
-      (base: "D:/") "/foo" (windows)
      (base: "D:/") "/foo" (windows)
-      (base: "D:\") "\foo" (windows)
      (base: "D:\") "\foo" (windows)
-      (base: "D:") "C:\foo" (windows)
      (base: "D:") "C:\foo" (windows)
-      (base: "D:") "C:\" (windows)
      (base: "D:") "C:\" (windows)
-      (base: "D:/") "C:" (windows)
      (base: "D:/") "C:" (windows)
-      (base: "D:\") "\foo" (windows)
      (base: "D:\") "\foo" (windows)
-      (base: "D:\") "/foo" (posix)
      (base: "D:\") "/foo" (posix)
-      (base: "D:") "C:/foo" (posix)
      (base: "D:") "C:/foo" (posix)
-    converts a pathname to an absolute pathname
-      (base: "") "a" (posix)
      (base: "") "a" (posix)
-      (base: "") "a" (windows)
      (base: "") "a" (windows)
-      (base: "") "a" (posix)
      (base: "") "a" (posix)
-      (base: "") "a" (windows)
      (base: "") "a" (windows)
-      (base: "") "" (posix)
      (base: "") "" (posix)
-      (base: "") "" (windows)
      (base: "") "" (windows)
-    expands /./dir to /dir
-      (base: "/") "/./dir" (posix)
      (base: "/") "/./dir" (posix)
-      (base: "/") "/./dir" (windows)
      (base: "/") "/./dir" (windows)
-    converts a pathname to an absolute pathname, using ~ (home) as base (trailing /)
-      (base: "~/b") "~/a" (posix)
      (base: "~/b") "~/a" (posix)
-      (base: "") "~/" (windows)
      (base: "") "~/" (windows)
-      (base: "/tmp/gumby/ddd") "~" (windows)
      (base: "/tmp/gumby/ddd") "~" (windows)
-      (base: "") "~/.." (posix)
      (base: "") "~/.." (posix)
-      (base: "") "~/..badfilename" (windows)
      (base: "") "~/..badfilename" (windows)
-      (base: "") "~/" (posix)
      (base: "") "~/" (posix)
-      (base: "/tmp/gumby/ddd") "~" (posix)
      (base: "/tmp/gumby/ddd") "~" (posix)
-      (base: "~/b") "~/a" (windows)
      (base: "~/b") "~/a" (windows)
-      (base: "") "~/..badfilename" (posix)
      (base: "") "~/..badfilename" (posix)
-      (base: "") "~/.." (windows)
      (base: "") "~/.." (windows)
-      (base: "/tmp/gumby/ddd") "~/a" (posix)
      (base: "/tmp/gumby/ddd") "~/a" (posix)
-      (base: "/tmp/gumby/ddd") "~/a" (windows)
      (base: "/tmp/gumby/ddd") "~/a" (windows)
-      (base: "") "~" (windows)
      (base: "") "~" (windows)
-      (base: "") "~" (posix)
      (base: "") "~" (posix)
-    expand path with ..
-      (base: "tmp/x") "../bin" (windows)
      (base: "tmp/x") "../bin" (windows)
-      (base: "/") "../../bin" (windows)
      (base: "/") "../../bin" (windows)
-      (base: "/tmp/x") "../../bin" (posix)
      (base: "/tmp/x") "../../bin" (posix)
-      (base: "tmp/x") "../bin" (posix)
      (base: "tmp/x") "../bin" (posix)
-      (base: "x/../tmp") "../bin" (windows)
      (base: "x/../tmp") "../bin" (windows)
-      (base: "/tmp/x") "../../bin" (windows)
      (base: "/tmp/x") "../../bin" (windows)
-      (base: "/tmp") "../../bin" (windows)
      (base: "/tmp") "../../bin" (windows)
-      (base: "x/../tmp") "../bin" (posix)
      (base: "x/../tmp") "../bin" (posix)
-      (base: "/") "../../bin" (posix)
      (base: "/") "../../bin" (posix)
-      (base: "/tmp") "../../bin" (posix)
      (base: "/tmp") "../../bin" (posix)
-    UNC path
-      (base: "\\foo$\bar\") "baz" (posix)
      (base: "\\foo$\bar\") "baz" (posix)
-      (base: "\\foo\bar\") "baz" (windows)
      (base: "\\foo\bar\") "baz" (windows)
-      (base: "\\foo\bar\") "baz" (posix)
      (base: "\\foo\bar\") "baz" (posix)
-      (base: "\\foo$\bar\") "baz" (windows)
      (base: "\\foo$\bar\") "baz" (windows)
-    expands a path with multi-byte characters
-      (base: "") "Ångström" (posix)
      (base: "") "Ångström" (posix)
-      (base: "") "Ångström" (windows)
      (base: "") "Ångström" (windows)
-    keeps trailing dots on absolute pathname
-      (base: "") "a." (posix)
      (base: "") "a." (posix)
-      (base: "") "a.." (posix)
      (base: "") "a.." (posix)
-      (base: "") "a." (windows)
      (base: "") "a." (windows)
-      (base: "") "a.." (windows)
      (base: "") "a.." (windows)
-    converts a pathname to an absolute pathname, Ruby-Talk:18512
-      (base: "") "..a" (posix)
      (base: "") "..a" (posix)
-      (base: "") "..a" (windows)
      (base: "") "..a" (windows)
-      (base: "") ".a" (windows)
      (base: "") ".a" (windows)
-      (base: "") "a../b" (posix)
      (base: "") "a../b" (posix)
-      (base: "") "a../b" (windows)
      (base: "") "a../b" (windows)
-      (base: "") ".a" (posix)
      (base: "") ".a" (posix)
-    expand_path for common unix path gives a full path
-      (base: "") "/default/base" (windows)
      (base: "") "/default/base" (windows)
-      (base: "") "" (posix)
      (base: "") "" (posix)
-      (base: "") "/tmp/" (windows)
      (base: "") "/tmp/" (windows)
-      (base: "") "./////" (posix)
      (base: "") "./////" (posix)
-      (base: "") "" (windows)
      (base: "") "" (windows)
-      (base: "") "/tmp/../../../tmp" (posix)
      (base: "") "/tmp/../../../tmp" (posix)
-      (base: "") "/tmp/../../../tmp" (windows)
      (base: "") "/tmp/../../../tmp" (windows)
-      (base: "") "/default/base" (posix)
      (base: "") "/default/base" (posix)
-      (base: "") "." (windows)
      (base: "") "." (windows)
-      (base: "") "./////" (windows)
      (base: "") "./////" (windows)
-      (base: "") "/tmp/" (posix)
      (base: "") "/tmp/" (posix)
-      (base: "") "." (posix)
      (base: "") "." (posix)
-    converts a pathname to an absolute pathname, using a complete path
-      (base: "C:\tmp\xxx") "../a" (posix)
      (base: "C:\tmp\xxx") "../a" (posix)
-      (base: "/tmp/xxx") "../a" (windows)
      (base: "/tmp/xxx") "../a" (windows)
-      (base: "/tmp") "" (posix)
      (base: "/tmp") "" (posix)
-      (base: "C:\tmp") "a" (posix)
      (base: "C:\tmp") "a" (posix)
-      (base: "/tmp/xxx") "../a" (posix)
      (base: "/tmp/xxx") "../a" (posix)
-      (base: "C:\tmp") "" (windows)
      (base: "C:\tmp") "" (windows)
-      (base: "/tmp") "a" (posix)
      (base: "/tmp") "a" (posix)
-      (base: "/tmp") "a" (windows)
      (base: "/tmp") "a" (windows)
-      (base: "C:\tmp\xxx") "../a" (windows)
      (base: "C:\tmp\xxx") "../a" (windows)
-      (base: "/") "." (windows)
      (base: "/") "." (windows)
-      (base: "/tmp/xxx") "../a" (windows)
      (base: "/tmp/xxx") "../a" (windows)
-      (base: "C:\tmp") "a" (windows)
      (base: "C:\tmp") "a" (windows)
+    to_u128
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
       assert
      assert
-      (base: "/tmp") "" (windows)
      (base: "/tmp") "" (windows)
-      (base: "/") "." (posix)
      (base: "/") "." (posix)
-      (base: "C:\tmp\xxx") "../a" (windows)
      (base: "C:\tmp\xxx") "../a" (windows)
-      (base: "/tmp/xxx") "../a" (posix)
      (base: "/tmp/xxx") "../a" (posix)
-      (base: "C:\tmp\xxx") "../a" (posix)
      (base: "C:\tmp\xxx") "../a" (posix)
-      (base: "C:\tmp") "" (posix)
      (base: "C:\tmp") "" (posix)
-    converts a pathname to an absolute pathname, using ~ (home) as base (HOME=/)
-      (base: "/tmp/gumby/ddd") "~" (posix)
      (base: "/tmp/gumby/ddd") "~" (posix)
-      (base: "") "~" (windows)
      (base: "") "~" (windows)
-      (base: "") "~/" (posix)
      (base: "") "~/" (posix)
-      (base: "/tmp/gumby/ddd") "~/a" (posix)
      (base: "/tmp/gumby/ddd") "~/a" (posix)
-      (base: "~/b") "~/a" (windows)
      (base: "~/b") "~/a" (windows)
-      (base: "") "~" (posix)
      (base: "") "~" (posix)
-      (base: "") "~/..badfilename" (posix)
      (base: "") "~/..badfilename" (posix)
-      (base: "") "~/" (windows)
      (base: "") "~/" (windows)
-      (base: "~/b") "~/a" (posix)
      (base: "~/b") "~/a" (posix)
-      (base: "") "~/..badfilename" (windows)
      (base: "") "~/..badfilename" (windows)
-      (base: "/tmp/gumby/ddd") "~/a" (windows)
      (base: "/tmp/gumby/ddd") "~/a" (windows)
-      (base: "") ".." (posix)
      (base: "") ".." (posix)
-      (base: "/tmp/gumby/ddd") "~" (windows)
      (base: "/tmp/gumby/ddd") "~" (windows)
-      (base: "") ".." (windows)
      (base: "") ".." (windows)
-  .new
-    joins components
    joins components
-    assert
    assert
-    assert
    assert
-    fails with null byte
    fails with null byte
-    assert
    assert
-  #to_posix
-     "C:\foo\bar" (windows)
     "C:\foo\bar" (windows)
-     "/" (windows)
     "/" (windows)
-     "foo/bar" (windows)
     "foo/bar" (windows)
-     "Cfoobar" (posix)
     "Cfoobar" (posix)
-    default: mappings=true "Cfoobar" (windows)
    default: mappings=true "Cfoobar" (windows)
-    default: mappings=true "Cfoobar" (posix)
    default: mappings=true "Cfoobar" (posix)
-     "Cfoobar" (windows)
     "Cfoobar" (windows)
-     "/" (posix)
     "/" (posix)
-     "Cfoobar" (windows)
     "Cfoobar" (windows)
-     "/" (posix)
     "/" (posix)
-     "C:\foo\bar" (windows)
     "C:\foo\bar" (windows)
-     "foo/bar" (posix)
     "foo/bar" (posix)
-     "foo/bar" (posix)
     "foo/bar" (posix)
-     "C:\foo\bar" (posix)
     "C:\foo\bar" (posix)
-     "Cfoobar" (posix)
     "Cfoobar" (posix)
-     "foo/bar" (windows)
     "foo/bar" (windows)
-     "C:\foo\bar" (posix)
     "C:\foo\bar" (posix)
-     "/" (windows)
     "/" (windows)
-  #anchor
-     "\\some\share" (windows)
     "\\some\share" (windows)
-     "\foo" (posix)
     "\foo" (posix)
-     "\\some\share\" (posix)
     "\\some\share\" (posix)
-     "//some/share" (windows)
     "//some/share" (windows)
-     "C:\foo" (windows)
     "C:\foo" (windows)
-     "//some/share" (posix)
     "//some/share" (posix)
-     "\\some\share\" (windows)
     "\\some\share\" (windows)
-     "C:\foo" (posix)
     "C:\foo" (posix)
-     "C:/foo" (windows)
     "C:/foo" (windows)
-     "/foo" (windows)
     "/foo" (windows)
-     "//some/share/" (posix)
     "//some/share/" (posix)
-     "\foo" (windows)
     "\foo" (windows)
-     "\\some\share" (posix)
     "\\some\share" (posix)
-     "C:foo" (posix)
     "C:foo" (posix)
-     "//some/share/" (windows)
     "//some/share/" (windows)
-     "/foo" (posix)
     "/foo" (posix)
-     "C:/foo" (posix)
     "C:/foo" (posix)
-     "C:foo" (windows)
     "C:foo" (windows)
-  .posix
-    assert
    assert
-    fails with null byte
    fails with null byte
-    joins components
    joins components
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  .windows
-    joins components
    joins components
-    assert
    assert
-    assert
    assert
-    fails with null byte
    fails with null byte
-    assert
    assert
     assert
    assert
-  .home
-    uses home from environment variable if set
    uses home from environment variable if set
-    doesn't raise if environment variable is missing
    doesn't raise if environment variable is missing
-    doesn't return empty string if environment variable is empty
    doesn't return empty string if environment variable is empty
-  #relative_to?
-    on "/a/b": "/a/b/../c" (windows)
    on "/a/b": "/a/b/../c" (windows)
-    on "..": "a" (posix)
    on "..": "a" (posix)
-    on "/": "/" (windows)
    on "/": "/" (windows)
-    on "ab/cd": "ab/c" (posix)
    on "ab/cd": "ab/c" (posix)
-    on ".": ".." (windows)
    on ".": ".." (windows)
-    on "a/b": "a/b/c/d" (windows)
    on "a/b": "a/b/c/d" (windows)
-    on "a/b/c": "a/c/d" (posix)
    on "a/b/c": "a/c/d" (posix)
-    on "/a/b": "/c/d" (posix)
    on "/a/b": "/c/d" (posix)
-    on "a/b": "a/b/../c" (windows)
    on "a/b": "a/b/../c" (windows)
-    on "a/b/c/d/": "a/b/" (posix)
    on "a/b/c/d/": "a/b/" (posix)
-    on "a/b": "a/b" (windows)
    on "a/b": "a/b" (windows)
-    on "a/b": "a/b/c" (windows)
    on "a/b": "a/b/c" (windows)
-    on "/": "/" (posix)
    on "/": "/" (posix)
-    on "/a/b/.": "/a/b" (windows)
    on "/a/b/.": "/a/b" (windows)
-    on "a/b/../c": "a/b" (windows)
    on "a/b/../c": "a/b" (windows)
-    on "../../a/b": "../../a/b/c/d" (posix)
    on "../../a/b": "../../a/b/c/d" (posix)
-    on "/a/b/c/d/": "/a/b" (posix)
    on "/a/b/c/d/": "/a/b" (posix)
-    on "/a/b/.": "/a/b" (posix)
    on "/a/b/.": "/a/b" (posix)
-    on "/a/b": "/a/b/c/d" (windows)
    on "/a/b": "/a/b/c/d" (windows)
-    on "a": "/a" (windows)
    on "a": "/a" (windows)
-    on "..": "a" (windows)
    on "..": "a" (windows)
-    on "a": "/a" (posix)
    on "a": "/a" (posix)
-    on "a/b/c/d": "a/b" (posix)
    on "a/b/c/d": "a/b" (posix)
-    on "a/b/.": "a/b" (windows)
    on "a/b/.": "a/b" (windows)
-    on "/a/b/../c": "/a/b" (windows)
    on "/a/b/../c": "/a/b" (windows)
-    on "/a/b": "/a/b" (windows)
    on "/a/b": "/a/b" (windows)
-    on "/a/b/c/d/": "/a/b" (windows)
    on "/a/b/c/d/": "/a/b" (windows)
-    on "/a/b/c": "/a/c/d" (windows)
    on "/a/b/c": "/a/c/d" (windows)
-    on "/a/b": "/a/b/c/d" (posix)
    on "/a/b": "/a/b/c/d" (posix)
-    on "/a/b/../c": "/a/b" (posix)
    on "/a/b/../c": "/a/b" (posix)
-    on "../../a/b": "../../a/b/c/d" (windows)
    on "../../a/b": "../../a/b/c/d" (windows)
-    on "/a/b/c/d": "/a/b" (posix)
    on "/a/b/c/d": "/a/b" (posix)
-    on "a/b": "a/b/." (windows)
    on "a/b": "a/b/." (windows)
-    on "/a/b/c/d": "/a/b/" (windows)
    on "/a/b/c/d": "/a/b/" (windows)
-    on "/ab/cd": "/ab/cde" (windows)
    on "/ab/cd": "/ab/cde" (windows)
-    on "/ab/cd": "/ab/cde" (posix)
    on "/ab/cd": "/ab/cde" (posix)
-    on "../..": ".." (windows)
    on "../..": ".." (windows)
-    on "/": "/a/c" (posix)
    on "/": "/a/c" (posix)
-    on "../..": ".." (posix)
    on "../..": ".." (posix)
-    on "a/b": "a/b/c" (posix)
    on "a/b": "a/b/c" (posix)
-    on "a/b/../c": "a/b" (posix)
    on "a/b/../c": "a/b" (posix)
-    on "/": "/a/c" (windows)
    on "/": "/a/c" (windows)
-    on "a/b/c/d": "a/b/" (posix)
    on "a/b/c/d": "a/b/" (posix)
-    on "a/b": "./a/b" (windows)
    on "a/b": "./a/b" (windows)
-    on "/a/b": "/c/d" (windows)
    on "/a/b": "/c/d" (windows)
-    on "..": "." (posix)
    on "..": "." (posix)
-    on "/ab/cd": "/ab/c" (posix)
    on "/ab/cd": "/ab/c" (posix)
-    on "..": "." (windows)
    on "..": "." (windows)
-    on "ab/cd": "ab/c" (windows)
    on "ab/cd": "ab/c" (windows)
-    special windows paths
-      on "C:\Projects": "c:\projects\src" (windows)
      on "C:\Projects": "c:\projects\src" (windows)
-      on "/a": "a" (posix)
      on "/a": "a" (posix)
-      on "C:": "D:" (windows)
      on "C:": "D:" (windows)
-      on "C:\Projects": "c:\projects\src" (posix)
      on "C:\Projects": "c:\projects\src" (posix)
-      on "C:a\b\c": "c:a/b/d" (windows)
      on "C:a\b\c": "c:a/b/d" (windows)
-      on "C:\Projects": "c:\projects" (windows)
      on "C:\Projects": "c:\projects" (windows)
-      on "C:\": "D:\" (posix)
      on "C:\": "D:\" (posix)
-      on "C:\Projects\a\..": "c:\projects" (posix)
      on "C:\Projects\a\..": "c:\projects" (posix)
-      on "C:a\b\c": "C:a/b/d" (posix)
      on "C:a\b\c": "C:a/b/d" (posix)
-      on "C:\Projects": "c:\projects" (posix)
      on "C:\Projects": "c:\projects" (posix)
-      on "/a": "a" (windows)
      on "/a": "a" (windows)
-      on "C:a\b\c": "C:a/b/d" (windows)
      on "C:a\b\c": "C:a/b/d" (windows)
-      on "C:a\b\c": "c:a/b/d" (posix)
      on "C:a\b\c": "c:a/b/d" (posix)
-      on "C:": "D:" (posix)
      on "C:": "D:" (posix)
-      on "C:\": "D:\" (windows)
      on "C:\": "D:\" (windows)
-      on "C:\Projects\a\..": "c:\projects" (windows)
      on "C:\Projects\a\..": "c:\projects" (windows)
-    on "/../../a/b": "/../../a/b/c/d" (windows)
    on "/../../a/b": "/../../a/b/c/d" (windows)
-    on "a/b/c/d": "a/b" (windows)
    on "a/b/c/d": "a/b" (windows)
-    on "a/b/c/d/": "a/b" (windows)
    on "a/b/c/d/": "a/b" (windows)
-    on "a/b/c/d/": "a/b/" (windows)
    on "a/b/c/d/": "a/b/" (windows)
-    on "ab/cd": "ab/cde" (windows)
    on "ab/cd": "ab/cde" (windows)
-    on "/a/b": "/a/b" (posix)
    on "/a/b": "/a/b" (posix)
-    on "/a/b/c/d/": "/a/b/" (posix)
    on "/a/b/c/d/": "/a/b/" (posix)
-    on "a/b/c": "a/c/d" (windows)
    on "a/b/c": "a/c/d" (windows)
-    on "/a/b/c/d": "/a/b/" (posix)
    on "/a/b/c/d": "/a/b/" (posix)
-    on "/a/b": "/a/b/." (posix)
    on "/a/b": "/a/b/." (posix)
-    on "a/b": "a/b/." (posix)
    on "a/b": "a/b/." (posix)
-    on "a/b": "a/b/c/d" (posix)
    on "a/b": "a/b/c/d" (posix)
-    on "a/b": "c/d" (windows)
    on "a/b": "c/d" (windows)
-    on "ab/cd": "ab/cde" (posix)
    on "ab/cd": "ab/cde" (posix)
-    on "/a/b": "/a/b/../c" (posix)
    on "/a/b": "/a/b/../c" (posix)
-    on "a/b": "a/b/../c" (posix)
    on "a/b": "a/b/../c" (posix)
-    on "/a/b/c": "/a/c/d" (posix)
    on "/a/b/c": "/a/c/d" (posix)
-    on "/a/b/c/d/": "/a/b/" (windows)
    on "/a/b/c/d/": "/a/b/" (windows)
-    on "/ab/cd": "/ab/c" (windows)
    on "/ab/cd": "/ab/c" (windows)
-    on "a/b": "c/d" (posix)
    on "a/b": "c/d" (posix)
-    on "a/b/.": "a/b" (posix)
    on "a/b/.": "a/b" (posix)
-    on "a/b": "a/b" (posix)
    on "a/b": "a/b" (posix)
-    on "a/b/c/d/": "a/b" (posix)
    on "a/b/c/d/": "a/b" (posix)
-    on "./a/b": "a/b" (posix)
    on "./a/b": "a/b" (posix)
-    on "a/b": "./a/b" (posix)
    on "a/b": "./a/b" (posix)
-    on "a/b/c/d": "a/b/" (windows)
    on "a/b/c/d": "a/b/" (windows)
-    on "/a/b": "/a/b/." (windows)
    on "/a/b": "/a/b/." (windows)
-    on "/../../a/b": "/../../a/b/c/d" (posix)
    on "/../../a/b": "/../../a/b/c/d" (posix)
-    on ".": "a/b" (posix)
    on ".": "a/b" (posix)
-    on "./a/b": "a/b" (windows)
    on "./a/b": "a/b" (windows)
-    on ".": "a/b" (windows)
    on ".": "a/b" (windows)
-    on "/a/b/c/d": "/a/b" (windows)
    on "/a/b/c/d": "/a/b" (windows)
-    on ".": ".." (posix)
    on ".": ".." (posix)
-  #stem
-     "foo..txt" (windows)
     "foo..txt" (windows)
-     ".txt.txt/" (posix)
     ".txt.txt/" (posix)
-     "bar\foo.txt.txt" (posix)
     "bar\foo.txt.txt" (posix)
-     ".txt.txt" (windows)
     ".txt.txt" (windows)
-     "bar\foo.txt" (posix)
     "bar\foo.txt" (posix)
-     "foo.txt.txt/" (posix)
     "foo.txt.txt/" (posix)
-     "bar/foo..txt" (windows)
     "bar/foo..txt" (windows)
-     ".txt" (windows)
     ".txt" (windows)
-     "bar\foo.txt." (windows)
     "bar\foo.txt." (windows)
-     "bar\foo..txt" (windows)
     "bar\foo..txt" (windows)
-     "bar/.txt.txt" (posix)
     "bar/.txt.txt" (posix)
-     "foo.txt" (windows)
     "foo.txt" (windows)
-     "bar/.txt.txt" (windows)
     "bar/.txt.txt" (windows)
-     "foo..txt" (posix)
     "foo..txt" (posix)
-     "bar/.txt" (posix)
     "bar/.txt" (posix)
-     "bar/foo." (posix)
     "bar/foo." (posix)
-     "foo..txt/" (posix)
     "foo..txt/" (posix)
-     "bar/foo.txt." (windows)
     "bar/foo.txt." (windows)
-     "bar/foo..txt" (posix)
     "bar/foo..txt" (posix)
-     "foo." (posix)
     "foo." (posix)
-     "bar\foo." (posix)
     "bar\foo." (posix)
-     "foo.txt.txt" (posix)
     "foo.txt.txt" (posix)
-     "foo." (windows)
     "foo." (windows)
-     ".txt/" (posix)
     ".txt/" (posix)
-     "foo.txt.txt/" (windows)
     "foo.txt.txt/" (windows)
-     "bar/foo.txt.txt" (windows)
     "bar/foo.txt.txt" (windows)
-     "foo.txt/" (posix)
     "foo.txt/" (posix)
-     "bar/foo.txt" (posix)
     "bar/foo.txt" (posix)
-     ".txt.txt" (posix)
     ".txt.txt" (posix)
-     "bar/foo." (windows)
     "bar/foo." (windows)
-     "foo.txt/" (windows)
     "foo.txt/" (windows)
-     "bar/.txt" (windows)
     "bar/.txt" (windows)
-     "bar\foo." (windows)
     "bar\foo." (windows)
-     "foo./" (posix)
     "foo./" (posix)
-     "foo.txt.txt" (windows)
     "foo.txt.txt" (windows)
-     "bar\.txt" (windows)
     "bar\.txt" (windows)
-     ".txt.txt/" (windows)
     ".txt.txt/" (windows)
-     "foo.txt." (posix)
     "foo.txt." (posix)
-     "bar\.txt.txt" (windows)
     "bar\.txt.txt" (windows)
-     "foo.txt." (windows)
     "foo.txt." (windows)
-     "foo.txt" (posix)
     "foo.txt" (posix)
-     "bar/foo.txt.txt" (posix)
     "bar/foo.txt.txt" (posix)
-     "bar\foo..txt" (posix)
     "bar\foo..txt" (posix)
-     "bar\foo.txt." (posix)
     "bar\foo.txt." (posix)
-     ".txt" (posix)
     ".txt" (posix)
-     "bar/foo.txt" (windows)
     "bar/foo.txt" (windows)
-     "bar\.txt.txt" (posix)
     "bar\.txt.txt" (posix)
-     "foo..txt/" (windows)
     "foo..txt/" (windows)
-     "foo./" (windows)
     "foo./" (windows)
-     ".txt/" (windows)
     ".txt/" (windows)
-     "bar\foo.txt" (windows)
     "bar\foo.txt" (windows)
-     "foo.txt./" (windows)
     "foo.txt./" (windows)
-     "bar\foo.txt.txt" (windows)
     "bar\foo.txt.txt" (windows)
-     "bar\.txt" (posix)
     "bar\.txt" (posix)
-     "foo.txt./" (posix)
     "foo.txt./" (posix)
-     "bar/foo.txt." (posix)
     "bar/foo.txt." (posix)
-  #drive
-     "/foo" (windows)
     "/foo" (windows)
-     "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (posix)
     "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (posix)
-     "//foo" (windows)
     "//foo" (windows)
-     "\\some\share\" (posix)
     "\\some\share\" (posix)
-     "\\not-a\\share" (windows)
     "\\not-a\\share" (windows)
-     "\\\not-a\share" (posix)
     "\\\not-a\share" (posix)
-     "//some/share/foo/" (windows)
     "//some/share/foo/" (windows)
-     "C:\foo" (posix)
     "C:\foo" (posix)
-     "/not-a//share/" (posix)
     "/not-a//share/" (posix)
-     "/foo" (posix)
     "/foo" (posix)
-     "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (windows)
     "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (windows)
-     "//some/share" (windows)
     "//some/share" (windows)
-     "C:foo" (posix)
     "C:foo" (posix)
-     "\\some\share" (windows)
     "\\some\share" (windows)
-     "//some/share/foo/" (posix)
     "//some/share/foo/" (posix)
-     "//some/share/" (posix)
     "//some/share/" (posix)
-     "///not-a/share/" (posix)
     "///not-a/share/" (posix)
-     "C:/foo" (windows)
     "C:/foo" (windows)
-     "\\some\share\" (windows)
     "\\some\share\" (windows)
-     "\\\not-a\share" (windows)
     "\\\not-a\share" (windows)
-     "\\some$\share\" (windows)
     "\\some$\share\" (windows)
-     "C:\foo" (windows)
     "C:\foo" (windows)
-     "\\some\share\foo" (windows)
     "\\some\share\foo" (windows)
-     "C:foo" (windows)
     "C:foo" (windows)
-     "\\some\share" (posix)
     "\\some\share" (posix)
-     "\\127.0.0.1\share\" (posix)
     "\\127.0.0.1\share\" (posix)
-     "C:/foo" (posix)
     "C:/foo" (posix)
-     "\\127.0.0.1\share\" (windows)
     "\\127.0.0.1\share\" (windows)
-     "//some/share" (posix)
     "//some/share" (posix)
-     "\\%10%20\share\" (posix)
     "\\%10%20\share\" (posix)
-     "\\some\share\foo" (posix)
     "\\some\share\foo" (posix)
-     "\\not-a\\share" (posix)
     "\\not-a\\share" (posix)
-     "//foo" (posix)
     "//foo" (posix)
-     "\\some$\share\" (posix)
     "\\some$\share\" (posix)
-     "///not-a/share/" (windows)
     "///not-a/share/" (windows)
-     "/not-a//share/" (windows)
     "/not-a//share/" (windows)
-     "//some/share/" (windows)
     "//some/share/" (windows)
-     "\\%10%20\share\" (windows)
     "\\%10%20\share\" (windows)
-  #==
-    case sensitivity
    case sensitivity
-    simple
    simple
-  #parent
-     "/foo/C:/bar" (posix)
     "/foo/C:/bar" (posix)
-     "\Users/foo\bar.cr" (posix)
     "\Users/foo\bar.cr" (posix)
-     "C:\" (posix)
     "C:\" (posix)
-     "////" (windows)
     "////" (windows)
-     "\Users/foo\bar.cr" (windows)
     "\Users/foo\bar.cr" (windows)
-     "foo\" (windows)
     "foo\" (windows)
-     "foo/bar/.." (windows)
     "foo/bar/.." (windows)
-     "/foo" (windows)
     "/foo" (windows)
-     "Users/foo/bar.cr" (posix)
     "Users/foo/bar.cr" (posix)
-     "/" (posix)
     "/" (posix)
-     "/" (windows)
     "/" (windows)
-     "" (posix)
     "" (posix)
-     "foo//.//" (posix)
     "foo//.//" (posix)
-     "foo\bar\." (posix)
     "foo\bar\." (posix)
-     "foo/bar/" (windows)
     "foo/bar/" (windows)
-     "////" (posix)
     "////" (posix)
-     "foo" (posix)
     "foo" (posix)
-     "C:/" (posix)
     "C:/" (posix)
-     "foo\bar\" (posix)
     "foo\bar\" (posix)
-     ".\foo" (windows)
     ".\foo" (windows)
-     "\Users\foo\bar.cr" (posix)
     "\Users\foo\bar.cr" (posix)
-     "C:\foo" (posix)
     "C:\foo" (posix)
-     "foo" (windows)
     "foo" (windows)
-     "/Users/foo/bar.cr" (posix)
     "/Users/foo/bar.cr" (posix)
-     "foo\bar\." (windows)
     "foo\bar\." (windows)
-     "foo/bar/.." (posix)
     "foo/bar/.." (posix)
-     "." (windows)
     "." (windows)
-     "/foo" (posix)
     "/foo" (posix)
-     "foo/bar/." (posix)
     "foo/bar/." (posix)
-     "\" (posix)
     "\" (posix)
-     "foo\bar\.." (windows)
     "foo\bar\.." (windows)
-     "C:/foo" (windows)
     "C:/foo" (windows)
-     "C:/" (windows)
     "C:/" (windows)
-     "Users/foo/bar.cr" (windows)
     "Users/foo/bar.cr" (windows)
-     "foo/bar/" (posix)
     "foo/bar/" (posix)
-     "\" (windows)
     "\" (windows)
-     "foo\" (posix)
     "foo\" (posix)
-     "/." (windows)
     "/." (windows)
-     "foo\bar\.." (posix)
     "foo\bar\.." (posix)
-     "foo/" (posix)
     "foo/" (posix)
-     "C:/foo" (posix)
     "C:/foo" (posix)
-     "." (posix)
     "." (posix)
-     "C:" (windows)
     "C:" (windows)
-     "foo/" (windows)
     "foo/" (windows)
-     "/Users/foo/bar.cr" (windows)
     "/Users/foo/bar.cr" (windows)
-     "/." (posix)
     "/." (posix)
-     "C:\" (windows)
     "C:\" (windows)
-     "" (windows)
     "" (windows)
-     "\." (posix)
     "\." (posix)
-     "./foo" (windows)
     "./foo" (windows)
-     "C:" (posix)
     "C:" (posix)
-     "foo//.//" (windows)
     "foo//.//" (windows)
-     "\Users\foo\bar.cr" (windows)
     "\Users\foo\bar.cr" (windows)
-     "./foo" (posix)
     "./foo" (posix)
-     "foo/bar/." (windows)
     "foo/bar/." (windows)
-     "/foo/C:/bar" (windows)
     "/foo/C:/bar" (windows)
-     "foo\bar\" (windows)
     "foo\bar\" (windows)
-     ".\foo" (posix)
     ".\foo" (posix)
-     "\." (windows)
     "\." (windows)
-     "/." (windows)
     "/." (windows)
-     "/." (posix)
     "/." (posix)
-     "C:\foo" (windows)
     "C:\foo" (windows)
-  #root
-     "//some/share" (windows)
     "//some/share" (windows)
-     "//some/share/" (windows)
     "//some/share/" (windows)
-     "\\some\share\" (posix)
     "\\some\share\" (posix)
-     "\\foo" (posix)
     "\\foo" (posix)
-     "C:/foo" (windows)
     "C:/foo" (windows)
-     "\\some\share" (posix)
     "\\some\share" (posix)
-     "//foo" (windows)
     "//foo" (windows)
-     "C:foo" (windows)
     "C:foo" (windows)
-     "\foo" (posix)
     "\foo" (posix)
-     "/foo" (posix)
     "/foo" (posix)
-     "C:/foo" (posix)
     "C:/foo" (posix)
-     "//some/share/" (posix)
     "//some/share/" (posix)
-     "C:foo" (posix)
     "C:foo" (posix)
-     "\\foo" (windows)
     "\\foo" (windows)
-     "/foo" (windows)
     "/foo" (windows)
-     "C:\foo" (windows)
     "C:\foo" (windows)
-     "\foo" (windows)
     "\foo" (windows)
-     "//some/share" (posix)
     "//some/share" (posix)
-     "//foo" (posix)
     "//foo" (posix)
-     "C:\foo" (posix)
     "C:\foo" (posix)
-     "\\some\share\" (windows)
     "\\some\share\" (windows)
-     "\\some\share" (windows)
     "\\some\share" (windows)
-  .[]
  .[]
-  #dirname
-     "foo/" (posix)
     "foo/" (posix)
-     "m/" (posix)
     "m/" (posix)
-     "C:/" (windows)
     "C:/" (windows)
-     "/foo/" (windows)
     "/foo/" (windows)
-     "/m/" (windows)
     "/m/" (windows)
-     "/m/" (posix)
     "/m/" (posix)
-     "m/.gitignore" (posix)
     "m/.gitignore" (posix)
-     "m//" (posix)
     "m//" (posix)
-     "m//a/b" (posix)
     "m//a/b" (posix)
-     "m//" (windows)
     "m//" (windows)
-     "m/.gitignore" (windows)
     "m/.gitignore" (windows)
-     "foo/" (windows)
     "foo/" (windows)
-     "/foo" (windows)
     "/foo" (windows)
-     "/m" (windows)
     "/m" (windows)
-     "/Users/foo/bar.cr" (posix)
     "/Users/foo/bar.cr" (posix)
-     "C:" (posix)
     "C:" (posix)
-     "C:\" (windows)
     "C:\" (windows)
-     "m" (posix)
     "m" (posix)
-     "/m" (posix)
     "/m" (posix)
-     "/foo" (posix)
     "/foo" (posix)
-     "/foo//" (windows)
     "/foo//" (windows)
-     "C:\" (posix)
     "C:\" (posix)
-     "/Users/foo/bar.cr" (windows)
     "/Users/foo/bar.cr" (windows)
-     "foo" (windows)
     "foo" (windows)
-     "m/" (windows)
     "m/" (windows)
-     "/foo/" (posix)
     "/foo/" (posix)
-     "C:" (windows)
     "C:" (windows)
-     "C:/" (posix)
     "C:/" (posix)
-     "m" (windows)
     "m" (windows)
-     "foo" (posix)
     "foo" (posix)
-     "m//a/b" (windows)
     "m//a/b" (windows)
-     "/foo//" (posix)
     "/foo//" (posix)
-  #to_windows
-     ""*/:<>?\| " (posix)
     ""*/:<>?\| " (posix)
-    default: mappings=true "C:\foo\bar" (posix)
    default: mappings=true "C:\foo\bar" (posix)
-     "C:\foo\bar" (windows)
     "C:\foo\bar" (windows)
-     "foo/bar" (windows)
     "foo/bar" (windows)
-     "foo/bar" (windows)
     "foo/bar" (windows)
-     ""*/:<>?\| " (posix)
     ""*/:<>?\| " (posix)
-     "C:\foo\bar" (posix)
     "C:\foo\bar" (posix)
-     ""*/:<>?\| " (windows)
     ""*/:<>?\| " (windows)
-    default: mappings=true "C:\foo\bar" (windows)
    default: mappings=true "C:\foo\bar" (windows)
-     "foo/bar" (posix)
     "foo/bar" (posix)
-     "C:\foo\bar" (posix)
     "C:\foo\bar" (posix)
-     "foo/bar" (posix)
     "foo/bar" (posix)
-     ""*/:<>?\| " (windows)
     ""*/:<>?\| " (windows)
-     "C:\foo\bar" (windows)
     "C:\foo\bar" (windows)
-  #ends_with_separator?
-     "foo/." (posix)
     "foo/." (posix)
-     "C:/" (posix)
     "C:/" (posix)
-     "foo" (windows)
     "foo" (windows)
-     "C:/" (windows)
     "C:/" (windows)
-     "foo" (posix)
     "foo" (posix)
-     "foo/" (windows)
     "foo/" (windows)
-     "foo/bar" (windows)
     "foo/bar" (windows)
-     "foo\" (windows)
     "foo\" (windows)
-     "foo/." (windows)
     "foo/." (windows)
-     "foo/bar" (posix)
     "foo/bar" (posix)
-     "foo/" (posix)
     "foo/" (posix)
-     "foo\" (posix)
     "foo\" (posix)
-  #join
-    resolving "bar" "///foo" (windows)
    resolving "bar" "///foo" (windows)
-    resolving "bar\baz" "foo" (windows)
    resolving "bar\baz" "foo" (windows)
-    resolving ["\bar"].each "\foo\" (posix)
    resolving ["\bar"].each "\foo\" (posix)
-    resolving "a" "" (windows)
    resolving "a" "" (windows)
-    resolving [""].each "" (windows)
    resolving [""].each "" (windows)
-    resolving "\\bar" "\\\foo" (posix)
    resolving "\\bar" "\\\foo" (posix)
-    resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (windows)
    resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (windows)
-    resolving ["bar"]  "\\\\foo" (windows)
    resolving ["bar"]  "\\\\foo" (windows)
-    resolving ["/"]  "" (posix)
    resolving ["/"]  "" (posix)
-    resolving "{"/bar/", "/baz/"}" "/foo/" (posix)
    resolving "{"/bar/", "/baz/"}" "/foo/" (posix)
-    resolving "/a" "" (windows)
    resolving "/a" "" (windows)
-    resolving "{"bar", ""}" "foo" (windows)
    resolving "{"bar", ""}" "foo" (windows)
-    resolving [""]  "/" (posix)
    resolving [""]  "/" (posix)
-    resolving ["Program Files"]  "c:\" (posix)
    resolving ["Program Files"]  "c:\" (posix)
-    resolving "\" "foo" (posix)
    resolving "\" "foo" (posix)
-    resolving "bar/baz" "foo" (windows)
    resolving "bar/baz" "foo" (windows)
-    resolving "{"/foo", "/", "bar/", "/"}" "/" (windows)
    resolving "{"/foo", "/", "bar/", "/"}" "/" (windows)
-    resolving [""]  "" (posix)
    resolving [""]  "" (posix)
-    resolving ["/"].each "" (posix)
    resolving ["/"].each "" (posix)
-    resolving ["/"]  "" (windows)
    resolving ["/"]  "" (windows)
-    resolving ["\\bar"].each "\\\foo" (posix)
    resolving ["\\bar"].each "\\\foo" (posix)
-    resolving ["bar\baz"]  "foo" (windows)
    resolving ["bar\baz"]  "foo" (windows)
-    resolving ["/a"]  "" (windows)
    resolving ["/a"]  "" (windows)
-    resolving ["\bar"]  "\foo\" (posix)
    resolving ["\bar"]  "\foo\" (posix)
-    resolving ["/"]  "foo" (windows)
    resolving ["/"]  "foo" (windows)
-    resolving "" "" (windows)
    resolving "" "" (windows)
-    resolving ["a"]  "\" (windows)
    resolving ["a"]  "\" (windows)
-    resolving "{"bar", ""}" "foo" (posix)
    resolving "{"bar", ""}" "foo" (posix)
-    resolving ["bar/baz"].each "foo" (posix)
    resolving ["bar/baz"].each "foo" (posix)
-    resolving ["bar"]  "///foo" (posix)
    resolving ["bar"]  "///foo" (posix)
-    resolving ["Program Files"]  "c:/" (windows)
    resolving ["Program Files"]  "c:/" (windows)
-    resolving "bar/baz" "foo" (posix)
    resolving "bar/baz" "foo" (posix)
-    resolving ["bar/baz"].each "foo" (windows)
    resolving ["bar/baz"].each "foo" (windows)
-    resolving [""]  "/" (windows)
    resolving [""]  "/" (windows)
-    resolving "Program Files" "c:" (windows)
    resolving "Program Files" "c:" (windows)
-    resolving ["/"].each "foo" (windows)
    resolving ["/"].each "foo" (windows)
-    resolving ["Program Files"]  "c:/" (posix)
    resolving ["Program Files"]  "c:/" (posix)
-    resolving "{"/foo", "/", "bar/", "/"}" "/" (posix)
    resolving "{"/foo", "/", "bar/", "/"}" "/" (posix)
-    resolving ["Program Files"].each "c:/" (windows)
    resolving ["Program Files"].each "c:/" (windows)
-    resolving "bar\baz" "foo" (windows)
    resolving "bar\baz" "foo" (windows)
-    resolving "/" "" (posix)
    resolving "/" "" (posix)
-    resolving [""].each "/" (posix)
    resolving [""].each "/" (posix)
-    resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (posix)
    resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (posix)
-    resolving ["bar"].each "\\\\foo" (windows)
    resolving ["bar"].each "\\\\foo" (windows)
-    resolving "/" "foo" (posix)
    resolving "/" "foo" (posix)
-    resolving "a" "\" (windows)
    resolving "a" "\" (windows)
-    resolving "{"bar", ""}" "foo" (windows)
    resolving "{"bar", ""}" "foo" (windows)
-    resolving "Program Files" "c:" (posix)
    resolving "Program Files" "c:" (posix)
-    resolving ["Program Files"].each "c:\" (windows)
    resolving ["Program Files"].each "c:\" (windows)
-    resolving "{"//bar//", "baz///"}" "foo" (windows)
    resolving "{"//bar//", "baz///"}" "foo" (windows)
-    resolving ["//bar"]  "///foo" (posix)
    resolving ["//bar"]  "///foo" (posix)
-    resolving "Program Files" "c:/" (posix)
    resolving "Program Files" "c:/" (posix)
-    resolving ["bar"].each "///foo" (posix)
    resolving ["bar"].each "///foo" (posix)
-    resolving "{"/bar/", "/baz/"}" "/foo/" (windows)
    resolving "{"/bar/", "/baz/"}" "/foo/" (windows)
-    resolving "//bar" "///foo" (posix)
    resolving "//bar" "///foo" (posix)
-    resolving ["/a"].each "" (posix)
    resolving ["/a"].each "" (posix)
-    resolving "{"bar", "baz"}" "foo" (windows)
    resolving "{"bar", "baz"}" "foo" (windows)
-    resolving ["a"].each "" (posix)
    resolving ["a"].each "" (posix)
-    resolving ["bar/baz"]  "foo" (posix)
    resolving ["bar/baz"]  "foo" (posix)
-    resolving ["Program Files"]  "c:\" (windows)
    resolving ["Program Files"]  "c:\" (windows)
-    resolving ["a"].each "/" (posix)
    resolving ["a"].each "/" (posix)
-    resolving ["\a"]  "" (posix)
    resolving ["\a"]  "" (posix)
-    resolving ["//bar"].each "///foo" (posix)
    resolving ["//bar"].each "///foo" (posix)
-    resolving "{"/", "bar"}" "foo" (windows)
    resolving "{"/", "bar"}" "foo" (windows)
-    resolving ["\"]  "foo" (windows)
    resolving ["\"]  "foo" (windows)
-    resolving ["Program Files"]  "c:" (posix)
    resolving ["Program Files"]  "c:" (posix)
-    resolving "" "/" (windows)
    resolving "" "/" (windows)
-    resolving ["bar\baz"].each "foo" (windows)
    resolving ["bar\baz"].each "foo" (windows)
-    resolving "a" "/" (posix)
    resolving "a" "/" (posix)
-    resolving ["bar\baz"]  "foo" (posix)
    resolving ["bar\baz"]  "foo" (posix)
-    resolving ["a"].each "\" (windows)
    resolving ["a"].each "\" (windows)
-    resolving ["Program Files"].each "c:/" (posix)
    resolving ["Program Files"].each "c:/" (posix)
-    resolving "/bar" "/foo/" (windows)
    resolving "/bar" "/foo/" (windows)
-    resolving ["bar\baz"].each "foo" (posix)
    resolving ["bar\baz"].each "foo" (posix)
-    resolving "a" "\" (posix)
    resolving "a" "\" (posix)
-    resolving "{"/", "/", "bar"}" "foo" (posix)
    resolving "{"/", "/", "bar"}" "foo" (posix)
-    resolving "/" "foo" (windows)
    resolving "/" "foo" (windows)
-    resolving ["\\bar"]  "\\\foo" (windows)
    resolving ["\\bar"]  "\\\foo" (windows)
-    resolving ["Program Files"].each "c:" (windows)
    resolving ["Program Files"].each "c:" (windows)
-    resolving [""].each "" (posix)
    resolving [""].each "" (posix)
-    resolving ["/bar"].each "/foo/" (windows)
    resolving ["/bar"].each "/foo/" (windows)
-    resolving "{"\\", "\\", "bar"}" "foo" (posix)
    resolving "{"\\", "\\", "bar"}" "foo" (posix)
-    resolving ["bar"].each "///foo" (windows)
    resolving ["bar"].each "///foo" (windows)
-    resolving ["\bar"].each "\foo\" (windows)
    resolving ["\bar"].each "\foo\" (windows)
-    resolving "/bar" "/foo/" (posix)
    resolving "/bar" "/foo/" (posix)
-    resolving "\a" "" (posix)
    resolving "\a" "" (posix)
-    resolving "\" "foo" (windows)
    resolving "\" "foo" (windows)
-    resolving ["\"]  "foo" (posix)
    resolving ["\"]  "foo" (posix)
-    resolving "" "" (posix)
    resolving "" "" (posix)
-    resolving ["\a"].each "" (windows)
    resolving ["\a"].each "" (windows)
-    resolving ["//bar"].each "///foo" (windows)
    resolving ["//bar"].each "///foo" (windows)
-    resolving ["bar\baz"]  "foo" (windows)
    resolving ["bar\baz"]  "foo" (windows)
-    resolving "bar" "\\\\foo" (windows)
    resolving "bar" "\\\\foo" (windows)
-    resolving "bar\baz" "foo" (posix)
    resolving "bar\baz" "foo" (posix)
-    resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (windows)
    resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (windows)
-    resolving "\bar" "\foo\" (posix)
    resolving "\bar" "\foo\" (posix)
-    resolving "{"bar", "baz"}" "foo" (posix)
    resolving "{"bar", "baz"}" "foo" (posix)
-    resolving ["bar"]  "\\\\foo" (posix)
    resolving ["bar"]  "\\\\foo" (posix)
-    resolving ["Program Files"]  "c:" (windows)
    resolving ["Program Files"]  "c:" (windows)
-    resolving ["bar\baz"].each "foo" (posix)
    resolving ["bar\baz"].each "foo" (posix)
-    resolving "{"\\", "bar"}" "foo" (windows)
    resolving "{"\\", "bar"}" "foo" (windows)
-    resolving ["\a"]  "" (windows)
    resolving ["\a"]  "" (windows)
-    resolving "a" "/" (windows)
    resolving "a" "/" (windows)
-    resolving "/" "" (windows)
    resolving "/" "" (windows)
-    resolving "{"/", "bar"}" "foo" (posix)
    resolving "{"/", "bar"}" "foo" (posix)
-    resolving "bar" "\\\\foo" (posix)
    resolving "bar" "\\\\foo" (posix)
-    resolving ["\"].each "foo" (windows)
    resolving ["\"].each "foo" (windows)
-    resolving ["Program Files"].each "c:\" (posix)
    resolving ["Program Files"].each "c:\" (posix)
-    resolving "{"bar", ""}" "foo" (posix)
    resolving "{"bar", ""}" "foo" (posix)
-    resolving ["a"].each "/" (windows)
    resolving ["a"].each "/" (windows)
-    resolving ["a"]  "" (windows)
    resolving ["a"]  "" (windows)
-    resolving "{"\\", "\\", "bar"}" "foo" (windows)
    resolving "{"\\", "\\", "bar"}" "foo" (windows)
-    resolving ["/"].each "foo" (posix)
    resolving ["/"].each "foo" (posix)
-    resolving "bar" "///foo" (posix)
    resolving "bar" "///foo" (posix)
-    resolving [""]  "" (windows)
    resolving [""]  "" (windows)
-    resolving ["a"].each "" (windows)
    resolving ["a"].each "" (windows)
-    resolving "\\bar" "\\\foo" (windows)
    resolving "\\bar" "\\\foo" (windows)
-    resolving ["\bar"]  "\foo\" (windows)
    resolving ["\bar"]  "\foo\" (windows)
-    resolving ["/a"].each "" (windows)
    resolving ["/a"].each "" (windows)
-    resolving "Program Files" "c:\" (posix)
    resolving "Program Files" "c:\" (posix)
-    resolving "\a" "" (windows)
    resolving "\a" "" (windows)
-    resolving ["a"]  "/" (posix)
    resolving ["a"]  "/" (posix)
-    resolving "//bar" "///foo" (windows)
    resolving "//bar" "///foo" (windows)
-    resolving ["a"].each "\" (posix)
    resolving ["a"].each "\" (posix)
-    resolving "Program Files" "c:/" (windows)
    resolving "Program Files" "c:/" (windows)
-    resolving ["\"].each "foo" (posix)
    resolving ["\"].each "foo" (posix)
-    resolving ["/"].each "" (windows)
    resolving ["/"].each "" (windows)
-    resolving "{"\\", "bar"}" "foo" (posix)
    resolving "{"\\", "bar"}" "foo" (posix)
-    resolving [""].each "/" (windows)
    resolving [""].each "/" (windows)
-    resolving ["/bar"]  "/foo/" (windows)
    resolving ["/bar"]  "/foo/" (windows)
-    resolving ["bar\baz"]  "foo" (posix)
    resolving ["bar\baz"]  "foo" (posix)
-    resolving ["Program Files"].each "c:" (posix)
    resolving ["Program Files"].each "c:" (posix)
-    resolving "" "/" (posix)
    resolving "" "/" (posix)
-    resolving "{"/", "/", "bar"}" "foo" (windows)
    resolving "{"/", "/", "bar"}" "foo" (windows)
-    resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (posix)
    resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (posix)
-    resolving "\bar" "\foo\" (windows)
    resolving "\bar" "\foo\" (windows)
-    resolving ["/bar"]  "/foo/" (posix)
    resolving ["/bar"]  "/foo/" (posix)
-    resolving ["bar"].each "\\\\foo" (posix)
    resolving ["bar"].each "\\\\foo" (posix)
-    resolving ["bar\baz"].each "foo" (windows)
    resolving ["bar\baz"].each "foo" (windows)
-    resolving ["//bar"]  "///foo" (windows)
    resolving ["//bar"]  "///foo" (windows)
-    resolving ["\\bar"].each "\\\foo" (windows)
    resolving ["\\bar"].each "\\\foo" (windows)
-    resolving ["a"]  "\" (posix)
    resolving ["a"]  "\" (posix)
-    resolving ["bar/baz"]  "foo" (windows)
    resolving ["bar/baz"]  "foo" (windows)
-    resolving ["/a"]  "" (posix)
    resolving ["/a"]  "" (posix)
-    resolving ["bar"]  "///foo" (windows)
    resolving ["bar"]  "///foo" (windows)
-    resolving "{"//bar//", "baz///"}" "foo" (posix)
    resolving "{"//bar//", "baz///"}" "foo" (posix)
-    resolving "bar\baz" "foo" (posix)
    resolving "bar\baz" "foo" (posix)
-    resolving "/a" "" (posix)
    resolving "/a" "" (posix)
-    resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (windows)
    resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (windows)
-    resolving ["a"]  "/" (windows)
    resolving ["a"]  "/" (windows)
-    resolving "Program Files" "c:\" (windows)
    resolving "Program Files" "c:\" (windows)
-    resolving ["\a"].each "" (posix)
    resolving ["\a"].each "" (posix)
-    resolving ["/bar"].each "/foo/" (posix)
    resolving ["/bar"].each "/foo/" (posix)
-    resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (posix)
    resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (posix)
-    resolving "a" "" (posix)
    resolving "a" "" (posix)
-    resolving ["/"]  "foo" (posix)
    resolving ["/"]  "foo" (posix)
-    resolving ["\\bar"]  "\\\foo" (posix)
    resolving ["\\bar"]  "\\\foo" (posix)
-    resolving ["a"]  "" (posix)
    resolving ["a"]  "" (posix)
-  #each_part
-    block "foo/bar/.." (posix)
    block "foo/bar/.." (posix)
-    iterator "//some/share/bar.cr" (posix)
    iterator "//some/share/bar.cr" (posix)
-    iterator "foo" (windows)
    iterator "foo" (windows)
-    #parts "m\" (posix)
    #parts "m\" (posix)
-    #parts "foo/../bar/" (windows)
    #parts "foo/../bar/" (windows)
-    block "foo/../bar/." (windows)
    block "foo/../bar/." (windows)
-    #parts "foo/bar/." (posix)
    #parts "foo/bar/." (posix)
-    #parts "foo\bar\" (posix)
    #parts "foo\bar\" (posix)
-    block "C:/" (windows)
    block "C:/" (windows)
-    iterator "\Users\foo\bar.cr" (posix)
    iterator "\Users\foo\bar.cr" (posix)
-    block "/Users/foo/bar.cr" (posix)
    block "/Users/foo/bar.cr" (posix)
-    block "foo\bar\" (windows)
    block "foo\bar\" (windows)
-    #parts ".\foo" (windows)
    #parts ".\foo" (windows)
-    iterator "C:folder" (windows)
    iterator "C:folder" (windows)
-    block "C:\" (posix)
    block "C:\" (posix)
-    block "foo/bar/." (windows)
    block "foo/bar/." (windows)
-    iterator ".\foo" (posix)
    iterator ".\foo" (posix)
-    iterator "C:\folder" (posix)
    iterator "C:\folder" (posix)
-    block "." (posix)
    block "." (posix)
-    iterator "/foo" (posix)
    iterator "/foo" (posix)
-    block "foo/../bar/." (posix)
    block "foo/../bar/." (posix)
-    block "\\some\share\bar.cr" (posix)
    block "\\some\share\bar.cr" (posix)
-    #parts "./foo" (posix)
    #parts "./foo" (posix)
-    #parts "//some/share/" (windows)
    #parts "//some/share/" (windows)
-    #parts "C:\" (posix)
    #parts "C:\" (posix)
-    iterator "foo\bar\" (windows)
    iterator "foo\bar\" (windows)
-    iterator "foo\" (posix)
    iterator "foo\" (posix)
-    #parts "C:/" (windows)
    #parts "C:/" (windows)
-    block "m//" (posix)
    block "m//" (posix)
-    iterator "m//a/b" (posix)
    iterator "m//a/b" (posix)
-    iterator "foo/../bar/" (posix)
    iterator "foo/../bar/" (posix)
-    #parts "\\some\share\" (windows)
    #parts "\\some\share\" (windows)
-    iterator "m\a/b" (posix)
    iterator "m\a/b" (posix)
-    #parts "C:\folder" (posix)
    #parts "C:\folder" (posix)
-    #parts "////" (windows)
    #parts "////" (windows)
-    #parts "m/.gitignore" (posix)
    #parts "m/.gitignore" (posix)
-    #parts "/." (windows)
    #parts "/." (windows)
-    #parts "foo/./bar/" (posix)
    #parts "foo/./bar/" (posix)
-    #parts "Users/foo/bar.cr" (posix)
    #parts "Users/foo/bar.cr" (posix)
-    #parts "C:\\folder" (posix)
    #parts "C:\\folder" (posix)
-    block "\\some\share\" (posix)
    block "\\some\share\" (posix)
-    #parts "/Users/foo/bar.cr" (posix)
    #parts "/Users/foo/bar.cr" (posix)
-    iterator "C:\." (windows)
    iterator "C:\." (windows)
-    iterator "//some/share" (windows)
    iterator "//some/share" (windows)
-    #parts ".\foo" (posix)
    #parts ".\foo" (posix)
-    #parts "C:/" (posix)
    #parts "C:/" (posix)
-    #parts "\Users\foo\bar.cr" (posix)
    #parts "\Users\foo\bar.cr" (posix)
-    iterator "C:\Users\foo\bar.cr" (posix)
    iterator "C:\Users\foo\bar.cr" (posix)
-    #parts "////" (posix)
    #parts "////" (posix)
-    #parts "foo/bar/" (windows)
    #parts "foo/bar/" (windows)
-    block "/" (posix)
    block "/" (posix)
-    block "\Users\foo\bar.cr" (posix)
    block "\Users\foo\bar.cr" (posix)
-    block "m/" (posix)
    block "m/" (posix)
-    block "Users/foo/bar.cr" (windows)
    block "Users/foo/bar.cr" (windows)
-    block "/." (posix)
    block "/." (posix)
-    iterator "m/.gitignore" (posix)
    iterator "m/.gitignore" (posix)
-    #parts "C:\Users\foo\bar.cr" (windows)
    #parts "C:\Users\foo\bar.cr" (windows)
-    block "//some/share/bar.cr" (posix)
    block "//some/share/bar.cr" (posix)
-    #parts "foo/../bar/." (posix)
    #parts "foo/../bar/." (posix)
-    block "C:\Users\foo\bar.cr" (windows)
    block "C:\Users\foo\bar.cr" (windows)
-    iterator "/Users/foo/bar.cr" (windows)
    iterator "/Users/foo/bar.cr" (windows)
-    #parts "\\some\share\bar.cr" (posix)
    #parts "\\some\share\bar.cr" (posix)
-    #parts "/m" (windows)
    #parts "/m" (windows)
-    iterator "/m" (windows)
    iterator "/m" (windows)
-    iterator "\Users/foo\bar.cr" (windows)
    iterator "\Users/foo\bar.cr" (windows)
-    block "foo/bar/.." (windows)
    block "foo/bar/.." (windows)
-    #parts "" (windows)
    #parts "" (windows)
-    iterator "/." (windows)
    iterator "/." (windows)
-    iterator "////" (windows)
    iterator "////" (windows)
-    block "/m" (windows)
    block "/m" (windows)
-    iterator "Users/foo/bar.cr" (posix)
    iterator "Users/foo/bar.cr" (posix)
-    block "\\some\share\bar.cr" (windows)
    block "\\some\share\bar.cr" (windows)
-    #parts "/m/" (windows)
    #parts "/m/" (windows)
-    #parts "C:\Users\foo\bar.cr" (posix)
    #parts "C:\Users\foo\bar.cr" (posix)
-    iterator "\Users\foo\bar.cr" (windows)
    iterator "\Users\foo\bar.cr" (windows)
-    #parts "\\some\share" (posix)
    #parts "\\some\share" (posix)
-    #parts "foo/bar/." (posix)
    #parts "foo/bar/." (posix)
-    block "////" (posix)
    block "////" (posix)
-    iterator "C:\\folder" (posix)
    iterator "C:\\folder" (posix)
-    #parts "C:\folder" (windows)
    #parts "C:\folder" (windows)
-    iterator "C:\folder" (windows)
    iterator "C:\folder" (windows)
-    block "/foo" (posix)
    block "/foo" (posix)
-    #parts "foo/bar/.." (windows)
    #parts "foo/bar/.." (windows)
-    block "Users/foo/bar.cr" (posix)
    block "Users/foo/bar.cr" (posix)
-    block "\\some\share\" (windows)
    block "\\some\share\" (windows)
-    block "" (windows)
    block "" (windows)
-    iterator "//some/share/" (windows)
    iterator "//some/share/" (windows)
-    #parts "\Users/foo\bar.cr" (posix)
    #parts "\Users/foo\bar.cr" (posix)
-    block "foo/" (posix)
    block "foo/" (posix)
-    #parts "\Users\foo\bar.cr" (windows)
    #parts "\Users\foo\bar.cr" (windows)
-    block "/foo" (windows)
    block "/foo" (windows)
-    block "//some/share" (windows)
    block "//some/share" (windows)
-    #parts "m/" (windows)
    #parts "m/" (windows)
-    block "m\" (windows)
    block "m\" (windows)
-    iterator "m/" (posix)
    iterator "m/" (posix)
-    block "foo\" (windows)
    block "foo\" (windows)
-    #parts "C:folder" (windows)
    #parts "C:folder" (windows)
-    block "/m/" (posix)
    block "/m/" (posix)
-    block "/m" (posix)
    block "/m" (posix)
-    iterator "\\some\share" (windows)
    iterator "\\some\share" (windows)
-    block "m\a/b" (windows)
    block "m\a/b" (windows)
-    block "C:" (posix)
    block "C:" (posix)
-    block "/." (windows)
    block "/." (windows)
-    block ".\foo" (posix)
    block ".\foo" (posix)
-    iterator "foo/bar/" (posix)
    iterator "foo/bar/" (posix)
-    iterator "\Users/foo\bar.cr" (posix)
    iterator "\Users/foo\bar.cr" (posix)
-    block "m/" (windows)
    block "m/" (windows)
-    block "/" (windows)
    block "/" (windows)
-    block "m" (windows)
    block "m" (windows)
-    #parts "foo/bar/./." (windows)
    #parts "foo/bar/./." (windows)
-    iterator "foo/./bar/" (posix)
    iterator "foo/./bar/" (posix)
-    iterator "foo/bar/../." (windows)
    iterator "foo/bar/../." (windows)
-    #parts "./foo" (windows)
    #parts "./foo" (windows)
-    block "\" (windows)
    block "\" (windows)
-    iterator "." (posix)
    iterator "." (posix)
-    block "foo/../bar/" (posix)
    block "foo/../bar/" (posix)
-    iterator "/m/" (windows)
    iterator "/m/" (windows)
-    iterator "\\some\share\" (posix)
    iterator "\\some\share\" (posix)
-    block "foo/bar/../." (posix)
    block "foo/bar/../." (posix)
-    iterator "foo/bar/../." (posix)
    iterator "foo/bar/../." (posix)
-    block "m" (posix)
    block "m" (posix)
-    iterator "m/" (windows)
    iterator "m/" (windows)
-    #parts "\" (posix)
    #parts "\" (posix)
-    #parts "m//a/b" (posix)
    #parts "m//a/b" (posix)
-    #parts "foo/bar/" (posix)
    #parts "foo/bar/" (posix)
-    block "/Users/foo/bar.cr" (windows)
    block "/Users/foo/bar.cr" (windows)
-    #parts "foo" (posix)
    #parts "foo" (posix)
-    iterator "C:\\folder" (windows)
    iterator "C:\\folder" (windows)
-    block "m\a/b" (posix)
    block "m\a/b" (posix)
-    #parts "C:\." (windows)
    #parts "C:\." (windows)
-    #parts "m/.gitignore" (windows)
    #parts "m/.gitignore" (windows)
-    iterator "C:folder" (posix)
    iterator "C:folder" (posix)
-    #parts "foo/bar/./." (posix)
    #parts "foo/bar/./." (posix)
-    iterator "m" (windows)
    iterator "m" (windows)
-    #parts "/m/" (posix)
    #parts "/m/" (posix)
-    block "./foo" (posix)
    block "./foo" (posix)
-    block "C:\folder" (windows)
    block "C:\folder" (windows)
-    #parts "foo/../bar/." (windows)
    #parts "foo/../bar/." (windows)
-    block "m//a/b" (posix)
    block "m//a/b" (posix)
-    iterator "m/.gitignore" (windows)
    iterator "m/.gitignore" (windows)
-    #parts "//some/share/bar.cr" (posix)
    #parts "//some/share/bar.cr" (posix)
-    #parts "m/" (posix)
    #parts "m/" (posix)
-    iterator "\" (posix)
    iterator "\" (posix)
-    #parts "" (posix)
    #parts "" (posix)
-    iterator "foo/../bar/." (windows)
    iterator "foo/../bar/." (windows)
-    iterator "foo/bar/.." (posix)
    iterator "foo/bar/.." (posix)
-    #parts "/" (windows)
    #parts "/" (windows)
-    iterator "foo/bar/./." (posix)
    iterator "foo/bar/./." (posix)
-    #parts "foo/bar/../." (posix)
    #parts "foo/bar/../." (posix)
-    iterator "foo/../bar/" (windows)
    iterator "foo/../bar/" (windows)
-    block ".\foo" (windows)
    block ".\foo" (windows)
-    iterator "foo\bar\" (posix)
    iterator "foo\bar\" (posix)
-    #parts "foo/../bar/" (posix)
    #parts "foo/../bar/" (posix)
-    block "" (posix)
    block "" (posix)
-    block "C:\\folder" (windows)
    block "C:\\folder" (windows)
-    #parts "m\" (windows)
    #parts "m\" (windows)
-    block "foo/./bar/" (posix)
    block "foo/./bar/" (posix)
-    iterator "m\a/b" (windows)
    iterator "m\a/b" (windows)
-    block "//some/share/" (posix)
    block "//some/share/" (posix)
-    block "foo/./bar/." (windows)
    block "foo/./bar/." (windows)
-    iterator "m" (posix)
    iterator "m" (posix)
-    iterator "m//a/b" (windows)
    iterator "m//a/b" (windows)
-    block "foo/../bar/" (windows)
    block "foo/../bar/" (windows)
-    #parts "foo\bar\" (windows)
    #parts "foo\bar\" (windows)
-    block "C:folder" (posix)
    block "C:folder" (posix)
-    block "//some/share/bar.cr" (windows)
    block "//some/share/bar.cr" (windows)
-    iterator "/m" (posix)
    iterator "/m" (posix)
-    block "\Users\foo\bar.cr" (windows)
    block "\Users\foo\bar.cr" (windows)
-    #parts "//some/share/bar.cr" (windows)
    #parts "//some/share/bar.cr" (windows)
-    #parts "." (posix)
    #parts "." (posix)
-    iterator "////" (posix)
    iterator "////" (posix)
-    iterator "foo/bar/" (windows)
    iterator "foo/bar/" (windows)
-    block "foo/bar/../." (windows)
    block "foo/bar/../." (windows)
-    block "m/.gitignore" (posix)
    block "m/.gitignore" (posix)
-    #parts "\" (windows)
    #parts "\" (windows)
-    block "foo" (posix)
    block "foo" (posix)
-    block "////" (windows)
    block "////" (windows)
-    iterator "foo/bar/." (windows)
    iterator "foo/bar/." (windows)
-    #parts "C:\" (windows)
    #parts "C:\" (windows)
-    block "C:\folder" (posix)
    block "C:\folder" (posix)
-    iterator "foo/bar/." (windows)
    iterator "foo/bar/." (windows)
-    block "C:\." (posix)
    block "C:\." (posix)
-    #parts "m\a/b" (posix)
    #parts "m\a/b" (posix)
-    #parts "\\some\share" (windows)
    #parts "\\some\share" (windows)
-    #parts "/" (posix)
    #parts "/" (posix)
-    block "//some/share/" (windows)
    block "//some/share/" (windows)
-    #parts "foo\" (windows)
    #parts "foo\" (windows)
-    block "foo/bar/." (posix)
    block "foo/bar/." (posix)
-    iterator "//some/share/" (posix)
    iterator "//some/share/" (posix)
-    iterator "./foo" (posix)
    iterator "./foo" (posix)
-    #parts "//some/share/" (posix)
    #parts "//some/share/" (posix)
-    block "/m/" (windows)
    block "/m/" (windows)
-    block "C:\\folder" (posix)
    block "C:\\folder" (posix)
-    #parts "foo" (windows)
    #parts "foo" (windows)
-    block "foo" (windows)
    block "foo" (windows)
-    iterator "\\some\share" (posix)
    iterator "\\some\share" (posix)
-    iterator "/" (windows)
    iterator "/" (windows)
-    iterator "foo/../bar/." (posix)
    iterator "foo/../bar/." (posix)
-    iterator "\\some\share\bar.cr" (windows)
    iterator "\\some\share\bar.cr" (windows)
-    block "m//a/b" (windows)
    block "m//a/b" (windows)
-    block "C:\Users\foo\bar.cr" (posix)
    block "C:\Users\foo\bar.cr" (posix)
-    block "C:\" (windows)
    block "C:\" (windows)
-    block "foo/bar/" (windows)
    block "foo/bar/" (windows)
-    iterator "/" (posix)
    iterator "/" (posix)
-    iterator "/." (posix)
    iterator "/." (posix)
-    iterator "Users/foo/bar.cr" (windows)
    iterator "Users/foo/bar.cr" (windows)
-    #parts "foo/./bar/." (posix)
    #parts "foo/./bar/." (posix)
-    iterator "m\" (windows)
    iterator "m\" (windows)
-    iterator "//some/share" (posix)
    iterator "//some/share" (posix)
-    block "//some/share" (posix)
    block "//some/share" (posix)
-    iterator "m//" (windows)
    iterator "m//" (windows)
-    iterator "foo" (posix)
    iterator "foo" (posix)
-    block "foo/bar/." (posix)
    block "foo/bar/." (posix)
-    #parts "/Users/foo/bar.cr" (windows)
    #parts "/Users/foo/bar.cr" (windows)
-    #parts "foo/bar/../." (windows)
    #parts "foo/bar/../." (windows)
-    #parts "/m" (posix)
    #parts "/m" (posix)
-    iterator "C:/" (windows)
    iterator "C:/" (windows)
-    block "foo/bar/./." (windows)
    block "foo/bar/./." (windows)
-    block "\" (posix)
    block "\" (posix)
-    iterator "C:/" (posix)
    iterator "C:/" (posix)
-    block "./foo" (windows)
    block "./foo" (windows)
-    #parts "C:" (windows)
    #parts "C:" (windows)
-    #parts "foo/./bar/" (windows)
    #parts "foo/./bar/" (windows)
-    block "." (windows)
    block "." (windows)
-    iterator "foo/" (posix)
    iterator "foo/" (posix)
-    iterator "/Users/foo/bar.cr" (posix)
    iterator "/Users/foo/bar.cr" (posix)
-    iterator "\" (windows)
    iterator "\" (windows)
-    block "foo/bar/." (windows)
    block "foo/bar/." (windows)
-    block "foo/bar/./." (posix)
    block "foo/bar/./." (posix)
-    iterator "foo/bar/.." (windows)
    iterator "foo/bar/.." (windows)
-    #parts "C:folder" (posix)
    #parts "C:folder" (posix)
-    #parts "foo/./bar/." (windows)
    #parts "foo/./bar/." (windows)
-    iterator "/foo" (windows)
    iterator "/foo" (windows)
-    iterator ".\foo" (windows)
    iterator ".\foo" (windows)
-    iterator "\\some\share\" (windows)
    iterator "\\some\share\" (windows)
-    block "C:" (windows)
    block "C:" (windows)
-    block "m/.gitignore" (windows)
    block "m/.gitignore" (windows)
-    #parts "C:\\folder" (windows)
    #parts "C:\\folder" (windows)
-    #parts "m//" (windows)
    #parts "m//" (windows)
-    #parts "foo/bar/.." (posix)
    #parts "foo/bar/.." (posix)
-    iterator "foo\" (windows)
    iterator "foo\" (windows)
-    #parts "C:" (posix)
    #parts "C:" (posix)
-    #parts "m//a/b" (windows)
    #parts "m//a/b" (windows)
-    #parts "C:\." (posix)
    #parts "C:\." (posix)
-    iterator "foo/bar/." (posix)
    iterator "foo/bar/." (posix)
-    iterator "C:\Users\foo\bar.cr" (windows)
    iterator "C:\Users\foo\bar.cr" (windows)
-    #parts "//some/share" (windows)
    #parts "//some/share" (windows)
-    iterator "/m/" (posix)
    iterator "/m/" (posix)
-    block "foo\" (posix)
    block "foo\" (posix)
-    #parts "//some/share" (posix)
    #parts "//some/share" (posix)
-    #parts "\\some\share\" (posix)
    #parts "\\some\share\" (posix)
-    #parts "foo/bar/." (windows)
    #parts "foo/bar/." (windows)
-    block "\\some\share" (windows)
    block "\\some\share" (windows)
-    #parts "m//" (posix)
    #parts "m//" (posix)
-    iterator "foo/" (windows)
    iterator "foo/" (windows)
-    #parts "." (windows)
    #parts "." (windows)
-    #parts "foo/" (posix)
    #parts "foo/" (posix)
-    block "foo/bar/" (posix)
    block "foo/bar/" (posix)
-    iterator "foo/./bar/." (posix)
    iterator "foo/./bar/." (posix)
-    block "m//" (windows)
    block "m//" (windows)
-    block "foo/./bar/." (posix)
    block "foo/./bar/." (posix)
-    #parts "m\a/b" (windows)
    #parts "m\a/b" (windows)
-    iterator "./foo" (windows)
    iterator "./foo" (windows)
-    #parts "Users/foo/bar.cr" (windows)
    #parts "Users/foo/bar.cr" (windows)
-    iterator "" (windows)
    iterator "" (windows)
-    iterator "foo/bar/." (posix)
    iterator "foo/bar/." (posix)
-    iterator "C:\." (posix)
    iterator "C:\." (posix)
-    block "\Users/foo\bar.cr" (windows)
    block "\Users/foo\bar.cr" (windows)
-    iterator "m//" (posix)
    iterator "m//" (posix)
-    iterator "C:\" (windows)
    iterator "C:\" (windows)
-    block "foo\bar\" (posix)
    block "foo\bar\" (posix)
-    #parts "m" (windows)
    #parts "m" (windows)
-    block "\Users/foo\bar.cr" (posix)
    block "\Users/foo\bar.cr" (posix)
-    iterator "foo/./bar/" (windows)
    iterator "foo/./bar/" (windows)
-    iterator "C:\" (posix)
    iterator "C:\" (posix)
-    #parts "m" (posix)
    #parts "m" (posix)
-    iterator "C:" (posix)
    iterator "C:" (posix)
-    #parts "\\some\share\bar.cr" (windows)
    #parts "\\some\share\bar.cr" (windows)
-    iterator "foo/bar/./." (windows)
    iterator "foo/bar/./." (windows)
-    block "C:folder" (windows)
    block "C:folder" (windows)
-    #parts "foo/bar/." (windows)
    #parts "foo/bar/." (windows)
-    #parts "\Users/foo\bar.cr" (windows)
    #parts "\Users/foo\bar.cr" (windows)
-    iterator "foo/./bar/." (windows)
    iterator "foo/./bar/." (windows)
-    block "C:/" (posix)
    block "C:/" (posix)
-    #parts "foo\" (posix)
    #parts "foo\" (posix)
-    block "foo/./bar/" (windows)
    block "foo/./bar/" (windows)
-    block "\\some\share" (posix)
    block "\\some\share" (posix)
-    iterator "\\some\share\bar.cr" (posix)
    iterator "\\some\share\bar.cr" (posix)
-    iterator "//some/share/bar.cr" (windows)
    iterator "//some/share/bar.cr" (windows)
-    #parts "foo/" (windows)
    #parts "foo/" (windows)
-    block "C:\." (windows)
    block "C:\." (windows)
-    #parts "/foo" (windows)
    #parts "/foo" (windows)
-    iterator "m\" (posix)
    iterator "m\" (posix)
-    iterator "." (windows)
    iterator "." (windows)
-    #parts "/foo" (posix)
    #parts "/foo" (posix)
-    block "m\" (posix)
    block "m\" (posix)
-    iterator "" (posix)
    iterator "" (posix)
-    block "foo/" (windows)
    block "foo/" (windows)
-    iterator "C:" (windows)
    iterator "C:" (windows)
-    #parts "/." (posix)
    #parts "/." (posix)
-  #basename
-     "" (windows)
     "" (windows)
-     "x" (posix)
     "x" (posix)
-     "////" (windows)
     "////" (windows)
-     "a/x." (posix)
     "a/x." (posix)
-     "a/.x" (posix)
     "a/.x" (posix)
-     "\foo\" (windows)
     "\foo\" (windows)
-     "/" (windows)
     "/" (windows)
-     "\foo\bar\baz.cr" (windows)
     "\foo\bar\baz.cr" (windows)
-     "/foo/bar/baz.cr" (posix)
     "/foo/bar/baz.cr" (posix)
-     "////" (posix)
     "////" (posix)
-     "a/x." (windows)
     "a/x." (windows)
-     "a/.x" (windows)
     "a/.x" (windows)
-     "/." (posix)
     "/." (posix)
-     "/foo/" (posix)
     "/foo/" (posix)
-     "x" (windows)
     "x" (windows)
-     "\." (posix)
     "\." (posix)
-     "." (windows)
     "." (windows)
-     "/." (windows)
     "/." (windows)
-     "a/x" (posix)
     "a/x" (posix)
-    removes suffix
-       "\foo\bar\baz.cr.tmp" (posix)
       "\foo\bar\baz.cr.tmp" (posix)
-       "\foo/bar\baz.cr" (posix)
       "\foo/bar\baz.cr" (posix)
-       "a.x" (posix)
       "a.x" (posix)
-       "/foo/bar/baz.cr.tmp" (windows)
       "/foo/bar/baz.cr.tmp" (windows)
-       "\foo\bar\baz.cr" (posix)
       "\foo\bar\baz.cr" (posix)
-       "/foo/bar/baz.cr.tmp" (posix)
       "/foo/bar/baz.cr.tmp" (posix)
-       "\foo\bar\baz.cr" (windows)
       "\foo\bar\baz.cr" (windows)
-       "\foo\bar\baz.cr.tmp" (windows)
       "\foo\bar\baz.cr.tmp" (windows)
-       "/foo/bar/baz.cr" (windows)
       "/foo/bar/baz.cr" (windows)
-       "\foo\bar\baz.cr.tmp" (windows)
       "\foo\bar\baz.cr.tmp" (windows)
-       "/foo/bar/baz.cr.tmp" (posix)
       "/foo/bar/baz.cr.tmp" (posix)
-       "a.x" (windows)
       "a.x" (windows)
-       "/foo/bar/baz.cr" (posix)
       "/foo/bar/baz.cr" (posix)
-       "\foo\bar\baz.cr.tmp" (posix)
       "\foo\bar\baz.cr.tmp" (posix)
-       "\foo/bar\baz.cr" (windows)
       "\foo/bar\baz.cr" (windows)
-       "/foo/bar/baz.cr.tmp" (posix)
       "/foo/bar/baz.cr.tmp" (posix)
-       "\foo\bar\baz.cr.tmp" (posix)
       "\foo\bar\baz.cr.tmp" (posix)
-       "\foo\bar\baz.cr.tmp" (windows)
       "\foo\bar\baz.cr.tmp" (windows)
-       "/foo/bar/baz.cr.tmp" (windows)
       "/foo/bar/baz.cr.tmp" (windows)
-       "/foo/bar/baz.cr.tmp" (windows)
       "/foo/bar/baz.cr.tmp" (windows)
-       "a.txt" (windows)
       "a.txt" (windows)
-       "a.txt" (posix)
       "a.txt" (posix)
-     "a/x" (windows)
     "a/x" (windows)
-     "\foo\" (posix)
     "\foo\" (posix)
-     "\." (windows)
     "\." (windows)
-     "" (posix)
     "" (posix)
-     "foo" (windows)
     "foo" (windows)
-     "\" (posix)
     "\" (posix)
-     "foo" (posix)
     "foo" (posix)
-     "\foo\bar\baz.cr" (posix)
     "\foo\bar\baz.cr" (posix)
-     "." (posix)
     "." (posix)
-     "/foo/" (windows)
     "/foo/" (windows)
-     "/" (posix)
     "/" (posix)
-     "/foo/bar/baz.cr" (windows)
     "/foo/bar/baz.cr" (windows)
-     "\" (windows)
     "\" (windows)
-Socket
-  #tty?
-    with non TTY
    with non TTY
-  .unix
-    creates a unix socket
    creates a unix socket
-  .accept
  .accept
-  sends messages
  sends messages
-  sends datagram over unix socket
  sends datagram over unix socket
-  #bind
-    using IPv4
-      binds to port using default IP
      binds to port using default IP
-      binds to port
      binds to port
-      binds to port using Socket::IPAddress
      binds to port using Socket::IPAddress
-    using IPv6
-      binds to port
      binds to port
-      binds to port using Socket::IPAddress
      binds to port using Socket::IPAddress
-      binds to port using default IP
      binds to port using default IP
-  #finalize
-    does not flush
    does not flush
-  accept raises timeout error if read_timeout is specified
  accept raises timeout error if read_timeout is specified
-  closes on exec by default
  closes on exec by default
-JSON::Parser
-  parses  [ 0 ] 
  parses  [ 0 ] 
-  raises on parse [0] 1 
  raises on parse [0] 1 
-  parses [1, 2, 3]
  parses [1, 2, 3]
-  raises on parse {1}
  raises on parse {1}
-  raises on parse {"foo": 1,}
  raises on parse {"foo": 1,}
-  raises on parse "\u201cello	world"
  raises on parse "\u201cello	world"
-  raises on parse [2.]
  raises on parse [2.]
-  parses [[1]]
  parses [[1]]
-  parses [false]
  parses [false]
-  raises on parse "{"foo":}
  raises on parse "{"foo":}
-  parses 1
  parses 1
-  parses [0]
  parses [0]
-  parses {"fo\no": 1}
  parses {"fo\no": 1}
-  raises on parse "hello	world"
  raises on parse "hello	world"
-  parses [null]
  parses [null]
-  raises on parse "\u201cello
-world"
  raises on parse "\u201cello
-world"
-  prevents stack overflow for hashes
  prevents stack overflow for hashes
-  parses [{"foo": 1}]
  parses [{"foo": 1}]
-  parses ["日"]
  parses ["日"]
-  parses [1]
  parses [1]
-  parses {"foo": 1, "bar": 1.5}
  parses {"foo": 1, "bar": 1.5}
-  parses [true]
  parses [true]
-  parses []
  parses []
-  parses ["hello"]
  parses ["hello"]
-  parses true
  parses true
-  raises on parse 1�
  raises on parse 1�
-  raises on parse ["\u123z"]
  raises on parse ["\u123z"]
-  parses false
  parses false
-  parses {}
  parses {}
-  raises on parse [1,]
  raises on parse [1,]
-  returns raw
  returns raw
-  parses "hello"
  parses "hello"
-  parses null
  parses null
-  parses [1.5]
  parses [1.5]
-  parses 2.5
  parses 2.5
-  raises on parse [0]1
  raises on parse [0]1
-  raises on parse {"foo"1}
  raises on parse {"foo"1}
-  raises on parse {"foo": 1 "bar": 2}
  raises on parse {"foo": 1 "bar": 2}
-  parses {"foo": 1}
  parses {"foo": 1}
-  parses "\nПривет, мир!"
  parses "\nПривет, мир!"
-  prevents stack overflow for arrays
  prevents stack overflow for arrays
-  raises on parse "hello
-world"
  raises on parse "hello
-world"
-  raises on parse [1 true]
  raises on parse [1 true]
-URI::Params::Serializable
-  #to_www_form
-    doubly nested
    doubly nested
-    simple type
    simple type
-    nested type path
    nested type path
-  .from_www_form
-    with nilable values
    with nilable values
-    simple type
    simple type
-    with nilable default
    with nilable default
-    with custom converter
    with custom converter
-    child type
    child type
-    with default values
    with default values
-    nested type
-      doubly nested
      doubly nested
-      missing nilable nested data
      missing nilable nested data
-      missing required nested property
      missing required nested property
-      happy path
      happy path
-    missing required property
    missing required property
-YAML::Builder
-  writes scalar
  writes scalar
-  writes mapping with tag
  writes mapping with tag
-  writes scalar with style
  writes scalar with style
-  writes mapping with anchor
  writes mapping with anchor
-  writes mapping
  writes mapping
-  writes sequence
  writes sequence
-  writes sequence with tag
  writes sequence with tag
-  writes alias
  writes alias
-  errors on max nesting (mapping)
  errors on max nesting (mapping)
-  writes mapping with alias
  writes mapping with alias
-  writes scalar with anchor
  writes scalar with anchor
-  writes mapping with merge
  writes mapping with merge
-  writes sequence with style
  writes sequence with style
-  writes mapping with style
  writes mapping with style
-  errors on max nesting (sequence)
  errors on max nesting (sequence)
-  writes scalar with tag
  writes scalar with tag
-  writes sequence with anchor
  writes sequence with anchor
-  .build (with block)
  .build (with block)
-LLVM::ABI::X86
-  abi_info
-    does with structs less than 64 bits
    does with structs less than 64 bits
-    does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
-    does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
-    does with primitives
    does with primitives
-  size
-    for double
    for double
-    for struct
    for struct
-    for pointer
    for pointer
-    for array
    for array
-    for integer
    for integer
-    for packed struct
    for packed struct
-    for float
    for float
-  align
-    for struct
    for struct
-    for array
    for array
-    for double
    for double
-    for integer
    for integer
-    for packed struct
    for packed struct
-    for pointer
    for pointer
-    for float
    for float
-HTTP
-  parses RFC 1123 without day name
  parses RFC 1123 without day name
-  parses and is UTC (#2744)
  parses and is UTC (#2744)
-  parses and is local (#2744)
  parses and is local (#2744)
-  parses ANSI C
  parses ANSI C
-  .quote_string
-    quotes a string
    quotes a string
-    raises on invalid characters
    raises on invalid characters
-  parses RFC 1123
  parses RFC 1123
-  generates HTTP date
-    with local time zone
    with local time zone
-    without time zone
    without time zone
-  parses RFC 1036
  parses RFC 1036
-  .dequote_string
-    dequotes a string
    dequotes a string
-LLVM::ABI::X86_64
-  size
-    for struct
    for struct
-    for integer
    for integer
-    for packed struct
    for packed struct
-    for array
    for array
-    for pointer
    for pointer
-    for double
    for double
-    for float
    for float
-  abi_info
-    does with primitives
    does with primitives
-    does with structs less than 64 bits
    does with structs less than 64 bits
-    does with structs larger than 128 bits
    does with structs larger than 128 bits
-    does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
-  align
-    for double
    for double
-    for array
    for array
-    for integer
    for integer
-    for packed struct
    for packed struct
-    for pointer
    for pointer
-    for struct
    for struct
-    for float
    for float
-HTTP::ChunkedContent
-  #read stops reading after final chunk
  #read stops reading after final chunk
-  #read_byte handles empty data
  #read_byte handles empty data
-  #gets reads multiple chunks
  #gets reads multiple chunks
-  fails if invalid chunk size
  fails if invalid chunk size
-  #peek stops reading after final chunk
  #peek stops reading after final chunk
-  handles empty io
  handles empty io
-  long trailer part
-    fails for long single header
    fails for long single header
-    fails for long combined headers
    fails for long combined headers
-  #peek reads empty content
  #peek reads empty content
-  #read handles interrupted io
  #read handles interrupted io
-  fails if unterminated chunked trailer part
  fails if unterminated chunked trailer part
-  peeks
  peeks
-  #gets reads multiple chunks with 
-
  #gets reads multiple chunks with 
-
-  #read handles empty data
  #read handles empty data
-  #read_byte stops reading after final chunk
  #read_byte stops reading after final chunk
-  skips (3)
  skips (3)
-  #read_byte reads empty content
  #read_byte reads empty content
-  reads chunk extensions
  reads chunk extensions
-  reads chunked trailer part
  reads chunked trailer part
-  #read reads empty content
  #read reads empty content
-  skips (2)
  skips (2)
-  delays reading the next chunk as soon as one is consumed (#3270)
  delays reading the next chunk as soon as one is consumed (#3270)
-  fails if not properly delimited
  fails if not properly delimited
-  peeks into next chunk
  peeks into next chunk
-  #peek handles interrupted io
  #peek handles interrupted io
-  fails if not properly delimited
  fails if not properly delimited
-  #read_byte handles interrupted io
  #read_byte handles interrupted io
-  #peek handles empty data
  #peek handles empty data
-  skips
  skips
-Log.setup_from_env
-  default_level
-    is not used if LOG_LEVEL is set
    is not used if LOG_LEVEL is set
-    is used if no LOG_LEVEL is set
    is used if no LOG_LEVEL is set
-    is info
    is info
-  default_sources
-    is *
    is *
-    is used
    is used
-    splits sources by comma
    splits sources by comma
-  backend
-    can be changed
    can be changed
-    is a IOBackend
    is a IOBackend
-  raises on invalid level
  raises on invalid level
-OpenSSL::X509::Certificate
-  subject
  subject
-  extension
  extension
-  #signature_algorithm
  #signature_algorithm
-  #digest
  #digest
-Char::Reader
-  #each
-    checks bounds after block
    checks bounds after block
-    yields chars
    yields chars
-    does not yield if empty
    does not yield if empty
-  iterates through string of size one
  iterates through string of size one
-  iterates through chars
  iterates through chars
-  starts at pos
  starts at pos
-  #previous_char?
  #previous_char?
-  peeks next char
  peeks next char
-  sets pos
  sets pos
-  #current_char?
  #current_char?
-  gets previous char (ascii)
  gets previous char (ascii)
-  gets previous char (unicode)
  gets previous char (unicode)
-  #next_char?
  #next_char?
-  iterates through empty string
  iterates through empty string
-  errors on invalid UTF-8
  errors on invalid UTF-8
-  #previous_char
-    reads on valid UTF-8
    reads on valid UTF-8
-    errors on invalid UTF-8
    errors on invalid UTF-8
-  starts at end
  starts at end
-HTTP::Request
-  #if_match
-    reads multiple values
    reads multiple values
-    reads *
    reads *
-    reads single value
    reads single value
-  serialize GET (with cookies, from headers)
  serialize GET (with cookies, from headers)
-  serialize POST (with body)
  serialize POST (with body)
-  #path
-    returns parsed path
    returns parsed path
-    falls back to /
    falls back to /
-  serialize GET
  serialize GET
-  #path=
-    updates serialized form
    updates serialized form
-    updates @resource
    updates @resource
-    sets path
    sets path
-  #if_none_match
-    reads single value
    reads single value
-    reads *
    reads *
-    reads multiple values
    reads multiple values
-  #host_with_port
-    gets request host with port from the headers
    gets request host with port from the headers
-  serialize GET (with cookie)
  serialize GET (with cookie)
-  serialize POST (with io body, with content-length header)
  serialize POST (with io body, with content-length header)
-  #hostname
-    #hostname
    #hostname
-    gets request hostname from the headers
    gets request hostname from the headers
-  doesn't raise on request with multiple Content_length headers
  doesn't raise on request with multiple Content_length headers
-  #query_params
-    updates serialized form when modified
    updates serialized form when modified
-    is affected when #query is modified
    is affected when #query is modified
-    affects #query when modified
    affects #query when modified
-    happily parses when query is not a canonical url-encoded string
    happily parses when query is not a canonical url-encoded string
-    returns parsed URI::Params
    returns parsed URI::Params
-    updates @resource when modified
    updates @resource when modified
-  #form_params
-    returns ignors invalid content-type
    returns ignors invalid content-type
-    returns can safely be called on get requests
    returns can safely be called on get requests
-    returns parsed HTTP::Params
    returns parsed HTTP::Params
-  raises if serializing POST body with incorrect content-length (more then real)
  raises if serializing POST body with incorrect content-length (more then real)
-  .from_io
-    parses GET (just \n instead of \r\n)
    parses GET (just \n instead of \r\n)
-    parses GET without \r
    parses GET without \r
-    headers are case insensitive
    headers are case insensitive
-    parses GET with query params
    parses GET with query params
-    parses GET with spaces in request line
    parses GET with spaces in request line
-    parses empty header
    parses empty header
-    parses empty string (EOF), returns nil
    parses empty string (EOF), returns nil
-    long single header
-      fails for too-long header
      fails for too-long header
-      handles long header
      handles long header
-    handles unsupported HTTP version
    handles unsupported HTTP version
-    stores normalized case for common header name (lowercase) (#8060)
    stores normalized case for common header name (lowercase) (#8060)
-    stores normalized case for common header name (mixed) (#8060)
    stores normalized case for common header name (mixed) (#8060)
-    stores normalized case for common header name (capitalized) (#8060)
    stores normalized case for common header name (capitalized) (#8060)
-    long headers
-      fails for too-long headers with custom size
      fails for too-long headers with custom size
-      handles long headers with custom size
      handles long headers with custom size
-      handles long headers
      handles long headers
-      fails for too-long headers
      fails for too-long headers
-    parses POST (with body)
    parses POST (with body)
-    parses GET
    parses GET
-    long request lines
-      fails for too-long URI
      fails for too-long URI
-      handles long URI
      handles long URI
-      handles long URI with custom size
      handles long URI with custom size
-      fails for too-long URI with custom size
      fails for too-long URI with custom size
-    parses GET with cookie
    parses GET with cookie
-    parses empty string (EOF), returns nil (no peek)
    parses empty string (EOF), returns nil (no peek)
-    handles malformed request
    handles malformed request
-  serialize GET (with query params)
  serialize GET (with query params)
-  #query=
-    updates @resource
    updates @resource
-    sets query
    sets query
-    updates serialized form
    updates serialized form
-  serialize POST (with io body, without content-length header)
  serialize POST (with io body, without content-length header)
-  serialize POST (with bytes body)
  serialize POST (with bytes body)
-  raises if request has multiple and differing content-length headers
  raises if request has multiple and differing content-length headers
-  raises if serializing POST body with incorrect content-length (less then real)
  raises if serializing POST body with incorrect content-length (less then real)
-  keep-alive
-    is false by default in HTTP/1.0
    is false by default in HTTP/1.0
-    is true by default in HTTP/1.1
    is true by default in HTTP/1.1
-    is false in HTTP/1.1 if `Connection: close` header is present
    is false in HTTP/1.1 if `Connection: close` header is present
-    is true in HTTP/1.0 if `Connection: keep-alive` header is present
    is true in HTTP/1.0 if `Connection: keep-alive` header is present
-  #query
-    returns request's query
    returns request's query
-Enum
-  gets value with to_i<bit>
  gets value with to_i<bit>
-  different enums classes not eq always
  different enums classes not eq always
-  valid?
-    for flags enum
    for flags enum
-    for Int64 enum
    for Int64 enum
-    for simple enum
    for simple enum
-  .parse
  .parse
-  each
-    private enum
    private enum
-    yields each member
    yields each member
-    won't yield None
    won't yield None
-    won't yield All
    won't yield All
-  does includes?
  does includes?
-  #to_s
-    for flags enum
    for flags enum
-    for private enum
    for private enum
-    for simple enum
    for simple enum
-  from_value?
-    for flags enum
    for flags enum
-    for simple enum
    for simple enum
-  sorts
  sorts
-  gets value with to_i
  gets value with to_i
-  has hash
  has hash
-  does +
  does +
-  each
-    iterates each member
    iterates each member
-    iterates private enum members
    iterates private enum members
-    iterates each flag
    iterates each flag
-  gets value with to_u<bit>
  gets value with to_u<bit>
-  .parse?
  .parse?
-  #inspect
-    for private enum
    for private enum
-    for simple enum
    for simple enum
-    for flags enum
    for flags enum
-  gets value
  gets value
-  .[]
-    flags enum
    flags enum
-    private flags enum
    private flags enum
-    non-flags enum
    non-flags enum
-  clones
  clones
-  from_value
-    for simple enum
    for simple enum
-    for flags enum
    for flags enum
-    for private enum
    for private enum
-  values
-    for simple enum
    for simple enum
-    for flags enum
    for flags enum
-  .flags
-    non-flags enum
    non-flags enum
-    flags enum
    flags enum
-    private flags enum
    private flags enum
-  names
-    for flags enum
    for flags enum
-    for simple enum
    for simple enum
-  does -
  does -
-  creates an enum instance from an auto-casted symbol (#8573)
  creates an enum instance from an auto-casted symbol (#8573)
-__divti3
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-buffered
-  does pretty_inspect on unbuffered channel
  does pretty_inspect on unbuffered channel
-  does pretty_inspect on buffered channel
  does pretty_inspect on buffered channel
-  can send and receive nil
  can send and receive nil
-  does inspect on unbuffered channel
  does inspect on unbuffered channel
-  cannot send if closed
  cannot send if closed
-  can send successfully without raise
  can send successfully without raise
-  blocks when full
  blocks when full
-  works with select
  works with select
-  gets ready with data
  gets ready with data
-  can be closed from different fiber
  can be closed from different fiber
-  can receive? when not empty
  can receive? when not empty
-  pings
  pings
-  can be closed
  can be closed
-  doesn't block when not full
  doesn't block when not full
-  can be closed after sending
  can be closed after sending
-  can receive? when closed
  can receive? when closed
-  does inspect on buffered channel
  does inspect on buffered channel
-Int
-  gets downto iterator
  gets downto iterator
-  even?
     assert
    assert
     assert
    assert
-  #bit_reverse
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29342,6 +22445,7 @@
     assert
    assert
     assert
    assert
     assert
    assert
+  byte_index
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29353,19 +22457,29 @@
     assert
    assert
     assert
    assert
     assert
    assert
+    gets byte index of string
    gets byte index of string
     assert
    assert
     assert
    assert
+  builds with write_byte
  builds with write_byte
+  #inspect
  #inspect
+  compares strings: same size, same string
  compares strings: same size, same string
+  #byte_slice
+    gets byte_slice(Int) with start out of bounds
    gets byte_slice(Int) with start out of bounds
+    gets byte_slice with negative index
    gets byte_slice with negative index
+    gets byte_slice with start out of bounds
    gets byte_slice with start out of bounds
+    gets byte_slice with negative count
    gets byte_slice with negative count
+    gets byte_slice
    gets byte_slice
+    gets byte_slice with large count
    gets byte_slice with large count
+    gets byte_slice with negative count at last
    gets byte_slice with negative count at last
+  does byte_at?
  does byte_at?
+  =~
+    returns nil with regex and regex
    returns nil with regex and regex
+    matches with group
    matches with group
+    returns nil with string
    returns nil with string
+  count
     assert
    assert
     assert
    assert
     assert
    assert
-  #digits
-    works for non-Int32
    works for non-Int32
-    raises for negative numbers
    raises for negative numbers
-    raises for invalid base
    raises for invalid base
-    works for positive numbers or zero
    works for positive numbers or zero
-    works with a base
    works with a base
-    works for maximums
    works for maximums
-  #integer?
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29374,6 +22488,8 @@
     assert
    assert
     assert
    assert
     assert
    assert
+  compares strings: different size
  compares strings: different size
+  lchop
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29386,19 +22502,9 @@
     assert
    assert
     assert
    assert
     assert
    assert
-  #to_unsigned
-    does for UInt32
    does for UInt32
-    does for Int8
    does for Int8
-    does for Int64
    does for Int64
-    does for Int32
    does for Int32
-    does for UInt16
    does for UInt16
-    does for Int16
    does for Int16
-    does for Int128
    does for Int128
-    does for UInt128
    does for UInt128
-    does for UInt8
    does for UInt8
-    does for UInt64
    does for UInt64
-  #bits
-    raises when invalid indexes are provided
    raises when invalid indexes are provided
+  has size (same as size)
  has size (same as size)
+  matches with position
  matches with position
+  rchop
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29413,24 +22519,28 @@
     assert
    assert
     assert
    assert
     assert
    assert
+  multiplies with negative size
  multiplies with negative size
+  matches, but returns Bool
  matches, but returns Bool
+  encode
+    doesn't raise if incomplete byte sequence
    doesn't raise if incomplete byte sequence
+    decodes
    decodes
+    raises if wrong encoding
    raises if wrong encoding
+    decodes with skip
    decodes with skip
+    encodes
    encodes
+    raises if illegal byte sequence
    raises if illegal byte sequence
+    doesn't raise on invalid byte sequence
    doesn't raise on invalid byte sequence
+    decodes with shift state
    decodes with shift state
+    raises if incomplete byte sequence
    raises if incomplete byte sequence
+    flushes the shift state (#11992)
    flushes the shift state (#11992)
+    raises if wrong encoding with skip
    raises if wrong encoding with skip
+  #underscore
     assert
    assert
     assert
    assert
     assert
    assert
-  upto iterator ups and downs
  upto iterator ups and downs
-  #bit_length
-    for BigInt
    for BigInt
-    for primitive integers
    for primitive integers
-  ~
     assert
    assert
+    handles multi-character mappings correctly
    handles multi-character mappings correctly
     assert
    assert
-  does downto min
  does downto min
-  gets upto iterator max
  gets upto iterator max
-  divmod
     assert
    assert
-  abs
-    does for signed
    does for signed
-    does for unsigned
    does for unsigned
-  #trailing_zeros_count
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29438,78 +22548,425 @@
     assert
    assert
     assert
    assert
     assert
    assert
+  gets each_line
  gets each_line
+  #index
+    by regex
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      with offset
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+    by char
+      assert
      assert
+      with offset
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    by string
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      with offset
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+      assert
      assert
+      assert
      assert
+  gets lines
  gets lines
+  partition
+    by string
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    by regex
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    by char
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+  #rindex!
+    by string
+      assert
      assert
+      with offset
+        assert
        assert
+        assert
        assert
+        assert
        assert
+      assert
      assert
+      assert
      assert
+    by regex
+      assert
      assert
+      with offset
+        assert
        assert
+        assert
        assert
+        assert
        assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    by char
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      with offset
+        assert
        assert
+        assert
        assert
+  has match
  has match
+  sub
+    subs with regex and hash
    subs with regex and hash
+    replaces with multiple named back-reference
    replaces with multiple named back-reference
+    subs range with string, non-ascii
    subs range with string, non-ascii
+    subs at index with string, non-ascii
    subs at index with string, non-ascii
+    subs with char hash
    subs with char hash
+    subs with string and string (utf-8)
    subs with string and string (utf-8)
+    subs with empty regex
    subs with empty regex
+    replaces with numeric back-reference
    replaces with numeric back-reference
+    replaces with incomplete named back-reference (1)
    replaces with incomplete named back-reference (1)
+    subs range with char, non-ascii
    subs range with char, non-ascii
+    subs range with string
    subs range with string
+    subs at index with string
    subs at index with string
+    subs the last char
    subs the last char
+    subs with regex and string, returns self if no match
    subs with regex and string, returns self if no match
+    subs beginless range with string
    subs beginless range with string
+    replaces with named back-reference
    replaces with named back-reference
+    subs with string and block
    subs with string and block
+    raises if index is out of bounds
    raises if index is out of bounds
+    subs using with z\w
    subs using with z\w
+    replaces with incomplete named back-reference (2)
    replaces with incomplete named back-reference (2)
+    subs with empty string
    subs with empty string
+    subs with regex and named tuple
    subs with regex and named tuple
+    subs endless range with char
    subs endless range with char
+    ignores if backreferences: false
    ignores if backreferences: false
+    subs with string and string (#3258)
    subs with string and string (#3258)
+    replaces with \a
    replaces with \a
+    subs char with string
    subs char with string
+    subs using with \
    subs using with \
+    subs endless range with string
    subs endless range with string
+    subs with regex and block
    subs with regex and block
+    subs at negative index with char
    subs at negative index with char
+    subs with string and string
    subs with string and string
+    subs char with char
    subs char with char
+    subs beginless range with char
    subs beginless range with char
+    subs range with char
    subs range with char
+    subs with regex and block with group
    subs with regex and block with group
+    subs with regex and string (utf-8)
    subs with regex and string (utf-8)
+    subs with string and string return self if no match
    subs with string and string return self if no match
+    subs at index with char, non-ascii
    subs at index with char, non-ascii
+    subs null character
    subs null character
+    subs char with string
    subs char with string
+    replaces with \\\1
    replaces with \\\1
+    subs at negative index with string
    subs at negative index with string
+    subs at index with char
    subs at index with char
+    subs with regex and string
    subs with regex and string
+    subs using $~
    subs using $~
+  "#each_char with empty string" yielding
  "#each_char with empty string" yielding
+  interpolates string
  interpolates string
+  lstrip
     assert
    assert
     assert
    assert
+    does not touch invalid code units in an otherwise ascii string
    does not touch invalid code units in an otherwise ascii string
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  does remainder
  does remainder
-  pred
     assert
    assert
     assert
    assert
     assert
    assert
-  #to_signed
-    does for UInt16
    does for UInt16
-    does for Int8
    does for Int8
-    does for UInt32
    does for UInt32
-    does for UInt64
    does for UInt64
-    does for UInt8
    does for UInt8
-    does for Int32
    does for Int32
-    does for Int16
    does for Int16
-    does for UInt128
    does for UInt128
-    does for Int128
    does for Int128
-    does for Int64
    does for Int64
-  #popcount
     assert
    assert
     assert
    assert
     assert
    assert
+  #byte_slice?
+    gets byte_slice with large count
    gets byte_slice with large count
+    gets byte_slice(Int) with start out of bounds
    gets byte_slice(Int) with start out of bounds
+    gets byte_slice with negative index
    gets byte_slice with negative index
+    gets byte_slice with start out of bounds
    gets byte_slice with start out of bounds
+    gets byte_slice with negative count
    gets byte_slice with negative count
+    gets byte_slice with negative count at last
    gets byte_slice with negative count at last
+    gets byte_slice
    gets byte_slice
+  inserts
  inserts
+  squeeze
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+  "#each_char" yielding
  "#each_char" yielding
+  delete_at
+    start, count
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      raises on negative count
      raises on negative count
+      assert
      assert
+      assert
      assert
+      raises on negative count
      raises on negative count
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    range
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    char
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+  "#each_char with empty string" iterator
  "#each_char with empty string" iterator
+  "#each_line" yielding
  "#each_line" yielding
+  invalid UTF-8 byte sequence
+    gets chars
    gets chars
+    valid_encoding?
    valid_encoding?
+    gets chars (2)
    gets chars (2)
+    gets size (2)
    gets size (2)
+    gets size
    gets size
+    scrubs
    scrubs
+  #index!
+    by regex
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      with offset
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+      assert
      assert
+    by string
+      assert
      assert
+      assert
      assert
+      with offset
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+      assert
      assert
+      assert
      assert
+    by char
+      assert
      assert
+      with offset
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+      assert
      assert
+  hexbytes
  hexbytes
+  #match_full!
  #match_full!
+  tr
+    given no replacement characters
+      acts as #delete
      acts as #delete
+    translates
    translates
+  compare
+    compares with == when same string
    compares with == when same string
+    compares with == when different contents
    compares with == when different contents
+    sorts strings
    sorts strings
+    compares with == when different strings same contents
    compares with == when different strings same contents
+  []
+    raises on too negative left bound
    raises on too negative left bound
+    raises if count is negative with utf-8
    raises if count is negative with utf-8
+    raises index out of bound on index out of range with range
    raises index out of bound on index out of range with range
+    gets when index is last and count is zero
    gets when index is last and count is zero
+    gets with exclusive range with unicode
    gets with exclusive range with unicode
+    gets with positive index
    gets with positive index
+    gets with inclusive range
    gets with inclusive range
+    gets with a char
    gets with a char
+    gets with range without end
    gets with range without end
+    raises if index out of bounds with utf-8
    raises if index out of bounds with utf-8
+    gets with single char
    gets with single char
+    gets when index is last and count is negative at last with utf-8
    gets when index is last and count is negative at last with utf-8
+    gets with negative index
    gets with negative index
+    gets with start and count with negative start
    gets with start and count with negative start
+    raises if index out of bounds
    raises if index out of bounds
+    raises index out of bound on index out of range with range and utf-8
    raises index out of bound on index out of range with range and utf-8
     assert
    assert
+    gets when index is last and count is zero in utf-8
    gets when index is last and count is zero in utf-8
+    gets with exclusive range
    gets with exclusive range
+    gets with inclusive range with negative indices
    gets with inclusive range with negative indices
+    raises IndexError if pointing after last char which is non-ASCII
    raises IndexError if pointing after last char which is non-ASCII
+    raises if count is negative
    raises if count is negative
+    with a regex
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    gets with a string
    gets with a string
+    gets when index is last and count is positive in utf-8
    gets when index is last and count is positive in utf-8
+    gets with exclusive with start and count to end
    gets with exclusive with start and count to end
+    gets with start and count
    gets with start and count
+    gets when index is last and count is positive
    gets when index is last and count is positive
+    gets with range without beginning
    gets with range without beginning
+    gets with exclusive with start and count
    gets with exclusive with start and count
+    gets when index is last and count is negative at last
    gets when index is last and count is negative at last
+  starts_with?
     assert
    assert
     assert
    assert
     assert
    assert
+    treats first char as replacement char if invalid in an otherwise ascii string
    treats first char as replacement char if invalid in an otherwise ascii string
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  bit
     assert
    assert
+  delete
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+    deletes one char
    deletes one char
     assert
    assert
-  "#times" yielding
  "#times" yielding
-  #to_unsigned!
-    does for UInt64
    does for UInt64
-    does for UInt16
    does for UInt16
-    does for UInt32
    does for UInt32
-    does for UInt8
    does for UInt8
-    does for Int128
    does for Int128
-    does for Int16
    does for Int16
-    does for Int8
    does for Int8
-    does for Int64
    does for Int64
-    does for UInt128
    does for UInt128
-    does for Int32
    does for Int32
-  clones
  clones
-  does upto max
  does upto max
-  #leading_zeros_count
     assert
    assert
     assert
    assert
     assert
    assert
+  empty?
     assert
    assert
     assert
    assert
+  creating from a pointer
+    raises an exception when creating a string with a null pointer and no size
    raises an exception when creating a string with a null pointer and no size
+    doesn't raise creating from a null pointer with size 0
    doesn't raise creating from a null pointer with size 0
+    allows creating a string with zeros
    allows creating a string with zeros
+    raises when creating from a null pointer with a nonzero size
    raises when creating from a null pointer with a nonzero size
+  does byte_at
  does byte_at
+  does to_f64
  does to_f64
+  String.new(&)
+    raises if returned bytesize is greater than capacity
    raises if returned bytesize is greater than capacity
+    raises if capacity too big with UInt32::MAX - String::HEADER_SIZE - 1
    raises if capacity too big with UInt32::MAX - String::HEADER_SIZE - 1
+    creates with matching capacity
    creates with matching capacity
+    raises if capacity too big with UInt32::MAX
    raises if capacity too big with UInt32::MAX
+    raises if capacity too big with UInt64::MAX
    raises if capacity too big with UInt64::MAX
+    allocates buffer of correct size (#3332)
    allocates buffer of correct size (#3332)
+    creates with excess capacity
    creates with excess capacity
+    raises if string capacity is negative
    raises if string capacity is negative
+  scans using $~
  scans using $~
+  ascii_only?
+    broken UTF-8 is not ascii_only
    broken UTF-8 is not ascii_only
+    answers ascii_only?
    answers ascii_only?
+  #gsub
+    gsubs with empty regex
    gsubs with empty regex
+    gsubs char with string depending on the char
    gsubs char with string depending on the char
+    gsubs with regex and hash
    gsubs with regex and hash
+    gsubs with regex and string, returns self if no match
    gsubs with regex and string, returns self if no match
+    raises with incomplete back-reference (2)
    raises with incomplete back-reference (2)
+    gsubs char with char in non-ascii string
    gsubs char with char in non-ascii string
+    gsubs null character
    gsubs null character
+    gsubs char with string (nop)
    gsubs char with string (nop)
+    gsubs with regex and block
    gsubs with regex and block
+    replaces with escaped back-reference
    replaces with escaped back-reference
+    gsubs with string and string (utf-8)
    gsubs with string and string (utf-8)
+    gsubs with empty string
    gsubs with empty string
+    replaces with incomplete back-reference (3)
    replaces with incomplete back-reference (3)
+    empty string
    empty string
+    replaces with back-reference to missing capture group
    replaces with back-reference to missing capture group
+    gsubs with regex and named tuple
    gsubs with regex and named tuple
+    gsubs using $~
    gsubs using $~
+    gsubs with regex and string
    gsubs with regex and string
+    gsubs with char hash
    gsubs with char hash
+    gsubs char with char
    gsubs char with char
+    gsubs with regex and string (utf-8)
    gsubs with regex and string (utf-8)
+    replaces with numeric back-reference
    replaces with numeric back-reference
+    raises with incomplete back-reference (1)
    raises with incomplete back-reference (1)
+    gsubs char with string
    gsubs char with string
+    gsubs with regex and block with group
    gsubs with regex and block with group
+    replaces with named back-reference
    replaces with named back-reference
+    empty match
    empty match
+    replaces with incomplete back-reference (1)
    replaces with incomplete back-reference (1)
+    gsubs with string and string
    gsubs with string and string
+    gsubs with string and string return self if no match
    gsubs with string and string return self if no match
+    ignores if backreferences: false
    ignores if backreferences: false
+    gsubs with char named tuple
    gsubs with char named tuple
+    gsubs with string and block
    gsubs with string and block
+    replaces with incomplete back-reference (2)
    replaces with incomplete back-reference (2)
+  #compare
+    compares case-insensitive
    compares case-insensitive
+    compares case-sensitive
    compares case-sensitive
+    compares case-insensitive, multiple chars after case conversion (#4513)
    compares case-insensitive, multiple chars after case conversion (#4513)
+    treats invalid code units as replacement char in an otherwise ascii string
    treats invalid code units as replacement char in an otherwise ascii string
+  rstrip
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29520,88 +22977,129 @@
     assert
    assert
     assert
    assert
     assert
    assert
-  succ
     assert
    assert
     assert
    assert
     assert
    assert
-  #chr
  #chr
-  to
-    does when same
    does when same
-    does upwards
    does upwards
-    does downwards
    does downwards
-  raises when divides Int::MIN by -1
  raises when divides Int::MIN by -1
-  compares signed vs. unsigned integers
  compares signed vs. unsigned integers
-  odd?
+    does not touch invalid code units in an otherwise ascii string
    does not touch invalid code units in an otherwise ascii string
     assert
    assert
     assert
    assert
-  arithmetic division /
-    divides Int::MIN by -1
    divides Int::MIN by -1
-    divides by zero
    divides by zero
-    divides negative numbers
    divides negative numbers
-  returns 0 when doing IntN::MIN.remainder(-1) (#8306)
  returns 0 when doing IntN::MIN.remainder(-1) (#8306)
-  tdivs
  tdivs
-  "#times" iterator
  "#times" iterator
-  **
-    with positive UInt8
    with positive UInt8
-    with float
+  rpartition
+    by regex
       assert
      assert
       assert
      assert
       assert
      assert
-    should work with large integers
    should work with large integers
-    raises with negative exponent
    raises with negative exponent
-    with positive Int32
    with positive Int32
-  divisible_by?
-    assert
    assert
+      assert
      assert
+      assert
      assert
+    by char
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    by string
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+  split
+    by whitespace
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    by regex
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      keeps groups
      keeps groups
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    by string
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    by char
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+  gets lines with chomp = false
  gets lines with chomp = false
+  does pretty_inspect
  does pretty_inspect
+  raises if String.build capacity too big
  raises if String.build capacity too big
+  gets size of \0 string
  gets size of \0 string
+  strip
     assert
    assert
-  #abs_unsigned
-    does not overflow on Int8::MIN
    does not overflow on Int8::MIN
-    does not overflow on Int128::MIN
    does not overflow on Int128::MIN
-    does not overflow on Int16::MIN
    does not overflow on Int16::MIN
-    does not overflow on Int32::MIN
    does not overflow on Int32::MIN
-    does for Int128
    does for Int128
-    does for UInt32
    does for UInt32
-    does for UInt8
    does for UInt8
-    does for UInt128
    does for UInt128
-    does for Int8
    does for Int8
-    does not overflow on Int64::MIN
    does not overflow on Int64::MIN
-    does for Int64
    does for Int64
-    does for UInt16
    does for UInt16
-    does for Int16
    does for Int16
-    does for UInt64
    does for UInt64
-    does for Int32
    does for Int32
-  "#times for UInt32 (#5019)" iterator
  "#times for UInt32 (#5019)" iterator
-  floor division //
-    divides negative numbers
    divides negative numbers
-    preserves type of lhs
    preserves type of lhs
-  raises when mods by zero
  raises when mods by zero
-  gcd
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-    doesn't silently overflow
    doesn't silently overflow
-    raises on too big result to fit in result type
    raises on too big result to fit in result type
     assert
    assert
     assert
    assert
     assert
    assert
-  &**
-    with positive Int32
    with positive Int32
-    with UInt8
    with UInt8
-    wraps with larger integers
    wraps with larger integers
-    works with large integers
    works with large integers
-    raises with negative exponent
    raises with negative exponent
-  #===(:Char)
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  does %
  does %
-  downto iterator ups and downs
  downto iterator ups and downs
-  step
-    steps through limit
    steps through limit
-  "#times for UInt32 (#5019)" yielding
  "#times for UInt32 (#5019)" yielding
-  #rotate_right
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29615,6 +23113,9 @@
     assert
    assert
     assert
    assert
     assert
    assert
+  does *
  does *
+  has codepoints
  has codepoints
+  chomp
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29622,16 +23123,11 @@
     assert
    assert
     assert
    assert
     assert
    assert
-  does downto min unsigned
  does downto min unsigned
-  does downto
  does downto
-  compares equality and inequality of signed vs. unsigned integers
  compares equality and inequality of signed vs. unsigned integers
-  fdiv
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  #byte_swap
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29639,6 +23135,8 @@
     assert
    assert
     assert
    assert
     assert
    assert
+  does each_char_with_index
  does each_char_with_index
+  #downcase
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29651,240 +23149,127 @@
     assert
    assert
     assert
    assert
     assert
    assert
+    does not touch invalid code units in an otherwise ascii string
    does not touch invalid code units in an otherwise ascii string
+  #dump
  #dump
+  #scan
+    works with strings
    works with strings
+    works when match is empty, multibyte char
    works when match is empty, multibyte char
+    does with block
    does with block
+    does without block
    does without block
+    does with utf-8
    does with utf-8
+    works with strings with block
    works with strings with block
+    does with number and string
    does with number and string
+    works when match is empty
    works when match is empty
+    options parameter
    options parameter
+  #upcase
     assert
    assert
+    does not touch invalid code units in an otherwise ascii string
    does not touch invalid code units in an otherwise ascii string
     assert
    assert
     assert
    assert
+    with IO
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
     assert
    assert
     assert
    assert
-  #unsafe_chr
  #unsafe_chr
-  #to_signed!
-    does for Int64
    does for Int64
-    does for Int8
    does for Int8
-    does for Int32
    does for Int32
-    does for UInt64
    does for UInt64
-    does for UInt32
    does for UInt32
-    does for UInt8
    does for UInt8
-    does for Int128
    does for Int128
-    does for UInt16
    does for UInt16
-    does for Int16
    does for Int16
-    does for UInt128
    does for UInt128
-  >>
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  holds true that x == q*y + r
  holds true that x == q*y + r
-  lcm
+  "#each_line" iterator
  "#each_line" iterator
+  does to_f32
  does to_f32
+  #matches_full?
  #matches_full?
+  #dump_unquoted
  #dump_unquoted
+  clones
  clones
+  dups
  dups
+  "#each_char" iterator
  "#each_char" iterator
+  presence
     assert
    assert
     assert
    assert
     assert
    assert
-    doesn't silently overflow
    doesn't silently overflow
+  match!
+    with options
+      Regex::Match options
      Regex::Match options
+    returns matchdata
    returns matchdata
+    assigns captures
    assigns captures
+    raises on non-match
    raises on non-match
+  "#each_codepoint" iterator
  "#each_codepoint" iterator
+  hexbytes?
  hexbytes?
+  compares strings: same size, different string
  compares strings: same size, different string
+  matches empty string
  matches empty string
+  rjust
     assert
    assert
     assert
    assert
-  <<
     assert
    assert
     assert
    assert
+    to io
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+  #reverse
+    converts invalid code units to replacement char
    converts invalid code units to replacement char
+    reverses taking grapheme clusters into account
    reverses taking grapheme clusters into account
+    reverses utf-8 string
    reverses utf-8 string
+    reverses string
    reverses string
+  does each_char
  does each_char
+  +
+    does when right is empty
    does when right is empty
+    does with ascii char
    does with ascii char
+    does with unicode char
    does with unicode char
+    does for both unicode
    does for both unicode
+    does when left is empty
    does when left is empty
+    does for both ascii
    does for both ascii
+  #camelcase
     assert
    assert
     assert
    assert
-  gets to iterator
  gets to iterator
-  .new
-    fallback overload
    fallback overload
-    String overload
    String overload
-  gets upto iterator
  gets upto iterator
-  #neg_signed
-    does for Int8
    does for Int8
-    does not overflow on Int16::MIN.abs_unsigned
    does not overflow on Int16::MIN.abs_unsigned
-    does for UInt8
    does for UInt8
-    does for Int16
    does for Int16
-    does for UInt64
    does for UInt64
-    does not overflow on Int128::MIN.abs_unsigned
    does not overflow on Int128::MIN.abs_unsigned
-    does not overflow on Int32::MIN.abs_unsigned
    does not overflow on Int32::MIN.abs_unsigned
-    does not overflow on Int8::MIN.abs_unsigned
    does not overflow on Int8::MIN.abs_unsigned
-    does for UInt16
    does for UInt16
-    does for Int32
    does for Int32
-    does for Int64
    does for Int64
-    does not overflow on Int64::MIN.abs_unsigned
    does not overflow on Int64::MIN.abs_unsigned
-    does for UInt128
    does for UInt128
-    does for UInt32
    does for UInt32
-    does for Int128
    does for Int128
-  gets downto iterator unsigned
  gets downto iterator unsigned
-  returns 0 when doing IntN::MIN % -1 (#8306)
  returns 0 when doing IntN::MIN % -1 (#8306)
-  does upto
  does upto
-  raises when divides by zero
  raises when divides by zero
-  #to_s
-    converts 1 to "1"
    converts 1 to "1"
-    converts 0 to "0"
    converts 0 to "0"
-    extrema for various int sizes
-      converts 4294967295_u32 to "4294967295"
      converts 4294967295_u32 to "4294967295"
-      converts -9223372036854775808_i64 to "-9223372036854775808"
      converts -9223372036854775808_i64 to "-9223372036854775808"
-      converts 255_u8 to "255"
      converts 255_u8 to "255"
-      converts 32767_i16 to "32767"
      converts 32767_i16 to "32767"
-      converts -128_i8 to "-128"
      converts -128_i8 to "-128"
-      converts Int128::MIN to "-170141183460469231731687303715884105728"
      converts Int128::MIN to "-170141183460469231731687303715884105728"
-      converts 9223372036854775807_i64 to "9223372036854775807"
      converts 9223372036854775807_i64 to "9223372036854775807"
-      converts UInt128::MAX to "340282366920938463463374607431768211455"
      converts UInt128::MAX to "340282366920938463463374607431768211455"
-      converts Int128::MAX to "170141183460469231731687303715884105727"
      converts Int128::MAX to "170141183460469231731687303715884105727"
-      converts 18446744073709551615_u64 to "18446744073709551615"
      converts 18446744073709551615_u64 to "18446744073709551615"
-      converts 65535_u16 to "65535"
      converts 65535_u16 to "65535"
-      converts 2147483647 to "2147483647"
      converts 2147483647 to "2147483647"
-      converts 127_i8 to "127"
      converts 127_i8 to "127"
-      converts -2147483648 to "-2147483648"
      converts -2147483648 to "-2147483648"
-      converts -32768_i16 to "-32768"
      converts -32768_i16 to "-32768"
-    base and upcase parameters
-      converts 0 to "0"
      converts 0 to "0"
-      converts 35 to "z"
      converts 35 to "z"
-      converts -1234 to "-4D2"
      converts -1234 to "-4D2"
-      converts -1234 to "-YA"
      converts -1234 to "-YA"
-      converts -1234 to "-4d2"
      converts -1234 to "-4d2"
-      converts 1234 to "4d2"
      converts 1234 to "4d2"
-      converts -12 to "-1100"
      converts -12 to "-1100"
-      converts 1234 to "YA"
      converts 1234 to "YA"
-      converts 62 to "10"
      converts 62 to "10"
-      converts 36 to "A"
      converts 36 to "A"
-      converts -123456 to "-11110001001000000"
      converts -123456 to "-11110001001000000"
-      converts 0 to "0"
      converts 0 to "0"
-      converts 10 to "a"
      converts 10 to "a"
-      converts Int128::MIN to "-1#{"0" * 127}"
      converts Int128::MIN to "-1#{"0" * 127}"
-      converts 12 to "1100"
      converts 12 to "1100"
-      converts 1 to "1"
      converts 1 to "1"
-      raises on base 37
      raises on base 37
-      converts 1 to "1"
      converts 1 to "1"
-      converts 0 to "0"
      converts 0 to "0"
-      converts 1234 to "4D2"
      converts 1234 to "4D2"
-      converts 97 to "1z"
      converts 97 to "1z"
-      converts 61 to "Z"
      converts 61 to "Z"
-      raises on base 1
      raises on base 1
-      converts 3843 to "ZZ"
      converts 3843 to "ZZ"
-      converts -1234 to "-ya"
      converts -1234 to "-ya"
-      converts 1 to "1"
      converts 1 to "1"
-      raises on base 62 with upcase
      raises on base 62 with upcase
-      converts 1234 to "ya"
      converts 1234 to "ya"
-    precision parameter
-      converts 123 to "123"
      converts 123 to "123"
-      converts 1 to "1"
      converts 1 to "1"
-      converts 1 to "01"
      converts 1 to "01"
-      converts 0 to "0"
      converts 0 to "0"
-      converts 9223372036854775807_i64 to "#{"0" * 137}#{"1" * 63}"
      converts 9223372036854775807_i64 to "#{"0" * 137}#{"1" * 63}"
-      converts 0 to "0" * 200
      converts 0 to "0" * 200
-      converts 123 to "00123"
      converts 123 to "00123"
-      converts -9223372036854775808_i64 to "-#{"0" * 136}1#{"0" * 63}"
      converts -9223372036854775808_i64 to "-#{"0" * 136}1#{"0" * 63}"
-      converts -9223372036854775808_i64 to "-1#{"0" * 63}"
      converts -9223372036854775808_i64 to "-1#{"0" * 63}"
-      converts -1 to "-1"
      converts -1 to "-1"
-      converts 123 to "123"
      converts 123 to "123"
-      raises on negative precision
      raises on negative precision
-      converts 123 to "#{"0" * 197}123"
      converts 123 to "#{"0" * 197}123"
-      converts 0 to "00000"
      converts 0 to "00000"
-      converts 1 to "1"
      converts 1 to "1"
-      converts -1 to "-1"
      converts -1 to "-1"
-      converts 0 to ""
      converts 0 to ""
-      converts -9223372036854775808_i64 to "-01#{"0" * 63}"
      converts -9223372036854775808_i64 to "-01#{"0" * 63}"
-      converts -1 to "-00001"
      converts -1 to "-00001"
-      converts 2 to "00002"
      converts 2 to "00002"
-      converts 2 to "2"
      converts 2 to "2"
-      converts -9223372036854775808_i64 to "-1#{"0" * 63}"
      converts -9223372036854775808_i64 to "-1#{"0" * 63}"
-      converts 123 to "123"
      converts 123 to "123"
-      converts 1 to "#{"0" * 199}1"
      converts 1 to "#{"0" * 199}1"
-      converts -1 to "-01"
      converts -1 to "-01"
-      converts -1 to "-#{"0" * 199}1"
      converts -1 to "-#{"0" * 199}1"
-      converts 0 to "00"
      converts 0 to "00"
-      converts 9223372036854775807_i64 to "#{"1" * 63}"
      converts 9223372036854775807_i64 to "#{"1" * 63}"
-      converts 2 to "02"
      converts 2 to "02"
-      converts 9223372036854775807_i64 to "#{"1" * 63}"
      converts 9223372036854775807_i64 to "#{"1" * 63}"
-      converts 2 to "#{"0" * 199}2"
      converts 2 to "#{"0" * 199}2"
-      converts 1 to "00001"
      converts 1 to "00001"
-      converts 9223372036854775807_i64 to "0#{"1" * 63}"
      converts 9223372036854775807_i64 to "0#{"1" * 63}"
-      converts 2 to "2"
      converts 2 to "2"
-  % doesn't overflow (#7979)
  % doesn't overflow (#7979)
-  #rotate_left
     assert
    assert
     assert
    assert
+    handles multi-character mappings correctly (#13533)
    handles multi-character mappings correctly (#13533)
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+  #titleize
     assert
    assert
     assert
    assert
+    with IO
+      assert
      assert
+      assert
      assert
+      assert
      assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+    handles multi-character mappings correctly (#13533)
    handles multi-character mappings correctly (#13533)
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+    does not touch invalid code units in an otherwise ascii string
    does not touch invalid code units in an otherwise ascii string
+  #capitalize
     assert
    assert
     assert
    assert
     assert
    assert
-  #inspect
-    doesn't append the type
    doesn't append the type
-    doesn't append the type using IO
    doesn't append the type using IO
-Thread::Mutex
-  won't lock recursively
  won't lock recursively
-  won't unlock from another thread
  won't unlock from another thread
-  synchronizes
  synchronizes
-Atomic(T)
-  #swap
-    with reference union
    with reference union
-    with nilable reference
    with nilable reference
-    with pointer type
    with pointer type
-    with integer
    with integer
-    explicit ordering
    explicit ordering
-    with bool
    with bool
-    with reference type
    with reference type
-  #or
  #or
-  atomic bool
-    sizeof
    sizeof
-    gets and sets
    gets and sets
-  #max with signed
  #max with signed
-  #and
  #and
-  #adds
  #adds
-  #min with signed
  #min with signed
-  #xor
  #xor
-  #min with signed enum
  #min with signed enum
-  #compare_and_set
-    with integer
    with integer
-    with flags enum
    with flags enum
-    with enum
    with enum
-    with nilable reference
    with nilable reference
-    with reference type
    with reference type
-    with pointer
    with pointer
-    with reference union
    with reference union
-    explicit ordering
    explicit ordering
-    with bool
    with bool
-  #sub
  #sub
-  #min with pointer type
  #min with pointer type
-  #set
-    with pointer type
    with pointer type
-    explicit ordering
    explicit ordering
-    with bool
    with bool
-    with integer
    with integer
-    with nil (#4062)
    with nil (#4062)
-  #max with pointer type
  #max with pointer type
-  #max with unsigned
  #max with unsigned
-  #lazy_set
  #lazy_set
-  #nand
  #nand
-  #min with unsigned
  #min with unsigned
-  #max with signed enum
  #max with signed enum
-Char
-  does to_f
  does to_f
-  #upcase
+    handles multi-character mappings correctly (#13533)
    handles multi-character mappings correctly (#13533)
+    does not touch invalid code units in an otherwise ascii string
    does not touch invalid code units in an otherwise ascii string
     assert
    assert
+  rchop?
     assert
    assert
     assert
    assert
-  #titlecase?
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  does ord for multibyte char
  does ord for multibyte char
-  does to_i without a base
  does to_i without a base
-  +
     assert
    assert
-  does <=>
  does <=>
-  -
     assert
    assert
-  ascii_whitespace?
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29892,29 +23277,158 @@
     assert
    assert
     assert
    assert
     assert
    assert
-  hex?
+  multiplies
  multiplies
+  #rindex
+    by char
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      with offset
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+      assert
      assert
+    by regex
+      which matches empty string
+        assert
        assert
+        assert
        assert
+        assert
        assert
+      assert
      assert
+      assert
      assert
+      with offset
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+      assert
      assert
+      assert
      assert
+    by string
+      with offset
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+        assert
        assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+  escapes chars
  escapes chars
+  includes?
+    by string
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    by char
+      assert
      assert
+      assert
      assert
+  "#each_codepoint" yielding
  "#each_codepoint" yielding
+  "#each_byte" iterator
  "#each_byte" iterator
+  succ
+    adds an additional character (just left to the last increased one) if there is a carry and no character left to increase
    adds an additional character (just left to the last increased one) if there is a carry and no character left to increase
+    increases the next best alphanumeric (jumping over non-alphanumerics) if there is a carry
    increases the next best alphanumeric (jumping over non-alphanumerics) if there is a carry
+    returns the successor by increasing the rightmost alphanumeric (digit => digit, letter => letter with same case)
    returns the successor by increasing the rightmost alphanumeric (digit => digit, letter => letter with same case)
+    returns an empty string for empty strings
    returns an empty string for empty strings
+    increases non-alphanumerics (via ascii rules) if there are no alphanumerics
    increases non-alphanumerics (via ascii rules) if there are no alphanumerics
+  #match_full
  #match_full
+  does %
  does %
+  does to_f
  does to_f
+  center
     assert
    assert
     assert
    assert
     assert
    assert
+    to io
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
     assert
    assert
+  compares strings: same object
  compares strings: same object
+  #inspect_unquoted
  #inspect_unquoted
+  escapes with octal
  escapes with octal
+  does char_at
  does char_at
+  char_index_to_byte_index
+    with ascii
    with ascii
+    with utf-8
    with utf-8
+  ljust
+    to io
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+  blank?
     assert
    assert
     assert
    assert
     assert
    assert
+  "#each_line(chomp: false)" iterator
  "#each_line(chomp: false)" iterator
+  "#each_byte" yielding
  "#each_byte" yielding
+  byte_index_to_char_index
+    with utf-8
    with utf-8
+    with ascii
    with ascii
+  ends_with?
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+    treats last char as replacement char if invalid in an otherwise ascii string
    treats last char as replacement char if invalid in an otherwise ascii string
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+  "#each_line(chomp: false)" yielding
  "#each_line(chomp: false)" yielding
+  multiplies with size one
  multiplies with size one
+  []?
+    gets with a char
    gets with a char
+    gets with a string
    gets with a string
+    gets with range without end
    gets with range without end
+    gets with range
    gets with range
+    gets with range without beginning
    gets with range without beginning
+    returns nil if pointing after last char which is non-ASCII
    returns nil if pointing after last char which is non-ASCII
+    gets with start and count
    gets with start and count
+    gets with index
    gets with index
+  does chars
  does chars
+  lchop?
     assert
    assert
     assert
    assert
     assert
    assert
@@ -29927,658 +23441,3134 @@
     assert
    assert
     assert
    assert
     assert
    assert
+YAML::Builder
+  writes scalar with style
  writes scalar with style
+  writes mapping with anchor
  writes mapping with anchor
+  writes alias
  writes alias
+  errors on max nesting (sequence)
  errors on max nesting (sequence)
+  writes mapping with tag
  writes mapping with tag
+  writes mapping with style
  writes mapping with style
+  writes sequence with style
  writes sequence with style
+  writes sequence with anchor
  writes sequence with anchor
+  errors on max nesting (mapping)
  errors on max nesting (mapping)
+  writes scalar
  writes scalar
+  writes mapping
  writes mapping
+  writes sequence with tag
  writes sequence with tag
+  .build (with block)
  .build (with block)
+  writes sequence
  writes sequence
+  writes mapping with alias
  writes mapping with alias
+  writes scalar with tag
  writes scalar with tag
+  writes mapping with merge
  writes mapping with merge
+  writes scalar with anchor
  writes scalar with anchor
+Float32#to_s
+  converts 8388608000.0_f32 to "8388608000.0"
  converts 8388608000.0_f32 to "8388608000.0"
+  converts 1234567890.0_f32 to "1234568000.0"
  converts 1234567890.0_f32 to "1234568000.0"
+  anomalous values
+    converts 0x1p90_f32 to "1.2379401e+27"
    converts 0x1p90_f32 to "1.2379401e+27"
+    converts 0x1p-96_f32 to "1.2621775e-29"
    converts 0x1p-96_f32 to "1.2621775e-29"
+    converts 0x1p87_f32 to "1.5474251e+26"
    converts 0x1p87_f32 to "1.5474251e+26"
+  converts 12345678.0_f32 to "12345678.0"
  converts 12345678.0_f32 to "12345678.0"
+  converts 1000000000000.0_f32 to "1000000000000.0"
  converts 1000000000000.0_f32 to "1000000000000.0"
+  converts 67108864000.0_f32 to "67108864000.0"
  converts 67108864000.0_f32 to "67108864000.0"
+  Ryu f2s_test.cc ExactValueRoundEven
+    converts 3.0540412e5_f32 to "305404.12"
    converts 3.0540412e5_f32 to "305404.12"
+    converts 8.0990312e3_f32 to "8099.0312"
    converts 8.0990312e3_f32 to "8099.0312"
+  converts 1.23_f32 to "1.23"
  converts 1.23_f32 to "1.23"
+  converts 12345678901234.0_f32 to "12345679000000.0"
  converts 12345678901234.0_f32 to "12345679000000.0"
+  converts 1000000000000000.0_f32 to "1.0e+15"
  converts 1000000000000000.0_f32 to "1.0e+15"
+  converts 1.234_f32 to "1.234"
  converts 1.234_f32 to "1.234"
+  converts 8.0_f32 to "8.0"
  converts 8.0_f32 to "8.0"
+  converts 1001000000000000.0_f32 to "1.001e+15"
  converts 1001000000000000.0_f32 to "1.001e+15"
+  converts 100.0_f32 to "100.0"
  converts 100.0_f32 to "100.0"
+  converts 1.0_f32 to "1.0"
  converts 1.0_f32 to "1.0"
+  converts 1.0_f32 to "1.0"
  converts 1.0_f32 to "1.0"
+  converts 1.23456789_f32 to "1.2345679"
  converts 1.23456789_f32 to "1.2345679"
+  odd mantissas (unaffected by shifting)
+    converts 5367e5_f32 to "536700000.0"
    converts 5367e5_f32 to "536700000.0"
+    converts 5497856e5_f32 to "549785600000.0"
    converts 5497856e5_f32 to "549785600000.0"
+    converts 671087e2_f32 to "67108700.0"
    converts 671087e2_f32 to "67108700.0"
+    converts 671089e2_f32 to "67108900.0"
    converts 671089e2_f32 to "67108900.0"
+    converts 5369e5_f32 to "536900000.0"
    converts 5369e5_f32 to "536900000.0"
+    converts 26843e4_f32 to "268430000.0"
    converts 26843e4_f32 to "268430000.0"
+    converts 1e10_f32 to "10000000000.0"
    converts 1e10_f32 to "10000000000.0"
+    converts 5495808e5_f32 to "549580800000.0"
    converts 5495808e5_f32 to "549580800000.0"
+    converts 9e9_f32 to "9000000000.0"
    converts 9e9_f32 to "9000000000.0"
+    converts 215e7_f32 to "2150000000.0"
    converts 215e7_f32 to "2150000000.0"
+    converts 134219e3_f32 to "134219000.0"
    converts 134219e3_f32 to "134219000.0"
+    converts 3355445e1_f32 to "33554450.0"
    converts 3355445e1_f32 to "33554450.0"
+    converts 41e8_f32 to "4100000000.0"
    converts 41e8_f32 to "4100000000.0"
+    converts 43e8_f32 to "4300000000.0"
    converts 43e8_f32 to "4300000000.0"
+    converts 26845e4_f32 to "268450000.0"
    converts 26845e4_f32 to "268450000.0"
+    converts 7e9_f32 to "7000000000.0"
    converts 7e9_f32 to "7000000000.0"
+    converts 213e7_f32 to "2130000000.0"
    converts 213e7_f32 to "2130000000.0"
+    converts 3e10_f32 to "30000000000.0"
    converts 3e10_f32 to "30000000000.0"
+    converts 1073e6_f32 to "1073000000.0"
    converts 1073e6_f32 to "1073000000.0"
+    converts 1075e6_f32 to "1075000000.0"
    converts 1075e6_f32 to "1075000000.0"
+    converts 3355443e1_f32 to "33554430.0"
    converts 3355443e1_f32 to "33554430.0"
+    converts 134217e3_f32 to "134217000.0"
    converts 134217e3_f32 to "134217000.0"
+  converts 1000001000000000.0_f32 to "1.000001e+15"
  converts 1000001000000000.0_f32 to "1.000001e+15"
+  one-digit cases, where the decimal point can't appear between digits like "17.29"
+    converts 7e-2_f32 to "0.07"
    converts 7e-2_f32 to "0.07"
+    converts 7e-3_f32 to "0.007"
    converts 7e-3_f32 to "0.007"
+    converts 7e+0_f32 to "7.0"
    converts 7e+0_f32 to "7.0"
+    converts 7e+3_f32 to "7000.0"
    converts 7e+3_f32 to "7000.0"
+    converts 7e-1_f32 to "0.7"
    converts 7e-1_f32 to "0.7"
+    converts 7e+1_f32 to "70.0"
    converts 7e+1_f32 to "70.0"
+    converts 7e+2_f32 to "700.0"
    converts 7e+2_f32 to "700.0"
+  converts 10000000.0_f32 to "10000000.0"
  converts 10000000.0_f32 to "10000000.0"
+  all exponents
+    converts 1.729e-9_f32 to "1.729e-9"
    converts 1.729e-9_f32 to "1.729e-9"
+    converts 1.729e19_f32 to "1.729e+19"
    converts 1.729e19_f32 to "1.729e+19"
+    converts 1.729e-20_f32 to "1.729e-20"
    converts 1.729e-20_f32 to "1.729e-20"
+    converts 1.729e-28_f32 to "1.729e-28"
    converts 1.729e-28_f32 to "1.729e-28"
+    converts 1.729e-1_f32 to "0.1729"
    converts 1.729e-1_f32 to "0.1729"
+    converts 1.729e-3_f32 to "0.001729"
    converts 1.729e-3_f32 to "0.001729"
+    converts 1.729e-35_f32 to "1.729e-35"
    converts 1.729e-35_f32 to "1.729e-35"
+    converts 1.729e30_f32 to "1.729e+30"
    converts 1.729e30_f32 to "1.729e+30"
+    converts 1.729e-43_f32 to "1.72e-43"
    converts 1.729e-43_f32 to "1.72e-43"
+    converts 1.729e+9_f32 to "1729000000.0"
    converts 1.729e+9_f32 to "1729000000.0"
+    converts 1.729e17_f32 to "1.729e+17"
    converts 1.729e17_f32 to "1.729e+17"
+    converts 1.729e+10_f32 to "17290000000.0"
    converts 1.729e+10_f32 to "17290000000.0"
+    converts 1.729e+2_f32 to "172.9"
    converts 1.729e+2_f32 to "172.9"
+    converts 1.729e-8_f32 to "1.729e-8"
    converts 1.729e-8_f32 to "1.729e-8"
+    converts 1.729e15_f32 to "1.729e+15"
    converts 1.729e15_f32 to "1.729e+15"
+    converts 1.729e-2_f32 to "0.01729"
    converts 1.729e-2_f32 to "0.01729"
+    converts 1.729e-11_f32 to "1.729e-11"
    converts 1.729e-11_f32 to "1.729e-11"
+    converts 1.729e35_f32 to "1.729e+35"
    converts 1.729e35_f32 to "1.729e+35"
+    converts 1.729e+13_f32 to "17290000000000.0"
    converts 1.729e+13_f32 to "17290000000000.0"
+    converts 1.729e-15_f32 to "1.729e-15"
    converts 1.729e-15_f32 to "1.729e-15"
+    converts 1.729e-22_f32 to "1.729e-22"
    converts 1.729e-22_f32 to "1.729e-22"
+    converts 1.729e-33_f32 to "1.729e-33"
    converts 1.729e-33_f32 to "1.729e-33"
+    converts 1.729e-29_f32 to "1.729e-29"
    converts 1.729e-29_f32 to "1.729e-29"
+    converts 1.729e27_f32 to "1.729e+27"
    converts 1.729e27_f32 to "1.729e+27"
+    converts 1.729e16_f32 to "1.729e+16"
    converts 1.729e16_f32 to "1.729e+16"
+    converts 1.729e-39_f32 to "1.729e-39"
    converts 1.729e-39_f32 to "1.729e-39"
+    converts 1.729e-12_f32 to "1.729e-12"
    converts 1.729e-12_f32 to "1.729e-12"
+    converts 1.729e+5_f32 to "172900.0"
    converts 1.729e+5_f32 to "172900.0"
+    converts 1.729e21_f32 to "1.729e+21"
    converts 1.729e21_f32 to "1.729e+21"
+    converts 1.729e26_f32 to "1.729e+26"
    converts 1.729e26_f32 to "1.729e+26"
+    converts 1.729e-42_f32 to "1.729e-42"
    converts 1.729e-42_f32 to "1.729e-42"
+    converts 1.729e-45_f32 to "1.0e-45"
    converts 1.729e-45_f32 to "1.0e-45"
+    converts 1.729e-6_f32 to "1.729e-6"
    converts 1.729e-6_f32 to "1.729e-6"
+    converts 1.729e34_f32 to "1.729e+34"
    converts 1.729e34_f32 to "1.729e+34"
+    converts 1.729e-38_f32 to "1.729e-38"
    converts 1.729e-38_f32 to "1.729e-38"
+    converts 1.729e-21_f32 to "1.729e-21"
    converts 1.729e-21_f32 to "1.729e-21"
+    converts 1.729e-23_f32 to "1.729e-23"
    converts 1.729e-23_f32 to "1.729e-23"
+    converts 1.729e-25_f32 to "1.729e-25"
    converts 1.729e-25_f32 to "1.729e-25"
+    converts 1.729e37_f32 to "1.729e+37"
    converts 1.729e37_f32 to "1.729e+37"
+    converts 1.729e-10_f32 to "1.729e-10"
    converts 1.729e-10_f32 to "1.729e-10"
+    converts 1.729e20_f32 to "1.729e+20"
    converts 1.729e20_f32 to "1.729e+20"
+    converts 1.729e32_f32 to "1.729e+32"
    converts 1.729e32_f32 to "1.729e+32"
+    converts 1.729e-41_f32 to "1.729e-41"
    converts 1.729e-41_f32 to "1.729e-41"
+    converts 1.729e-26_f32 to "1.729e-26"
    converts 1.729e-26_f32 to "1.729e-26"
+    converts 1.729e+14_f32 to "172900000000000.0"
    converts 1.729e+14_f32 to "172900000000000.0"
+    converts 1.729e28_f32 to "1.729e+28"
    converts 1.729e28_f32 to "1.729e+28"
+    converts 1.729e-19_f32 to "1.729e-19"
    converts 1.729e-19_f32 to "1.729e-19"
+    converts 1.729e-36_f32 to "1.729e-36"
    converts 1.729e-36_f32 to "1.729e-36"
+    converts 1.729e-18_f32 to "1.729e-18"
    converts 1.729e-18_f32 to "1.729e-18"
+    converts 1.729e24_f32 to "1.729e+24"
    converts 1.729e24_f32 to "1.729e+24"
+    converts 1.729e-34_f32 to "1.729e-34"
    converts 1.729e-34_f32 to "1.729e-34"
+    converts 1.729e-37_f32 to "1.729e-37"
    converts 1.729e-37_f32 to "1.729e-37"
+    converts 1.729e-30_f32 to "1.729e-30"
    converts 1.729e-30_f32 to "1.729e-30"
+    converts 1.729e-16_f32 to "1.729e-16"
    converts 1.729e-16_f32 to "1.729e-16"
+    converts 1.729e36_f32 to "1.729e+36"
    converts 1.729e36_f32 to "1.729e+36"
+    converts 1.729e+3_f32 to "1729.0"
    converts 1.729e+3_f32 to "1729.0"
+    converts 1.729e29_f32 to "1.729e+29"
    converts 1.729e29_f32 to "1.729e+29"
+    converts 1.729e-17_f32 to "1.729e-17"
    converts 1.729e-17_f32 to "1.729e-17"
+    converts 1.729e-32_f32 to "1.729e-32"
    converts 1.729e-32_f32 to "1.729e-32"
+    converts 1.729e+1_f32 to "17.29"
    converts 1.729e+1_f32 to "17.29"
+    converts 1.729e-24_f32 to "1.729e-24"
    converts 1.729e-24_f32 to "1.729e-24"
+    converts 1.729e25_f32 to "1.729e+25"
    converts 1.729e25_f32 to "1.729e+25"
+    converts 1.729e-27_f32 to "1.729e-27"
    converts 1.729e-27_f32 to "1.729e-27"
+    converts 1.729e+7_f32 to "17290000.0"
    converts 1.729e+7_f32 to "17290000.0"
+    converts 1.729e-31_f32 to "1.729e-31"
    converts 1.729e-31_f32 to "1.729e-31"
+    converts 1.729e+6_f32 to "1729000.0"
    converts 1.729e+6_f32 to "1729000.0"
+    converts 1.729e+8_f32 to "172900000.0"
    converts 1.729e+8_f32 to "172900000.0"
+    converts 1.729e33_f32 to "1.729e+33"
    converts 1.729e33_f32 to "1.729e+33"
+    converts 1.729e-5_f32 to "1.729e-5"
    converts 1.729e-5_f32 to "1.729e-5"
+    converts 1.729e31_f32 to "1.729e+31"
    converts 1.729e31_f32 to "1.729e+31"
+    converts 1.729e-4_f32 to "0.0001729"
    converts 1.729e-4_f32 to "0.0001729"
+    converts 1.729e18_f32 to "1.729e+18"
    converts 1.729e18_f32 to "1.729e+18"
+    converts 1.729e23_f32 to "1.729e+23"
    converts 1.729e23_f32 to "1.729e+23"
+    converts 1.729e-14_f32 to "1.729e-14"
    converts 1.729e-14_f32 to "1.729e-14"
+    converts 1.729e-44_f32 to "1.7e-44"
    converts 1.729e-44_f32 to "1.7e-44"
+    converts 1.729e+11_f32 to "172900000000.0"
    converts 1.729e+11_f32 to "172900000000.0"
+    converts 1.729e+4_f32 to "17290.0"
    converts 1.729e+4_f32 to "17290.0"
+    converts 1.729e-7_f32 to "1.729e-7"
    converts 1.729e-7_f32 to "1.729e-7"
+    converts 1.729e22_f32 to "1.729e+22"
    converts 1.729e22_f32 to "1.729e+22"
+    converts 1.729e38_f32 to "1.729e+38"
    converts 1.729e38_f32 to "1.729e+38"
+    converts 1.729e-13_f32 to "1.729e-13"
    converts 1.729e-13_f32 to "1.729e-13"
+    converts 1.729e+12_f32 to "1729000000000.0"
    converts 1.729e+12_f32 to "1729000000000.0"
+    converts 1.729e-40_f32 to "1.729e-40"
    converts 1.729e-40_f32 to "1.729e-40"
+    converts 1.729e+0_f32 to "1.729"
    converts 1.729e+0_f32 to "1.729"
+  converts 100000000000000.0_f32 to "100000000000000.0"
  converts 100000000000000.0_f32 to "100000000000000.0"
+  converts 1000000000.0_f32 to "1000000000.0"
  converts 1000000000.0_f32 to "1000000000.0"
+  converts 524288000.0_f32 to "524288000.0"
  converts 524288000.0_f32 to "524288000.0"
+  converts 1000000.0_f32 to "1000000.0"
  converts 1000000.0_f32 to "1000000.0"
+  converts 1.2345678_f32 to "1.2345678"
  converts 1.2345678_f32 to "1.2345678"
+  converts 8192.0_f32 to "8192.0"
  converts 8192.0_f32 to "8192.0"
+  converts 65536.0_f32 to "65536.0"
  converts 65536.0_f32 to "65536.0"
+  converts 8192000.0_f32 to "8192000.0"
  converts 8192000.0_f32 to "8192000.0"
+  converts 1000010000000000.0_f32 to "1.00001e+15"
  converts 1000010000000000.0_f32 to "1.00001e+15"
+  converts 123.0_f32 to "123.0"
  converts 123.0_f32 to "123.0"
+  converts 64000.0_f32 to "64000.0"
  converts 64000.0_f32 to "64000.0"
+  converts 12345678901.0_f32 to "12345679000.0"
  converts 12345678901.0_f32 to "12345679000.0"
+  converts 1.2_f32 to "1.2"
  converts 1.2_f32 to "1.2"
+  Ryu f2s_test.cc BoundaryRoundEven
+    converts 8.999999e9_f32 to "9000000000.0"
    converts 8.999999e9_f32 to "9000000000.0"
+    converts 3.4366717e10_f32 to "34366720000.0"
    converts 3.4366717e10_f32 to "34366720000.0"
+    converts 3.355445e7_f32 to "33554450.0"
    converts 3.355445e7_f32 to "33554450.0"
+  converts 8000.0_f32 to "8000.0"
  converts 8000.0_f32 to "8000.0"
+  converts 123456789012.0_f32 to "123456790000.0"
  converts 123456789012.0_f32 to "123456790000.0"
+  converts 12.0_f32 to "12.0"
  converts 12.0_f32 to "12.0"
+  converts 100000000.0_f32 to "100000000.0"
  converts 100000000.0_f32 to "100000000.0"
+  highly-trimmed powers of 2
+    converts 0x1p118_f32 to "3.32307e+35"
    converts 0x1p118_f32 to "3.32307e+35"
+    converts 0x1p119_f32 to "6.64614e+35"
    converts 0x1p119_f32 to "6.64614e+35"
+  converts 1.234567_f32 to "1.234567"
  converts 1.234567_f32 to "1.234567"
+  Ryu f2s_test.cc LooksLikePow5
+    converts 0x1.2a05f2p+59_f32 to "6.7108864e+17"
    converts 0x1.2a05f2p+59_f32 to "6.7108864e+17"
+    converts 0x1.2a05f2p+60_f32 to "1.3421773e+18"
    converts 0x1.2a05f2p+60_f32 to "1.3421773e+18"
+    converts 0x1.2a05f2p+61_f32 to "2.6843546e+18"
    converts 0x1.2a05f2p+61_f32 to "2.6843546e+18"
+  converts 1000100000000000.0_f32 to "1.0001e+15"
  converts 1000100000000000.0_f32 to "1.0001e+15"
+  converts 1000000010000000.0_f32 to "1.0e+15"
  converts 1000000010000000.0_f32 to "1.0e+15"
+  converts 1010000000000000.0_f32 to "1.01e+15"
  converts 1010000000000000.0_f32 to "1.01e+15"
+  converts 64.0_f32 to "64.0"
  converts 64.0_f32 to "64.0"
+  converts 512.0_f32 to "512.0"
  converts 512.0_f32 to "512.0"
+  Ryu f2s_test.cc Regression
+    converts 5.368709e18_f32 to "5.368709e+18"
    converts 5.368709e18_f32 to "5.368709e+18"
+    converts 1.00014165e-36_f32 to "1.00014165e-36"
    converts 1.00014165e-36_f32 to "1.00014165e-36"
+    converts 9.223372e18_f32 to "9.223372e+18"
    converts 9.223372e18_f32 to "9.223372e+18"
+    converts 2.8823261e17_f32 to "2.882326e+17"
    converts 2.8823261e17_f32 to "2.882326e+17"
+    converts 1.6777216e7_f32 to "16777216.0"
    converts 1.6777216e7_f32 to "16777216.0"
+    converts 4.7223665e21_f32 to "4.7223665e+21"
    converts 4.7223665e21_f32 to "4.7223665e+21"
+    converts -2.47e-43_f32 to "-2.47e-43"
    converts -2.47e-43_f32 to "-2.47e-43"
+    converts 4.6143165e18_f32 to "4.6143166e+18"
    converts 4.6143165e18_f32 to "4.6143166e+18"
+    converts 6.7108872e7_f32 to "67108870.0"
    converts 6.7108872e7_f32 to "67108870.0"
+    converts 0.007812537_f32 to "0.007812537"
    converts 0.007812537_f32 to "0.007812537"
+    converts 6.7131496e7_f32 to "67131496.0"
    converts 6.7131496e7_f32 to "67131496.0"
+    converts 7.038531e-26_f32 to "7.038531e-26"
    converts 7.038531e-26_f32 to "7.038531e-26"
+    converts 200.0_f32 to "200.0"
    converts 200.0_f32 to "200.0"
+    converts 1.0e-44_f32 to "1.0e-44"
    converts 1.0e-44_f32 to "1.0e-44"
+    converts 0.0010310042_f32 to "0.0010310042"
    converts 0.0010310042_f32 to "0.0010310042"
+    converts 1.1811161e19_f32 to "1.1811161e+19"
    converts 1.1811161e19_f32 to "1.1811161e+19"
+    converts 1.4e-45_f32 to "1.0e-45"
    converts 1.4e-45_f32 to "1.0e-45"
+    converts 1.5846085e29_f32 to "1.5846086e+29"
    converts 1.5846085e29_f32 to "1.5846086e+29"
+    converts 8388608.0_f32 to "8388608.0"
    converts 8388608.0_f32 to "8388608.0"
+    converts 5.3399997e9_f32 to "5339999700.0"
    converts 5.3399997e9_f32 to "5339999700.0"
+    converts 1.9310392e-38_f32 to "1.9310392e-38"
    converts 1.9310392e-38_f32 to "1.9310392e-38"
+    converts 6.0898e-39_f32 to "6.0898e-39"
    converts 6.0898e-39_f32 to "6.0898e-39"
+    converts 3.3554436e7_f32 to "33554436.0"
    converts 3.3554436e7_f32 to "33554436.0"
+    converts 3.3554432e7_f32 to "33554432.0"
    converts 3.3554432e7_f32 to "33554432.0"
+    converts 1.18697724e20_f32 to "1.18697725e+20"
    converts 1.18697724e20_f32 to "1.18697725e+20"
+    converts 1.993244e-38_f32 to "1.993244e-38"
    converts 1.993244e-38_f32 to "1.993244e-38"
+    converts 4103.9003_f32 to "4103.9004"
    converts 4103.9003_f32 to "4103.9004"
+    converts 2.816025e14_f32 to "281602500000000.0"
    converts 2.816025e14_f32 to "281602500000000.0"
+    converts 9.2234038e17_f32 to "9.223404e+17"
    converts 9.2234038e17_f32 to "9.223404e+17"
+  converts 1.0_f32 to "1.0"
  converts 1.0_f32 to "1.0"
+  converts 123456789012345.0_f32 to "123456790000000.0"
  converts 123456789012345.0_f32 to "123456790000000.0"
+  Ryu f2s_test.cc LotsOfTrailingZeros
+    converts 2.4414062e-3_f32 to "0.0024414062"
    converts 2.4414062e-3_f32 to "0.0024414062"
+    converts 6.3476562e-3_f32 to "0.0063476562"
    converts 6.3476562e-3_f32 to "0.0063476562"
+    converts 4.3945312e-3_f32 to "0.0043945312"
    converts 4.3945312e-3_f32 to "0.0043945312"
+    converts 2.4414062e-4_f32 to "0.00024414062"
    converts 2.4414062e-4_f32 to "0.00024414062"
+  converts 1234567890123.0_f32 to "1234568000000.0"
  converts 1234567890123.0_f32 to "1234568000000.0"
+  converts 1234.0_f32 to "1234.0"
  converts 1234.0_f32 to "1234.0"
+  converts 1100000000000000.0_f32 to "1.1e+15"
  converts 1100000000000000.0_f32 to "1.1e+15"
+  converts 524288.0_f32 to "524288.0"
  converts 524288.0_f32 to "524288.0"
+  converts 1000000100000000.0_f32 to "1.0000001e+15"
  converts 1000000100000000.0_f32 to "1.0000001e+15"
+  Grisu failures
+    converts 85_f32 / 512_f32 to "0.16601562"
    converts 85_f32 / 512_f32 to "0.16601562"
+  converts 8388608.0_f32 to "8388608.0"
  converts 8388608.0_f32 to "8388608.0"
+  converts 12345.0_f32 to "12345.0"
  converts 12345.0_f32 to "12345.0"
+  converts 100000000000.0_f32 to "100000000000.0"
  converts 100000000000.0_f32 to "100000000000.0"
+  converts 67108864.0_f32 to "67108864.0"
  converts 67108864.0_f32 to "67108864.0"
+  converts 123456789.0_f32 to "123456790.0"
  converts 123456789.0_f32 to "123456790.0"
+  special cases
+    converts -Float32::INFINITY to "-Infinity"
    converts -Float32::INFINITY to "-Infinity"
+    converts -0.0_f32 to "-0.0"
    converts -0.0_f32 to "-0.0"
+    converts 4290772992_u32.unsafe_as(Float32) to "NaN"
    converts 4290772992_u32.unsafe_as(Float32) to "NaN"
+    converts Float32::MIN_SUBNORMAL to "1.0e-45"
    converts Float32::MIN_SUBNORMAL to "1.0e-45"
+    converts Float32::INFINITY to "Infinity"
    converts Float32::INFINITY to "Infinity"
+    converts Float32::MAX to "3.4028235e+38"
    converts Float32::MAX to "3.4028235e+38"
+    converts 0.0_f32 to "0.0"
    converts 0.0_f32 to "0.0"
+    converts 2143289344_u32.unsafe_as(Float32) to "NaN"
    converts 2143289344_u32.unsafe_as(Float32) to "NaN"
+    converts Float32::MIN_POSITIVE to "1.1754944e-38"
    converts Float32::MIN_POSITIVE to "1.1754944e-38"
+    converts Float32::MIN_POSITIVE.prev_float to "1.1754942e-38"
    converts Float32::MIN_POSITIVE.prev_float to "1.1754942e-38"
+  converts 100000.0_f32 to "100000.0"
  converts 100000.0_f32 to "100000.0"
+  converts 1000.0_f32 to "1000.0"
  converts 1000.0_f32 to "1000.0"
+  converts 1234567895.0_f32 to "1234568000.0"
  converts 1234567895.0_f32 to "1234568000.0"
+  converts 10.0_f32 to "10.0"
  converts 10.0_f32 to "10.0"
+  converts 10000000000.0_f32 to "10000000000.0"
  converts 10000000000.0_f32 to "10000000000.0"
+  converts 65536000.0_f32 to "65536000.0"
  converts 65536000.0_f32 to "65536000.0"
+  converts 123456.0_f32 to "123456.0"
  converts 123456.0_f32 to "123456.0"
+  converts 1.2345_f32 to "1.2345"
  converts 1.2345_f32 to "1.2345"
+  converts 1234567.0_f32 to "1234567.0"
  converts 1234567.0_f32 to "1234567.0"
+  converts 1.23456735e-36_f32 to "1.23456735e-36"
  converts 1.23456735e-36_f32 to "1.23456735e-36"
+  converts 1.23456_f32 to "1.23456"
  converts 1.23456_f32 to "1.23456"
+  converts 1234567890123456.0_f32 to "1.234568e+15"
  converts 1234567890123456.0_f32 to "1.234568e+15"
+  converts 512000.0_f32 to "512000.0"
  converts 512000.0_f32 to "512000.0"
+  converts 10000000000000.0_f32 to "10000000000000.0"
  converts 10000000000000.0_f32 to "10000000000000.0"
+  converts 10000.0_f32 to "10000.0"
  converts 10000.0_f32 to "10000.0"
+HTTP::Server::Response
+  changes status and others after headers sent
  changes status and others after headers sent
+  retrieves status code
  retrieves status code
+  prints with content length
  prints with content length
+  changes status and others
  changes status and others
+  flushes
  flushes
+  sets content type
  sets content type
+  closes
  closes
+  prints less then buffer's size to output
  prints less then buffer's size to output
+  sets status code
  sets status code
+  does not automatically add the `content-length` header if the response is informational
  does not automatically add the `content-length` header if the response is informational
+  #respond_with_status
+    uses default values
    uses default values
+    raises when response is closed
    raises when response is closed
+    raises when headers written
    raises when headers written
+    sends HTTP::Status and custom message
    sends HTTP::Status and custom message
+    sends HTTP::Status
    sends HTTP::Status
+    sends custom code and message
    sends custom code and message
+  #redirect
+    with header
    with header
+    doesn't encode URIs twice
    doesn't encode URIs twice
+    fails if headers already sent
    fails if headers already sent
+    permanent redirect
    permanent redirect
+    encodes special characters
    encodes special characters
+    URI location
    URI location
+    fails if closed
    fails if closed
+    String location
    String location
+  writes and flushes with HTTP 1.0
  writes and flushes with HTTP 1.0
+  prints more then buffer's size
  prints more then buffer's size
+  doesn't override content-length when there's no body
  doesn't override content-length when there's no body
+  adds header
  adds header
+  does not automatically add the `content-length` header if the response is a 204
  does not automatically add the `content-length` header if the response is a 204
+  allows specifying the content-length header explicitly
  allows specifying the content-length header explicitly
+  closes when it fails to write
  closes when it fails to write
+  does not automatically add the `content-length` header if the response is a 304
  does not automatically add the `content-length` header if the response is a 304
+  wraps output
  wraps output
+  closes gracefully with replaced output that syncs close (#11389)
  closes gracefully with replaced output that syncs close (#11389)
+  changes status message
  changes status message
+  writes cookie headers
  writes cookie headers
+  sets content type after headers sent
  sets content type after headers sent
+  prints less then buffer's size
  prints less then buffer's size
+  prints with content length (method)
  prints with content length (method)
+  resets and clears headers and cookies
  resets and clears headers and cookies
+OpenSSL::SSL::HostnameValidation
+  validate_hostname
+    falls back to CN entry (unless SAN entry is defined)
    falls back to CN entry (unless SAN entry is defined)
+    matches IP from certificate SAN entries
    matches IP from certificate SAN entries
+    matches domains from certificate SAN entries
    matches domains from certificate SAN entries
+    verifies all SAN entries
    verifies all SAN entries
+  matches_hostname?
+    matches leading dot
    matches leading dot
+    matches IDNA label
    matches IDNA label
+    skips trailing dot
    skips trailing dot
+    wildcard matches according to RFC 6125, section 6.4.3
    wildcard matches according to RFC 6125, section 6.4.3
+    literal matches
    literal matches
+    normalizes case
    normalizes case
+IO
+  "#each_line(chomp: false)" iterator
  "#each_line(chomp: false)" iterator
+  IO::Error
+    .new
+      accepts `cause` argument (#14241)
      accepts `cause` argument (#14241)
+  read operations
+    does gets with empty string (with peek)
    does gets with empty string (with peek)
+    gets with string as delimiter and chomp = true
    gets with string as delimiter and chomp = true
+    raises on EOF with readline and delimiter
    raises on EOF with readline and delimiter
+    does gets with \n (no peek)
    does gets with \n (no peek)
+    does each_line
    does each_line
+    does gets with \r\n (with peek)
    does gets with \r\n (with peek)
+    does gets with \r\n, chomp true goes past \r
    does gets with \r\n, chomp true goes past \r
+    does gets with limit
    does gets with limit
+    does gets with unicode char delimiter
    does gets with unicode char delimiter
+    does read_line with limit
    does read_line with limit
+    does read_fully
    does read_fully
+    reads char
    reads char
+    does each_byte
    does each_byte
+    .same_content?
+      compares two ios, one way (false)
      compares two ios, one way (false)
+      compares two ios, second way (false)
      compares two ios, second way (false)
+      refutes prefix match, second way
      refutes prefix match, second way
+      refutes prefix match, one way
      refutes prefix match, one way
+      refutes prefix match, one way
      refutes prefix match, one way
+      compares two ios, one way (true)
      compares two ios, one way (true)
+      compares two ios, second way (true)
      compares two ios, second way (true)
+      refutes prefix match, second way
      refutes prefix match, second way
+    does gets with \r\n (no peek)
    does gets with \r\n (no peek)
+    gets with string as delimiter
    gets with string as delimiter
+    reads byte
    reads byte
+    reads all remaining content as bytes
    reads all remaining content as bytes
+    does gets with char and limit
    does gets with char and limit
+    does gets with \r\n
    does gets with \r\n
+    does gets with chomp false
    does gets with chomp false
+    raises if invoking gets with negative limit
    raises if invoking gets with negative limit
+    does read_line with char and limit
    does read_line with char and limit
+    reads all remaining content
    reads all remaining content
+    does read_fully?
    does read_fully?
+    does gets with char delimiter
    does gets with char delimiter
+    does gets with big line
    does gets with big line
+    gets with single byte string as delimiter
    gets with single byte string as delimiter
+    raises on EOF with read_line
    raises on EOF with read_line
+    does gets with \n (with peek)
    does gets with \n (with peek)
+    doesn't underflow when limit is unsigned
    doesn't underflow when limit is unsigned
+    reads string
    reads string
+    gets with empty string as delimiter
    gets with empty string as delimiter
+    does gets
    does gets
+    does gets with empty string (no peek)
    does gets with empty string (no peek)
+    does each_char
    does each_char
+    raises if trying to read to an IO not opened for reading
    raises if trying to read to an IO not opened for reading
+  #close
+    aborts 'write' in a different fiber
    aborts 'write' in a different fiber
+    aborts 'read' in a different fiber
    aborts 'read' in a different fiber
+  "#char" iterator
  "#char" iterator
+  encoding
+    #encoding
+      returns "UTF-8" if the encoding is not manually set
      returns "UTF-8" if the encoding is not manually set
+      returns the name of the encoding set via #set_encoding
      returns the name of the encoding set via #set_encoding
+    decode
+      sets encoding to utf8 and stays as UTF-8
      sets encoding to utf8 and stays as UTF-8
+      gets with string delimiter
      gets with string delimiter
+      gets with limit
      gets with limit
+      sets encoding to utf-8 and stays as UTF-8
      sets encoding to utf-8 and stays as UTF-8
+      does skips when converting to UTF-8
      does skips when converting to UTF-8
+      decodes incomplete multibyte sequence with skip (2) (#3285)
      decodes incomplete multibyte sequence with skip (2) (#3285)
+      decodes incomplete multibyte sequence with skip (3) (#3285)
      decodes incomplete multibyte sequence with skip (3) (#3285)
+      reads string
      reads string
+      gets_to_end
      gets_to_end
+      gets
      gets
+      gets with non-ascii and chomp: false
      gets with non-ascii and chomp: false
+      reads char
      reads char
+      gets with limit (big)
      gets with limit (big)
+      gets with non-ascii
      gets with non-ascii
+      reads utf8 byte
      reads utf8 byte
+      gets with limit (small, no newline)
      gets with limit (small, no newline)
+      says invalid encoding
      says invalid encoding
+      says invalid 'invalid' option
      says invalid 'invalid' option
+      skips invalid byte sequences
      skips invalid byte sequences
+      gets ascii from socket (#9056)
      gets ascii from socket (#9056)
+      reads utf8
      reads utf8
+      gets big EUC-JP string
      gets big EUC-JP string
+      raises on incomplete byte sequence
      raises on incomplete byte sequence
+      decodes incomplete multibyte sequence with skip (#3285)
      decodes incomplete multibyte sequence with skip (#3285)
+      does gets on unicode with char and limit without off-by-one
      does gets on unicode with char and limit without off-by-one
+      says invalid byte sequence
      says invalid byte sequence
+      gets big string
      gets big string
+      gets with chomp = false
      gets with chomp = false
+    encode
+      printf
      printf
+      raises on invalid byte sequence
      raises on invalid byte sequence
+      raises on incomplete byte sequence
      raises on incomplete byte sequence
+      prints char
      prints char
+      puts
      puts
+      prints a string
      prints a string
+      prints numbers
      prints numbers
+      skips on invalid byte sequence
      skips on invalid byte sequence
+      prints big int
      prints big int
+      prints symbol
      prints symbol
+      says invalid encoding
      says invalid encoding
+      prints bool
      prints bool
+  partial read
+    doesn't block on first read.  blocks on 2nd read
    doesn't block on first read.  blocks on 2nd read
+  "#each_line" iterator
  "#each_line" iterator
+  write operations
+    skips but raises if not enough bytes
    skips but raises if not enough bytes
+    writes bytes
    writes bytes
+    skips a few bytes
    skips a few bytes
+    writes with printf as an array
    writes with printf as an array
+    skips to end
    skips to end
+    prints
    prints
+    writes with printf
    writes with printf
+    puts several arguments
    puts several arguments
+    raises if trying to write to an IO not opened for writing
    raises if trying to write to an IO not opened for writing
+    prints several arguments
    prints several arguments
+    does puts
    does puts
+    does puts with big string
    does puts with big string
+    does puts many times
    does puts many times
+    skips more than 4096 bytes
    skips more than 4096 bytes
+  "#each_line(chomp: false)" yielding
  "#each_line(chomp: false)" yielding
+  "#char" yielding
  "#char" yielding
+  "#char" iterator
  "#char" iterator
+  raises on copy with negative limit
  raises on copy with negative limit
+  copies with limit
  copies with limit
+  copies
  copies
+  "#each_line" yielding
  "#each_line" yielding
+  "#char" yielding
  "#char" yielding
+HTTP::Cookies
+  allows transform to hash
  allows transform to hash
+  allows adding cookies and retrieving
  allows adding cookies and retrieving
+  .from_client_headers
+    parses Cookie header
    parses Cookie header
+    does not accept Set-Cookie header
    does not accept Set-Cookie header
+  allows deleting a particular cookie by key
  allows deleting a particular cookie by key
+  adding request headers
+    merges multiple cookies into one Cookie header
    merges multiple cookies into one Cookie header
+    overwrites a pre-existing Cookie header
    overwrites a pre-existing Cookie header
+    use encode_www_form to write the cookie's value
    use encode_www_form to write the cookie's value
+    when no cookies are set
+      does not set a Cookie header
      does not set a Cookie header
+  allows to iterate over the cookies
  allows to iterate over the cookies
+  allows clearing the cookies collection
  allows clearing the cookies collection
+  .from_server_headers
+    does not accept Cookie header
    does not accept Cookie header
+    parses Set-Cookie header
    parses Set-Cookie header
+  disallows adding inconsistent state
  disallows adding inconsistent state
+  adding response headers
+    overwrites all pre-existing Set-Cookie headers
    overwrites all pre-existing Set-Cookie headers
+    when no cookies are set
+      does not set a Set-Cookie header
      does not set a Set-Cookie header
+    uses encode_www_form on Set-Cookie value
    uses encode_www_form on Set-Cookie value
+    sets one Set-Cookie header per cookie
    sets one Set-Cookie header per cookie
+  allows retrieving the size of the cookies collection
  allows retrieving the size of the cookies collection
+BigFloat
+  #+
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+  #trunc
     assert
    assert
     assert
    assert
     assert
    assert
+  #ceil
     assert
    assert
     assert
    assert
     assert
    assert
+  .new
+    new(String)
    new(String)
+    raises if creating from NaN
    raises if creating from NaN
+    raises if creating from infinity
    raises if creating from infinity
+    new(BigRational)
    new(BigRational)
+    new(BigInt)
    new(BigInt)
+    new(Int)
    new(Int)
+    new(BigFloat)
    new(BigFloat)
+    raises an ArgumentError unless string denotes valid float
    raises an ArgumentError unless string denotes valid float
+  #*
     assert
    assert
-  does number?
  does number?
-  does ascii_number?
  does ascii_number?
-  #dump
  #dump
-  lowercase?
     assert
    assert
     assert
    assert
     assert
    assert
+  #**
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  in_set?
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-    rejects invalid ranges
    rejects invalid ranges
     assert
    assert
     assert
    assert
+  #-
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+  #to_i64!
+    doesn't raise on overflow
    doesn't raise on overflow
+    basic
    basic
+  clones
  clones
+  #to_u64!
+    basic
    basic
+    doesn't raise on overflow
    doesn't raise on overflow
+  #integer?
     assert
    assert
     assert
    assert
     assert
    assert
+  #to_i
     assert
    assert
     assert
    assert
     assert
    assert
+  #<=>
+    compares against NaNs
    compares against NaNs
+  #to_u!
     assert
    assert
     assert
    assert
     assert
    assert
+  #to_f
     assert
    assert
     assert
    assert
     assert
    assert
+  unary #-
     assert
    assert
     assert
    assert
     assert
    assert
+  #/
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+  #round
+    rounding modes
+      default (=ties_even)
      default (=ties_even)
+      to_negative
      to_negative
+      ties_away
      ties_away
+      to_zero
      to_zero
+      ties_even
      ties_even
+      to_positive
      to_positive
+  #abs
     assert
    assert
     assert
    assert
-  to_i rejects unsupported base (1)
  to_i rejects unsupported base (1)
-  uppercase?
     assert
    assert
     assert
    assert
+  #to_f!
     assert
    assert
     assert
    assert
     assert
    assert
+  #to_i64
     assert
    assert
+    basic
    basic
     assert
    assert
     assert
    assert
+  #to_u64
     assert
    assert
-  does each_byte
  does each_byte
-  #pred
  #pred
-  escapes
  escapes
-  #unicode_escape
  #unicode_escape
-  does to_i with 16 base
  does to_i with 16 base
-  index
+    basic
    basic
     assert
    assert
     assert
    assert
-  #letter?
  #letter?
-  does ascii?
  does ascii?
-  does to_s for multibyte char
  does to_s for multibyte char
-  +
-    does for both unicode
    does for both unicode
-    does for both ascii
    does for both ascii
-  #titlecase
+  #to_u
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  #printable?
  #printable?
-  escapes with unicode
  escapes with unicode
-  #inspect
  #inspect
-  bytesize
-    does for unicode
    does for unicode
-    does for ascii
    does for ascii
-  #===(:Int)
  #===(:Int)
-  #ascii_control?
  #ascii_control?
-  ascii_letter?
+  #to_i!
     assert
    assert
     assert
    assert
     assert
    assert
+  #inspect
     assert
    assert
-  ascii_uppercase?
+  to_s
     assert
    assert
+    converts to 3.0
    converts to 3.0
     assert
    assert
     assert
    assert
     assert
    assert
-  to_i rejects unsupported base (37)
  to_i rejects unsupported base (37)
-  #succ
  #succ
-  does to_s for single-byte char
  does to_s for single-byte char
-  #downcase
+    converts to 48600000.0
    converts to 48600000.0
+    converts to 10.0
    converts to 10.0
+    converts to 1.0e-234
    converts to 1.0e-234
     assert
    assert
+    converts to 1.0
    converts to 1.0
+    converts to 100.0
    converts to 100.0
     assert
    assert
+    converts to 0.01
    converts to 0.01
+    converts to -3.0
    converts to -3.0
+    converts to 1.23e+45
    converts to 1.23e+45
     assert
    assert
+    converts to 3.0
    converts to 3.0
+    converts to 150.0
    converts to 150.0
+    converts to 1.2345678901234567e+16
    converts to 1.2345678901234567e+16
+    converts to 1.7976931348623157e+308
    converts to 1.7976931348623157e+308
+    converts to -0.01
    converts to -0.01
+    converts to 1.0e-6
    converts to 1.0e-6
+    converts to -0.1
    converts to -0.1
+    converts to 0.0
    converts to 0.0
+    converts to 12345678.87654
    converts to 12345678.87654
     assert
    assert
+    converts to 12345678.87654321
    converts to 12345678.87654321
+    converts to 9.000000000000987
    converts to 9.000000000000987
+    converts to 0.0
    converts to 0.0
+    converts to 0.1
    converts to 0.1
+    converts to -1.0
    converts to -1.0
     assert
    assert
+    converts to 2.2250738585072014e-308
    converts to 2.2250738585072014e-308
+    converts to 1.234567890123456789e+18
    converts to 1.234567890123456789e+18
+  #//
     assert
    assert
     assert
    assert
-  #step
-    "basic by" yielding
    "basic by" yielding
-    "basic by" iterator
    "basic by" iterator
-    "basic" iterator
    "basic" iterator
-    "basic" yielding
    "basic" yielding
-  clone
     assert
    assert
-  does bytes
  does bytes
-  does mark?
  does mark?
-  alphanumeric?
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  ascii_lowercase?
+  #floor
     assert
    assert
     assert
    assert
     assert
    assert
+  #hash
  #hash
+JSON::PullParser
+  errors on {"foo",1}
  errors on {"foo",1}
+  parses false
  parses false
+  parses [1.5]
  parses [1.5]
+  #read?
+    reads > Float32::MAX
    reads > Float32::MAX
+    reads Int64: -10
    reads Int64: -10
+    returns nil in place of Int128 when an overflow occurs
    returns nil in place of Int128 when an overflow occurs
+    reads Int128: 0
    reads Int128: 0
+    reads UInt16: 10
    reads UInt16: 10
+    reads Int8: 0
    reads Int8: 0
+    returns nil instead of Float64 when the token is not compatible
    returns nil instead of Float64 when the token is not compatible
+    returns nil instead of Int8 when the token is not compatible
    returns nil instead of Int8 when the token is not compatible
+    reads Int32: 2147483647
    reads Int32: 2147483647
+    reads Int64: 10
    reads Int64: 10
+    reads Int8 when the token is a compatible kind
    reads Int8 when the token is a compatible kind
+    returns nil in place of UInt64 when an overflow occurs
    returns nil in place of UInt64 when an overflow occurs
+    reads UInt8: 255
    reads UInt8: 255
+    reads Int8: -128
    reads Int8: -128
+    reads Int128: -10
    reads Int128: -10
+    reads UInt32 when the token is a compatible kind
    reads UInt32 when the token is a compatible kind
+    returns nil in place of Int64 when an overflow occurs
    returns nil in place of Int64 when an overflow occurs
+    reads UInt8: 0
    reads UInt8: 0
+    reads UInt64: 18446744073709551615
    reads UInt64: 18446744073709551615
+    returns nil instead of Int64 when the token is not compatible
    returns nil instead of Int64 when the token is not compatible
+    reads UInt64: 10
    reads UInt64: 10
+    returns nil instead of UInt128 when the token is not compatible
    returns nil instead of UInt128 when the token is not compatible
+    reads Bool when the token is a compatible kind
    reads Bool when the token is a compatible kind
+    reads UInt128: 340282366920938463463374607431768211455
    reads UInt128: 340282366920938463463374607431768211455
+    reads UInt16: 0
    reads UInt16: 0
+    returns nil instead of UInt32 when the token is not compatible
    returns nil instead of UInt32 when the token is not compatible
+    reads Int128: 10
    reads Int128: 10
+    returns nil in place of Int8 when an overflow occurs
    returns nil in place of Int8 when an overflow occurs
+    returns nil instead of String when the token is not compatible
    returns nil instead of String when the token is not compatible
+    returns nil in place of UInt16 when an overflow occurs
    returns nil in place of UInt16 when an overflow occurs
+    reads UInt8: 10
    reads UInt8: 10
+    reads UInt8 when the token is a compatible kind
    reads UInt8 when the token is a compatible kind
+    reads Int16 when the token is a compatible kind
    reads Int16 when the token is a compatible kind
+    reads < Float64::MIN
    reads < Float64::MIN
+    reads UInt128 when the token is a compatible kind
    reads UInt128 when the token is a compatible kind
+    returns nil in place of Int32 when an overflow occurs
    returns nil in place of Int32 when an overflow occurs
+    reads Float64 when the token is a compatible kind
    reads Float64 when the token is a compatible kind
+    reads Int16: -32768
    reads Int16: -32768
+    reads UInt16: 65535
    reads UInt16: 65535
+    reads Int128: 170141183460469231731687303715884105727
    reads Int128: 170141183460469231731687303715884105727
+    reads UInt16 when the token is a compatible kind
    reads UInt16 when the token is a compatible kind
+    returns nil instead of UInt64 when the token is not compatible
    returns nil instead of UInt64 when the token is not compatible
+    returns nil instead of UInt16 when the token is not compatible
    returns nil instead of UInt16 when the token is not compatible
+    reads Int8: 10
    reads Int8: 10
+    reads Int128: -170141183460469231731687303715884105728
    reads Int128: -170141183460469231731687303715884105728
+    returns nil instead of Float32 when the token is not compatible
    returns nil instead of Float32 when the token is not compatible
+    reads Int32: -2147483648
    reads Int32: -2147483648
+    doesn't accept nan or infinity
    doesn't accept nan or infinity
+    reads < Float32::MIN
    reads < Float32::MIN
+    returns nil in place of UInt8 when an overflow occurs
    returns nil in place of UInt8 when an overflow occurs
+    returns nil instead of Bool when the token is not compatible
    returns nil instead of Bool when the token is not compatible
+    reads UInt64: 0
    reads UInt64: 0
+    reads Int64 when the token is a compatible kind
    reads Int64 when the token is a compatible kind
+    reads UInt128: 0
    reads UInt128: 0
+    reads Int32: -10
    reads Int32: -10
+    returns nil instead of Int16 when the token is not compatible
    returns nil instead of Int16 when the token is not compatible
+    reads Int16: 10
    reads Int16: 10
+    reads Int64: -9223372036854775808
    reads Int64: -9223372036854775808
+    reads Int16: 0
    reads Int16: 0
+    reads > Float64::MAX
    reads > Float64::MAX
+    reads Int8: 127
    reads Int8: 127
+    returns nil instead of Int128 when the token is not compatible
    returns nil instead of Int128 when the token is not compatible
+    reads String when the token is a compatible kind
    reads String when the token is a compatible kind
+    reads Int32 when the token is a compatible kind
    reads Int32 when the token is a compatible kind
+    returns nil instead of UInt8 when the token is not compatible
    returns nil instead of UInt8 when the token is not compatible
+    reads Int32: 0
    reads Int32: 0
+    reads UInt32: 0
    reads UInt32: 0
+    returns nil in place of Int16 when an overflow occurs
    returns nil in place of Int16 when an overflow occurs
+    reads Int16: -10
    reads Int16: -10
+    reads Float32 when the token is a compatible kind
    reads Float32 when the token is a compatible kind
+    reads Int64: 9223372036854775807
    reads Int64: 9223372036854775807
+    reads Int16: 32767
    reads Int16: 32767
+    returns nil instead of Int32 when the token is not compatible
    returns nil instead of Int32 when the token is not compatible
+    returns nil in place of UInt32 when an overflow occurs
    returns nil in place of UInt32 when an overflow occurs
+    reads UInt32: 4294967295
    reads UInt32: 4294967295
+    returns nil in place of UInt128 when an overflow occurs
    returns nil in place of UInt128 when an overflow occurs
+    reads Int8: -10
    reads Int8: -10
+    reads UInt32: 10
    reads UInt32: 10
+    reads Int32: 10
    reads Int32: 10
+    reads UInt128: 10
    reads UInt128: 10
+    reads UInt64 when the token is a compatible kind
    reads UInt64 when the token is a compatible kind
+    reads Int128 when the token is a compatible kind
    reads Int128 when the token is a compatible kind
+    reads Int64: 0
    reads Int64: 0
+  parses [[]]
  parses [[]]
+  reads array or null
  reads array or null
+  errors on {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
  errors on {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+  parses ["hello"]
  parses ["hello"]
+  parses {"foo": "foo1", "bar": "bar1"}
  parses {"foo": "foo1", "bar": "bar1"}
+  parses [false]
  parses [false]
+  parses "hello"
  parses "hello"
+  parses true
  parses true
+  parses [1, 2]
  parses [1, 2]
+  errors on [[]
  errors on [[]
+  parses {}
  parses {}
+  reads object or null
  reads object or null
+  errors on [true 2]
  errors on [true 2]
+  errors on [null 2]
  errors on [null 2]
+  parses {"foo": [1, 2]}
  parses {"foo": [1, 2]}
+  errors on []]
  errors on []]
+  parses {"foo": 1}
  parses {"foo": 1}
+  #raise
  #raise
+  errors on {}}
  errors on {}}
+  errors on ["foo":1]
  errors on ["foo":1]
+  errors on {"name": "John", "age": "foo", "bar"}
  errors on {"name": "John", "age": "foo", "bar"}
+  parses []
  parses []
+  reads float or null
  reads float or null
+  parses [1]
  parses [1]
+  errors on {"foo"::1}
  errors on {"foo"::1}
+  parses when the input IO is already empty
  parses when the input IO is already empty
+  parses [null]
  parses [null]
+  errors on [
  errors on [
+  errors on [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
  errors on [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
+  errors on [1 2]
  errors on [1 2]
+  reads bool or null
  reads bool or null
+  parses 1
  parses 1
+  parses {"foo": 1, "bar": 2}
  parses {"foo": 1, "bar": 2}
+  reads string or null
  reads string or null
+  raw
+    parses raw "{\"foo\":[1,2,{\"bar\":[1,\"hello\",true,false,1.5]}]}"
    parses raw "{\"foo\":[1,2,{\"bar\":[1,\"hello\",true,false,1.5]}]}"
+    parses raw "null"
    parses raw "null"
+    parses raw "[1,\"hello\",true,false,null,[1,2,3]]"
    parses raw "[1,\"hello\",true,false,null,[1,2,3]]"
+    parses raw "1234.5678"
    parses raw "1234.5678"
+    parses raw "{\"foo\":\"bar\"}"
    parses raw "{\"foo\":\"bar\"}"
+    parses raw "true"
    parses raw "true"
+    parses raw "false"
    parses raw "false"
+    parses raw "1234"
    parses raw "1234"
+    parses raw "\"hello\""
    parses raw "\"hello\""
+  parses null
  parses null
+  parses 1.5
  parses 1.5
+  on key
+    doesn't find key
    doesn't find key
+    finds key
    finds key
+    yields all keys when skipping [1]
    yields all keys when skipping [1]
+    yields all keys when skipping {"x": [1]}
    yields all keys when skipping {"x": [1]}
+    yields all keys when skipping 1
    yields all keys when skipping 1
+    yields parser with bang
    yields parser with bang
+    doesn't find key with bang
    doesn't find key with bang
+    finds key with bang
    finds key with bang
+    yields parser
    yields parser
+    reads float when it is an int
    reads float when it is an int
+  errors on [,1]
  errors on [,1]
+  errors on {"foo": []:1}
  errors on {"foo": []:1}
+  errors on {,"foo": 1}
  errors on {,"foo": 1}
+  errors on [}]
  errors on [}]
+  prevents stack overflow for arrays
  prevents stack overflow for arrays
+  errors on [false 2]
  errors on [false 2]
+  reads int or null
  reads int or null
+  errors on {"name": "John", "age", 1}
  errors on {"name": "John", "age", 1}
+  parses [true]
  parses [true]
+  prevents stack overflow for hashes
  prevents stack overflow for hashes
+  parses {"foo": "bar"}
  parses {"foo": "bar"}
+  errors on ["hello" 2]
  errors on ["hello" 2]
+  errors on {"foo": {}
  errors on {"foo": {}
+  errors on [1.5 2]
  errors on [1.5 2]
+  skip
+    skips object
    skips object
+    skips array
    skips array
+    skips null
    skips null
+    skips bool
    skips bool
+    skips string
    skips string
+    skips int
    skips int
+    skips float
    skips float
+::sprintf
+  strings
+    works
    works
+    calls to_s on non-strings
    calls to_s on non-strings
+  works
  works
+  numbered parameters
+    can be used before flags
    can be used before flags
+    raises if used as width or precision specifier of a sequential parameter
    raises if used as width or precision specifier of a sequential parameter
+    raises if sequential parameters also given
    raises if sequential parameters also given
+    raises if index is zero
    raises if index is zero
+    raises if multiple indices specified
    raises if multiple indices specified
+    gets width and precision specifier at specified index
    gets width and precision specifier at specified index
+    gets argument at specified index
    gets argument at specified index
+    raises if index is out of bounds
    raises if index is out of bounds
+    raises if named parameters also given
    raises if named parameters also given
+  doesn't format %%
  doesn't format %%
+  doesn't stop at null character when doing '%'
  doesn't stop at null character when doing '%'
+  doesn't accept modifiers for %%
  doesn't accept modifiers for %%
+  accepts multiple positional arguments
  accepts multiple positional arguments
+  formatted substitution
+    raises if numbered parameters also given
    raises if numbered parameters also given
+    applies formatting to %<...> placeholder
    applies formatting to %<...> placeholder
+    doesn't raise if plain substitution also given
    doesn't raise if plain substitution also given
+    raises if sequential parameters also given
    raises if sequential parameters also given
+  sequential parameters
+    raises if numbered parameters also given
    raises if numbered parameters also given
+    raises if named parameters also given
    raises if named parameters also given
+  floats
+    not-a-numbers
    not-a-numbers
+    general format
+      zero flag
+        can be used with precision
        can be used with precision
+        is ignored if string is left-justified
        is ignored if string is left-justified
+        left-pads the result with zeros
        left-pads the result with zeros
+      width specifier
+        sets the minimum length of the string
        sets the minimum length of the string
+        left-justifies on negative width
        left-justifies on negative width
+      space flag
+        writes a space for positive values
        writes a space for positive values
+        writes space before left space-padding
        writes space before left space-padding
+        is ignored if plus flag is also specified
        is ignored if plus flag is also specified
+      precision specifier
+        is ignored if precision argument is negative
        is ignored if precision argument is negative
+        can be used with width
        can be used with width
+        sets the precision of the value
        sets the precision of the value
+      sharp flag
+        prints decimal point and trailing zeros
        prints decimal point and trailing zeros
+      minus flag
+        left-justifies the string
        left-justifies the string
+      plus flag
+        writes plus sign after left space-padding
        writes plus sign after left space-padding
+        writes plus sign before left zero-padding
        writes plus sign before left zero-padding
+        writes a plus sign for positive values
        writes a plus sign for positive values
+      works
      works
+    scientific format
+      sharp flag
+        prints a decimal point even if no digits follow
        prints a decimal point even if no digits follow
+      plus flag
+        writes a plus sign for positive values
        writes a plus sign for positive values
+        writes plus sign after left space-padding
        writes plus sign after left space-padding
+        writes plus sign before left zero-padding
        writes plus sign before left zero-padding
+      zero flag
+        can be used with precision
        can be used with precision
+        is ignored if string is left-justified
        is ignored if string is left-justified
+        left-pads the result with zeros
        left-pads the result with zeros
+      works
      works
+      minus flag
+        left-justifies the string
        left-justifies the string
+      width specifier
+        left-justifies on negative width
        left-justifies on negative width
+        sets the minimum length of the string
        sets the minimum length of the string
+      space flag
+        is ignored if plus flag is also specified
        is ignored if plus flag is also specified
+        writes space before left space-padding
        writes space before left space-padding
+        writes a space for positive values
        writes a space for positive values
+      precision specifier
+        is ignored if precision argument is negative
        is ignored if precision argument is negative
+        can be used with width
        can be used with width
+        sets the minimum length of the fractional part
        sets the minimum length of the fractional part
+    infinities
    infinities
+    not-a-numbers
    not-a-numbers
+    infinities
    infinities
+    hex format
+      width specifier
+        left-justifies on negative width
        left-justifies on negative width
+        sets the minimum length of the string
        sets the minimum length of the string
+      zero flag
+        can be used with precision
        can be used with precision
+        is ignored if string is left-justified
        is ignored if string is left-justified
+        left-pads the result with zeros
        left-pads the result with zeros
+      minus flag
+        left-justifies the string
        left-justifies the string
+      space flag
+        is ignored if plus flag is also specified
        is ignored if plus flag is also specified
+        writes a space for positive values
        writes a space for positive values
+        writes space before left space-padding
        writes space before left space-padding
+      sharp flag
+        prints a decimal point even if no digits follow
        prints a decimal point even if no digits follow
+      works
      works
+      plus flag
+        writes plus sign after left space-padding
        writes plus sign after left space-padding
+        writes plus sign before left zero-padding
        writes plus sign before left zero-padding
+        writes a plus sign for positive values
        writes a plus sign for positive values
+      precision specifier
+        sets the minimum length of the fractional part
        sets the minimum length of the fractional part
+        is ignored if precision argument is negative
        is ignored if precision argument is negative
+        can be used with width
        can be used with width
+    fixed format
+      works
      works
+  plain substitution
+    raises if sequential parameters also given
    raises if sequential parameters also given
+    throws an error when the key is not found
    throws an error when the key is not found
+    raises if expecting hash or named tuple but not given
    raises if expecting hash or named tuple but not given
+    raises on unbalanced curly
    raises on unbalanced curly
+    doesn't raise if 1-element list of hash or named tuple given
    doesn't raise if 1-element list of hash or named tuple given
+    substitutes one placeholder
    substitutes one placeholder
+    doesn't raise on balanced curly with null byte
    doesn't raise on balanced curly with null byte
+    doesn't raise if formatted substitution also given
    doesn't raise if formatted substitution also given
+    substitutes multiple placeholder
    substitutes multiple placeholder
+    raises if numbered parameters also given
    raises if numbered parameters also given
+  integers
+    width specifier
+      sets the minimum length of the string
      sets the minimum length of the string
+      left-justifies on negative width
      left-justifies on negative width
+    sharp flag
+      omits the base prefix for 0
      omits the base prefix for 0
+      adds a base prefix
      adds a base prefix
+    base specifier
+      supports base 16
      supports base 16
+      supports base 2
      supports base 2
+      supports base 10
      supports base 10
+      supports base 8
      supports base 8
+    works with BigInt
    works with BigInt
+    plus flag
+      writes plus sign before left zero-padding
      writes plus sign before left zero-padding
+      writes a plus sign for positive integers
      writes a plus sign for positive integers
+      writes plus sign after left space-padding
      writes plus sign after left space-padding
+    works with Int*::MIN
    works with Int*::MIN
+    precision specifier
+      sets the minimum length of the number part
      sets the minimum length of the number part
+      is ignored if precision argument is negative
      is ignored if precision argument is negative
+      can be used with width
      can be used with width
+    space flag
+      writes space before left padding
      writes space before left padding
+      writes a space for positive integers
      writes a space for positive integers
+      is ignored if plus flag is also specified
      is ignored if plus flag is also specified
+    zero flag
+      is ignored if precision is specified
      is ignored if precision is specified
+      left-pads the result with zeros
      left-pads the result with zeros
+      is ignored if string is left-justified
      is ignored if string is left-justified
+    minus flag
+      left-justifies the string
      left-justifies the string
+      reserves space for the number prefix
      reserves space for the number prefix
+OpenSSL::Digest
+  returns the digest size
  returns the digest size
+  correctly reads from IO
  correctly reads from IO
+  .dup
+    leads to not sharing state
    leads to not sharing state
+    leads to deterministic updates
    leads to deterministic updates
+    preserves value
    preserves value
+    preserves type
    preserves type
+  returns the block size
  returns the block size
+  digest with file content
  digest with file content
+  should be able to calculate SHA1
  should be able to calculate SHA1
+  should be able to calculate SHA256
  should be able to calculate SHA256
+  raises a UnsupportedError if digest is unsupported
  raises a UnsupportedError if digest is unsupported
+  can't call #final more than once
  can't call #final more than once
+  should be able to calculate SHA512
  should be able to calculate SHA512
+LLVM::ABI::ARM
+  size
+    for double
    for double
+    for struct
    for struct
+    for array
    for array
+    for float
    for float
+    for packed struct
    for packed struct
+    for integer
    for integer
+    for pointer
    for pointer
+  align
+    for packed struct
    for packed struct
+    for array
    for array
+    for struct
    for struct
+    for pointer
    for pointer
+    for double
    for double
+    for integer
    for integer
+    for float
    for float
+  abi_info
+    does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
+    does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
+    does with primitives
    does with primitives
+    does with structs less than 64 bits
    does with structs less than 64 bits
+YAML::PullParser
+  raises exception at correct location
  raises exception at correct location
+  reads a sequence with an anchor
  reads a sequence with an anchor
+  reads a mapping
  reads a mapping
+  reads empty stream
  reads empty stream
+  reads an empty document
  reads an empty document
+  reads a scalar with an anchor
  reads a scalar with an anchor
+  reads a mapping with an anchor
  reads a mapping with an anchor
+  reads a sequence
  reads a sequence
+  skip
+    skips event in other cases
    skips event in other cases
+    document
    document
+    sequence
    sequence
+    mapping
    mapping
+    scalar
    scalar
+    alias
    alias
+    stream
    stream
+  reads a scalar
  reads a scalar
+  reads a scalar having a null character
  reads a scalar having a null character
+  parses alias
  parses alias
+CSV
+  lex
+    raises if command, newline or end doesn't follow quote
    raises if command, newline or end doesn't follow quote
+    lexes with a given quote char
    lexes with a given quote char
+    lexes with a given separator
    lexes with a given separator
+    lexes two columns
    lexes two columns
+    lexes two empty columns
    lexes two empty columns
+    doesn't consume char after \n (#11172)
    doesn't consume char after \n (#11172)
+    lexes two columns with two rows with 
+
    lexes two columns with two rows with 
+
+    lexes two with inner quotes
    lexes two with inner quotes
+    doesn't consume char after \r (#11172)
    doesn't consume char after \r (#11172)
+    lexes two with quotes
    lexes two with quotes
+    raises on unclosed quote
    raises on unclosed quote
+    lexes newline followed by eof
    lexes newline followed by eof
+    lexes last empty column
    lexes last empty column
+    lexes with comma inside quote
    lexes with comma inside quote
+    lexes two columns with two rows
    lexes two columns with two rows
+    lexes with whitespace
    lexes with whitespace
+    raises if single quote in the middle
    raises if single quote in the middle
+    lexes with newline inside quote
    lexes with newline inside quote
+    lexes with empty columns
    lexes with empty columns
+Log::AsyncDispatcher
+  dispatches entry
  dispatches entry
+  wait for entries to flush before closing
  wait for entries to flush before closing
+  can be closed twice
  can be closed twice
+Symbol
+  clone
     assert
    assert
-  does to_i with base 36
  does to_i with base 36
-XML::XPathContext
-  finds with variable binding (node)
  finds with variable binding (node)
-  returns nil with invalid xpath
  returns nil with invalid xpath
-  finds with variable binding (float)
  finds with variable binding (float)
-  NodeSet#to_s
  NodeSet#to_s
-  finds with variable binding (bool)
  finds with variable binding (bool)
-  finds with root namespaces (using prefix)
  finds with root namespaces (using prefix)
-  finds number
  finds number
-  finds nodes
  finds nodes
-  finds with variable binding
  finds with variable binding
-  finds with implicit (root) namespaces
  finds with implicit (root) namespaces
-  finds with root namespaces
  finds with root namespaces
-  finds with variable binding (string)
  finds with variable binding (string)
-  finds boolean
  finds boolean
-  raises on invalid xpath
  raises on invalid xpath
-  finds with explicit namespace
  finds with explicit namespace
-  finds string
  finds string
-  finds with variable binding (nodes)
  finds with variable binding (nodes)
-Float::Printer::RyuPrintf
-  .d2fixed
-    MinMax
    MinMax
-    VaryingPrecision
    VaryingPrecision
-    Carrying
    Carrying
-    Basic
    Basic
-    RoundingResultZero
    RoundingResultZero
-    AllBinaryExponents
    AllBinaryExponents
-    RoundToEvenInteger
    RoundToEvenInteger
-    NonRoundToEvenScenarios
    NonRoundToEvenScenarios
-    RoundToEven
    RoundToEven
-    Regression
    Regression
-    AllPowersOfTen
    AllPowersOfTen
-    Zero
    Zero
-  .d2gen
-    varying precision
    varying precision
-    trim trailing zeros
    trim trailing zeros
-    transitions between fixed notation and scientific notation
    transitions between fixed notation and scientific notation
-    trim trailing zeros and decimal point
    trim trailing zeros and decimal point
-    UCRT had trouble with rounding this value
    UCRT had trouble with rounding this value
-    large precision with fixed notation and scientific notation
    large precision with fixed notation and scientific notation
-    trim trailing zeros, scientific notation
    trim trailing zeros, scientific notation
-    maximum-length output
    maximum-length output
-    more cases that the UCRT had trouble with (e.g. DevCom-1093399)
    more cases that the UCRT had trouble with (e.g. DevCom-1093399)
-    corner cases
    corner cases
-    transitions between values of the scientific exponent X
    transitions between values of the scientific exponent X
-    Basic
    Basic
-    tricky corner cases
    tricky corner cases
-    trim trailing zeros and decimal point, scientific notation
    trim trailing zeros and decimal point, scientific notation
-  .d2exp
-    PrintDecimalPoint
    PrintDecimalPoint
-    MinMax
    MinMax
-    VaryingPrecision
    VaryingPrecision
-    Basic
    Basic
-    AllPowersOfTen
    AllPowersOfTen
-    AllBinaryExponents
    AllBinaryExponents
-    Zero
    Zero
-    Carrying
    Carrying
-    Exponents
    Exponents
-    RoundToEvenInteger
    RoundToEvenInteger
-    NonRoundToEvenScenarios
    NonRoundToEvenScenarios
-    RoundToEven
    RoundToEven
-JSON serialization
-  provide symmetric encoding and decoding for Union types
  provide symmetric encoding and decoding for Union types
-  to_pretty_json
-    does for Array
    does for Array
-    does for nested Hash with indent
    does for nested Hash with indent
-    does for Int32
    does for Int32
-    does for Hash
    does for Hash
-    does for Float64
    does for Float64
-    does for empty Hash
    does for empty Hash
-    does for String
    does for String
-    does for empty Array
    does for empty Array
-    Time
-      #to_json
      #to_json
-      omit sub-second precision
      omit sub-second precision
-    does for Nil
    does for Nil
-    does for nested Hash
    does for nested Hash
-    does for nested Array
    does for nested Array
-    does for Array with indent
    does for Array with indent
-    does for Bool
    does for Bool
-  from_json
-    deserializes with root
    deserializes with root
-    raises if UInt32.from_json overflows
    raises if UInt32.from_json overflows
-    raises if Int128.from_json overflows
    raises if Int128.from_json overflows
-    deserializes union with Int64 (fast path)
    deserializes union with Int64 (fast path)
-    does for named tuple with nilable fields (#8089)
    does for named tuple with nilable fields (#8089)
-    does Int64.from_json
    does Int64.from_json
-    deserializes union of Int32 and Float64 (#7333)
    deserializes union of Int32 and Float64 (#7333)
-    does for named tuple with spaces in key (#10918)
    does for named tuple with spaces in key (#10918)
-    deserializes union with Float32 (fast path)
    deserializes union with Float32 (fast path)
-    does for BigFloat from string
    does for BigFloat from string
-    does Array(Nil)#from_json
    does Array(Nil)#from_json
-    deserializes union
    deserializes union
-    does Hash(Int32, String)#from_json
    does Hash(Int32, String)#from_json
-    does UInt32.from_json
    does UInt32.from_json
-    does String.from_json
    does String.from_json
-    does Array(Int64)#from_json
    does Array(Int64)#from_json
-    does for BigDecimal from string
    does for BigDecimal from string
-    does for UUID (hex)
    does for UUID (hex)
-    deserializes union with UInt64 (fast path)
    deserializes union with UInt64 (fast path)
-    deserializes union with Int8 (fast path)
    deserializes union with Int8 (fast path)
-    raises an error Iterator(String)#from_json with invalid types
    raises an error Iterator(String)#from_json with invalid types
-    does Array(Bool)#from_json
    does Array(Bool)#from_json
-    raises if UInt128.from_json overflows
    raises if UInt128.from_json overflows
-    raises if Int32.from_json overflows
    raises if Int32.from_json overflows
-    raises an error Hash(String, Int32)#from_json with null value
    raises an error Hash(String, Int32)#from_json with null value
-    does UInt128.from_json
    does UInt128.from_json
-    does Hash(Float32, String)#from_json
    does Hash(Float32, String)#from_json
-    does for BigInt
    does for BigInt
-    raises if UInt64.from_json overflows
    raises if UInt64.from_json overflows
-    does for UUID (hyphenated)
    does for UUID (hyphenated)
-    raises if UInt8.from_json overflows
    raises if UInt8.from_json overflows
-    does for empty named tuple
    does for empty named tuple
-    deserializes union with UInt16 (fast path)
    deserializes union with UInt16 (fast path)
-    Enum
-      normal enum
      normal enum
-      flag enum
      flag enum
-    raises an error Iterator(String)#from_json with invalid JSON
    raises an error Iterator(String)#from_json with invalid JSON
-    does for BigFloat from int
    does for BigFloat from int
-    deserializes union with Int32 (fast path)
    deserializes union with Int32 (fast path)
-    Enum::ValueConverter.from_json
-      flag enum
      flag enum
-      normal enum
      normal enum
-    does for tuple with file-private type
    does for tuple with file-private type
-    deserializes unions of the same kind and remains stable
    deserializes unions of the same kind and remains stable
-    does Int128.from_json
    does Int128.from_json
-    does for named tuple with spaces in key and quote char (#10918)
    does for named tuple with spaces in key and quote char (#10918)
-    does Hash(BigInt, String)#from_json
    does Hash(BigInt, String)#from_json
-    errors on underscores inside ints
    errors on underscores inside ints
-    does UInt16.from_json
    does UInt16.from_json
-    raises if UInt16.from_json overflows
    raises if UInt16.from_json overflows
-    does Array(Int32)#from_json
    does Array(Int32)#from_json
-    does Iterator(String)#from_json
    does Iterator(String)#from_json
-    deserializes union with UInt8 (fast path)
    deserializes union with UInt8 (fast path)
-    raises for BigInt from unsupported types
    raises for BigInt from unsupported types
-    parse exceptions
-      has correct location when raises in Union#from_json
      has correct location when raises in Union#from_json
-      has correct location when raises in NamedTuple#from_json
      has correct location when raises in NamedTuple#from_json
-      captures overflows for integer types
      captures overflows for integer types
-    does for BigFloat
    does for BigFloat
-    deserializes union with Int128 (fast path)
    deserializes union with Int128 (fast path)
-    deserializes union with UInt32 (fast path)
    deserializes union with UInt32 (fast path)
-    deserializes union with bool (fast path)
    deserializes union with bool (fast path)
-    does for named tuple
    does for named tuple
-    does for UUID (urn)
    does for UUID (urn)
-    deserializes union with UInt128 (fast path)
    deserializes union with UInt128 (fast path)
-    deserializes union with Int16 (fast path)
    deserializes union with Int16 (fast path)
-    raises for BigDecimal from unsupported types
    raises for BigDecimal from unsupported types
-    does Array(Float64)#from_json
    does Array(Float64)#from_json
-    does for tuple
    does for tuple
-    does UInt64.from_json
    does UInt64.from_json
-    does Int32.from_json
    does Int32.from_json
-    does for Array(Int32) from IO
    does for Array(Int32) from IO
-    raises if Int16.from_json overflows
    raises if Int16.from_json overflows
-    does Int16.from_json
    does Int16.from_json
-    does Hash(String, Int32)#from_json
    does Hash(String, Int32)#from_json
-    does Array(Float32)#from_json
    does Array(Float32)#from_json
-    raises if Int64.from_json overflows
    raises if Int64.from_json overflows
-    deserializes Time
    deserializes Time
-    does Hash(BigDecimal, String)#from_json
    does Hash(BigDecimal, String)#from_json
-    does for named tuple with nilable fields and null (#8089)
    does for named tuple with nilable fields and null (#8089)
-    does for empty tuple
    does for empty tuple
-    deserializes union with Float64 (fast path)
    deserializes union with Float64 (fast path)
-    does UInt8.from_json
    does UInt8.from_json
-    does Hash(String, String)#from_json
    does Hash(String, String)#from_json
-    does for BigDecimal from int
    does for BigDecimal from int
-    errors on non-base-10 ints
    errors on non-base-10 ints
-    does for Array(Int32) with block
    does for Array(Int32) with block
-    raises if Int8.from_json overflows
    raises if Int8.from_json overflows
-    does Int8.from_json
    does Int8.from_json
-    does Deque(String)#from_json
    does Deque(String)#from_json
-    does Hash(Float64, String)#from_json
    does Hash(Float64, String)#from_json
-    does Hash(BigFloat, String)#from_json
    does Hash(BigFloat, String)#from_json
-    does for BigDecimal from float
    does for BigDecimal from float
-    does for named tuple with file-private type
    does for named tuple with file-private type
-    does Path.from_json
    does Path.from_json
-    raises for BigFloat from unsupported types
    raises for BigFloat from unsupported types
-  to_json
-    does for Hash
    does for Hash
-    does for String with slash
    does for String with slash
-    does for Hash with Float64 keys
    does for Hash with Float64 keys
-    Enum::ValueConverter
-      normal enum
      normal enum
-      flag enum
      flag enum
-    does for String with control codes in a few places
    does for String with control codes in a few places
-    does for Hash with symbol keys
    does for Hash with symbol keys
-    does for Nil
    does for Nil
-    Enum
-      flag enum
      flag enum
-      normal enum
      normal enum
-    does for Int128
    does for Int128
-    does for String with control codes
    does for String with control codes
-    does for Hash with BigInt keys
    does for Hash with BigInt keys
-    does for Hash with newlines
    does for Hash with newlines
-    does for BigInt
    does for BigInt
-    does for Deque
    does for Deque
-    does for UUID
    does for UUID
-    does for Float64
    does for Float64
-    does for String with quote
    does for String with quote
-    does for Bool
    does for Bool
-    does for BigDecimal
    does for BigDecimal
-    does for StaticArray
    does for StaticArray
-    does for BigFloat
    does for BigFloat
-    raises if Float is infinity
    raises if Float is infinity
-    raises if Float is NaN
    raises if Float is NaN
-    does for Tuple
    does for Tuple
-    does for Set
    does for Set
-    does for Path
    does for Path
-    does for Hash with Float32 keys
    does for Hash with Float32 keys
-    does for NamedTuple
    does for NamedTuple
-    does for Int32
    does for Int32
-    does for String
    does for String
-    does for Hash with int keys
    does for Hash with int keys
-    does for Array
    does for Array
-    does for Iterator
    does for Iterator
-IO::Digest
-  calculates digest from reading
  calculates digest from reading
-  does not calculate digest on read
  does not calculate digest on read
-  calculates digest from writing a string
  calculates digest from writing a string
-  can be created with ongoing digest
  can be created with ongoing digest
-  calculates digest from writing
  calculates digest from writing
-  calculates digest from multiple reads
  calculates digest from multiple reads
-  calculates digest from multiple writes
  calculates digest from multiple writes
-  does not calculate digest on write
  does not calculate digest on write
-JSON::Builder
-  writes object with array and scalar and indent
  writes object with array and scalar and indent
-  writes field with arbitrary value in object
  writes field with arbitrary value in object
-  writes array with indent level
  writes array with indent level
-  errors on max nesting (array)
  errors on max nesting (array)
-  errors on infinity
  errors on infinity
-  errors on max nesting (object)
  errors on max nesting (object)
-  writes array with indent string
  writes array with indent string
-  writes empty array with indent level
  writes empty array with indent level
-  errors if writing two scalars
  errors if writing two scalars
-  raises if array is left open
  raises if array is left open
-  writes object with indent level
  writes object with indent level
-  #next_is_object_key?
  #next_is_object_key?
-  errors if writing before document start
  errors if writing before document start
-  writes bool
  writes bool
-  writes nested array
  writes nested array
-  writes string
  writes string
-  writes object with scalar and indent
  writes object with scalar and indent
-  writes empty object with indent level
  writes empty object with indent level
-  writes null
  writes null
-  writes nested array
  writes nested array
-  writes object
  writes object
-  writes float
  writes float
-  writes nested object
  writes nested object
-  writes field with scalar in object
  writes field with scalar in object
-  raises if object is left open
  raises if object is left open
-  writes raw
  writes raw
-  writes integer
  writes integer
-  writes string with controls and slashes 
  writes string with controls and slashes 
-  errors on nan
  errors on nan
-  writes array
  writes array
-  raises if nothing written
  raises if nothing written
-OpenSSL::SSL::Context
-  calls #finalize on insecure server context
  calls #finalize on insecure server context
-  insecure for server
  insecure for server
-  alpn_protocol=
  alpn_protocol=
-  sets private key
  sets private key
-  removes options
  removes options
-  fails to set private key
  fails to set private key
-  sets certificate chain
  sets certificate chain
-  returns options
  returns options
-  sets the verify mode
  sets the verify mode
-  adds modes
  adds modes
-  adds temporary ecdh curve (P-256)
  adds temporary ecdh curve (P-256)
-  ciphers
-    sets old ciphers
    sets old ciphers
-    uses intermediate default ciphers
    uses intermediate default ciphers
-    sets ciphers
    sets ciphers
-    sets cipher_suites
    sets cipher_suites
-    sets intermediate ciphers
    sets intermediate ciphers
-    sets modern ciphers
    sets modern ciphers
-  changes security level
  changes security level
-  fails to set certificate chain
  fails to set certificate chain
-  LibSSL::VerifyMode
-    .parse none (#7455)
    .parse none (#7455)
-  returns modes
  returns modes
-  calls #finalize on insecure client context
  calls #finalize on insecure client context
-  insecure for client
  insecure for client
-  new for client
  new for client
-  removes modes
  removes modes
-  .from_hash
-    builds
    builds
-    errors
    errors
-  new for server
  new for server
-  adds options
  adds options
-Time::Format
-  ISO_8601_DATE
-    formats default format
    formats default format
-    parses week date
    parses week date
-    parses ordinal date
    parses ordinal date
-    parses calendar date
    parses calendar date
-  RFC_2822
-    parses regular format
    parses regular format
-  RFC_3339
-    parses regular format
    parses regular format
-  ISO_8601_DATE_TIME
-    parses hour
    parses hour
-    parses hour:minutes
    parses hour:minutes
-    parses decimal fractions
    parses decimal fractions
-    parses calendar date
    parses calendar date
-    parses ordinal date
    parses ordinal date
-    week date
    week date
-    formats default format
    formats default format
-INI
-  build to an INI-formatted output
-    builds with no sections
    builds with no sections
-    builds with no spaces around `=`
    builds with no spaces around `=`
-    builds from a Hash
    builds from a Hash
-    builds from a NamedTuple
    builds from a NamedTuple
-    builds an empty section before non-empty sections
    builds an empty section before non-empty sections
-  parse
-    from IO
-      parses a file
      parses a file
-    from String
-      ignores whitespaces
      ignores whitespaces
-      parses key = value
      parses key = value
-      parses a reopened section
      parses a reopened section
-      parses empty values
      parses empty values
-      parses empty section
      parses empty section
-      ignores comments
      ignores comments
-      fails on malformed section
      fails on malformed section
-      fails on data after section
      fails on data after section
-      fails on malformed declaration
      fails on malformed declaration
-      parses sections
      parses sections
-BitArray
-  #count
-    without block
-      returns the number of bits cleared
      returns the number of bits cleared
-      returns the number of bits set
      returns the number of bits set
-  provides dup
  provides dup
-  is initially empty
  is initially empty
-  #all?
-    without block
-      returns true if all bits are set
      returns true if all bits are set
-  "#each_index" yielding
  "#each_index" yielding
-  #any?
-    without block
-      returns true if any bits are set
      returns true if any bits are set
-  sets last bit to true with negative index
  sets last bit to true with negative index
-  does to_s and inspect
  does to_s and inspect
-  "#reverse_each" yielding
  "#reverse_each" yielding
-  #includes?
-    returns whether the given bit is included
    returns whether the given bit is included
-  #none?
-    without block
-      returns true if no bits are set
      returns true if no bits are set
-  #fill
-    without block, with start and count
-      sets or clears a subrange of bits
      sets or clears a subrange of bits
-      raises if start index is out of range
      raises if start index is out of range
-    without block, with range
-      raises if start index is out of range
      raises if start index is out of range
-      sets or clears a subrange of bits
      sets or clears a subrange of bits
-    without block
-      clears all bits
      clears all bits
-      sets all bits
      sets all bits
-  "#reverse_each" iterator
  "#reverse_each" iterator
-  sets first bit to false
  sets first bit to false
-  sets second bit to false
  sets second bit to false
-  "#each" iterator
  "#each" iterator
-  raises when out of bounds
  raises when out of bounds
+  inspects
  inspects
+  can be compared with another symbol
  can be compared with another symbol
+  displays symbols that don't need quotes without quotes
  displays symbols that don't need quotes without quotes
+  displays the empty symbol with quotes
  displays the empty symbol with quotes
+Log::DirectDispatcher
+  dispatches entry
  dispatches entry
+OAuth::Params
+  builds
  builds
+IO::FileDescriptor
+  #finalize
+    does not flush
    does not flush
+    closes
    closes
+  reopens
  reopens
+  opens STDERR in binary mode
  opens STDERR in binary mode
+  #tty?
+    returns false for standard streams redirected to null device
    returns false for standard streams redirected to null device
+    returns false for null device
    returns false for null device
+  does not close if close_on_finalize is false
  does not close if close_on_finalize is false
+  #initialize
+    handles closed file descriptor gracefully
    handles closed file descriptor gracefully
+  opens STDIN in binary mode
  opens STDIN in binary mode
+  close_on_exec
+    can be disabled and reenabled
    can be disabled and reenabled
+    is enabled by default (open)
    is enabled by default (open)
+    sets close on exec on the reopened standard descriptors
    sets close on exec on the reopened standard descriptors
+    is copied on reopen
    is copied on reopen
+    is enabled by default (pipe)
    is enabled by default (pipe)
+/bin/sh: line 1: echo: write error: Broken pipe
+  reopen STDIN with the right mode
  reopen STDIN with the right mode
+  opens STDOUT in binary mode
  opens STDOUT in binary mode
+UNIXServer
+  accept?
+    sets close on exec flag
    sets close on exec flag
+    returns nil when server is closed
    returns nil when server is closed
+    returns the client UNIXSocket
    returns the client UNIXSocket
   .new
-    raises if size is negative
    raises if size is negative
-    with block
-      initializes elements with block
      initializes elements with block
-    without block
-      initializes with false by default
      initializes with false by default
-      initializes with unused bits cleared
      initializes with unused bits cleared
-      initializes with non-Int32 size
      initializes with non-Int32 size
-      initializes with initial value
      initializes with initial value
-  #one?
-    returns true if exactly one bit is set
    returns true if exactly one bit is set
-  #reverse!
-    reverses large BitArray
    reverses large BitArray
-    reverses empty BitArray
    reverses empty BitArray
-    reverses short BitArray
    reverses short BitArray
-    reverses medium BitArray
    reverses medium BitArray
-  reads bits from slice
  reads bits from slice
-  #rindex
-    without block
-      accepts a start offset
      accepts a start offset
-      returns index of last bit cleared
      returns index of last bit cleared
-      returns index of last bit set
      returns index of last bit set
-  #tally
-    without block
-      tallies the number of set and cleared bits
      tallies the number of set and cleared bits
-      tallies into the given hash
      tallies into the given hash
-      doesn't add key into the tally hash if element doesn't exist
      doesn't add key into the tally hash if element doesn't exist
-  read bits written from slice
  read bits written from slice
-  #toggle
-    toggles with index < 0 and count
    toggles with index < 0 and count
-    toggles a bit
    toggles a bit
-    toggles zero bits correctly
    toggles zero bits correctly
-    toggles with index and count
    toggles with index and count
-    toggles with index == size and count
    toggles with index == size and count
+    raises when path is too long
    raises when path is too long
+    raises when socket file already exists
    raises when socket file already exists
+    won't delete existing file on bind failure
    won't delete existing file on bind failure
+    creates the socket file
    creates the socket file
+    deletes socket file on close
    deletes socket file on close
+  accept
+    returns the client UNIXSocket
    returns the client UNIXSocket
+    raises when server is closed
    raises when server is closed
+  datagrams
+    can send and receive datagrams
    can send and receive datagrams
+Log::SyncDispatcher
+  dispatches entry
  dispatches entry
+Compress::Deflate::Writer
+  can be closed with sync (1)
  can be closed with sync (1)
+  .open
+    yields itself to block
    yields itself to block
+  should be able to write
  should be able to write
+  can be closed without sync
  can be closed without sync
+  can be closed with sync (2)
  can be closed with sync (2)
+YAML::Schema::Core
+  parses "0o123"
  parses "0o123"
+  raises on parse "!!binary [1]"
  raises on parse "!!binary [1]"
+  parses "!!int 123"
  parses "!!int 123"
+  parses "2002-1-2T10:11:12+03x"
  parses "2002-1-2T10:11:12+03x"
+  parses "-.INF"
  parses "-.INF"
+  parses "+.Inf"
  parses "+.Inf"
+  parses "2002-1-2   10:11:12"
  parses "2002-1-2   10:11:12"
+  parses "0x123abc"
  parses "0x123abc"
+  parses "Yes"
  parses "Yes"
+  parses "OFF"
  parses "OFF"
+  parses "off"
  parses "off"
+  .parse_null_or
  .parse_null_or
+  parses "TRUE"
  parses "TRUE"
+  parses "!!int 0755"
  parses "!!int 0755"
+  parses "!!int 0"
  parses "!!int 0"
+  parses ".inf"
  parses ".inf"
+  parses "2002-34-45"
  parses "2002-34-45"
+  raises on parse "!!float 'hello'"
  raises on parse "!!float 'hello'"
+  parses "0."
  parses "0."
+  parses "+.inf"
  parses "+.inf"
+  raises on parse "!!null 1"
  raises on parse "!!null 1"
+  parses "!!seq [ 1, 2, 3 ]"
  parses "!!seq [ 1, 2, 3 ]"
+  parses !!float .nan
  parses !!float .nan
+  parses "-.inf"
  parses "-.inf"
+  parses "!!float '1.2'"
  parses "!!float '1.2'"
+  parses "!!timestamp 2010-01-02"
  parses "!!timestamp 2010-01-02"
+  parses "!!binary aGVsbG8="
  parses "!!binary aGVsbG8="
+  parses "!!set { 1, 2, 3 }"
  parses "!!set { 1, 2, 3 }"
+  parses "2002-1-2T10:11:12Z"
  parses "2002-1-2T10:11:12Z"
+  parses "-123"
  parses "-123"
+  parses "NULL"
  parses "NULL"
+  raises on parse "!!timestamp foo"
  raises on parse "!!timestamp foo"
+  parses "\"1\""
  parses "\"1\""
+  parses ".Inf"
  parses ".Inf"
+  parses "!!float '1_234.2'"
  parses "!!float '1_234.2'"
+  parses "+.INF"
  parses "+.INF"
+  raises on parse "!!pairs 1"
  raises on parse "!!pairs 1"
+  parses "FALSE"
  parses "FALSE"
+  raises on parse "!!set 1"
  raises on parse "!!set 1"
+  parses "2002-1-2T10:11:12 Z"
  parses "2002-1-2T10:11:12 Z"
+  parses ".5"
  parses ".5"
+  parses "2002-1-2T10:11:12.3456"
  parses "2002-1-2T10:11:12.3456"
+  parses "!!float 0"
  parses "!!float 0"
+  parses "0"
  parses "0"
+  parses "y"
  parses "y"
+  parses "!!float '0.5'"
  parses "!!float '0.5'"
+  parses "True"
  parses "True"
+  parses "0b10110"
  parses "0b10110"
+  parses "!!pairs [{1: 2}, {3: 4}]"
  parses "!!pairs [{1: 2}, {3: 4}]"
+  parses "0x0"
  parses "0x0"
+  parses "1.2"
  parses "1.2"
+  parses "Null"
  parses "Null"
+  parses "n"
  parses "n"
+  parses "!!float -1"
  parses "!!float -1"
+  parses "2002-12-14"
  parses "2002-12-14"
+  parses "2002-1-2T10:11:12 -03:31"
  parses "2002-1-2T10:11:12 -03:31"
+  parses "true"
  parses "true"
+  parses "no"
  parses "no"
+  parses "2002-1-2T10:11:12 +3"
  parses "2002-1-2T10:11:12 +3"
+  parses "On"
  parses "On"
+  parses "-.5"
  parses "-.5"
+  parses "2002-1-2T10:11:12.3"
  parses "2002-1-2T10:11:12.3"
+  parses "~"
  parses "~"
+  raises on parse "!!int 'hello'"
  raises on parse "!!int 'hello'"
+  parses nan
  parses nan
+  parses "2002-1-2T10:11:12.345"
  parses "2002-1-2T10:11:12.345"
+  raises on parse "!!omap 1"
  raises on parse "!!omap 1"
+  parses "-0.0"
  parses "-0.0"
+  parses "+123"
  parses "+123"
+  parses "+.5"
  parses "+.5"
+  parses "0.815"
  parses "0.815"
+  parses "-2E+05"
  parses "-2E+05"
+  parses "2002-1-2T10:11:12 +03:00"
  parses "2002-1-2T10:11:12 +03:00"
+  parses "!!str 1"
  parses "!!str 1"
+  parses "2002-12-14 x"
  parses "2002-12-14 x"
+  parses "!!bool yes"
  parses "!!bool yes"
+  parses "False"
  parses "False"
+  raises on parse "!!bool 1"
  raises on parse "!!bool 1"
+  parses "1_234.2"
  parses "1_234.2"
+  parses "null"
  parses "null"
+  parses "2002-1-2T10:11:12Zx"
  parses "2002-1-2T10:11:12Zx"
+  parses "-.Inf"
  parses "-.Inf"
+  parses "!!int 0o123"
  parses "!!int 0o123"
+  parses "2002-1-2T10:11:12x"
  parses "2002-1-2T10:11:12x"
+  parses "2002-1-2T10:11:12.34"
  parses "2002-1-2T10:11:12.34"
+  parses "123"
  parses "123"
+  parses "2002-1-2"
  parses "2002-1-2"
+  parses "ON"
  parses "ON"
+  parses "!!null ~"
  parses "!!null ~"
+  parses "!!float .inf"
  parses "!!float .inf"
+  parses "!!int -123"
  parses "!!int -123"
+  parses "!!omap {1: 2}"
  parses "!!omap {1: 2}"
+  parses "No"
  parses "No"
+  parses "2002-1-2T10:11:12-03:31"
  parses "2002-1-2T10:11:12-03:31"
+  parses "Y"
  parses "Y"
+  parses "on"
  parses "on"
+  parses "!!int 0xabc"
  parses "!!int 0xabc"
+  parses "+12.3"
  parses "+12.3"
+  parses "false"
  parses "false"
+  parses "-0x123abc"
  parses "-0x123abc"
+  parses "!!float 2.3e4"
  parses "!!float 2.3e4"
+  raises on parse "!!str [1]"
  raises on parse "!!str [1]"
+  parses "0b0"
  parses "0b0"
+  parses "0o0"
  parses "0o0"
+  parses "2002-1-2   1:11:12"
  parses "2002-1-2   1:11:12"
+  parses "2002-1-2T10:11:12 -03:00"
  parses "2002-1-2T10:11:12 -03:00"
+  parses "2002-1-2T10:11:12"
  parses "2002-1-2T10:11:12"
+  parses "!!map {1: 2}"
  parses "!!map {1: 2}"
+  parses "NO"
  parses "NO"
+  parses ".INF"
  parses ".INF"
+  parses "00"
  parses "00"
+  parses "Off"
  parses "Off"
+  parses "YES"
  parses "YES"
+  raises on parse "!!seq 1"
  raises on parse "!!seq 1"
+  raises on parse "!!binary 1"
  raises on parse "!!binary 1"
+  parses "2002-1-2T10:11:12 +0300"
  parses "2002-1-2T10:11:12 +0300"
+  parses "yes"
  parses "yes"
+  parses "!!int 0b10"
  parses "!!int 0b10"
+  raises on parse "!!pairs [{1: 2, 3: 4}]"
  raises on parse "!!pairs [{1: 2, 3: 4}]"
+  parses "N"
  parses "N"
+  raises on parse "!!map 1"
  raises on parse "!!map 1"
+  parses "0755"
  parses "0755"
+Compress::Zlib
+  write read should be inverse with random string
  write read should be inverse with random string
+  write read should be inverse (utf-8)
  write read should be inverse (utf-8)
+hardware exception
+  detects stack overflow on a fiber stack
  detects stack overflow on a fiber stack
+  detects stack overflow on the main stack
  detects stack overflow on the main stack
+  reports invalid memory access
  reports invalid memory access
+levenshtein
+  assert
  assert
+  assert
  assert
+  assert
  assert
+  assert
  assert
+  assert
  assert
+  finds with finder
  finds with finder
+  finds with finder and other values
  finds with finder and other values
+  assert
  assert
+  assert
  assert
+  assert
  assert
+  assert
  assert
+  assert
  assert
+  assert
  assert
+  assert
  assert
+  assert
  assert
+  assert
  assert
+  assert
  assert
+  assert
  assert
+UUID
+  serializes
+    #to_json
    #to_json
+    from_json_object_key?
    from_json_object_key?
+CSV
+  parses row by row
  parses row by row
+  does CSV.each_row with separator and quotes
  does CSV.each_row with separator and quotes
+  parse
+    parses some commas
    parses some commas
+    raises if command, newline or end doesn't follow quote
    raises if command, newline or end doesn't follow quote
+    parses one simple row
    parses one simple row
+    parses from IO
    parses from IO
+    parses with quote
    parses with quote
+    parses empty quoted string
    parses empty quoted string
+    parses two rows
    parses two rows
+    raises if command, newline or end doesn't follow quote (2)
    raises if command, newline or end doesn't follow quote (2)
+    parses with double quote
    parses with double quote
+    parses one row with spaces
    parses one row with spaces
+    parses empty string
    parses empty string
+    parses with quote and newline
    parses with quote and newline
+    parses two rows with the last one having a newline
    parses two rows with the last one having a newline
+    raises if single quote in the middle
    raises if single quote in the middle
+    takes an optional quote char argument
    takes an optional quote char argument
+    takes an optional separator argument
    takes an optional separator argument
+  gets row iterator
  gets row iterator
+  does CSV.each_row
  does CSV.each_row
+Crypto::Bcrypt
+  doesn't have the sign expansion (high 8bit) security flaw
  doesn't have the sign expansion (high 8bit) security flaw
+  validates cost
  validates cost
+  computes digest vectors
  computes digest vectors
+  validates password size
  validates password size
+  validates salt size
  validates salt size
+Crypto::Blowfish
+  encrypt and decrypt pair
  encrypt and decrypt pair
+String::Grapheme
+  #size
  #size
+  #==
  #==
+  .new
  .new
+  #inspect
  #inspect
+  #to_s
  #to_s
+  .break?
  .break?
+  #bytesize
  #bytesize
+VaList
+  works with C code
  works with C code
+Crystal::PointerLinkedList(T)
+  empty?
+    return true if there is no element in list
    return true if there is no element in list
+  does each
  does each
+  delete
+    remove a node from list
    remove a node from list
+  push
+    append the node into the list
    append the node into the list
+  shift?
+    return nil if list is empty
    return nil if list is empty
+    remove and return the first element
    remove and return the first element
+Deque
+  does each
  does each
+  select!
+    with pattern
    with pattern
+    with block
    with block
+  "#cycle(limit)" yielding
  "#cycle(limit)" yielding
+  first?
+    gives nil when empty
    gives nil when empty
+    gets first? when non empty
    gets first? when non empty
+  does clear
  does clear
+  new
+    creates with default value in block
    creates with default value in block
+    creates from an array
    creates from an array
+    creates with default value
    creates with default value
+    raises on negative capacity
    raises on negative capacity
     raises on negative count
    raises on negative count
-    raises on out of bound index
    raises on out of bound index
-    toggles with range
    toggles with range
-    toggles with index and count, not enough bits
    toggles with index and count, not enough bits
+  "#cycle" iterator
  "#cycle" iterator
+  implementation
+    works the same as array when inserting at 3/4 size and deleting at 1/8 size
    works the same as array when inserting at 3/4 size and deleting at 1/8 size
+    works the same as array
    works the same as array
+    works the same as array when inserting at 1/8 size and deleting at 3/4 size
    works the same as array when inserting at 1/8 size and deleting at 3/4 size
+  does clone
  does clone
+  inspect
+    assert
    assert
+  does clone with recursive type
  does clone with recursive type
+  does hash
  does hash
+  []
+    gets nilable
    gets nilable
+    gets on positive index
    gets on positive index
+    gets on negative index
    gets on negative index
+  delete
+    deletes many
    deletes many
+    delete not found
    delete not found
+  +
+    does +
    does +
+    does + with different types
    does + with different types
+  last
+    gets last when non empty
    gets last when non empty
+    raises when empty
    raises when empty
+  []=
+    sets on positive index
    sets on positive index
+    sets on negative index
    sets on negative index
+  each_index iterator
+    works while modifying deque
    works while modifying deque
+    "#each_index" iterator
    "#each_index" iterator
+    "#each_index" yielding
    "#each_index" yielding
   ==
-    compares elements
    compares elements
-    compares other
    compares other
-    compares other type
    compares other type
-    compares other initialized with true (#8543)
    compares other initialized with true (#8543)
     compares empty
    compares empty
-  "#each" yielding
  "#each" yielding
-  #rotate!
-    rotates medium BitArray
    rotates medium BitArray
-    rotates empty BitArray
    rotates empty BitArray
-    rotates large BitArray
    rotates large BitArray
-    rotates short BitArray
    rotates short BitArray
-  sets first bit to true
  sets first bit to true
-  has size
  has size
-  sets second bit to true
  sets second bit to true
-  "#each_index" iterator
  "#each_index" iterator
-  inverts all bits
  inverts all bits
-  #index
-    without block
-      returns index of first bit set
      returns index of first bit set
-      returns index of first bit cleared
      returns index of first bit cleared
-      accepts a start offset
      accepts a start offset
-  []
-    gets 0, 0 on empty array
    gets 0, 0 on empty array
-    gets on inclusive range
    gets on inclusive range
-    raises on index out of bounds
    raises on index out of bounds
-    preserves equality
    preserves equality
-    gets on medium bitarrays
    gets on medium bitarrays
-    returns empty if at end
    returns empty if at end
-    gets (0..0) on empty array
    gets (0..0) on empty array
-    gets on range with start higher than negative end
    gets on range with start higher than negative end
+    compares other types
    compares other types
+    compares other
    compares other
+    compares elements
    compares elements
+  each iterator
+    "#each" yielding
    "#each" yielding
+    works while modifying deque
    works while modifying deque
+    "#each" iterator
    "#each" iterator
+  does unshift
  does unshift
+  shift
+    shifts when non empty
    shifts when non empty
+    shifts negative count raises
    shifts negative count raises
+    shifts more than what is available
    shifts more than what is available
+    raises when empty
    raises when empty
+    shifts many elements
    shifts many elements
+  swap
+    swaps but raises out of bounds on right
    swaps but raises out of bounds on right
+    swaps with negative indices
    swaps with negative indices
+    swaps
    swaps
+    swaps but raises out of bounds on left
    swaps but raises out of bounds on left
+  concat
+    concats deque
    concats deque
+    concats enumerable
    concats enumerable
+    concats large deques
    concats large deques
+    concats itself
    concats itself
+    concats indexable
    concats indexable
+  first
+    gets first when non empty
    gets first when non empty
+    raises when empty
    raises when empty
+  empty
+    is empty
    is empty
+    is not empty
    is not empty
+  rotate!
+    rotates with size=0
    rotates with size=0
+    rotates with size=capacity
    rotates with size=capacity
+    rotates
    rotates
+    rotates with size=1
    rotates with size=1
+  "#cycle" yielding
  "#cycle" yielding
+  does each_index
  does each_index
+  pop
+    pops many elements
    pops many elements
+    pops negative count raises
    pops negative count raises
+    raises when empty
    raises when empty
+    pops when non empty
    pops when non empty
+    pops more elements than what is available
    pops more elements than what is available
+  "#reverse_each" yielding
  "#reverse_each" yielding
+  size
+    has size 2
    has size 2
+    has size 0
    has size 0
+  insert
+    inserts with negative index
    inserts with negative index
+    inserts with positive index
    inserts with positive index
+    inserts out of range
    inserts out of range
+    inserts with negative index (2)
    inserts with negative index (2)
+  to_s
+    does with recursive
    does with recursive
+    does to_s
    does to_s
+  "#cycle(limit)" iterator
  "#cycle(limit)" iterator
+  does dup
  does dup
+  reject!
+    with block
    with block
+    with pattern
    with pattern
+  delete_at
+    deletes out of bounds
    deletes out of bounds
+    deletes negative index
    deletes negative index
+    deletes positive index
    deletes positive index
+  does equals? with custom block
  does equals? with custom block
+  "#reverse_each" iterator
  "#reverse_each" iterator
+  push
+    has the << alias
    has the << alias
+    returns the deque
    returns the deque
+    adds one element to the deque
    adds one element to the deque
+Time::Location
+  .load_android
+    loads Europe/Berlin
    loads Europe/Berlin
+    loads new data if tzdata file was changed
    loads new data if tzdata file was changed
+  .fixed
+    with name
    with name
+    positive
    positive
+    raises if offset to large
    raises if offset to large
+    negative
    negative
+    without name
    without name
+  .load_local
+    with empty TZ
    with empty TZ
+    with TZ
    with TZ
+    with unset TZ
    with unset TZ
+  #lookup
+    reads from cache
    reads from cache
+    looks up
    looks up
+    first zone
+      PST8PDT
      PST8PDT
+      Pacific/Fakaofo
      Pacific/Fakaofo
+    handles dst change
    handles dst change
+    handles value after last transition
    handles value after last transition
+    caches last zone
    caches last zone
+  UTC
  UTC
+  .load
+    treats UTC as special case
    treats UTC as special case
+    invalid timezone identifier
    invalid timezone identifier
+    invalid zone file
    invalid zone file
+    loads Europe/Berlin
    loads Europe/Berlin
+    validating name
+      dot dot
      dot dot
+      absolute path
      absolute path
+    name is folder
    name is folder
+    with ZONEINFO
+      does not fall back to default sources
      does not fall back to default sources
+      loads new data if ZIP file was changed
      loads new data if ZIP file was changed
+      loads from custom directory
      loads from custom directory
+      loads from custom zipfile
      loads from custom zipfile
+      caches result
      caches result
+      raises if not available
      raises if not available
+      loads new data if file was changed
      loads new data if file was changed
+  .local
  .local
+Float32 boundaries
+  largest denormal 32
  largest denormal 32
+  smallest normal 32
  smallest normal 32
+  max Float32
  max Float32
+  min Float32
  min Float32
+  boundaries 1.5
  boundaries 1.5
+  boundaries 1.0
  boundaries 1.0
+Crystal::System::File
+  .mktemp
+    creates random file name
    creates random file name
+    raises when no valid path is found
    raises when no valid path is found
+    retries when file exists
    retries when file exists
+HTTP::LogHandler
+  logs
  logs
+  log failed request
  log failed request
+  logs to custom logger
  logs to custom logger
+Char::Reader
+  #next_char?
  #next_char?
+  errors on invalid UTF-8
  errors on invalid UTF-8
+  #current_char?
  #current_char?
+  gets previous char (unicode)
  gets previous char (unicode)
+  #previous_char
+    reads on valid UTF-8
    reads on valid UTF-8
+    errors on invalid UTF-8
    errors on invalid UTF-8
+  #each
+    yields chars
    yields chars
+    does not yield if empty
    does not yield if empty
+    checks bounds after block
    checks bounds after block
+  starts at pos
  starts at pos
+  starts at end
  starts at end
+  iterates through chars
  iterates through chars
+  gets previous char (ascii)
  gets previous char (ascii)
+  iterates through empty string
  iterates through empty string
+  iterates through string of size one
  iterates through string of size one
+  sets pos
  sets pos
+  peeks next char
  peeks next char
+  #previous_char?
  #previous_char?
+__udivti3
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+Pointer
+  creates from int
  creates from int
+  move_to
+    performs with overlap left to right
    performs with overlap left to right
     raises on negative count
    raises on negative count
-    gets on endless range
    gets on endless range
-    doesn't exceed limits
    doesn't exceed limits
-    gets on beginless range
    gets on beginless range
-    gets on large bitarrays
    gets on large bitarrays
-    gets on inclusive range with negative indices
    gets on inclusive range with negative indices
-    gets with start and count exceeding size
    gets with start and count exceeding size
-    raises on index out of bounds with range
    raises on index out of bounds with range
-    gets on range with start higher than end
    gets on range with start higher than end
-    gets on exclusive range with negative indices
    gets on exclusive range with negative indices
-    raises on too negative left bound
    raises on too negative left bound
-    does not cause overflow (#8494)
    does not cause overflow (#8494)
-    gets with start and count
    gets with start and count
-    raises on negative count on empty Array
    raises on negative count on empty Array
-    zeroes unused bits
    zeroes unused bits
+    performs with overlap right to left
    performs with overlap right to left
+    moves to union of pointers
    moves to union of pointers
+  maps_with_index!
  maps_with_index!
+  performs arithmetic with u32
  performs arithmetic with u32
+  does to_s
  does to_s
+  copy_to
     raises on negative count
    raises on negative count
-    gets with negative start
    gets with negative start
-    raises on index out of bounds with start and count
    raises on index out of bounds with start and count
-    gets on exclusive range
    gets on exclusive range
-Signal
-  CHLD.ignore sets default Crystal child handler
  CHLD.ignore sets default Crystal child handler
-  ignores a signal
  ignores a signal
-  CHLD.trap is called after default Crystal child handler
  CHLD.trap is called after default Crystal child handler
-  allows chaining of signals
  allows chaining of signals
-  has constants required by C
  has constants required by C
-  runs a signal handler
  runs a signal handler
-  CHLD.reset removes previously set trap
  CHLD.reset removes previously set trap
-  CHLD.reset sets default Crystal child handler
  CHLD.reset sets default Crystal child handler
-.__lshrti3
.__lshrti3
-Float
-  floor division //
-    preserves type of lhs
    preserves type of lhs
-    applies floor
    applies floor
-  .new
-    fallback overload
    fallback overload
-    String overload
    String overload
-  #next_float
-    does for f32
    does for f32
-    does for f64
    does for f64
-  ceil
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
-  fdiv
-    assert
    assert
-    assert
    assert
-    assert
    assert
-    assert
    assert
+    doesn't raise OverflowError on unsigned size and different target type
    doesn't raise OverflowError on unsigned size and different target type
+    performs
    performs
+    copies to union of pointers
    copies to union of pointers
+  memcmp
     assert
    assert
-  returns nil in <=> for NaN values (Float64)
  returns nil in <=> for NaN values (Float64)
-  does infinite?
  does infinite?
-  #abs
  #abs
-  does nan?
  does nan?
-  %
-    uses modulo behavior, not remainder behavior
    uses modulo behavior, not remainder behavior
-  floor
+  compares two pointers by address
  compares two pointers by address
+  does malloc with value
  does malloc with value
+  maps!
  maps!
+  maps_with_index!, with offset
  maps_with_index!, with offset
+  does !
  does !
+  does malloc with value from block
  does malloc with value from block
+  realloc
+    raises on negative count
    raises on negative count
+  move_from
+    performs with overlap right to left
    performs with overlap right to left
+    moves from union of pointers
    moves from union of pointers
+    performs with overlap left to right
    performs with overlap left to right
+    raises on negative count
    raises on negative count
+  does index with count
  does index with count
+  raises if mallocs negative size
  raises if mallocs negative size
+  copy_from
+    raises on negative count
    raises on negative count
+    copies from union of pointers
    copies from union of pointers
+    performs
    performs
+  copies/move with different types
  copies/move with different types
+  clear
+    clears with union
    clears with union
+    clears many
    clears many
+    clears one
    clears one
+  clones
  clones
+  shuffles!
  shuffles!
+  performs arithmetic with u64
  performs arithmetic with u64
+BigRational Math
+  sqrt
  sqrt
+NamedTuple
+  compares with other named tuple type
  compares with other named tuple type
+  #to_h
+    creates a hash
    creates a hash
+    creates an empty hash from an empty named tuple
    creates an empty hash from an empty named tuple
+  does keys
  does keys
+  compares with same named tuple type
  compares with same named tuple type
+  does has_key? with symbol
  does has_key? with symbol
+  merges with other named tuple
  merges with other named tuple
+  .[] with non-literal index
+    gets named tuple metaclass value with String key
    gets named tuple metaclass value with String key
+    raises missing key
    raises missing key
+    gets named tuple metaclass value with Symbol key
    gets named tuple metaclass value with Symbol key
+  #dig?
+    gets the value at given path given splat
    gets the value at given path given splat
+    returns nil if not found
    returns nil if not found
+  does map
  does map
+  does NamedTuple#from
  does NamedTuple#from
+  gets size
  gets size
+  does sorted_keys
  does sorted_keys
+  does has_key? with string
  does has_key? with string
+  dups
  dups
+  does empty
  does empty
+  does each
  does each
+  #[]? with non-literal index
+    gets named tuple value or nil with Symbol key
    gets named tuple value or nil with Symbol key
+    gets named tuple value or nil with String key
    gets named tuple value or nil with String key
+  does types
  does types
+  does each_with_index
  does each_with_index
+  #to_a
+    creates an array of key-value pairs
    creates an array of key-value pairs
+    preserves key type for empty named tuples
    preserves key type for empty named tuples
+  #dig
+    gets the value at given path given splat
    gets the value at given path given splat
+    raises KeyError if not found
    raises KeyError if not found
+  does to_s
  does to_s
+  .[]? with non-literal index
+    gets named tuple metaclass value or nil with Symbol key
    gets named tuple metaclass value or nil with Symbol key
+    gets named tuple metaclass value or nil with String key
    gets named tuple metaclass value or nil with String key
+  does each_value
  does each_value
+  compares with named tuple union (#5131)
  compares with named tuple union (#5131)
+  clones
  clones
+  does values
  does values
+  does NamedTuple.from
  does NamedTuple.from
+  computes a hash value
  computes a hash value
+  does NamedTuple.new, without type vars
  does NamedTuple.new, without type vars
+  #[] with non-literal index
+    raises missing key
    raises missing key
+    gets named tuple value with Symbol key
    gets named tuple value with Symbol key
+    gets named tuple value with String key
    gets named tuple value with String key
+  does NamedTuple.new, with hyphen in key
  does NamedTuple.new, with hyphen in key
+  does NamedTuple.new, with type vars
  does NamedTuple.new, with type vars
+  merges two empty named tuples
  merges two empty named tuples
+  does each_key
  does each_key
+OpenSSL::SSL::Socket
+  OpenSSL::SSL::Socket::Server
+    doesn't accept client when specified
    doesn't accept client when specified
+    auto accept client by default
    auto accept client by default
+LLVM::ABI::X86_Win64
+  abi_info
+    does with packed struct containing unaligned fields (#9873)
    does with packed struct containing unaligned fields (#9873)
+    does with packed struct not containing unaligned fields
    does with packed struct not containing unaligned fields
+    does with structs between 64 and 128 bits
    does with structs between 64 and 128 bits
+    does with structs larger than 128 bits
    does with structs larger than 128 bits
+Path
+  #parent
+     "/foo" (posix)
     "/foo" (posix)
+     "C:\foo" (windows)
     "C:\foo" (windows)
+     "foo\" (posix)
     "foo\" (posix)
+     "/." (posix)
     "/." (posix)
+     "C:/foo" (windows)
     "C:/foo" (windows)
+     "\Users/foo\bar.cr" (posix)
     "\Users/foo\bar.cr" (posix)
+     "./foo" (windows)
     "./foo" (windows)
+     "/foo/C:/bar" (posix)
     "/foo/C:/bar" (posix)
+     "\Users\foo\bar.cr" (windows)
     "\Users\foo\bar.cr" (windows)
+     "foo/bar/" (posix)
     "foo/bar/" (posix)
+     "foo//.//" (windows)
     "foo//.//" (windows)
+     "C:\" (posix)
     "C:\" (posix)
+     "/" (posix)
     "/" (posix)
+     "./foo" (posix)
     "./foo" (posix)
+     "C:/" (posix)
     "C:/" (posix)
+     "/" (windows)
     "/" (windows)
+     "foo" (posix)
     "foo" (posix)
+     ".\foo" (windows)
     ".\foo" (windows)
+     "/Users/foo/bar.cr" (posix)
     "/Users/foo/bar.cr" (posix)
+     "C:/" (windows)
     "C:/" (windows)
+     "foo\bar\." (windows)
     "foo\bar\." (windows)
+     "/foo" (windows)
     "/foo" (windows)
+     "Users/foo/bar.cr" (windows)
     "Users/foo/bar.cr" (windows)
+     "/foo/C:/bar" (windows)
     "/foo/C:/bar" (windows)
+     "foo\" (windows)
     "foo\" (windows)
+     "C:" (windows)
     "C:" (windows)
+     "foo\bar\" (posix)
     "foo\bar\" (posix)
+     "\Users\foo\bar.cr" (posix)
     "\Users\foo\bar.cr" (posix)
+     "foo/bar/." (posix)
     "foo/bar/." (posix)
+     "." (windows)
     "." (windows)
+     "/." (posix)
     "/." (posix)
+     "foo//.//" (posix)
     "foo//.//" (posix)
+     "foo/bar/.." (windows)
     "foo/bar/.." (windows)
+     "foo/bar/." (windows)
     "foo/bar/." (windows)
+     "" (windows)
     "" (windows)
+     "C:\" (windows)
     "C:\" (windows)
+     "foo\bar\.." (windows)
     "foo\bar\.." (windows)
+     "\Users/foo\bar.cr" (windows)
     "\Users/foo\bar.cr" (windows)
+     "foo" (windows)
     "foo" (windows)
+     "////" (windows)
     "////" (windows)
+     "\" (posix)
     "\" (posix)
+     "\." (posix)
     "\." (posix)
+     "C:\foo" (posix)
     "C:\foo" (posix)
+     "" (posix)
     "" (posix)
+     "foo\bar\." (posix)
     "foo\bar\." (posix)
+     "foo/" (windows)
     "foo/" (windows)
+     "/Users/foo/bar.cr" (windows)
     "/Users/foo/bar.cr" (windows)
+     "foo\bar\" (windows)
     "foo\bar\" (windows)
+     ".\foo" (posix)
     ".\foo" (posix)
+     "." (posix)
     "." (posix)
+     "C:" (posix)
     "C:" (posix)
+     "C:/foo" (posix)
     "C:/foo" (posix)
+     "foo/bar/" (windows)
     "foo/bar/" (windows)
+     "foo/bar/.." (posix)
     "foo/bar/.." (posix)
+     "Users/foo/bar.cr" (posix)
     "Users/foo/bar.cr" (posix)
+     "////" (posix)
     "////" (posix)
+     "/." (windows)
     "/." (windows)
+     "\" (windows)
     "\" (windows)
+     "foo/" (posix)
     "foo/" (posix)
+     "foo\bar\.." (posix)
     "foo\bar\.." (posix)
+     "/." (windows)
     "/." (windows)
+     "\." (windows)
     "\." (windows)
+  #==
+    simple
    simple
+    case sensitivity
    case sensitivity
+  .home
+    uses home from environment variable if set
    uses home from environment variable if set
+    doesn't return empty string if environment variable is empty
    doesn't return empty string if environment variable is empty
+    doesn't raise if environment variable is missing
    doesn't raise if environment variable is missing
+  #relative_to
+    mixed input paths
    mixed input paths
+    paths that can't be relativized
    paths that can't be relativized
+    relativizable paths
    relativizable paths
+  #to_windows
+     "foo/bar" (posix)
     "foo/bar" (posix)
+     ""*/:<>?\| " (posix)
     ""*/:<>?\| " (posix)
+     "C:\foo\bar" (posix)
     "C:\foo\bar" (posix)
+    default: mappings=true "C:\foo\bar" (windows)
    default: mappings=true "C:\foo\bar" (windows)
+     "C:\foo\bar" (windows)
     "C:\foo\bar" (windows)
+     "C:\foo\bar" (posix)
     "C:\foo\bar" (posix)
+     ""*/:<>?\| " (posix)
     ""*/:<>?\| " (posix)
+     "C:\foo\bar" (windows)
     "C:\foo\bar" (windows)
+    default: mappings=true "C:\foo\bar" (posix)
    default: mappings=true "C:\foo\bar" (posix)
+     ""*/:<>?\| " (windows)
     ""*/:<>?\| " (windows)
+     "foo/bar" (windows)
     "foo/bar" (windows)
+     ""*/:<>?\| " (windows)
     ""*/:<>?\| " (windows)
+     "foo/bar" (windows)
     "foo/bar" (windows)
+     "foo/bar" (posix)
     "foo/bar" (posix)
+  #drive
+     "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (posix)
     "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (posix)
+     "\\not-a\\share" (windows)
     "\\not-a\\share" (windows)
+     "//foo" (posix)
     "//foo" (posix)
+     "\\127.0.0.1\share\" (posix)
     "\\127.0.0.1\share\" (posix)
+     "\\%10%20\share\" (posix)
     "\\%10%20\share\" (posix)
+     "///not-a/share/" (posix)
     "///not-a/share/" (posix)
+     "///not-a/share/" (windows)
     "///not-a/share/" (windows)
+     "/not-a//share/" (windows)
     "/not-a//share/" (windows)
+     "\\%10%20\share\" (windows)
     "\\%10%20\share\" (windows)
+     "//some/share/foo/" (posix)
     "//some/share/foo/" (posix)
+     "\\\not-a\share" (windows)
     "\\\not-a\share" (windows)
+     "C:foo" (posix)
     "C:foo" (posix)
+     "/foo" (windows)
     "/foo" (windows)
+     "//some/share/" (posix)
     "//some/share/" (posix)
+     "\\some\share" (windows)
     "\\some\share" (windows)
+     "C:/foo" (posix)
     "C:/foo" (posix)
+     "\\127.0.0.1\share\" (windows)
     "\\127.0.0.1\share\" (windows)
+     "\\some\share\" (windows)
     "\\some\share\" (windows)
+     "\\some\share" (posix)
     "\\some\share" (posix)
+     "C:\foo" (windows)
     "C:\foo" (windows)
+     "\\some$\share\" (windows)
     "\\some$\share\" (windows)
+     "//some/share/" (windows)
     "//some/share/" (windows)
+     "//foo" (windows)
     "//foo" (windows)
+     "//some/share" (posix)
     "//some/share" (posix)
+     "\\some\share\" (posix)
     "\\some\share\" (posix)
+     "C:foo" (windows)
     "C:foo" (windows)
+     "C:\foo" (posix)
     "C:\foo" (posix)
+     "C:/foo" (windows)
     "C:/foo" (windows)
+     "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (windows)
     "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (windows)
+     "\\not-a\\share" (posix)
     "\\not-a\\share" (posix)
+     "\\some\share\foo" (windows)
     "\\some\share\foo" (windows)
+     "//some/share" (windows)
     "//some/share" (windows)
+     "/foo" (posix)
     "/foo" (posix)
+     "\\some$\share\" (posix)
     "\\some$\share\" (posix)
+     "\\\not-a\share" (posix)
     "\\\not-a\share" (posix)
+     "\\some\share\foo" (posix)
     "\\some\share\foo" (posix)
+     "//some/share/foo/" (windows)
     "//some/share/foo/" (windows)
+     "/not-a//share/" (posix)
     "/not-a//share/" (posix)
+  #anchor
+     "C:foo" (windows)
     "C:foo" (windows)
+     "C:/foo" (posix)
     "C:/foo" (posix)
+     "C:\foo" (windows)
     "C:\foo" (windows)
+     "\foo" (posix)
     "\foo" (posix)
+     "\\some\share" (posix)
     "\\some\share" (posix)
+     "//some/share/" (posix)
     "//some/share/" (posix)
+     "\\some\share\" (windows)
     "\\some\share\" (windows)
+     "/foo" (posix)
     "/foo" (posix)
+     "C:foo" (posix)
     "C:foo" (posix)
+     "//some/share" (windows)
     "//some/share" (windows)
+     "\foo" (windows)
     "\foo" (windows)
+     "/foo" (windows)
     "/foo" (windows)
+     "C:/foo" (windows)
     "C:/foo" (windows)
+     "//some/share/" (windows)
     "//some/share/" (windows)
+     "\\some\share" (windows)
     "\\some\share" (windows)
+     "C:\foo" (posix)
     "C:\foo" (posix)
+     "\\some\share\" (posix)
     "\\some\share\" (posix)
+     "//some/share" (posix)
     "//some/share" (posix)
+  #basename
+     "a/x" (posix)
     "a/x" (posix)
+     "a/.x" (posix)
     "a/.x" (posix)
+     "////" (posix)
     "////" (posix)
+     "/foo/" (windows)
     "/foo/" (windows)
+     "" (windows)
     "" (windows)
+     "\" (posix)
     "\" (posix)
+     "\." (posix)
     "\." (posix)
+     "/." (posix)
     "/." (posix)
+     "\foo\bar\baz.cr" (windows)
     "\foo\bar\baz.cr" (windows)
+    removes suffix
+       "/foo/bar/baz.cr.tmp" (windows)
       "/foo/bar/baz.cr.tmp" (windows)
+       "\foo\bar\baz.cr" (windows)
       "\foo\bar\baz.cr" (windows)
+       "\foo/bar\baz.cr" (windows)
       "\foo/bar\baz.cr" (windows)
+       "/foo/bar/baz.cr.tmp" (windows)
       "/foo/bar/baz.cr.tmp" (windows)
+       "/foo/bar/baz.cr.tmp" (posix)
       "/foo/bar/baz.cr.tmp" (posix)
+       "\foo\bar\baz.cr" (posix)
       "\foo\bar\baz.cr" (posix)
+       "/foo/bar/baz.cr" (posix)
       "/foo/bar/baz.cr" (posix)
+       "a.x" (windows)
       "a.x" (windows)
+       "/foo/bar/baz.cr.tmp" (posix)
       "/foo/bar/baz.cr.tmp" (posix)
+       "/foo/bar/baz.cr" (windows)
       "/foo/bar/baz.cr" (windows)
+       "\foo\bar\baz.cr.tmp" (posix)
       "\foo\bar\baz.cr.tmp" (posix)
+       "\foo\bar\baz.cr.tmp" (windows)
       "\foo\bar\baz.cr.tmp" (windows)
+       "/foo/bar/baz.cr.tmp" (posix)
       "/foo/bar/baz.cr.tmp" (posix)
+       "\foo/bar\baz.cr" (posix)
       "\foo/bar\baz.cr" (posix)
+       "/foo/bar/baz.cr.tmp" (windows)
       "/foo/bar/baz.cr.tmp" (windows)
+       "a.x" (posix)
       "a.x" (posix)
+       "a.txt" (posix)
       "a.txt" (posix)
+       "\foo\bar\baz.cr.tmp" (windows)
       "\foo\bar\baz.cr.tmp" (windows)
+       "\foo\bar\baz.cr.tmp" (posix)
       "\foo\bar\baz.cr.tmp" (posix)
+       "\foo\bar\baz.cr.tmp" (posix)
       "\foo\bar\baz.cr.tmp" (posix)
+       "\foo\bar\baz.cr.tmp" (windows)
       "\foo\bar\baz.cr.tmp" (windows)
+       "a.txt" (windows)
       "a.txt" (windows)
+     "a/x." (posix)
     "a/x." (posix)
+     "/foo/" (posix)
     "/foo/" (posix)
+     "/foo/bar/baz.cr" (windows)
     "/foo/bar/baz.cr" (windows)
+     "foo" (posix)
     "foo" (posix)
+     "a/x" (windows)
     "a/x" (windows)
+     "\." (windows)
     "\." (windows)
+     "." (posix)
     "." (posix)
+     "/" (windows)
     "/" (windows)
+     "\foo\" (posix)
     "\foo\" (posix)
+     "x" (windows)
     "x" (windows)
+     "////" (windows)
     "////" (windows)
+     "a/.x" (windows)
     "a/.x" (windows)
+     "foo" (windows)
     "foo" (windows)
+     "/foo/bar/baz.cr" (posix)
     "/foo/bar/baz.cr" (posix)
+     "/" (posix)
     "/" (posix)
+     "x" (posix)
     "x" (posix)
+     "/." (windows)
     "/." (windows)
+     "." (windows)
     "." (windows)
+     "\foo\bar\baz.cr" (posix)
     "\foo\bar\baz.cr" (posix)
+     "\" (windows)
     "\" (windows)
+     "\foo\" (windows)
     "\foo\" (windows)
+     "a/x." (windows)
     "a/x." (windows)
+     "" (posix)
     "" (posix)
+  #to_posix
+    default: mappings=true "Cfoobar" (windows)
    default: mappings=true "Cfoobar" (windows)
+     "C:\foo\bar" (windows)
     "C:\foo\bar" (windows)
+    default: mappings=true "Cfoobar" (posix)
    default: mappings=true "Cfoobar" (posix)
+     "/" (posix)
     "/" (posix)
+     "/" (windows)
     "/" (windows)
+     "Cfoobar" (posix)
     "Cfoobar" (posix)
+     "C:\foo\bar" (posix)
     "C:\foo\bar" (posix)
+     "Cfoobar" (windows)
     "Cfoobar" (windows)
+     "Cfoobar" (windows)
     "Cfoobar" (windows)
+     "/" (posix)
     "/" (posix)
+     "foo/bar" (posix)
     "foo/bar" (posix)
+     "foo/bar" (windows)
     "foo/bar" (windows)
+     "foo/bar" (posix)
     "foo/bar" (posix)
+     "C:\foo\bar" (posix)
     "C:\foo\bar" (posix)
+     "Cfoobar" (posix)
     "Cfoobar" (posix)
+     "foo/bar" (windows)
     "foo/bar" (windows)
+     "C:\foo\bar" (windows)
     "C:\foo\bar" (windows)
+     "/" (windows)
     "/" (windows)
+  .[]
  .[]
+  .posix
     assert
    assert
     assert
    assert
-  converts infinity
  converts infinity
-  remainder
     assert
    assert
+    joins components
    joins components
+    fails with null byte
    fails with null byte
     assert
    assert
+  .new
     assert
    assert
-    preserves type
    preserves type
+    fails with null byte
    fails with null byte
     assert
    assert
     assert
    assert
+    joins components
    joins components
+  #expand
+    expands a path with multi-byte characters
+      (base: "") "Ångström" (posix)
      (base: "") "Ångström" (posix)
+      (base: "") "Ångström" (windows)
      (base: "") "Ångström" (windows)
+    converts a pathname to an absolute pathname, using ~ (home) as base (trailing /)
+      (base: "/tmp/gumby/ddd") "~/a" (posix)
      (base: "/tmp/gumby/ddd") "~/a" (posix)
+      (base: "") "~" (posix)
      (base: "") "~" (posix)
+      (base: "/tmp/gumby/ddd") "~/a" (windows)
      (base: "/tmp/gumby/ddd") "~/a" (windows)
+      (base: "") "~/..badfilename" (posix)
      (base: "") "~/..badfilename" (posix)
+      (base: "~/b") "~/a" (posix)
      (base: "~/b") "~/a" (posix)
+      (base: "") "~/.." (windows)
      (base: "") "~/.." (windows)
+      (base: "") "~/..badfilename" (windows)
      (base: "") "~/..badfilename" (windows)
+      (base: "/tmp/gumby/ddd") "~" (windows)
      (base: "/tmp/gumby/ddd") "~" (windows)
+      (base: "~/b") "~/a" (windows)
      (base: "~/b") "~/a" (windows)
+      (base: "") "~" (windows)
      (base: "") "~" (windows)
+      (base: "/tmp/gumby/ddd") "~" (posix)
      (base: "/tmp/gumby/ddd") "~" (posix)
+      (base: "") "~/" (windows)
      (base: "") "~/" (windows)
+      (base: "") "~/.." (posix)
      (base: "") "~/.." (posix)
+      (base: "") "~/" (posix)
      (base: "") "~/" (posix)
+    keeps trailing dots on absolute pathname
+      (base: "") "a.." (posix)
      (base: "") "a.." (posix)
+      (base: "") "a.." (windows)
      (base: "") "a.." (windows)
+      (base: "") "a." (posix)
      (base: "") "a." (posix)
+      (base: "") "a." (windows)
      (base: "") "a." (windows)
+    ignores name starting with ~
+      (base: "/current") "~foo.txt" (posix)
      (base: "/current") "~foo.txt" (posix)
+      (base: "/current") "~foo.txt" (windows)
      (base: "/current") "~foo.txt" (windows)
+    expands /./dir to /dir
+      (base: "/") "/./dir" (posix)
      (base: "/") "/./dir" (posix)
+      (base: "/") "/./dir" (windows)
      (base: "/") "/./dir" (windows)
+    converts a pathname to an absolute pathname
+      (base: "") "a" (windows)
      (base: "") "a" (windows)
+      (base: "") "" (posix)
      (base: "") "" (posix)
+      (base: "") "a" (windows)
      (base: "") "a" (windows)
+      (base: "") "a" (posix)
      (base: "") "a" (posix)
+      (base: "") "" (windows)
      (base: "") "" (windows)
+      (base: "") "a" (posix)
      (base: "") "a" (posix)
+    UNC path
+      (base: "\\foo\bar\") "baz" (posix)
      (base: "\\foo\bar\") "baz" (posix)
+      (base: "\\foo\bar\") "baz" (windows)
      (base: "\\foo\bar\") "baz" (windows)
+      (base: "\\foo$\bar\") "baz" (posix)
      (base: "\\foo$\bar\") "baz" (posix)
+      (base: "\\foo$\bar\") "baz" (windows)
      (base: "\\foo$\bar\") "baz" (windows)
+    expand path with ..
+      (base: "/tmp") "../../bin" (windows)
      (base: "/tmp") "../../bin" (windows)
+      (base: "x/../tmp") "../bin" (windows)
      (base: "x/../tmp") "../bin" (windows)
+      (base: "tmp/x") "../bin" (windows)
      (base: "tmp/x") "../bin" (windows)
+      (base: "/") "../../bin" (posix)
      (base: "/") "../../bin" (posix)
+      (base: "/tmp/x") "../../bin" (windows)
      (base: "/tmp/x") "../../bin" (windows)
+      (base: "/tmp/x") "../../bin" (posix)
      (base: "/tmp/x") "../../bin" (posix)
+      (base: "x/../tmp") "../bin" (posix)
      (base: "x/../tmp") "../bin" (posix)
+      (base: "tmp/x") "../bin" (posix)
      (base: "tmp/x") "../bin" (posix)
+      (base: "/") "../../bin" (windows)
      (base: "/") "../../bin" (windows)
+      (base: "/tmp") "../../bin" (posix)
      (base: "/tmp") "../../bin" (posix)
+    expand_path for common unix path gives a full path
+      (base: "") "/tmp/" (windows)
      (base: "") "/tmp/" (windows)
+      (base: "") "." (windows)
      (base: "") "." (windows)
+      (base: "") "/tmp/" (posix)
      (base: "") "/tmp/" (posix)
+      (base: "") "." (posix)
      (base: "") "." (posix)
+      (base: "") "/default/base" (windows)
      (base: "") "/default/base" (windows)
+      (base: "") "/default/base" (posix)
      (base: "") "/default/base" (posix)
+      (base: "") "" (posix)
      (base: "") "" (posix)
+      (base: "") "./////" (windows)
      (base: "") "./////" (windows)
+      (base: "") "" (windows)
      (base: "") "" (windows)
+      (base: "") "/tmp/../../../tmp" (windows)
      (base: "") "/tmp/../../../tmp" (windows)
+      (base: "") "./////" (posix)
      (base: "") "./////" (posix)
+      (base: "") "/tmp/../../../tmp" (posix)
      (base: "") "/tmp/../../../tmp" (posix)
+    converts a pathname to an absolute pathname, using ~ (home) as base (HOME=/)
+      (base: "") "~/..badfilename" (windows)
      (base: "") "~/..badfilename" (windows)
+      (base: "") ".." (windows)
      (base: "") ".." (windows)
+      (base: "/tmp/gumby/ddd") "~" (windows)
      (base: "/tmp/gumby/ddd") "~" (windows)
+      (base: "/tmp/gumby/ddd") "~/a" (windows)
      (base: "/tmp/gumby/ddd") "~/a" (windows)
+      (base: "") "~/..badfilename" (posix)
      (base: "") "~/..badfilename" (posix)
+      (base: "") "~/" (posix)
      (base: "") "~/" (posix)
+      (base: "~/b") "~/a" (windows)
      (base: "~/b") "~/a" (windows)
+      (base: "/tmp/gumby/ddd") "~/a" (posix)
      (base: "/tmp/gumby/ddd") "~/a" (posix)
+      (base: "/tmp/gumby/ddd") "~" (posix)
      (base: "/tmp/gumby/ddd") "~" (posix)
+      (base: "~/b") "~/a" (posix)
      (base: "~/b") "~/a" (posix)
+      (base: "") ".." (posix)
      (base: "") ".." (posix)
+      (base: "") "~" (posix)
      (base: "") "~" (posix)
+      (base: "") "~/" (windows)
      (base: "") "~/" (windows)
+      (base: "") "~" (windows)
      (base: "") "~" (windows)
+    supports ~\ for Windows paths only
+      (base: "") "~\a" (windows)
      (base: "") "~\a" (windows)
+      (base: "") "~\a" (posix)
      (base: "") "~\a" (posix)
+    checks all possible types for expand(home:)
+      (base: "") "~/a" (posix)
      (base: "") "~/a" (posix)
+      (base: "") "~/a" (posix)
      (base: "") "~/a" (posix)
+      (base: "") "~/a" (posix)
      (base: "") "~/a" (posix)
+      (base: "") "~/a" (windows)
      (base: "") "~/a" (windows)
+      (base: "") "~/a" (windows)
      (base: "") "~/a" (windows)
+      (base: "") "~/a" (windows)
      (base: "") "~/a" (windows)
+    replaces multiple / with a single /
+      (base: "") "////some/path" (posix)
      (base: "") "////some/path" (posix)
+      (base: "") "/some////path" (posix)
      (base: "") "/some////path" (posix)
+      (base: "") "//some/path" (windows)
      (base: "") "//some/path" (windows)
+      (base: "") "////some/path" (windows)
      (base: "") "////some/path" (windows)
+      (base: "") "/some////path" (windows)
      (base: "") "/some////path" (windows)
+      (base: "") "//some/path" (posix)
      (base: "") "//some/path" (posix)
+    converts a pathname to an absolute pathname, using ~ (home) as base
+      (base: "") "~" (windows)
      (base: "") "~" (windows)
+      (base: "/tmp/gumby/ddd") "~/a" (posix)
      (base: "/tmp/gumby/ddd") "~/a" (posix)
+      (base: "") "~/..badfilename" (windows)
      (base: "") "~/..badfilename" (windows)
+      (base: "/tmp/gumby/ddd") "~" (posix)
      (base: "/tmp/gumby/ddd") "~" (posix)
+      (base: "~/b") "~/a" (windows)
      (base: "~/b") "~/a" (windows)
+      (base: "") "~/..badfilename" (posix)
      (base: "") "~/..badfilename" (posix)
+      (base: "") "~" (posix)
      (base: "") "~" (posix)
+      (base: "") "~/" (posix)
      (base: "") "~/" (posix)
+      (base: "~/b") "~/a" (posix)
      (base: "~/b") "~/a" (posix)
+      (base: "") ".." (windows)
      (base: "") ".." (windows)
+      (base: "") ".." (posix)
      (base: "") ".." (posix)
+      (base: "") "~/" (windows)
      (base: "") "~/" (windows)
+      (base: "/tmp/gumby/ddd") "~" (windows)
      (base: "/tmp/gumby/ddd") "~" (windows)
+      (base: "/tmp/gumby/ddd") "~/a" (windows)
      (base: "/tmp/gumby/ddd") "~/a" (windows)
+    converts a pathname to an absolute pathname, using a complete path
+      (base: "C:\tmp") "a" (posix)
      (base: "C:\tmp") "a" (posix)
+      (base: "C:\tmp") "" (windows)
      (base: "C:\tmp") "" (windows)
+      (base: "C:\tmp\xxx") "../a" (windows)
      (base: "C:\tmp\xxx") "../a" (windows)
+      (base: "C:\tmp") "" (posix)
      (base: "C:\tmp") "" (posix)
+      (base: "/tmp") "a" (posix)
      (base: "/tmp") "a" (posix)
+      (base: "C:\tmp\xxx") "../a" (posix)
      (base: "C:\tmp\xxx") "../a" (posix)
+      assert
      assert
+      (base: "/") "." (posix)
      (base: "/") "." (posix)
+      (base: "/tmp") "" (posix)
      (base: "/tmp") "" (posix)
+      (base: "C:\tmp\xxx") "../a" (windows)
      (base: "C:\tmp\xxx") "../a" (windows)
+      (base: "/tmp") "" (windows)
      (base: "/tmp") "" (windows)
+      (base: "/tmp/xxx") "../a" (posix)
      (base: "/tmp/xxx") "../a" (posix)
+      (base: "C:\tmp") "a" (windows)
      (base: "C:\tmp") "a" (windows)
+      (base: "/tmp/xxx") "../a" (windows)
      (base: "/tmp/xxx") "../a" (windows)
+      (base: "/tmp/xxx") "../a" (windows)
      (base: "/tmp/xxx") "../a" (windows)
+      (base: "/") "." (windows)
      (base: "/") "." (windows)
+      (base: "/tmp/xxx") "../a" (posix)
      (base: "/tmp/xxx") "../a" (posix)
+      (base: "/tmp") "a" (windows)
      (base: "/tmp") "a" (windows)
+      (base: "C:\tmp\xxx") "../a" (posix)
      (base: "C:\tmp\xxx") "../a" (posix)
+    with drive
+      (base: "D:\") "foo" (windows)
      (base: "D:\") "foo" (windows)
+      (base: "D:\") "C:\foo" (posix)
      (base: "D:\") "C:\foo" (posix)
+      (base: "D:\") "C:\" (windows)
      (base: "D:\") "C:\" (windows)
+      (base: "D:\") "C:/foo" (posix)
      (base: "D:\") "C:/foo" (posix)
+      (base: "D:\") "C:\" (windows)
      (base: "D:\") "C:\" (windows)
+      (base: "D:") "foo" (posix)
      (base: "D:") "foo" (posix)
+      (base: "D:") "C:" (windows)
      (base: "D:") "C:" (windows)
+      (base: "D:\") "C:foo" (windows)
      (base: "D:\") "C:foo" (windows)
+      (base: "D:\") "C:\" (posix)
      (base: "D:\") "C:\" (posix)
+      (base: "D:/") "/foo" (posix)
      (base: "D:/") "/foo" (posix)
+      (base: "D:\") "/foo" (windows)
      (base: "D:\") "/foo" (windows)
+      (base: "D:/") "C:\foo" (windows)
      (base: "D:/") "C:\foo" (windows)
+      (base: "D:") "\foo" (windows)
      (base: "D:") "\foo" (windows)
+      (base: "D:/") "foo" (windows)
      (base: "D:/") "foo" (windows)
+      (base: "D:\") "C:\foo" (windows)
      (base: "D:\") "C:\foo" (windows)
+      (base: "D:\") "C:\foo" (windows)
      (base: "D:\") "C:\foo" (windows)
+      (base: "D:/") "C:\" (windows)
      (base: "D:/") "C:\" (windows)
+      (base: "D:\") "\foo" (windows)
      (base: "D:\") "\foo" (windows)
+      (base: "D:") "C:/" (windows)
      (base: "D:") "C:/" (windows)
+      (base: "D:") "C:foo" (windows)
      (base: "D:") "C:foo" (windows)
+      (base: "D:\") "foo" (windows)
      (base: "D:\") "foo" (windows)
+      (base: "D:\") "C:foo" (posix)
      (base: "D:\") "C:foo" (posix)
+      (base: "D:") "C:/" (posix)
      (base: "D:") "C:/" (posix)
+      (base: "D:") "/foo" (posix)
      (base: "D:") "/foo" (posix)
+      (base: "D:/") "C:/" (windows)
      (base: "D:/") "C:/" (windows)
+      (base: "D:\") "C:/" (windows)
      (base: "D:\") "C:/" (windows)
+      (base: "D:\") "C:foo" (posix)
      (base: "D:\") "C:foo" (posix)
+      (base: "D:\") "C:/" (windows)
      (base: "D:\") "C:/" (windows)
+      (base: "D:") "C:/foo" (windows)
      (base: "D:") "C:/foo" (windows)
+      (base: "D:\") "C:/foo" (windows)
      (base: "D:\") "C:/foo" (windows)
+      (base: "D:\") "/foo" (posix)
      (base: "D:\") "/foo" (posix)
+      (base: "D:/") "C:/foo" (windows)
      (base: "D:/") "C:/foo" (windows)
+      (base: "D:\") "C:/" (posix)
      (base: "D:\") "C:/" (posix)
+      (base: "D:/") "\foo" (posix)
      (base: "D:/") "\foo" (posix)
+      (base: "D:") "\foo" (posix)
      (base: "D:") "\foo" (posix)
+      (base: "D:/") "C:" (posix)
      (base: "D:/") "C:" (posix)
+      (base: "D:/") "C:\foo" (posix)
      (base: "D:/") "C:\foo" (posix)
+      (base: "D:") "C:\" (windows)
      (base: "D:") "C:\" (windows)
+      (base: "D:\") "C:/" (posix)
      (base: "D:\") "C:/" (posix)
+      (base: "D:/") "C:/foo" (posix)
      (base: "D:/") "C:/foo" (posix)
+      (base: "D:") "C:/foo" (posix)
      (base: "D:") "C:/foo" (posix)
+      (base: "D:\") "C:foo" (windows)
      (base: "D:\") "C:foo" (windows)
+      (base: "D:") "C:\foo" (windows)
      (base: "D:") "C:\foo" (windows)
+      (base: "D:/") "C:/" (posix)
      (base: "D:/") "C:/" (posix)
+      (base: "D:") "C:\" (posix)
      (base: "D:") "C:\" (posix)
+      (base: "D:\") "foo" (posix)
      (base: "D:\") "foo" (posix)
+      (base: "D:\") "C:\" (posix)
      (base: "D:\") "C:\" (posix)
+      (base: "D:/") "C:foo" (posix)
      (base: "D:/") "C:foo" (posix)
+      (base: "D:/") "C:" (windows)
      (base: "D:/") "C:" (windows)
+      (base: "D:/") "C:foo" (windows)
      (base: "D:/") "C:foo" (windows)
+      (base: "D:") "C:\foo" (posix)
      (base: "D:") "C:\foo" (posix)
+      (base: "D:\") "C:" (posix)
      (base: "D:\") "C:" (posix)
+      (base: "D:\") "C:\foo" (posix)
      (base: "D:\") "C:\foo" (posix)
+      (base: "D:\") "\foo" (windows)
      (base: "D:\") "\foo" (windows)
+      (base: "D:\") "\foo" (posix)
      (base: "D:\") "\foo" (posix)
+      (base: "D:\") "\foo" (posix)
      (base: "D:\") "\foo" (posix)
+      (base: "D:") "C:foo" (posix)
      (base: "D:") "C:foo" (posix)
+      (base: "D:") "foo" (windows)
      (base: "D:") "foo" (windows)
+      (base: "D:\") "C:/foo" (windows)
      (base: "D:\") "C:/foo" (windows)
+      (base: "D:\") "C:" (windows)
      (base: "D:\") "C:" (windows)
+      (base: "D:\") "C:" (windows)
      (base: "D:\") "C:" (windows)
+      (base: "D:\") "foo" (posix)
      (base: "D:\") "foo" (posix)
+      (base: "D:/") "C:\" (posix)
      (base: "D:/") "C:\" (posix)
+      (base: "D:/") "foo" (posix)
      (base: "D:/") "foo" (posix)
+      (base: "D:") "C:" (posix)
      (base: "D:") "C:" (posix)
+      (base: "D:\") "C:/foo" (posix)
      (base: "D:\") "C:/foo" (posix)
+      (base: "D:/") "\foo" (windows)
      (base: "D:/") "\foo" (windows)
+      (base: "D:/") "/foo" (windows)
      (base: "D:/") "/foo" (windows)
+      (base: "D:") "/foo" (windows)
      (base: "D:") "/foo" (windows)
+      (base: "D:\") "C:" (posix)
      (base: "D:\") "C:" (posix)
+    doesn't expand ~
    doesn't expand ~
+    converts a pathname to an absolute pathname, Ruby-Talk:18512
+      (base: "") ".a" (windows)
      (base: "") ".a" (windows)
+      (base: "") "a../b" (windows)
      (base: "") "a../b" (windows)
+      (base: "") "..a" (posix)
      (base: "") "..a" (posix)
+      (base: "") "..a" (windows)
      (base: "") "..a" (windows)
+      (base: "") ".a" (posix)
      (base: "") ".a" (posix)
+      (base: "") "a../b" (posix)
      (base: "") "a../b" (posix)
+  #absolute?
+     "C:/" (windows)
     "C:/" (windows)
+     "foo" (posix)
     "foo" (posix)
+     "foo" (windows)
     "foo" (windows)
+     "\\some\share" (posix)
     "\\some\share" (posix)
+     "C:" (posix)
     "C:" (posix)
+     "C:" (windows)
     "C:" (windows)
+     "./foo" (posix)
     "./foo" (posix)
+     "c:\\" (windows)
     "c:\\" (windows)
+     "//some/share/" (windows)
     "//some/share/" (windows)
+     "C:/foo/bar" (posix)
     "C:/foo/bar" (posix)
+     "\foo" (posix)
     "\foo" (posix)
+     "C:/" (posix)
     "C:/" (posix)
+     "/foo" (windows)
     "/foo" (windows)
+     "\\some\share" (windows)
     "\\some\share" (windows)
+     "C:\foo" (windows)
     "C:\foo" (windows)
+     "c:\\" (posix)
     "c:\\" (posix)
+     "foo" (windows)
     "foo" (windows)
+     "/foo" (posix)
     "/foo" (posix)
+     "foo" (posix)
     "foo" (posix)
+     "/./foo" (windows)
     "/./foo" (windows)
+     "./foo" (windows)
     "./foo" (windows)
+     "C:/foo" (posix)
     "C:/foo" (posix)
+     "\.\foo" (posix)
     "\.\foo" (posix)
+     "\\some\share\" (posix)
     "\\some\share\" (posix)
+     "\.\foo" (windows)
     "\.\foo" (windows)
+     "C:/foo" (windows)
     "C:/foo" (windows)
+     "//some/share" (windows)
     "//some/share" (windows)
+     "~\foo" (posix)
     "~\foo" (posix)
+     "C:\" (posix)
     "C:\" (posix)
+     "~/foo" (windows)
     "~/foo" (windows)
+     "C:/foo/bar" (windows)
     "C:/foo/bar" (windows)
+     "\foo" (windows)
     "\foo" (windows)
+     "C:\" (windows)
     "C:\" (windows)
+     ".\foo" (posix)
     ".\foo" (posix)
+     "\\some\share\" (windows)
     "\\some\share\" (windows)
+     "//some/share/" (posix)
     "//some/share/" (posix)
+     ".\foo" (windows)
     ".\foo" (windows)
+     "/./foo" (posix)
     "/./foo" (posix)
+     "~/foo" (posix)
     "~/foo" (posix)
+     "~\foo" (windows)
     "~\foo" (windows)
+     "C:\foo" (posix)
     "C:\foo" (posix)
+     "//some/share" (posix)
     "//some/share" (posix)
+  #join
+    resolving "/a" "" (posix)
    resolving "/a" "" (posix)
+    resolving "bar/baz" "foo" (posix)
    resolving "bar/baz" "foo" (posix)
+    resolving "{"bar", "baz"}" "foo" (windows)
    resolving "{"bar", "baz"}" "foo" (windows)
+    resolving ["/"]  "" (windows)
    resolving ["/"]  "" (windows)
+    resolving "{"/", "bar"}" "foo" (posix)
    resolving "{"/", "bar"}" "foo" (posix)
+    resolving ["bar\baz"]  "foo" (posix)
    resolving ["bar\baz"]  "foo" (posix)
+    resolving ["a"].each "/" (posix)
    resolving ["a"].each "/" (posix)
+    resolving ["bar"]  "\\\\foo" (posix)
    resolving ["bar"]  "\\\\foo" (posix)
+    resolving [""]  "/" (windows)
    resolving [""]  "/" (windows)
+    resolving ["\"].each "foo" (windows)
    resolving ["\"].each "foo" (windows)
+    resolving ["Program Files"].each "c:" (windows)
    resolving ["Program Files"].each "c:" (windows)
+    resolving ["\"]  "foo" (windows)
    resolving ["\"]  "foo" (windows)
+    resolving ["/bar"]  "/foo/" (posix)
    resolving ["/bar"]  "/foo/" (posix)
+    resolving ["Program Files"].each "c:\" (posix)
    resolving ["Program Files"].each "c:\" (posix)
+    resolving "Program Files" "c:/" (windows)
    resolving "Program Files" "c:/" (windows)
+    resolving "//bar" "///foo" (windows)
    resolving "//bar" "///foo" (windows)
+    resolving ["a"]  "/" (posix)
    resolving ["a"]  "/" (posix)
+    resolving "{"\\", "bar"}" "foo" (windows)
    resolving "{"\\", "bar"}" "foo" (windows)
+    resolving "a" "" (posix)
    resolving "a" "" (posix)
+    resolving ["//bar"]  "///foo" (posix)
    resolving ["//bar"]  "///foo" (posix)
+    resolving ["/bar"]  "/foo/" (windows)
    resolving ["/bar"]  "/foo/" (windows)
+    resolving "{"bar", ""}" "foo" (posix)
    resolving "{"bar", ""}" "foo" (posix)
+    resolving "\" "foo" (windows)
    resolving "\" "foo" (windows)
+    resolving "\\bar" "\\\foo" (windows)
    resolving "\\bar" "\\\foo" (windows)
+    resolving ["a"].each "/" (windows)
    resolving ["a"].each "/" (windows)
+    resolving "Program Files" "c:\" (windows)
    resolving "Program Files" "c:\" (windows)
+    resolving ["bar\baz"].each "foo" (windows)
    resolving ["bar\baz"].each "foo" (windows)
+    resolving "{"/", "bar"}" "foo" (windows)
    resolving "{"/", "bar"}" "foo" (windows)
+    resolving [""].each "/" (windows)
    resolving [""].each "/" (windows)
+    resolving ["//bar"]  "///foo" (windows)
    resolving ["//bar"]  "///foo" (windows)
+    resolving ["Program Files"].each "c:\" (windows)
    resolving ["Program Files"].each "c:\" (windows)
+    resolving "a" "/" (posix)
    resolving "a" "/" (posix)
+    resolving ["bar/baz"].each "foo" (windows)
    resolving ["bar/baz"].each "foo" (windows)
+    resolving ["bar"]  "\\\\foo" (windows)
    resolving ["bar"]  "\\\\foo" (windows)
+    resolving ["/a"].each "" (windows)
    resolving ["/a"].each "" (windows)
+    resolving "bar\baz" "foo" (windows)
    resolving "bar\baz" "foo" (windows)
+    resolving [""].each "" (posix)
    resolving [""].each "" (posix)
+    resolving "/bar" "/foo/" (posix)
    resolving "/bar" "/foo/" (posix)
+    resolving ["bar"].each "\\\\foo" (posix)
    resolving ["bar"].each "\\\\foo" (posix)
+    resolving "a" "\" (windows)
    resolving "a" "\" (windows)
+    resolving "bar\baz" "foo" (windows)
    resolving "bar\baz" "foo" (windows)
+    resolving "\a" "" (posix)
    resolving "\a" "" (posix)
+    resolving "{"/bar/", "/baz/"}" "/foo/" (posix)
    resolving "{"/bar/", "/baz/"}" "/foo/" (posix)
+    resolving ["a"].each "\" (windows)
    resolving ["a"].each "\" (windows)
+    resolving "{"\\", "\\", "bar"}" "foo" (posix)
    resolving "{"\\", "\\", "bar"}" "foo" (posix)
+    resolving ["/"].each "foo" (posix)
    resolving ["/"].each "foo" (posix)
+    resolving [""]  "" (posix)
    resolving [""]  "" (posix)
+    resolving "bar\baz" "foo" (posix)
    resolving "bar\baz" "foo" (posix)
+    resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (posix)
    resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (posix)
+    resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (windows)
    resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (windows)
+    resolving ["/"].each "foo" (windows)
    resolving ["/"].each "foo" (windows)
+    resolving ["\\bar"]  "\\\foo" (posix)
    resolving ["\\bar"]  "\\\foo" (posix)
+    resolving ["a"]  "" (windows)
    resolving ["a"]  "" (windows)
+    resolving ["\a"].each "" (posix)
    resolving ["\a"].each "" (posix)
+    resolving ["Program Files"]  "c:/" (posix)
    resolving ["Program Files"]  "c:/" (posix)
+    resolving ["/"]  "foo" (windows)
    resolving ["/"]  "foo" (windows)
+    resolving ["\a"].each "" (windows)
    resolving ["\a"].each "" (windows)
+    resolving ["a"].each "" (windows)
    resolving ["a"].each "" (windows)
+    resolving "{"bar", "baz"}" "foo" (posix)
    resolving "{"bar", "baz"}" "foo" (posix)
+    resolving "/a" "" (windows)
    resolving "/a" "" (windows)
+    resolving "{"/", "/", "bar"}" "foo" (posix)
    resolving "{"/", "/", "bar"}" "foo" (posix)
+    resolving "" "" (posix)
    resolving "" "" (posix)
+    resolving "bar" "\\\\foo" (posix)
    resolving "bar" "\\\\foo" (posix)
+    resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (windows)
    resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (windows)
+    resolving ["/"].each "" (windows)
    resolving ["/"].each "" (windows)
+    resolving ["bar"].each "///foo" (posix)
    resolving ["bar"].each "///foo" (posix)
+    resolving ["bar/baz"]  "foo" (windows)
    resolving ["bar/baz"]  "foo" (windows)
+    resolving "{"//bar//", "baz///"}" "foo" (windows)
    resolving "{"//bar//", "baz///"}" "foo" (windows)
+    resolving ["Program Files"].each "c:/" (posix)
    resolving ["Program Files"].each "c:/" (posix)
+    resolving "Program Files" "c:" (windows)
    resolving "Program Files" "c:" (windows)
+    resolving "bar" "///foo" (posix)
    resolving "bar" "///foo" (posix)
+    resolving "" "" (windows)
    resolving "" "" (windows)
+    resolving "{"/bar/", "/baz/"}" "/foo/" (windows)
    resolving "{"/bar/", "/baz/"}" "/foo/" (windows)
+    resolving "a" "\" (posix)
    resolving "a" "\" (posix)
+    resolving "/" "" (posix)
    resolving "/" "" (posix)
+    resolving ["Program Files"]  "c:\" (windows)
    resolving ["Program Files"]  "c:\" (windows)
+    resolving ["/a"]  "" (windows)
    resolving ["/a"]  "" (windows)
+    resolving ["bar"]  "///foo" (posix)
    resolving ["bar"]  "///foo" (posix)
+    resolving "/bar" "/foo/" (windows)
    resolving "/bar" "/foo/" (windows)
+    resolving ["a"]  "\" (posix)
    resolving ["a"]  "\" (posix)
+    resolving ["a"]  "\" (windows)
    resolving ["a"]  "\" (windows)
+    resolving ["/"]  "" (posix)
    resolving ["/"]  "" (posix)
+    resolving "a" "/" (windows)
    resolving "a" "/" (windows)
+    resolving "{"/foo", "/", "bar/", "/"}" "/" (posix)
    resolving "{"/foo", "/", "bar/", "/"}" "/" (posix)
+    resolving ["\bar"].each "\foo\" (posix)
    resolving ["\bar"].each "\foo\" (posix)
+    resolving [""]  "/" (posix)
    resolving [""]  "/" (posix)
+    resolving ["a"].each "" (posix)
    resolving ["a"].each "" (posix)
+    resolving "{"/", "/", "bar"}" "foo" (windows)
    resolving "{"/", "/", "bar"}" "foo" (windows)
+    resolving "bar\baz" "foo" (posix)
    resolving "bar\baz" "foo" (posix)
+    resolving ["//bar"].each "///foo" (windows)
    resolving ["//bar"].each "///foo" (windows)
+    resolving "a" "" (windows)
    resolving "a" "" (windows)
+    resolving ["\\bar"]  "\\\foo" (windows)
    resolving ["\\bar"]  "\\\foo" (windows)
+    resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (posix)
    resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (posix)
+    resolving ["Program Files"].each "c:/" (windows)
    resolving ["Program Files"].each "c:/" (windows)
+    resolving ["\"].each "foo" (posix)
    resolving ["\"].each "foo" (posix)
+    resolving ["\bar"]  "\foo\" (posix)
    resolving ["\bar"]  "\foo\" (posix)
+    resolving ["bar/baz"].each "foo" (posix)
    resolving ["bar/baz"].each "foo" (posix)
+    resolving ["\a"]  "" (posix)
    resolving ["\a"]  "" (posix)
+    resolving "Program Files" "c:\" (posix)
    resolving "Program Files" "c:\" (posix)
+    resolving "Program Files" "c:" (posix)
    resolving "Program Files" "c:" (posix)
+    resolving ["Program Files"]  "c:" (posix)
    resolving ["Program Files"]  "c:" (posix)
+    resolving "\bar" "\foo\" (windows)
    resolving "\bar" "\foo\" (windows)
+    resolving "{"bar", ""}" "foo" (windows)
    resolving "{"bar", ""}" "foo" (windows)
+    resolving ["\a"]  "" (windows)
    resolving ["\a"]  "" (windows)
+    resolving ["\\bar"].each "\\\foo" (posix)
    resolving ["\\bar"].each "\\\foo" (posix)
+    resolving ["a"]  "/" (windows)
    resolving ["a"]  "/" (windows)
+    resolving ["/bar"].each "/foo/" (windows)
    resolving ["/bar"].each "/foo/" (windows)
+    resolving ["bar\baz"].each "foo" (windows)
    resolving ["bar\baz"].each "foo" (windows)
+    resolving ["bar\baz"]  "foo" (windows)
    resolving ["bar\baz"]  "foo" (windows)
+    resolving "/" "" (windows)
    resolving "/" "" (windows)
+    resolving "" "/" (posix)
    resolving "" "/" (posix)
+    resolving ["Program Files"]  "c:\" (posix)
    resolving ["Program Files"]  "c:\" (posix)
+    resolving ["bar\baz"].each "foo" (posix)
    resolving ["bar\baz"].each "foo" (posix)
+    resolving ["bar/baz"]  "foo" (posix)
    resolving ["bar/baz"]  "foo" (posix)
+    resolving "{"/foo", "/", "bar/", "/"}" "/" (windows)
    resolving "{"/foo", "/", "bar/", "/"}" "/" (windows)
+    resolving ["\\bar"].each "\\\foo" (windows)
    resolving ["\\bar"].each "\\\foo" (windows)
+    resolving ["/a"].each "" (posix)
    resolving ["/a"].each "" (posix)
+    resolving "\\bar" "\\\foo" (posix)
    resolving "\\bar" "\\\foo" (posix)
+    resolving "{"bar", ""}" "foo" (posix)
    resolving "{"bar", ""}" "foo" (posix)
+    resolving ["/"]  "foo" (posix)
    resolving ["/"]  "foo" (posix)
+    resolving "/" "foo" (windows)
    resolving "/" "foo" (windows)
+    resolving [""].each "/" (posix)
    resolving [""].each "/" (posix)
+    resolving ["Program Files"]  "c:/" (windows)
    resolving ["Program Files"]  "c:/" (windows)
+    resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (windows)
    resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (windows)
+    resolving "//bar" "///foo" (posix)
    resolving "//bar" "///foo" (posix)
+    resolving [""].each "" (windows)
    resolving [""].each "" (windows)
+    resolving "\bar" "\foo\" (posix)
    resolving "\bar" "\foo\" (posix)
+    resolving ["\"]  "foo" (posix)
    resolving ["\"]  "foo" (posix)
+    resolving ["/a"]  "" (posix)
    resolving ["/a"]  "" (posix)
+    resolving ["a"]  "" (posix)
    resolving ["a"]  "" (posix)
+    resolving "{"\\", "bar"}" "foo" (posix)
    resolving "{"\\", "bar"}" "foo" (posix)
+    resolving "{"//bar//", "baz///"}" "foo" (posix)
    resolving "{"//bar//", "baz///"}" "foo" (posix)
+    resolving ["Program Files"]  "c:" (windows)
    resolving ["Program Files"]  "c:" (windows)
+    resolving "Program Files" "c:/" (posix)
    resolving "Program Files" "c:/" (posix)
+    resolving ["/"].each "" (posix)
    resolving ["/"].each "" (posix)
+    resolving ["bar\baz"].each "foo" (posix)
    resolving ["bar\baz"].each "foo" (posix)
+    resolving ["bar"].each "\\\\foo" (windows)
    resolving ["bar"].each "\\\\foo" (windows)
+    resolving ["bar\baz"]  "foo" (windows)
    resolving ["bar\baz"]  "foo" (windows)
+    resolving "{"\\", "\\", "bar"}" "foo" (windows)
    resolving "{"\\", "\\", "bar"}" "foo" (windows)
+    resolving "{"bar", ""}" "foo" (windows)
    resolving "{"bar", ""}" "foo" (windows)
+    resolving ["Program Files"].each "c:" (posix)
    resolving ["Program Files"].each "c:" (posix)
+    resolving ["\bar"]  "\foo\" (windows)
    resolving ["\bar"]  "\foo\" (windows)
+    resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (posix)
    resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (posix)
+    resolving "" "/" (windows)
    resolving "" "/" (windows)
+    resolving ["//bar"].each "///foo" (posix)
    resolving ["//bar"].each "///foo" (posix)
+    resolving ["a"].each "\" (posix)
    resolving ["a"].each "\" (posix)
+    resolving "/" "foo" (posix)
    resolving "/" "foo" (posix)
+    resolving ["bar"].each "///foo" (windows)
    resolving ["bar"].each "///foo" (windows)
+    resolving "bar" "\\\\foo" (windows)
    resolving "bar" "\\\\foo" (windows)
+    resolving [""]  "" (windows)
    resolving [""]  "" (windows)
+    resolving ["bar\baz"]  "foo" (posix)
    resolving ["bar\baz"]  "foo" (posix)
+    resolving "\a" "" (windows)
    resolving "\a" "" (windows)
+    resolving "\" "foo" (posix)
    resolving "\" "foo" (posix)
+    resolving ["\bar"].each "\foo\" (windows)
    resolving ["\bar"].each "\foo\" (windows)
+    resolving "bar" "///foo" (windows)
    resolving "bar" "///foo" (windows)
+    resolving ["/bar"].each "/foo/" (posix)
    resolving ["/bar"].each "/foo/" (posix)
+    resolving "bar/baz" "foo" (windows)
    resolving "bar/baz" "foo" (windows)
+    resolving ["bar"]  "///foo" (windows)
    resolving ["bar"]  "///foo" (windows)
+  #parents
+     "foo/bar/." (posix)
     "foo/bar/." (posix)
+     "/foo" (windows)
     "/foo" (windows)
+     "foo/../bar/" (windows)
     "foo/../bar/" (windows)
+     "./foo" (posix)
     "./foo" (posix)
+     "foo/bar/." (windows)
     "foo/bar/." (windows)
+     "foo/./bar/." (posix)
     "foo/./bar/." (posix)
+     ".\foo" (windows)
     ".\foo" (windows)
+     "." (windows)
     "." (windows)
+     "C:\Users\foo\bar.cr" (windows)
     "C:\Users\foo\bar.cr" (windows)
+     "foo\bar\" (windows)
     "foo\bar\" (windows)
+     "" (posix)
     "" (posix)
+     "foo/bar/../." (windows)
     "foo/bar/../." (windows)
+     "/" (posix)
     "/" (posix)
+     "m/" (posix)
     "m/" (posix)
+     "m/.gitignore" (windows)
     "m/.gitignore" (windows)
+     "\" (posix)
     "\" (posix)
+     "\Users\foo\bar.cr" (windows)
     "\Users\foo\bar.cr" (windows)
+     "foo/../bar/." (windows)
     "foo/../bar/." (windows)
+     "/Users/foo/bar.cr" (posix)
     "/Users/foo/bar.cr" (posix)
+     "C:folder" (posix)
     "C:folder" (posix)
+     "foo/bar/" (windows)
     "foo/bar/" (windows)
+     "\Users/foo\bar.cr" (posix)
     "\Users/foo\bar.cr" (posix)
+     "\Users\foo\bar.cr" (posix)
     "\Users\foo\bar.cr" (posix)
+     "foo" (posix)
     "foo" (posix)
+     "C:\" (posix)
     "C:\" (posix)
+     "foo\bar\" (posix)
     "foo\bar\" (posix)
+     "foo/./bar/" (posix)
     "foo/./bar/" (posix)
+     "Users/foo/bar.cr" (posix)
     "Users/foo/bar.cr" (posix)
+     "foo/bar/." (windows)
     "foo/bar/." (windows)
+     "" (windows)
     "" (windows)
+     "/" (windows)
     "/" (windows)
+     "C:\" (windows)
     "C:\" (windows)
+     "m/.gitignore" (posix)
     "m/.gitignore" (posix)
+     "foo\" (windows)
     "foo\" (windows)
+     "////" (windows)
     "////" (windows)
+     "foo/./bar/" (windows)
     "foo/./bar/" (windows)
+     "m//" (windows)
     "m//" (windows)
+     "C:" (windows)
     "C:" (windows)
+     "foo/../bar/." (posix)
     "foo/../bar/." (posix)
+     "foo/bar/." (posix)
     "foo/bar/." (posix)
+     "m" (windows)
     "m" (windows)
+     "C:\." (windows)
     "C:\." (windows)
+     "foo/bar/.." (posix)
     "foo/bar/.." (posix)
+     "foo/bar/./." (posix)
     "foo/bar/./." (posix)
+     "/m/" (posix)
     "/m/" (posix)
+     "m//a/b" (posix)
     "m//a/b" (posix)
+     "C:/" (windows)
     "C:/" (windows)
+     "C:\\folder" (posix)
     "C:\\folder" (posix)
+     "foo" (windows)
     "foo" (windows)
+     "C:\\folder" (windows)
     "C:\\folder" (windows)
+     "foo\" (posix)
     "foo\" (posix)
+     "foo/../bar/" (posix)
     "foo/../bar/" (posix)
+     "/." (posix)
     "/." (posix)
+     "foo/bar/.." (windows)
     "foo/bar/.." (windows)
+     "." (posix)
     "." (posix)
+     "C:folder" (windows)
     "C:folder" (windows)
+     "C:\Users\foo\bar.cr" (posix)
     "C:\Users\foo\bar.cr" (posix)
+     "C:" (posix)
     "C:" (posix)
+     "C:\folder" (posix)
     "C:\folder" (posix)
+     "foo/" (posix)
     "foo/" (posix)
+     "foo/bar/../." (posix)
     "foo/bar/../." (posix)
+     "////" (posix)
     "////" (posix)
+     "m//" (posix)
     "m//" (posix)
+     "m" (posix)
     "m" (posix)
+     "foo/./bar/." (windows)
     "foo/./bar/." (windows)
+     ".\foo" (posix)
     ".\foo" (posix)
+     "/m" (windows)
     "/m" (windows)
+     "/foo" (posix)
     "/foo" (posix)
+     "m//a/b" (windows)
     "m//a/b" (windows)
+     "foo/bar/" (posix)
     "foo/bar/" (posix)
+     "m/" (windows)
     "m/" (windows)
+     "foo/" (windows)
     "foo/" (windows)
+     "/." (windows)
     "/." (windows)
+     "/Users/foo/bar.cr" (windows)
     "/Users/foo/bar.cr" (windows)
+     "/m" (posix)
     "/m" (posix)
+     "./foo" (windows)
     "./foo" (windows)
+     "C:\." (posix)
     "C:\." (posix)
+     "C:/" (posix)
     "C:/" (posix)
+     "\Users/foo\bar.cr" (windows)
     "\Users/foo\bar.cr" (windows)
+     "foo/bar/./." (windows)
     "foo/bar/./." (windows)
+     "\" (windows)
     "\" (windows)
+     "C:\folder" (windows)
     "C:\folder" (windows)
+     "/m/" (windows)
     "/m/" (windows)
+     "Users/foo/bar.cr" (windows)
     "Users/foo/bar.cr" (windows)
+  #relative_to?
+    on "/a/b": "/c/d" (windows)
    on "/a/b": "/c/d" (windows)
+    on "./a/b": "a/b" (windows)
    on "./a/b": "a/b" (windows)
+    on "a/b": "./a/b" (posix)
    on "a/b": "./a/b" (posix)
+    on ".": ".." (posix)
    on ".": ".." (posix)
+    on "a/b": "a/b/c/d" (posix)
    on "a/b": "a/b/c/d" (posix)
+    on "a/b": "a/b/c/d" (windows)
    on "a/b": "a/b/c/d" (windows)
+    on "a": "/a" (windows)
    on "a": "/a" (windows)
+    on "a/b/c/d": "a/b/" (posix)
    on "a/b/c/d": "a/b/" (posix)
+    on "/a/b/c/d": "/a/b/" (posix)
    on "/a/b/c/d": "/a/b/" (posix)
+    on "/a/b": "/a/b" (posix)
    on "/a/b": "/a/b" (posix)
+    on "a/b/c": "a/c/d" (posix)
    on "a/b/c": "a/c/d" (posix)
+    on "a/b": "a/b/." (windows)
    on "a/b": "a/b/." (windows)
+    on "./a/b": "a/b" (posix)
    on "./a/b": "a/b" (posix)
+    on "a/b": "a/b/c" (windows)
    on "a/b": "a/b/c" (windows)
+    on "/": "/a/c" (posix)
    on "/": "/a/c" (posix)
+    on "/a/b/../c": "/a/b" (windows)
    on "/a/b/../c": "/a/b" (windows)
+    on ".": "a/b" (windows)
    on ".": "a/b" (windows)
+    on "/a/b": "/a/b/../c" (posix)
    on "/a/b": "/a/b/../c" (posix)
+    on "a/b": "c/d" (posix)
    on "a/b": "c/d" (posix)
+    on "a/b/.": "a/b" (windows)
    on "a/b/.": "a/b" (windows)
+    on "/a/b": "/a/b" (windows)
    on "/a/b": "/a/b" (windows)
+    on "a/b/.": "a/b" (posix)
    on "a/b/.": "a/b" (posix)
+    on "a/b": "a/b/c" (posix)
    on "a/b": "a/b/c" (posix)
+    on "/a/b": "/a/b/." (windows)
    on "/a/b": "/a/b/." (windows)
+    on "../../a/b": "../../a/b/c/d" (windows)
    on "../../a/b": "../../a/b/c/d" (windows)
+    on "/a/b/.": "/a/b" (windows)
    on "/a/b/.": "/a/b" (windows)
+    on "a": "/a" (posix)
    on "a": "/a" (posix)
+    on "/a/b/../c": "/a/b" (posix)
    on "/a/b/../c": "/a/b" (posix)
+    on "/ab/cd": "/ab/c" (windows)
    on "/ab/cd": "/ab/c" (windows)
+    on "a/b": "a/b/../c" (posix)
    on "a/b": "a/b/../c" (posix)
+    on "a/b": "c/d" (windows)
    on "a/b": "c/d" (windows)
+    on "/a/b": "/a/b/c/d" (posix)
    on "/a/b": "/a/b/c/d" (posix)
+    on "/a/b": "/a/b/c/d" (windows)
    on "/a/b": "/a/b/c/d" (windows)
+    on "a/b/../c": "a/b" (posix)
    on "a/b/../c": "a/b" (posix)
+    on "/": "/" (windows)
    on "/": "/" (windows)
+    on "/a/b/c/d": "/a/b/" (windows)
    on "/a/b/c/d": "/a/b/" (windows)
+    on "ab/cd": "ab/c" (windows)
    on "ab/cd": "ab/c" (windows)
+    on "/a/b/c/d": "/a/b" (posix)
    on "/a/b/c/d": "/a/b" (posix)
+    on "a/b/c/d": "a/b/" (windows)
    on "a/b/c/d": "a/b/" (windows)
+    on "/a/b": "/c/d" (posix)
    on "/a/b": "/c/d" (posix)
+    on "a/b/c/d": "a/b" (posix)
    on "a/b/c/d": "a/b" (posix)
+    on "a/b": "a/b" (posix)
    on "a/b": "a/b" (posix)
+    on "..": "a" (posix)
    on "..": "a" (posix)
+    on "..": "." (windows)
    on "..": "." (windows)
+    on "/ab/cd": "/ab/c" (posix)
    on "/ab/cd": "/ab/c" (posix)
+    on "..": "." (posix)
    on "..": "." (posix)
+    on "a/b": "a/b/." (posix)
    on "a/b": "a/b/." (posix)
+    on "/": "/a/c" (windows)
    on "/": "/a/c" (windows)
+    on "/a/b/c/d/": "/a/b" (windows)
    on "/a/b/c/d/": "/a/b" (windows)
+    on "/a/b/c/d/": "/a/b/" (windows)
    on "/a/b/c/d/": "/a/b/" (windows)
+    on ".": "a/b" (posix)
    on ".": "a/b" (posix)
+    on "/a/b/c": "/a/c/d" (windows)
    on "/a/b/c": "/a/c/d" (windows)
+    on "/a/b": "/a/b/../c" (windows)
    on "/a/b": "/a/b/../c" (windows)
+    on "ab/cd": "ab/cde" (windows)
    on "ab/cd": "ab/cde" (windows)
+    on "a/b/c/d/": "a/b/" (posix)
    on "a/b/c/d/": "a/b/" (posix)
+    on "a/b/c/d": "a/b" (windows)
    on "a/b/c/d": "a/b" (windows)
+    on "/a/b/c/d/": "/a/b/" (posix)
    on "/a/b/c/d/": "/a/b/" (posix)
+    on "/a/b/c": "/a/c/d" (posix)
    on "/a/b/c": "/a/c/d" (posix)
+    on "../../a/b": "../../a/b/c/d" (posix)
    on "../../a/b": "../../a/b/c/d" (posix)
+    on "a/b/c/d/": "a/b/" (windows)
    on "a/b/c/d/": "a/b/" (windows)
+    on "/a/b/.": "/a/b" (posix)
    on "/a/b/.": "/a/b" (posix)
+    on "a/b/c": "a/c/d" (windows)
    on "a/b/c": "a/c/d" (windows)
+    special windows paths
+      on "C:\Projects\a\..": "c:\projects" (posix)
      on "C:\Projects\a\..": "c:\projects" (posix)
+      on "C:\Projects": "c:\projects" (windows)
      on "C:\Projects": "c:\projects" (windows)
+      on "/a": "a" (windows)
      on "/a": "a" (windows)
+      on "C:\Projects": "c:\projects\src" (windows)
      on "C:\Projects": "c:\projects\src" (windows)
+      on "C:a\b\c": "c:a/b/d" (windows)
      on "C:a\b\c": "c:a/b/d" (windows)
+      on "C:a\b\c": "c:a/b/d" (posix)
      on "C:a\b\c": "c:a/b/d" (posix)
+      on "/a": "a" (posix)
      on "/a": "a" (posix)
+      on "C:": "D:" (windows)
      on "C:": "D:" (windows)
+      on "C:\Projects\a\..": "c:\projects" (windows)
      on "C:\Projects\a\..": "c:\projects" (windows)
+      on "C:": "D:" (posix)
      on "C:": "D:" (posix)
+      on "C:\": "D:\" (posix)
      on "C:\": "D:\" (posix)
+      on "C:a\b\c": "C:a/b/d" (posix)
      on "C:a\b\c": "C:a/b/d" (posix)
+      on "C:\Projects": "c:\projects" (posix)
      on "C:\Projects": "c:\projects" (posix)
+      on "C:\": "D:\" (windows)
      on "C:\": "D:\" (windows)
+      on "C:\Projects": "c:\projects\src" (posix)
      on "C:\Projects": "c:\projects\src" (posix)
+      on "C:a\b\c": "C:a/b/d" (windows)
      on "C:a\b\c": "C:a/b/d" (windows)
+    on "a/b": "./a/b" (windows)
    on "a/b": "./a/b" (windows)
+    on "/a/b": "/a/b/." (posix)
    on "/a/b": "/a/b/." (posix)
+    on "a/b": "a/b" (windows)
    on "a/b": "a/b" (windows)
+    on "a/b": "a/b/../c" (windows)
    on "a/b": "a/b/../c" (windows)
+    on "/../../a/b": "/../../a/b/c/d" (windows)
    on "/../../a/b": "/../../a/b/c/d" (windows)
+    on "../..": ".." (posix)
    on "../..": ".." (posix)
+    on "/": "/" (posix)
    on "/": "/" (posix)
+    on ".": ".." (windows)
    on ".": ".." (windows)
+    on "a/b/c/d/": "a/b" (posix)
    on "a/b/c/d/": "a/b" (posix)
+    on "a/b/c/d/": "a/b" (windows)
    on "a/b/c/d/": "a/b" (windows)
+    on "/ab/cd": "/ab/cde" (windows)
    on "/ab/cd": "/ab/cde" (windows)
+    on "/a/b/c/d/": "/a/b" (posix)
    on "/a/b/c/d/": "/a/b" (posix)
+    on "a/b/../c": "a/b" (windows)
    on "a/b/../c": "a/b" (windows)
+    on "../..": ".." (windows)
    on "../..": ".." (windows)
+    on "ab/cd": "ab/cde" (posix)
    on "ab/cd": "ab/cde" (posix)
+    on "..": "a" (windows)
    on "..": "a" (windows)
+    on "/../../a/b": "/../../a/b/c/d" (posix)
    on "/../../a/b": "/../../a/b/c/d" (posix)
+    on "/a/b/c/d": "/a/b" (windows)
    on "/a/b/c/d": "/a/b" (windows)
+    on "ab/cd": "ab/c" (posix)
    on "ab/cd": "ab/c" (posix)
+    on "/ab/cd": "/ab/cde" (posix)
    on "/ab/cd": "/ab/cde" (posix)
+  #stem
+     "bar/foo.txt." (windows)
     "bar/foo.txt." (windows)
+     "bar\.txt" (windows)
     "bar\.txt" (windows)
+     "foo.txt.txt/" (posix)
     "foo.txt.txt/" (posix)
+     "bar\foo.txt." (windows)
     "bar\foo.txt." (windows)
+     ".txt.txt" (windows)
     ".txt.txt" (windows)
+     ".txt.txt/" (posix)
     ".txt.txt/" (posix)
+     "foo./" (posix)
     "foo./" (posix)
+     "foo." (windows)
     "foo." (windows)
+     "foo.txt./" (windows)
     "foo.txt./" (windows)
+     "foo.txt." (posix)
     "foo.txt." (posix)
+     "foo./" (windows)
     "foo./" (windows)
+     "bar\foo.txt" (posix)
     "bar\foo.txt" (posix)
+     "bar\.txt.txt" (windows)
     "bar\.txt.txt" (windows)
+     ".txt.txt" (posix)
     ".txt.txt" (posix)
+     "bar/foo.txt.txt" (windows)
     "bar/foo.txt.txt" (windows)
+     "foo..txt" (windows)
     "foo..txt" (windows)
+     "bar/foo..txt" (windows)
     "bar/foo..txt" (windows)
+     "bar/foo.txt.txt" (posix)
     "bar/foo.txt.txt" (posix)
+     "foo.txt" (windows)
     "foo.txt" (windows)
+     "bar\.txt.txt" (posix)
     "bar\.txt.txt" (posix)
+     "bar\.txt" (posix)
     "bar\.txt" (posix)
+     "foo.txt" (posix)
     "foo.txt" (posix)
+     "bar\foo..txt" (windows)
     "bar\foo..txt" (windows)
+     "bar/foo." (posix)
     "bar/foo." (posix)
+     "foo.txt./" (posix)
     "foo.txt./" (posix)
+     "foo..txt/" (posix)
     "foo..txt/" (posix)
+     "bar\foo.txt" (windows)
     "bar\foo.txt" (windows)
+     "bar\foo.txt.txt" (posix)
     "bar\foo.txt.txt" (posix)
+     "bar/.txt.txt" (windows)
     "bar/.txt.txt" (windows)
+     "bar/foo.txt" (posix)
     "bar/foo.txt" (posix)
+     ".txt.txt/" (windows)
     ".txt.txt/" (windows)
+     "foo.txt." (windows)
     "foo.txt." (windows)
+     "foo.txt.txt" (windows)
     "foo.txt.txt" (windows)
+     "foo.txt.txt/" (windows)
     "foo.txt.txt/" (windows)
+     "bar/.txt.txt" (posix)
     "bar/.txt.txt" (posix)
+     "bar/foo.txt." (posix)
     "bar/foo.txt." (posix)
+     "bar\foo..txt" (posix)
     "bar\foo..txt" (posix)
+     "foo.txt.txt" (posix)
     "foo.txt.txt" (posix)
+     "bar\foo." (windows)
     "bar\foo." (windows)
+     "foo..txt/" (windows)
     "foo..txt/" (windows)
+     ".txt" (posix)
     ".txt" (posix)
+     "bar/foo." (windows)
     "bar/foo." (windows)
+     ".txt/" (windows)
     ".txt/" (windows)
+     "bar/.txt" (windows)
     "bar/.txt" (windows)
+     "bar/foo..txt" (posix)
     "bar/foo..txt" (posix)
+     ".txt/" (posix)
     ".txt/" (posix)
+     "foo.txt/" (windows)
     "foo.txt/" (windows)
+     "foo..txt" (posix)
     "foo..txt" (posix)
+     "bar\foo.txt.txt" (windows)
     "bar\foo.txt.txt" (windows)
+     "bar/.txt" (posix)
     "bar/.txt" (posix)
+     "bar/foo.txt" (windows)
     "bar/foo.txt" (windows)
+     "bar\foo.txt." (posix)
     "bar\foo.txt." (posix)
+     "foo.txt/" (posix)
     "foo.txt/" (posix)
+     "bar\foo." (posix)
     "bar\foo." (posix)
+     "foo." (posix)
     "foo." (posix)
+     ".txt" (windows)
     ".txt" (windows)
+  #extension
+     "test.ext/foo" (windows)
     "test.ext/foo" (windows)
+     "/foo/bar/foo." (windows)
     "/foo/bar/foo." (windows)
+     "test.ext/foo/" (posix)
     "test.ext/foo/" (posix)
+     "/foo/bar/baz.cr" (posix)
     "/foo/bar/baz.cr" (posix)
+     "test.ext\" (posix)
     "test.ext\" (posix)
+     "test.ext/" (posix)
     "test.ext/" (posix)
+     "/foo/bar/baz.cr.cz" (windows)
     "/foo/bar/baz.cr.cz" (windows)
+     "test.ext/foo" (posix)
     "test.ext/foo" (posix)
+     "/foo/bar/.profile.sh" (windows)
     "/foo/bar/.profile.sh" (windows)
+     "test" (windows)
     "test" (windows)
+     "test.ext/foo/" (windows)
     "test.ext/foo/" (windows)
+     "/foo/bar/.profile.sh" (posix)
     "/foo/bar/.profile.sh" (posix)
+     "test.ext/" (windows)
     "test.ext/" (windows)
+     "test/." (posix)
     "test/." (posix)
+     "/foo/bar/baz.cr.cz" (posix)
     "/foo/bar/baz.cr.cz" (posix)
+     "test" (posix)
     "test" (posix)
+     "/foo/bar/baz.cr" (windows)
     "/foo/bar/baz.cr" (windows)
+     "/foo/bar/foo." (posix)
     "/foo/bar/foo." (posix)
+     "test\." (posix)
     "test\." (posix)
+     "test\." (windows)
     "test\." (windows)
+     "test.ext\" (windows)
     "test.ext\" (windows)
+     "/foo/bar/.profile" (posix)
     "/foo/bar/.profile" (posix)
+     "/foo/bar/.profile" (windows)
     "/foo/bar/.profile" (windows)
+     "test/." (windows)
     "test/." (windows)
+  #each_part
+    iterator "./foo" (windows)
    iterator "./foo" (windows)
+    block "foo/bar/." (posix)
    block "foo/bar/." (posix)
+    iterator "/" (windows)
    iterator "/" (windows)
+    iterator "m//" (posix)
    iterator "m//" (posix)
+    block ".\foo" (posix)
    block ".\foo" (posix)
+    block "//some/share" (posix)
    block "//some/share" (posix)
+    iterator "C:\." (windows)
    iterator "C:\." (windows)
+    #parts "/." (posix)
    #parts "/." (posix)
+    #parts "C:folder" (posix)
    #parts "C:folder" (posix)
+    iterator "foo/bar/" (windows)
    iterator "foo/bar/" (windows)
+    iterator "Users/foo/bar.cr" (windows)
    iterator "Users/foo/bar.cr" (windows)
+    #parts "//some/share/bar.cr" (windows)
    #parts "//some/share/bar.cr" (windows)
+    block "m//" (posix)
    block "m//" (posix)
+    #parts "\\some\share\bar.cr" (windows)
    #parts "\\some\share\bar.cr" (windows)
+    block "m/" (posix)
    block "m/" (posix)
+    block "foo/bar/./." (windows)
    block "foo/bar/./." (windows)
+    iterator "\\some\share\" (windows)
    iterator "\\some\share\" (windows)
+    block "foo/bar/./." (posix)
    block "foo/bar/./." (posix)
+    block "C:" (posix)
    block "C:" (posix)
+    #parts "foo/bar/../." (windows)
    #parts "foo/bar/../." (windows)
+    iterator "\Users/foo\bar.cr" (windows)
    iterator "\Users/foo\bar.cr" (windows)
+    iterator "/m/" (posix)
    iterator "/m/" (posix)
+    iterator "C:\\folder" (windows)
    iterator "C:\\folder" (windows)
+    block "/." (posix)
    block "/." (posix)
+    #parts "foo" (windows)
    #parts "foo" (windows)
+    block "/Users/foo/bar.cr" (posix)
    block "/Users/foo/bar.cr" (posix)
+    iterator "foo/bar/./." (windows)
    iterator "foo/bar/./." (windows)
+    block "foo/./bar/" (windows)
    block "foo/./bar/" (windows)
+    iterator "\\some\share" (windows)
    iterator "\\some\share" (windows)
+    iterator "." (posix)
    iterator "." (posix)
+    block "C:/" (posix)
    block "C:/" (posix)
+    iterator "m/" (posix)
    iterator "m/" (posix)
+    iterator "//some/share" (windows)
    iterator "//some/share" (windows)
+    block "C:/" (windows)
    block "C:/" (windows)
+    block "foo/../bar/" (windows)
    block "foo/../bar/" (windows)
+    block "m/.gitignore" (windows)
    block "m/.gitignore" (windows)
+    #parts "foo/bar/.." (windows)
    #parts "foo/bar/.." (windows)
+    #parts "/m" (windows)
    #parts "/m" (windows)
+    iterator "C:/" (windows)
    iterator "C:/" (windows)
+    #parts "foo/bar/." (windows)
    #parts "foo/bar/." (windows)
+    #parts "C:\Users\foo\bar.cr" (windows)
    #parts "C:\Users\foo\bar.cr" (windows)
+    block "foo/" (posix)
    block "foo/" (posix)
+    block "foo/bar/." (windows)
    block "foo/bar/." (windows)
+    block "foo/bar/" (posix)
    block "foo/bar/" (posix)
+    iterator "C:\." (posix)
    iterator "C:\." (posix)
+    #parts "m//a/b" (windows)
    #parts "m//a/b" (windows)
+    block "Users/foo/bar.cr" (windows)
    block "Users/foo/bar.cr" (windows)
+    block "foo/./bar/." (posix)
    block "foo/./bar/." (posix)
+    iterator "C:\Users\foo\bar.cr" (posix)
    iterator "C:\Users\foo\bar.cr" (posix)
+    #parts "foo/" (windows)
    #parts "foo/" (windows)
+    iterator "m" (posix)
    iterator "m" (posix)
+    block "foo\" (posix)
    block "foo\" (posix)
+    #parts "//some/share" (posix)
    #parts "//some/share" (posix)
+    #parts "foo/../bar/." (posix)
    #parts "foo/../bar/." (posix)
+    #parts "foo\" (windows)
    #parts "foo\" (windows)
+    iterator "m/.gitignore" (posix)
    iterator "m/.gitignore" (posix)
+    iterator "foo/bar/.." (posix)
    iterator "foo/bar/.." (posix)
+    iterator "" (windows)
    iterator "" (windows)
+    block "foo/./bar/." (windows)
    block "foo/./bar/." (windows)
+    #parts "foo\bar\" (windows)
    #parts "foo\bar\" (windows)
+    #parts ".\foo" (windows)
    #parts ".\foo" (windows)
+    #parts "////" (windows)
    #parts "////" (windows)
+    iterator "foo/bar/." (posix)
    iterator "foo/bar/." (posix)
+    iterator "/m/" (windows)
    iterator "/m/" (windows)
+    iterator "m" (windows)
    iterator "m" (windows)
+    block "foo/../bar/." (windows)
    block "foo/../bar/." (windows)
+    block "\\some\share" (windows)
    block "\\some\share" (windows)
+    #parts "m/" (posix)
    #parts "m/" (posix)
+    #parts "m\" (windows)
    #parts "m\" (windows)
+    block "foo/" (windows)
    block "foo/" (windows)
+    block "\\some\share\" (posix)
    block "\\some\share\" (posix)
+    iterator "C:\folder" (windows)
    iterator "C:\folder" (windows)
+    block "C:\Users\foo\bar.cr" (posix)
    block "C:\Users\foo\bar.cr" (posix)
+    #parts "m//a/b" (posix)
    #parts "m//a/b" (posix)
+    #parts "C:\" (windows)
    #parts "C:\" (windows)
+    #parts "C:\\folder" (posix)
    #parts "C:\\folder" (posix)
+    block "/" (windows)
    block "/" (windows)
+    #parts "C:/" (posix)
    #parts "C:/" (posix)
+    iterator "foo\bar\" (windows)
    iterator "foo\bar\" (windows)
+    iterator "C:\Users\foo\bar.cr" (windows)
    iterator "C:\Users\foo\bar.cr" (windows)
+    block "//some/share/bar.cr" (posix)
    block "//some/share/bar.cr" (posix)
+    iterator "foo/bar/." (windows)
    iterator "foo/bar/." (windows)
+    block "foo/bar/.." (posix)
    block "foo/bar/.." (posix)
+    block "foo\bar\" (posix)
    block "foo\bar\" (posix)
+    iterator "foo/" (windows)
    iterator "foo/" (windows)
+    block "m\" (windows)
    block "m\" (windows)
+    #parts "C:\" (posix)
    #parts "C:\" (posix)
+    block "C:folder" (windows)
    block "C:folder" (windows)
+    #parts "/m" (posix)
    #parts "/m" (posix)
+    block "." (posix)
    block "." (posix)
+    iterator "foo" (posix)
    iterator "foo" (posix)
+    block "foo" (windows)
    block "foo" (windows)
+    #parts "//some/share/bar.cr" (posix)
    #parts "//some/share/bar.cr" (posix)
+    iterator "m\a/b" (windows)
    iterator "m\a/b" (windows)
+    #parts ".\foo" (posix)
    #parts ".\foo" (posix)
+    #parts "/m/" (posix)
    #parts "/m/" (posix)
+    #parts "foo\bar\" (posix)
    #parts "foo\bar\" (posix)
+    iterator "m\" (windows)
    iterator "m\" (windows)
+    #parts "/" (windows)
    #parts "/" (windows)
+    block "C:" (windows)
    block "C:" (windows)
+    #parts "foo/bar/." (posix)
    #parts "foo/bar/." (posix)
+    iterator "\\some\share" (posix)
    iterator "\\some\share" (posix)
+    block "m" (posix)
    block "m" (posix)
+    iterator "//some/share/" (posix)
    iterator "//some/share/" (posix)
+    block "m//a/b" (windows)
    block "m//a/b" (windows)
+    #parts "C:\folder" (windows)
    #parts "C:\folder" (windows)
+    #parts "foo/bar/../." (posix)
    #parts "foo/bar/../." (posix)
+    iterator "foo/bar/./." (posix)
    iterator "foo/bar/./." (posix)
+    #parts "foo/../bar/." (windows)
    #parts "foo/../bar/." (windows)
+    iterator "/." (posix)
    iterator "/." (posix)
+    block "/Users/foo/bar.cr" (windows)
    block "/Users/foo/bar.cr" (windows)
+    block "foo/../bar/." (posix)
    block "foo/../bar/." (posix)
+    iterator "/m" (windows)
    iterator "/m" (windows)
+    block "foo/./bar/" (posix)
    block "foo/./bar/" (posix)
+    block "////" (windows)
    block "////" (windows)
+    #parts "/Users/foo/bar.cr" (windows)
    #parts "/Users/foo/bar.cr" (windows)
+    iterator "foo/./bar/." (windows)
    iterator "foo/./bar/." (windows)
+    iterator "m\a/b" (posix)
    iterator "m\a/b" (posix)
+    #parts "/." (windows)
    #parts "/." (windows)
+    iterator "Users/foo/bar.cr" (posix)
    iterator "Users/foo/bar.cr" (posix)
+    #parts "Users/foo/bar.cr" (windows)
    #parts "Users/foo/bar.cr" (windows)
+    iterator "\\some\share\bar.cr" (posix)
    iterator "\\some\share\bar.cr" (posix)
+    #parts "foo/bar/./." (windows)
    #parts "foo/bar/./." (windows)
+    iterator "C:\" (posix)
    iterator "C:\" (posix)
+    block "foo/bar/../." (windows)
    block "foo/bar/../." (windows)
+    iterator "/foo" (posix)
    iterator "/foo" (posix)
+    #parts "C:/" (windows)
    #parts "C:/" (windows)
+    block "m//" (windows)
    block "m//" (windows)
+    block "C:\Users\foo\bar.cr" (windows)
    block "C:\Users\foo\bar.cr" (windows)
+    #parts "foo/./bar/." (windows)
    #parts "foo/./bar/." (windows)
+    iterator "foo/../bar/." (windows)
    iterator "foo/../bar/." (windows)
+    #parts "m//" (posix)
    #parts "m//" (posix)
+    iterator "\Users/foo\bar.cr" (posix)
    iterator "\Users/foo\bar.cr" (posix)
+    #parts "C:\." (posix)
    #parts "C:\." (posix)
+    iterator "C:folder" (posix)
    iterator "C:folder" (posix)
+    iterator "" (posix)
    iterator "" (posix)
+    block "\\some\share\bar.cr" (windows)
    block "\\some\share\bar.cr" (windows)
+    #parts "m" (windows)
    #parts "m" (windows)
+    iterator "foo/bar/.." (windows)
    iterator "foo/bar/.." (windows)
+    iterator "foo/bar/../." (posix)
    iterator "foo/bar/../." (posix)
+    iterator "foo/../bar/" (posix)
    iterator "foo/../bar/" (posix)
+    iterator "/" (posix)
    iterator "/" (posix)
+    block "////" (posix)
    block "////" (posix)
+    block "/" (posix)
    block "/" (posix)
+    block "C:\\folder" (posix)
    block "C:\\folder" (posix)
+    block "\\some\share\" (windows)
    block "\\some\share\" (windows)
+    block "m\a/b" (windows)
    block "m\a/b" (windows)
+    iterator "C:\\folder" (posix)
    iterator "C:\\folder" (posix)
+    #parts "." (windows)
    #parts "." (windows)
+    block "/." (windows)
    block "/." (windows)
+    block "//some/share/bar.cr" (windows)
    block "//some/share/bar.cr" (windows)
+    #parts "foo/" (posix)
    #parts "foo/" (posix)
+    iterator "C:\folder" (posix)
    iterator "C:\folder" (posix)
+    #parts "//some/share/" (windows)
    #parts "//some/share/" (windows)
+    block ".\foo" (windows)
    block ".\foo" (windows)
+    #parts "C:" (windows)
    #parts "C:" (windows)
+    iterator "/Users/foo/bar.cr" (windows)
    iterator "/Users/foo/bar.cr" (windows)
+    block "//some/share" (windows)
    block "//some/share" (windows)
+    #parts "./foo" (posix)
    #parts "./foo" (posix)
+    iterator "//some/share/bar.cr" (posix)
    iterator "//some/share/bar.cr" (posix)
+    block "/m" (windows)
    block "/m" (windows)
+    iterator "foo/bar/." (posix)
    iterator "foo/bar/." (posix)
+    #parts "C:\Users\foo\bar.cr" (posix)
    #parts "C:\Users\foo\bar.cr" (posix)
+    #parts "m/.gitignore" (posix)
    #parts "m/.gitignore" (posix)
+    #parts "foo/../bar/" (posix)
    #parts "foo/../bar/" (posix)
+    iterator "foo/./bar/" (windows)
    iterator "foo/./bar/" (windows)
+    block "m\" (posix)
    block "m\" (posix)
+    iterator "////" (windows)
    iterator "////" (windows)
+    iterator "foo/bar/." (windows)
    iterator "foo/bar/." (windows)
+    iterator "m/" (windows)
    iterator "m/" (windows)
+    #parts "\" (posix)
    #parts "\" (posix)
+    iterator "foo/bar/../." (windows)
    iterator "foo/bar/../." (windows)
+    iterator "m\" (posix)
    iterator "m\" (posix)
+    #parts "foo/bar/.." (posix)
    #parts "foo/bar/.." (posix)
+    block "//some/share/" (windows)
    block "//some/share/" (windows)
+    #parts "/" (posix)
    #parts "/" (posix)
+    #parts "foo/bar/." (windows)
    #parts "foo/bar/." (windows)
+    block "foo" (posix)
    block "foo" (posix)
+    iterator "foo/./bar/" (posix)
    iterator "foo/./bar/" (posix)
+    iterator "m//a/b" (posix)
    iterator "m//a/b" (posix)
+    #parts "./foo" (windows)
    #parts "./foo" (windows)
+    #parts "foo/../bar/" (windows)
    #parts "foo/../bar/" (windows)
+    iterator "m/.gitignore" (windows)
    iterator "m/.gitignore" (windows)
+    block "m" (windows)
    block "m" (windows)
+    block "/m/" (posix)
    block "/m/" (posix)
+    iterator "foo/./bar/." (posix)
    iterator "foo/./bar/." (posix)
+    block "Users/foo/bar.cr" (posix)
    block "Users/foo/bar.cr" (posix)
+    iterator "foo\" (windows)
    iterator "foo\" (windows)
+    iterator "/m" (posix)
    iterator "/m" (posix)
+    #parts "\\some\share" (posix)
    #parts "\\some\share" (posix)
+    #parts "\Users/foo\bar.cr" (posix)
    #parts "\Users/foo\bar.cr" (posix)
+    block "foo/bar/." (posix)
    block "foo/bar/." (posix)
+    block "" (posix)
    block "" (posix)
+    #parts "/foo" (posix)
    #parts "/foo" (posix)
+    iterator "m//" (windows)
    iterator "m//" (windows)
+    #parts "foo/bar/" (windows)
    #parts "foo/bar/" (windows)
+    #parts "C:" (posix)
    #parts "C:" (posix)
+    iterator "." (windows)
    iterator "." (windows)
+    block "\Users\foo\bar.cr" (posix)
    block "\Users\foo\bar.cr" (posix)
+    iterator "foo/../bar/" (windows)
    iterator "foo/../bar/" (windows)
+    block "C:\" (windows)
    block "C:\" (windows)
+    iterator "C:/" (posix)
    iterator "C:/" (posix)
+    iterator "/Users/foo/bar.cr" (posix)
    iterator "/Users/foo/bar.cr" (posix)
+    #parts "foo" (posix)
    #parts "foo" (posix)
+    block "C:\\folder" (windows)
    block "C:\\folder" (windows)
+    #parts "////" (posix)
    #parts "////" (posix)
+    #parts "foo/./bar/." (posix)
    #parts "foo/./bar/." (posix)
+    iterator "//some/share" (posix)
    iterator "//some/share" (posix)
+    #parts "C:\\folder" (windows)
    #parts "C:\\folder" (windows)
+    iterator "//some/share/bar.cr" (windows)
    iterator "//some/share/bar.cr" (windows)
+    #parts "m/" (windows)
    #parts "m/" (windows)
+    #parts "\" (windows)
    #parts "\" (windows)
+    #parts "m\a/b" (windows)
    #parts "m\a/b" (windows)
+    block "foo/../bar/" (posix)
    block "foo/../bar/" (posix)
+    block "C:\folder" (windows)
    block "C:\folder" (windows)
+    block "C:\." (posix)
    block "C:\." (posix)
+    iterator "foo/" (posix)
    iterator "foo/" (posix)
+    #parts "C:\." (windows)
    #parts "C:\." (windows)
+    block "." (windows)
    block "." (windows)
+    #parts "\\some\share\" (posix)
    #parts "\\some\share\" (posix)
+    iterator "foo\bar\" (posix)
    iterator "foo\bar\" (posix)
+    block "\Users/foo\bar.cr" (posix)
    block "\Users/foo\bar.cr" (posix)
+    #parts "m/.gitignore" (windows)
    #parts "m/.gitignore" (windows)
+    block "m\a/b" (posix)
    block "m\a/b" (posix)
+    iterator "foo/../bar/." (posix)
    iterator "foo/../bar/." (posix)
+    block "\\some\share" (posix)
    block "\\some\share" (posix)
+    #parts "foo/./bar/" (posix)
    #parts "foo/./bar/" (posix)
+    iterator "/." (windows)
    iterator "/." (windows)
+    #parts "//some/share/" (posix)
    #parts "//some/share/" (posix)
+    #parts "C:folder" (windows)
    #parts "C:folder" (windows)
+    block "/m" (posix)
    block "/m" (posix)
+    #parts "." (posix)
    #parts "." (posix)
+    #parts "/Users/foo/bar.cr" (posix)
    #parts "/Users/foo/bar.cr" (posix)
+    iterator "\\some\share\bar.cr" (windows)
    iterator "\\some\share\bar.cr" (windows)
+    #parts "//some/share" (windows)
    #parts "//some/share" (windows)
+    #parts "" (windows)
    #parts "" (windows)
+    #parts "C:\folder" (posix)
    #parts "C:\folder" (posix)
+    #parts "\\some\share\" (windows)
    #parts "\\some\share\" (windows)
+    #parts "m\a/b" (posix)
    #parts "m\a/b" (posix)
+    iterator "C:" (posix)
    iterator "C:" (posix)
+    block "\\some\share\bar.cr" (posix)
    block "\\some\share\bar.cr" (posix)
+    block "\Users\foo\bar.cr" (windows)
    block "\Users\foo\bar.cr" (windows)
+    block "" (windows)
    block "" (windows)
+    iterator ".\foo" (posix)
    iterator ".\foo" (posix)
+    #parts "foo/bar/." (posix)
    #parts "foo/bar/." (posix)
+    iterator "C:folder" (windows)
    iterator "C:folder" (windows)
+    block "\Users/foo\bar.cr" (windows)
    block "\Users/foo\bar.cr" (windows)
+    #parts "/m/" (windows)
    #parts "/m/" (windows)
+    block "foo/bar/.." (windows)
    block "foo/bar/.." (windows)
+    block "//some/share/" (posix)
    block "//some/share/" (posix)
+    iterator "\" (windows)
    iterator "\" (windows)
+    iterator "foo\" (posix)
    iterator "foo\" (posix)
+    iterator "./foo" (posix)
    iterator "./foo" (posix)
+    block "foo\" (windows)
    block "foo\" (windows)
+    #parts "\\some\share" (windows)
    #parts "\\some\share" (windows)
+    iterator "/foo" (windows)
    iterator "/foo" (windows)
+    block "/foo" (posix)
    block "/foo" (posix)
+    block "/foo" (windows)
    block "/foo" (windows)
+    #parts "foo\" (posix)
    #parts "foo\" (posix)
+    #parts "m" (posix)
    #parts "m" (posix)
+    block "\" (posix)
    block "\" (posix)
+    block "./foo" (windows)
    block "./foo" (windows)
+    block "m/" (windows)
    block "m/" (windows)
+    iterator "C:\" (windows)
    iterator "C:\" (windows)
+    iterator "\\some\share\" (posix)
    iterator "\\some\share\" (posix)
+    block "foo/bar/." (windows)
    block "foo/bar/." (windows)
+    iterator "C:" (windows)
    iterator "C:" (windows)
+    block "C:folder" (posix)
    block "C:folder" (posix)
+    iterator "////" (posix)
    iterator "////" (posix)
+    #parts "m\" (posix)
    #parts "m\" (posix)
+    block "C:\folder" (posix)
    block "C:\folder" (posix)
+    iterator "foo/bar/" (posix)
    iterator "foo/bar/" (posix)
+    block "m/.gitignore" (posix)
    block "m/.gitignore" (posix)
+    #parts "" (posix)
    #parts "" (posix)
+    #parts "foo/bar/" (posix)
    #parts "foo/bar/" (posix)
+    block "C:\." (windows)
    block "C:\." (windows)
+    #parts "\Users\foo\bar.cr" (windows)
    #parts "\Users\foo\bar.cr" (windows)
+    #parts "\\some\share\bar.cr" (posix)
    #parts "\\some\share\bar.cr" (posix)
+    block "foo/bar/../." (posix)
    block "foo/bar/../." (posix)
+    #parts "\Users/foo\bar.cr" (windows)
    #parts "\Users/foo\bar.cr" (windows)
+    block "m//a/b" (posix)
    block "m//a/b" (posix)
+    iterator "m//a/b" (windows)
    iterator "m//a/b" (windows)
+    block "C:\" (posix)
    block "C:\" (posix)
+    #parts "m//" (windows)
    #parts "m//" (windows)
+    block "foo\bar\" (windows)
    block "foo\bar\" (windows)
+    #parts "foo/bar/./." (posix)
    #parts "foo/bar/./." (posix)
+    iterator "\Users\foo\bar.cr" (posix)
    iterator "\Users\foo\bar.cr" (posix)
+    iterator ".\foo" (windows)
    iterator ".\foo" (windows)
+    block "./foo" (posix)
    block "./foo" (posix)
+    iterator "\" (posix)
    iterator "\" (posix)
+    #parts "foo/./bar/" (windows)
    #parts "foo/./bar/" (windows)
+    block "\" (windows)
    block "\" (windows)
+    iterator "//some/share/" (windows)
    iterator "//some/share/" (windows)
+    iterator "\Users\foo\bar.cr" (windows)
    iterator "\Users\foo\bar.cr" (windows)
+    #parts "Users/foo/bar.cr" (posix)
    #parts "Users/foo/bar.cr" (posix)
+    block "/m/" (windows)
    block "/m/" (windows)
+    block "foo/bar/" (windows)
    block "foo/bar/" (windows)
+    #parts "/foo" (windows)
    #parts "/foo" (windows)
+    #parts "\Users\foo\bar.cr" (posix)
    #parts "\Users\foo\bar.cr" (posix)
+    iterator "foo" (windows)
    iterator "foo" (windows)
+  #ends_with_separator?
+     "foo\" (posix)
     "foo\" (posix)
+     "foo/" (windows)
     "foo/" (windows)
+     "C:/" (posix)
     "C:/" (posix)
+     "foo\" (windows)
     "foo\" (windows)
+     "foo/" (posix)
     "foo/" (posix)
+     "C:/" (windows)
     "C:/" (windows)
+     "foo" (windows)
     "foo" (windows)
+     "foo/." (posix)
     "foo/." (posix)
+     "foo/bar" (windows)
     "foo/bar" (windows)
+     "foo/." (windows)
     "foo/." (windows)
+     "foo" (posix)
     "foo" (posix)
+     "foo/bar" (posix)
     "foo/bar" (posix)
+  .windows
     assert
    assert
     assert
    assert
+    joins components
    joins components
     assert
    assert
-    raises when mods by zero
    raises when mods by zero
-  does unary -
  does unary -
-  constants have right binary value
  constants have right binary value
-  hash
-    does for Float64
    does for Float64
-    does for Float32
    does for Float32
-  modulo
+    fails with null byte
    fails with null byte
     assert
    assert
+  #dirname
+     "C:\" (posix)
     "C:\" (posix)
+     "m" (windows)
     "m" (windows)
+     "/foo" (windows)
     "/foo" (windows)
+     "/foo//" (windows)
     "/foo//" (windows)
+     "C:/" (posix)
     "C:/" (posix)
+     "m//a/b" (posix)
     "m//a/b" (posix)
+     "foo" (posix)
     "foo" (posix)
+     "m//" (posix)
     "m//" (posix)
+     "foo/" (windows)
     "foo/" (windows)
+     "m" (posix)
     "m" (posix)
+     "m//a/b" (windows)
     "m//a/b" (windows)
+     "m/" (posix)
     "m/" (posix)
+     "C:" (windows)
     "C:" (windows)
+     "/m" (posix)
     "/m" (posix)
+     "C:" (posix)
     "C:" (posix)
+     "m/.gitignore" (posix)
     "m/.gitignore" (posix)
+     "m/.gitignore" (windows)
     "m/.gitignore" (windows)
+     "/m" (windows)
     "/m" (windows)
+     "/Users/foo/bar.cr" (posix)
     "/Users/foo/bar.cr" (posix)
+     "C:\" (windows)
     "C:\" (windows)
+     "/Users/foo/bar.cr" (windows)
     "/Users/foo/bar.cr" (windows)
+     "m//" (windows)
     "m//" (windows)
+     "C:/" (windows)
     "C:/" (windows)
+     "/foo" (posix)
     "/foo" (posix)
+     "/m/" (posix)
     "/m/" (posix)
+     "/foo//" (posix)
     "/foo//" (posix)
+     "m/" (windows)
     "m/" (windows)
+     "/m/" (windows)
     "/m/" (windows)
+     "/foo/" (windows)
     "/foo/" (windows)
+     "/foo/" (posix)
     "/foo/" (posix)
+     "foo/" (posix)
     "foo/" (posix)
+     "foo" (windows)
     "foo" (windows)
+  #root
+     "C:\foo" (windows)
     "C:\foo" (windows)
+     "//some/share" (posix)
     "//some/share" (posix)
+     "//foo" (posix)
     "//foo" (posix)
+     "\\foo" (posix)
     "\\foo" (posix)
+     "\\foo" (windows)
     "\\foo" (windows)
+     "/foo" (posix)
     "/foo" (posix)
+     "/foo" (windows)
     "/foo" (windows)
+     "C:foo" (windows)
     "C:foo" (windows)
+     "\foo" (posix)
     "\foo" (posix)
+     "\foo" (windows)
     "\foo" (windows)
+     "//foo" (windows)
     "//foo" (windows)
+     "//some/share" (windows)
     "//some/share" (windows)
+     "\\some\share" (posix)
     "\\some\share" (posix)
+     "\\some\share\" (windows)
     "\\some\share\" (windows)
+     "\\some\share\" (posix)
     "\\some\share\" (posix)
+     "C:\foo" (posix)
     "C:\foo" (posix)
+     "\\some\share" (windows)
     "\\some\share" (windows)
+     "C:/foo" (posix)
     "C:/foo" (posix)
+     "//some/share/" (posix)
     "//some/share/" (posix)
+     "C:foo" (posix)
     "C:foo" (posix)
+     "C:/foo" (windows)
     "C:/foo" (windows)
+     "//some/share/" (windows)
     "//some/share/" (windows)
+  #normalize
+    paths with backslash
+      removes .
+        normalizes "abc\." (windows)
        normalizes "abc\." (windows)
+        normalizes "abc\.\def" (posix)
        normalizes "abc\.\def" (posix)
+        normalizes "abc\.\def" (windows)
        normalizes "abc\.\def" (windows)
+        normalizes "\.\abc\def" (posix)
        normalizes "\.\abc\def" (posix)
+        normalizes "abc\." (posix)
        normalizes "abc\." (posix)
+        normalizes "\.\abc\def" (windows)
        normalizes "\.\abc\def" (windows)
+      already clean
+        normalizes "a\b\c" (windows)
        normalizes "a\b\c" (windows)
+        normalizes "..\.." (posix)
        normalizes "..\.." (posix)
+        normalizes "abc\def" (windows)
        normalizes "abc\def" (windows)
+        normalizes "\abc" (windows)
        normalizes "\abc" (windows)
+        normalizes "..\..\abc" (posix)
        normalizes "..\..\abc" (posix)
+        normalizes "\" (windows)
        normalizes "\" (windows)
+        normalizes "\abc" (posix)
        normalizes "\abc" (posix)
+        normalizes "a\b\c" (posix)
        normalizes "a\b\c" (posix)
+        normalizes "\" (posix)
        normalizes "\" (posix)
+        normalizes "..\..\abc" (windows)
        normalizes "..\..\abc" (windows)
+        normalizes "abc\def" (posix)
        normalizes "abc\def" (posix)
+        normalizes "..\.." (windows)
        normalizes "..\.." (windows)
+      removes ..
+        normalizes "abc\def\..\..\.." (posix)
        normalizes "abc\def\..\..\.." (posix)
+        normalizes "abc\def\..\ghi\..\jkl" (windows)
        normalizes "abc\def\..\ghi\..\jkl" (windows)
+        normalizes "\abc\def\..\..\.." (windows)
        normalizes "\abc\def\..\..\.." (windows)
+        normalizes "abc\def\..\.." (windows)
        normalizes "abc\def\..\.." (windows)
+        normalizes "abc\def\.." (posix)
        normalizes "abc\def\.." (posix)
+        normalizes "abc\def\..\.." (posix)
        normalizes "abc\def\..\.." (posix)
+        normalizes "abc\def\ghi\..\jkl" (posix)
        normalizes "abc\def\ghi\..\jkl" (posix)
+        normalizes "abc\def\..\..\.." (windows)
        normalizes "abc\def\..\..\.." (windows)
+        normalizes "abc\def\..\ghi\..\jkl" (posix)
        normalizes "abc\def\..\ghi\..\jkl" (posix)
+        normalizes "\abc\def\..\..\.." (posix)
        normalizes "\abc\def\..\..\.." (posix)
+        normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (posix)
        normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (posix)
+        normalizes "\abc\def\..\.." (posix)
        normalizes "\abc\def\..\.." (posix)
+        normalizes "abc\def\.." (windows)
        normalizes "abc\def\.." (windows)
+        normalizes "abc\def\ghi\..\jkl" (windows)
        normalizes "abc\def\ghi\..\jkl" (windows)
+        normalizes "\abc\def\..\.." (windows)
        normalizes "\abc\def\..\.." (windows)
+        normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (windows)
        normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (windows)
+      removes double slash
+        normalizes "abc\\def\\ghi" (windows)
        normalizes "abc\\def\\ghi" (windows)
+        normalizes "abc\\def\\ghi" (posix)
        normalizes "abc\\def\\ghi" (posix)
+        normalizes "\\abc" (posix)
        normalizes "\\abc" (posix)
+        normalizes "\\abc\\" (windows)
        normalizes "\\abc\\" (windows)
+        normalizes "\\abc\\" (posix)
        normalizes "\\abc\\" (posix)
+        normalizes "\\\abc" (posix)
        normalizes "\\\abc" (posix)
+        normalizes "abc\\" (posix)
        normalizes "abc\\" (posix)
+        normalizes "\\\abc" (windows)
        normalizes "\\\abc" (windows)
+        normalizes "\\abc" (windows)
        normalizes "\\abc" (windows)
+        normalizes "abc\\" (windows)
        normalizes "abc\\" (windows)
+      combinations
+        normalizes "abc\..\..\.\.\..\def" (posix)
        normalizes "abc\..\..\.\.\..\def" (posix)
+        normalizes "abc\\.\..\def" (windows)
        normalizes "abc\\.\..\def" (windows)
+        normalizes "abc\.\..\def" (windows)
        normalizes "abc\.\..\def" (windows)
+        normalizes "abc\\.\..\def" (posix)
        normalizes "abc\\.\..\def" (posix)
+        normalizes "abc\.\..\def" (posix)
        normalizes "abc\.\..\def" (posix)
+        normalizes "abc\..\..\.\.\..\def" (windows)
        normalizes "abc\..\..\.\.\..\def" (windows)
+      removes trailing slash
+        normalizes "abc\" (posix)
        normalizes "abc\" (posix)
+        normalizes "abc\def\" (windows)
        normalizes "abc\def\" (windows)
+        normalizes "a\b\c\" (windows)
        normalizes "a\b\c\" (windows)
+        normalizes "abc\" (windows)
        normalizes "abc\" (windows)
+        normalizes "..\" (posix)
        normalizes "..\" (posix)
+        normalizes "\abc\" (windows)
        normalizes "\abc\" (windows)
+        normalizes "a\b\c\" (posix)
        normalizes "a\b\c\" (posix)
+        normalizes ".\" (posix)
        normalizes ".\" (posix)
+        normalizes "abc\def\" (posix)
        normalizes "abc\def\" (posix)
+        normalizes ".\" (windows)
        normalizes ".\" (windows)
+        normalizes "..\" (windows)
        normalizes "..\" (windows)
+        normalizes "..\..\" (posix)
        normalizes "..\..\" (posix)
+        normalizes "..\..\" (windows)
        normalizes "..\..\" (windows)
+        normalizes "\abc\" (posix)
        normalizes "\abc\" (posix)
+    path with forward slash
+      removes .
+        normalizes "abc/." (posix)
        normalizes "abc/." (posix)
+        normalizes "abc/./def" (windows)
        normalizes "abc/./def" (windows)
+        normalizes "abc/." (windows)
        normalizes "abc/." (windows)
+        normalizes "/./abc/def" (posix)
        normalizes "/./abc/def" (posix)
+        normalizes "abc/./def" (posix)
        normalizes "abc/./def" (posix)
+        normalizes "/./abc/def" (windows)
        normalizes "/./abc/def" (windows)
+      removes trailing slash
+        normalizes "../" (posix)
        normalizes "../" (posix)
+        normalizes "a/b/c/" (windows)
        normalizes "a/b/c/" (windows)
+        normalizes "../" (windows)
        normalizes "../" (windows)
+        normalizes "abc/" (windows)
        normalizes "abc/" (windows)
+        normalizes "abc/def/" (posix)
        normalizes "abc/def/" (posix)
+        normalizes "abc/" (posix)
        normalizes "abc/" (posix)
+        normalizes "../../" (windows)
        normalizes "../../" (windows)
+        normalizes "a/b/c/" (posix)
        normalizes "a/b/c/" (posix)
+        normalizes "/abc/" (posix)
        normalizes "/abc/" (posix)
+        normalizes "../../" (posix)
        normalizes "../../" (posix)
+        normalizes "./" (windows)
        normalizes "./" (windows)
+        normalizes "/abc/" (windows)
        normalizes "/abc/" (windows)
+        normalizes "abc/def/" (windows)
        normalizes "abc/def/" (windows)
+        normalizes "./" (posix)
        normalizes "./" (posix)
+      removes double slash
+        normalizes "//abc" (windows)
        normalizes "//abc" (windows)
+        normalizes "abc//def//ghi" (windows)
        normalizes "abc//def//ghi" (windows)
+        normalizes "abc//" (windows)
        normalizes "abc//" (windows)
+        normalizes "abc//" (posix)
        normalizes "abc//" (posix)
+        normalizes "///abc" (windows)
        normalizes "///abc" (windows)
+        normalizes "//abc" (posix)
        normalizes "//abc" (posix)
+        normalizes "//abc//" (windows)
        normalizes "//abc//" (windows)
+        normalizes "abc//def//ghi" (posix)
        normalizes "abc//def//ghi" (posix)
+        normalizes "///abc" (posix)
        normalizes "///abc" (posix)
+        normalizes "//abc//" (posix)
        normalizes "//abc//" (posix)
+      combinations
+        normalizes "abc/../../././../def" (windows)
        normalizes "abc/../../././../def" (windows)
+        normalizes "abc//./../def" (posix)
        normalizes "abc//./../def" (posix)
+        normalizes "abc//./../def" (windows)
        normalizes "abc//./../def" (windows)
+        normalizes "abc/./../def" (windows)
        normalizes "abc/./../def" (windows)
+        normalizes "abc/./../def" (posix)
        normalizes "abc/./../def" (posix)
+        normalizes "abc/../../././../def" (posix)
        normalizes "abc/../../././../def" (posix)
+      removes ..
+        normalizes "abc/def/../../.." (posix)
        normalizes "abc/def/../../.." (posix)
+        normalizes "abc/def/ghi/../jkl" (windows)
        normalizes "abc/def/ghi/../jkl" (windows)
+        normalizes "abc/def/ghi/../jkl" (posix)
        normalizes "abc/def/ghi/../jkl" (posix)
+        normalizes "abc/def/.." (windows)
        normalizes "abc/def/.." (windows)
+        normalizes "/abc/def/../.." (windows)
        normalizes "/abc/def/../.." (windows)
+        normalizes "/abc/def/../../.." (windows)
        normalizes "/abc/def/../../.." (windows)
+        normalizes "/abc/def/../../.." (posix)
        normalizes "/abc/def/../../.." (posix)
+        normalizes "abc/def/../ghi/../jkl" (posix)
        normalizes "abc/def/../ghi/../jkl" (posix)
+        normalizes "abc/def/../../.." (windows)
        normalizes "abc/def/../../.." (windows)
+        normalizes "abc/def/../../../ghi/jkl/../../../mno" (posix)
        normalizes "abc/def/../../../ghi/jkl/../../../mno" (posix)
+        normalizes "abc/def/.." (posix)
        normalizes "abc/def/.." (posix)
+        normalizes "abc/def/../.." (windows)
        normalizes "abc/def/../.." (windows)
+        normalizes "abc/def/../ghi/../jkl" (windows)
        normalizes "abc/def/../ghi/../jkl" (windows)
+        normalizes "/abc/def/../.." (posix)
        normalizes "/abc/def/../.." (posix)
+        normalizes "abc/def/../../../ghi/jkl/../../../mno" (windows)
        normalizes "abc/def/../../../ghi/jkl/../../../mno" (windows)
+        normalizes "abc/def/../.." (posix)
        normalizes "abc/def/../.." (posix)
+      already clean
+        normalizes "a/b/c" (posix)
        normalizes "a/b/c" (posix)
+        normalizes "." (posix)
        normalizes "." (posix)
+        normalizes "abc" (windows)
        normalizes "abc" (windows)
+        normalizes "" (windows)
        normalizes "" (windows)
+        normalizes ".." (posix)
        normalizes ".." (posix)
+        normalizes "../.." (posix)
        normalizes "../.." (posix)
+        normalizes "" (posix)
        normalizes "" (posix)
+        normalizes "abc" (posix)
        normalizes "abc" (posix)
+        normalizes "abc/def" (posix)
        normalizes "abc/def" (posix)
+        normalizes ".." (windows)
        normalizes ".." (windows)
+        normalizes "../../abc" (posix)
        normalizes "../../abc" (posix)
+        normalizes "/" (windows)
        normalizes "/" (windows)
+        normalizes "abc/def" (windows)
        normalizes "abc/def" (windows)
+        normalizes "../.." (windows)
        normalizes "../.." (windows)
+        normalizes "../../abc" (windows)
        normalizes "../../abc" (windows)
+        normalizes "." (windows)
        normalizes "." (windows)
+        normalizes "a/b/c" (windows)
        normalizes "a/b/c" (windows)
+        normalizes "/" (posix)
        normalizes "/" (posix)
+        normalizes "/abc" (posix)
        normalizes "/abc" (posix)
+        normalizes "/abc" (windows)
        normalizes "/abc" (windows)
+    with drive
+      normalizes "C:\foo" (posix)
      normalizes "C:\foo" (posix)
+      normalizes "C:\" (windows)
      normalizes "C:\" (windows)
+      normalizes "C:foo" (windows)
      normalizes "C:foo" (windows)
+      normalizes "C:" (windows)
      normalizes "C:" (windows)
+      normalizes "C:" (posix)
      normalizes "C:" (posix)
+      normalizes "C:\foo" (windows)
      normalizes "C:\foo" (windows)
+      normalizes "C:foo" (posix)
      normalizes "C:foo" (posix)
+      normalizes "C:/foo" (windows)
      normalizes "C:/foo" (windows)
+      normalizes "C:/foo" (posix)
      normalizes "C:/foo" (posix)
+      normalizes "C:/" (windows)
      normalizes "C:/" (windows)
+      normalizes "C:/" (posix)
      normalizes "C:/" (posix)
+      normalizes "C:\" (posix)
      normalizes "C:\" (posix)
+  #<=>
+    case sensitivity
    case sensitivity
+p
+  can be used with tuples
  can be used with tuples
+Float32
+  #to_hexfloat
+    trimming
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    exponents
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    hexits
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    corner cases
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    special cases
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+  .parse_hexfloat
     assert
    assert
     assert
    assert
     assert
    assert
@@ -30586,8 +26576,6 @@
     assert
    assert
     assert
    assert
     assert
    assert
-    raises when mods by zero
    raises when mods by zero
-  #integer?
     assert
    assert
     assert
    assert
     assert
    assert
@@ -30596,9 +26584,37 @@
     assert
    assert
     assert
    assert
     assert
    assert
+    invalid hexfloats
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
     assert
    assert
     assert
    assert
-  **
     assert
    assert
     assert
    assert
     assert
    assert
@@ -30607,15 +26623,22 @@
     assert
    assert
     assert
    assert
     assert
    assert
-  does finite?
  does finite?
-  #prev_float
-    does for f32
    does for f32
-    does for f64
    does for f64
-  divmod
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+    special cases
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
     assert
    assert
     assert
    assert
     assert
    assert
@@ -30623,11 +26646,160 @@
     assert
    assert
     assert
    assert
     assert
    assert
+    values close to zero
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+    values close to MIN_POSITIVE and MAX
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
     assert
    assert
     assert
    assert
     assert
    assert
@@ -30636,585 +26808,320 @@
     assert
    assert
     assert
    assert
     assert
    assert
-  returns nil in <=> for NaN values (Float32)
  returns nil in <=> for NaN values (Float32)
-  clones
  clones
-  #inspect
-    does inspect for f32
    does inspect for f32
-    does inspect for f64 with IO
    does inspect for f64 with IO
-    does inspect for f32
    does inspect for f32
-    does inspect for f64
    does inspect for f64
+pp
+  can be used with tuples
  can be used with tuples
+Indexable::Mutable(T)
+  #map!
+    replaces each element with the block value
    replaces each element with the block value
+  #update
+    updates the value at the given index with the block
    updates the value at the given index with the block
+    raises on out-of-bound indices
    raises on out-of-bound indices
+    wraps negative indices
    wraps negative indices
+  #[]=
+    wraps negative indices
    wraps negative indices
+    raises on out-of-bound indices
    raises on out-of-bound indices
+    sets the value at the given index
    sets the value at the given index
+  #shuffle!
+    randomizes the order of all elements
    randomizes the order of all elements
+  #map_with_index!
+    without offset
+      yields each element and index to the block
      yields each element and index to the block
+    with offset
+      yields each element and index plus offset to the block
      yields each element and index plus offset to the block
+  #reverse!
+    reverses the order of all elements in place
    reverses the order of all elements in place
+  #swap
+    wraps negative indices
    wraps negative indices
+    raises on out-of-bound indices
    raises on out-of-bound indices
+    exchanges the values at two indices
    exchanges the values at two indices
+  #fill
+    with block + range
+      sets zero elements
      sets zero elements
+      yields index to the block and sets elements in a subrange
      yields index to the block and sets elements in a subrange
+      raises on out of bound start index
      raises on out of bound start index
+    with block + start + count
+      raises on out of bound start index
      raises on out of bound start index
+      yields index to the block and sets elements in a subrange
      yields index to the block and sets elements in a subrange
+      sets zero elements
      sets zero elements
+    without block
+      sets all elements to the same value
      sets all elements to the same value
+    without block, with range
+      sets zero elements
      sets zero elements
+      sets a subrange of elements to the same value
      sets a subrange of elements to the same value
+      raises on out of bound start index
      raises on out of bound start index
+    without block, with start + count
+      sets zero elements
      sets zero elements
+      raises on out of bound start index
      raises on out of bound start index
+      sets a subrange of elements to the same value
      sets a subrange of elements to the same value
+    with block
+      yields index to the block and sets all elements
      yields index to the block and sets all elements
+    with block + offset
+      yields index plus offset to the block and sets all elements
      yields index plus offset to the block and sets all elements
+  #rotate!
+    left-shifts all elements
    left-shifts all elements
+Digest::SHA256
+  does digest for "" in a block
  does digest for "" in a block
+  digest with file content
  digest with file content
+  does hexdigest for ""
  does hexdigest for ""
+  resets
  resets
+  does digest for "abc" in a block
  does digest for "abc" in a block
+  does digest for "The quick brown fox jumps over the lazy dog" in a block
  does digest for "The quick brown fox jumps over the lazy dog" in a block
+  resets
  resets
+  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
+  #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
+  can't call #final more than once
  can't call #final more than once
+  does digest for "a"
  does digest for "a"
+  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does digest for "0123456701234567012345670123456701234567012345670123456701234567"
+  does digest for "fooø"
  does digest for "fooø"
+  does digest for "a" in a block
  does digest for "a" in a block
+  resets
  resets
+  can't call #final more than once
  can't call #final more than once
+  resets
  resets
+  does base64digest for ""
  does base64digest for ""
+  does base64digest for "fooø"
  does base64digest for "fooø"
+  resets
  resets
+  does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
  does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567"
+  does hexdigest for "a"
  does hexdigest for "a"
+  does digest for "abc"
  does digest for "abc"
+  does digest for "The quick brown fox jumps over the lazy dog"
  does digest for "The quick brown fox jumps over the lazy dog"
+  resets
  resets
+  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
  does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block
+  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+  can't call #final more than once
  can't call #final more than once
+  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
  does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block
+  does hexdigest for "fooø"
  does hexdigest for "fooø"
+  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+  context are independent
  context are independent
+  .dup
+    leads to deterministic updates
    leads to deterministic updates
+    preserves value
    preserves value
+    leads to not sharing state
    leads to not sharing state
+    preserves type
    preserves type
+  resets
  resets
+  does digest for "fooø" in a block
  does digest for "fooø" in a block
+  does base64digest for "a"
  does base64digest for "a"
+  does digest for ""
  does digest for ""
+  does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+  does base64digest for "The quick brown fox jumps over the lazy dog"
  does base64digest for "The quick brown fox jumps over the lazy dog"
+  can't call #final more than once
  can't call #final more than once
+  can't call #final more than once
  can't call #final more than once
+  does hexdigest for "abc"
  does hexdigest for "abc"
+  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
  does base64digest for "0123456701234567012345670123456701234567012345670123456701234567"
+  does hexdigest for "The quick brown fox jumps over the lazy dog"
  does hexdigest for "The quick brown fox jumps over the lazy dog"
+  can't call #final more than once
  can't call #final more than once
+  does base64digest for "abc"
  does base64digest for "abc"
+  can't call #final more than once
  can't call #final more than once
+  returns the digest_size
  returns the digest_size
+HTTP::Server
+  #bind_tls
+    binds SSL server context
    binds SSL server context
+  doesn't raise on accept after close #2692
  doesn't raise on accept after close #2692
+  binds to unused port
  binds to unused port
+  #max_headers_size
+    sets and gets size
    sets and gets size
+    respects size on request
    respects size on request
+  #close
+    closes gracefully
    closes gracefully
+  closes the server
  closes the server
+  can process simultaneous SSL handshakes
  can process simultaneous SSL handshakes
+  reuses the TCP port (SO_REUSEPORT)
  reuses the TCP port (SO_REUSEPORT)
+  lists addresses
  lists addresses
+  handles exception during SSL handshake (#6577)
  handles exception during SSL handshake (#6577)
+  handles Expect: 100-continue correctly when body is read
  handles Expect: 100-continue correctly when body is read
+  #remote_address / #local_address
+    for https server
    for https server
+    for http server
    for http server
+  handles Expect: 100-continue correctly when body isn't read
  handles Expect: 100-continue correctly when body isn't read
+  binds to different ports
  binds to different ports
+  #bind
+    fails after close
    fails after close
+    with URI
+      accepts String
      accepts String
+      accepts URI
      accepts URI
+      parses SSL
      parses SSL
+      parses TCP
      parses TCP
+      fails with unknown scheme
      fails with unknown scheme
+      fails SSL with invalid params
      fails SSL with invalid params
+    fails after listen
    fails after listen
+  #max_request_line_size
+    respects size on request
    respects size on request
+    sets and gets size
    sets and gets size
+  #listen
+    fails after listen
    fails after listen
+    fails after close
    fails after close
+  #bind_unix
+    binds to different unix sockets
    binds to different unix sockets
+  #max_request_line_size
+    respects size on request
    respects size on request
+    sets and gets size
    sets and gets size
+System::Group
+  .find_by?(*, name)
+    returns a group by name
    returns a group by name
+    returns nil on nonexistent group
    returns nil on nonexistent group
   #to_s
-    does to_s for f32
    does to_s for f32
-    does to_s for f64
    does to_s for f64
-  round
-    assert
    assert
-    assert
    assert
-    assert
    assert
-OAuth::Consumer
-  gets authorize uri
-    without custom authorize uri
    without custom authorize uri
-    with absolute uri
    with absolute uri
-    with callback url
    with callback url
-    without callback url
    without callback url
-    without block
    without block
-OAuth2::AccessToken::Mac
-  dumps to json
  dumps to json
-  builds from json
  builds from json
-  authenticates request
  authenticates request
-  builds with null refresh token
  builds with null refresh token
-  computes signature
  computes signature
-Spec::ExampleGroup
-  #all_tags
-    should include ancestor tags
    should include ancestor tags
-  #randomize
-    with a seed
    with a seed
-    by default
    by default
-  #report
-    should include parent's description
    should include parent's description
-XML::Reader
-  #expand
-    raises an exception if the node could not be expanded
    raises an exception if the node could not be expanded
-    parses the content of the node and subtree
    parses the content of the node and subtree
-    is only available until the next read
    is only available until the next read
-  #value
-    reads node text value
    reads node text value
-  #read
-    reads all nodes
    reads all nodes
-    reads all non-blank nodes with NOBLANKS option
    reads all non-blank nodes with NOBLANKS option
-  #attributes_count
-    returns the node's number of attributes
    returns the node's number of attributes
-  #next_sibling
-    reads next sibling node in doc order, skipping subtrees
    reads next sibling node in doc order, skipping subtrees
-  #empty_element?
-    checks if the node is empty
    checks if the node is empty
-  .new
-    with default parser options
-      can be initialized from an io
      can be initialized from an io
-      can be initialized from a string
      can be initialized from a string
-    with custom parser options
-      can be initialized from a string
      can be initialized from a string
-      can be initialized from an io
      can be initialized from an io
-  #depth
-    returns the depth of the node
    returns the depth of the node
-  #expand?
-    parses the content of the node and subtree
    parses the content of the node and subtree
-    is only available until the next read
    is only available until the next read
+    returns a string representation
    returns a string representation
+  .find_by(*, name)
+    raises on nonexistent group
    raises on nonexistent group
+    returns a group by name
    returns a group by name
+  .find_by?(*, id)
+    returns nil on nonexistent group id
    returns nil on nonexistent group id
+    returns a group by id
    returns a group by id
   #name
-    reads node name
    reads node name
-  #read_inner_xml
-    reads the contents of the node including child nodes and markup
    reads the contents of the node including child nodes and markup
-  #move_to_next_attribute
-    moves to the next attribute of the node
    moves to the next attribute of the node
-  #has_attributes?
-    checks if the node has attributes
    checks if the node has attributes
-  #[]
-    reads node attributes
    reads node attributes
-    raises if attribute contains null byte
    raises if attribute contains null byte
-  #move_to_attribute
-    raises if attribute contains null byte
    raises if attribute contains null byte
-    moves to attribute with the specified name
    moves to attribute with the specified name
-  #move_to_element
-    moves to the element node that contains the current attribute node
    moves to the element node that contains the current attribute node
-  #node_type
-    returns the node type
    returns the node type
-  #next
-    reads next node in doc order, skipping subtrees
    reads next node in doc order, skipping subtrees
-  #move_to_first_attribute
-    moves to the first attribute of the node
    moves to the first attribute of the node
-  #to_unsafe
-    returns a pointer to the underlying LibXML::XMLTextReader
    returns a pointer to the underlying LibXML::XMLTextReader
-  #[]?
-    raises if attribute contains null byte
    raises if attribute contains null byte
-    reads node attributes
    reads node attributes
-  #read_outer_xml
-    reads the xml of the node including child nodes and markup
    reads the xml of the node including child nodes and markup
-UDPSocket
-  using IPv4
-    sends and receives messages
    sends and receives messages
-    #bind
    #bind
-    joins and transmits to multicast groups
    joins and transmits to multicast groups
-  using IPv6
-    joins and transmits to multicast groups
    joins and transmits to multicast groups
-    #bind
    #bind
-    sends and receives messages
    sends and receives messages
-  sends broadcast message
  sends broadcast message
-  #remote_address resets after connect
  #remote_address resets after connect
-  #connect with a IPv6 address
  #connect with a IPv6 address
-colorize
-  colorizes background with 8-bit color
  colorizes background with 8-bit color
-  inspects
  inspects
-  colorizes foreground with background
  colorizes foreground with background
-  colorizes mode with symbol
  colorizes mode with symbol
-  colorizes background
  colorizes background
-  colorizes with surround
  colorizes with surround
-  raises on unknown foreground color
  raises on unknown foreground color
-  colorizes foreground with 8-bit color
  colorizes foreground with 8-bit color
-  colorizes with surround and reset
  colorizes with surround and reset
-  colorizes with surround and no reset
  colorizes with surround and no reset
-  colorizes foreground with symbol
  colorizes foreground with symbol
-  toggles off and on
  toggles off and on
-  colorizes foreground with background with mode
  colorizes foreground with background with mode
-  colorizes mode
  colorizes mode
-  colorizes mode combination
  colorizes mode combination
-  colorizes background with true color
  colorizes background with true color
-  colorizes with to_s
  colorizes with to_s
-  colorizes without change
  colorizes without change
-  colorizes with surround and default
  colorizes with surround and default
-  colorizes foreground with true color
  colorizes foreground with true color
-  raises on unknown background color
  raises on unknown background color
-  toggles off
  toggles off
-  colorizes foreground
  colorizes foreground
-exit
-  exits normally with status 0
  exits normally with status 0
-  exits with given error code
  exits with given error code
-IO::Delimited
-  #write
-    raises
    raises
-  #read
-    with partial read
-      handles partial reads
      handles partial reads
-    without peeking
-      doesn't clobber the buffer on closely-offset partial matches
      doesn't clobber the buffer on closely-offset partial matches
-      doesn't read past the limit
      doesn't read past the limit
-      doesn't clobber active_delimiter_buffer
      doesn't clobber active_delimiter_buffer
-      handles the delimiter at the end
      handles the delimiter at the end
-      handles nearly a delimiter at the end
      handles nearly a delimiter at the end
-      doesn't read past the limit (char-by-char)
      doesn't read past the limit (char-by-char)
-      handles the delimiter at the start
      handles the delimiter at the start
-    with peeking
-      handles the case of peek matching first byte, not having enough room, but later matching
      handles the case of peek matching first byte, not having enough room, but later matching
-      handles the case of peek matching first byte, not having enough room, but rest not immediately matching (with a potential match afterwards)
      handles the case of peek matching first byte, not having enough room, but rest not immediately matching (with a potential match afterwards)
-      can peek if first byte found but doesn't fully match, and there's that first byte again in the peek buffer
      can peek if first byte found but doesn't fully match, and there's that first byte again in the peek buffer
-      can peek if first byte found but doesn't fully match, and the byte isn't there in the peek buffer
      can peek if first byte found but doesn't fully match, and the byte isn't there in the peek buffer
-      doesn't read past the limit, single byte
      doesn't read past the limit, single byte
-      doesn't read past the limit (char-by-char)
      doesn't read past the limit (char-by-char)
-      handles the case of peek matching first byte, not having enough room, but later not matching (limted slice)
      handles the case of peek matching first byte, not having enough room, but later not matching (limted slice)
-      handles nearly a delimiter at the end
      handles nearly a delimiter at the end
-      handles the case of peek matching first byte, not having enough room, but rest not matching
      handles the case of peek matching first byte, not having enough room, but rest not matching
-      handles the case of peek matching first byte, not having enough room, later only partially matching
      handles the case of peek matching first byte, not having enough room, later only partially matching
-      doesn't read past the limit
      doesn't read past the limit
-      doesn't clobber the buffer on closely-offset partial matches
      doesn't clobber the buffer on closely-offset partial matches
-      handles the case of peek matching first byte, not having enough room, but later not matching
      handles the case of peek matching first byte, not having enough room, but later not matching
-      handles the delimiter at the end
      handles the delimiter at the end
-      peeks, everything matches but we can't know what will happen after that
      peeks, everything matches but we can't know what will happen after that
-      handles the case of the active delimited buffer including the delimiter
      handles the case of the active delimited buffer including the delimiter
-      doesn't clobber active_delimiter_buffer
      doesn't clobber active_delimiter_buffer
-      handles the delimiter at the start
      handles the delimiter at the start
-      returns empty when there's no data
      returns empty when there's no data
-  #close
-    closes the underlying stream if sync_close is true
    closes the underlying stream if sync_close is true
-    stops reading
    stops reading
-  #gets with peeking when can't peek
-    peeks
    peeks
-    gets
    gets
-BigInt Math
-  pw2ceil
  pw2ceil
-  sqrt
  sqrt
-  isqrt
  isqrt
-OpenSSL::PKCS5
-  computes pbkdf2_hmac SHA384
  computes pbkdf2_hmac SHA384
-  computes pbkdf2_hmac MD5
  computes pbkdf2_hmac MD5
-  computes pbkdf2_hmac SHA256
  computes pbkdf2_hmac SHA256
-  computes pbkdf2_hmac SHA224
  computes pbkdf2_hmac SHA224
-  computes pbkdf2_hmac MD5
  computes pbkdf2_hmac MD5
-  computes pbkdf2_hmac SHA256
  computes pbkdf2_hmac SHA256
-  computes pbkdf2_hmac_sha1
  computes pbkdf2_hmac_sha1
-  computes pbkdf2_hmac SHA1
  computes pbkdf2_hmac SHA1
-  computes pbkdf2_hmac SHA512
  computes pbkdf2_hmac SHA512
-  computes pbkdf2_hmac SHA384
  computes pbkdf2_hmac SHA384
-  computes pbkdf2_hmac SHA256
  computes pbkdf2_hmac SHA256
-  computes pbkdf2_hmac MD5
  computes pbkdf2_hmac MD5
-  computes pbkdf2_hmac SHA512
  computes pbkdf2_hmac SHA512
-  computes pbkdf2_hmac SHA1
  computes pbkdf2_hmac SHA1
-  computes pbkdf2_hmac SHA1
  computes pbkdf2_hmac SHA1
-  computes pbkdf2_hmac MD5
  computes pbkdf2_hmac MD5
-  computes pbkdf2_hmac SHA224
  computes pbkdf2_hmac SHA224
-  computes pbkdf2_hmac SHA256
  computes pbkdf2_hmac SHA256
-  computes pbkdf2_hmac SHA224
  computes pbkdf2_hmac SHA224
-  computes pbkdf2_hmac SHA512
  computes pbkdf2_hmac SHA512
-  computes pbkdf2_hmac SHA512
  computes pbkdf2_hmac SHA512
-  computes pbkdf2_hmac SHA1
  computes pbkdf2_hmac SHA1
-  computes pbkdf2_hmac SHA384
  computes pbkdf2_hmac SHA384
-  computes pbkdf2_hmac SHA224
  computes pbkdf2_hmac SHA224
-  computes pbkdf2_hmac SHA384
  computes pbkdf2_hmac SHA384
-Compress::Deflate::Reader
-  should rewind
  should rewind
-  should read byte by byte (#4192)
  should read byte by byte (#4192)
-  .open
-    yields itself to block
    yields itself to block
-Socket::Addrinfo
-  #ip_address
+    is the same as the source name
    is the same as the source name
+  .find_by(*, id)
+    raises on nonexistent group name
    raises on nonexistent group name
+    returns a group by id
    returns a group by id
+  #id
+    is the same as the source ID
    is the same as the source ID
+Bool
+  to_unsafe
     assert
    assert
-  .udp
-    yields each result
    yields each result
-    returns an array
    returns an array
-  .tcp
-    returns an array
    returns an array
-    yields each result
    yields each result
-  Error
-    .new (deprecated)
    .new (deprecated)
-  #inspect
  #inspect
-  .resolve
-    eventually raises returned error
    eventually raises returned error
-    returns an array
    returns an array
-    yields each result
    yields each result
-    raises helpful message on getaddrinfo failure
    raises helpful message on getaddrinfo failure
-HTML
-  .unescape
-    numeric entities
-      does not escape non-space unicode control characters
      does not escape non-space unicode control characters
-      does not unescape Char::MAX_CODEPOINT
      does not unescape Char::MAX_CODEPOINT
-      does not escape noncharacter codepoints
      does not escape noncharacter codepoints
-      ISO-8859-1 replacement
      ISO-8859-1 replacement
-      decimal
      decimal
-      does not unescape characters above Char::MAX_CODEPOINT
      does not unescape characters above Char::MAX_CODEPOINT
-      space characters
      space characters
-      early termination
      early termination
-      hex
      hex
-      does not escape unicode surrogate characters
      does not escape unicode surrogate characters
-      ignores leading zeros
      ignores leading zeros
-    empty entity
    empty entity
-    unescapes javascript example from a string
    unescapes javascript example from a string
-    identity
    identity
-    invalid utf-8
    invalid utf-8
-    named entities
-      entity with numerical characters
      entity with numerical characters
-      without trailing semicolon
      without trailing semicolon
-      simple named entities
      simple named entities
-      multi codepoint
      multi codepoint
-      invalid entities
      invalid entities
-      end of string
      end of string
-  .escape
-    escapes dangerous characters from a string
    escapes dangerous characters from a string
-    does not change a safe string
    does not change a safe string
-VaList
-  works with C code
  works with C code
-BigRational
-  #>>
  #>>
-  #tdiv
  #tdiv
-  #to_f64
  #to_f64
-  #to_f32
  #to_f32
-  #to_f32!
  #to_f32!
-  #to_s
  #to_s
-  Float32#to_big_r
  Float32#to_big_r
-  clones
  clones
-  #//
  #//
-  BigDecimal#to_big_r
  BigDecimal#to_big_r
-  .new
-    raises if creating from NaN
    raises if creating from NaN
-    initialize
    initialize
-    raises if creating from infinity
    raises if creating from infinity
-    initializes from BigFloat with high precision
    initializes from BigFloat with high precision
-  #to_f!
  #to_f!
-  #trunc
  #trunc
-  #<=>
-    Int and Comparable
    Int and Comparable
-    compares against NaNs
    compares against NaNs
-    Float and Comparable
    Float and Comparable
-    BigInt and Comparable
    BigInt and Comparable
-    BigRational and Comparable
    BigRational and Comparable
-    BigFloat and Comparable
    BigFloat and Comparable
-  #round
-    rounding modes
-      default (=ties_even)
      default (=ties_even)
-      to_positive
      to_positive
-      ties_away
      ties_away
-      ties_even
      ties_even
-      to_zero
      to_zero
-      to_negative
      to_negative
-  Int#to_big_r
  Int#to_big_r
-  #%
  #%
-  #- (negation)
  #- (negation)
-  #+
  #+
-  #-
  #-
-  #*
  #*
-  #**
-    exponentiates with positive powers
    exponentiates with positive powers
-    exponentiates with negative powers
    exponentiates with negative powers
-    cannot raise 0 to a negative power
    cannot raise 0 to a negative power
-  #/
  #/
-  #ceil
  #ceil
-  #inspect
     assert
    assert
-  #format
  #format
-  Float64#to_big_r
  Float64#to_big_r
-  #to_big_f
  #to_big_f
-  #integer?
+  !
     assert
    assert
     assert
    assert
+  |
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
-  #to_big_r
  #to_big_r
-  #to_f64!
  #to_f64!
-  #numerator
  #numerator
-  #inv
  #inv
-  #denominator
  #denominator
-  #remainder
  #remainder
-  #<<
  #<<
-  #floor
  #floor
-  #to_f
  #to_f
-  is a number
  is a number
-  #abs
  #abs
-Mutex
-  checked
-    raises if locked recursively
    raises if locked recursively
-    raises if unlocks without lock
    raises if unlocks without lock
-    can't be unlocked by another fiber
    can't be unlocked by another fiber
-  reentrant
-    can't be unlocked by another fiber
    can't be unlocked by another fiber
-    can be locked many times from the same fiber
    can be locked many times from the same fiber
-    raises if unlocks without lock
    raises if unlocks without lock
-  works with multiple threads
  works with multiple threads
-  locks and unlocks
  locks and unlocks
-  unchecked
-    can lock and unlock from multiple fibers
    can lock and unlock from multiple fibers
-OAuth2::AccessToken::Bearer
-  builds from json with unknown key (#4437)
  builds from json with unknown key (#4437)
-  dumps to json
  dumps to json
-  authenticates request
  authenticates request
-  builds from json without token_type, assumes Bearer (#4503)
  builds from json without token_type, assumes Bearer (#4503)
-  builds from json
  builds from json
-  builds from json without expires_in (#4041)
  builds from json without expires_in (#4041)
-Slice
-  #same?
  #same?
-  does Bytes[]
  does Bytes[]
-  does []? with range
  does []? with range
-  does map_with_index!, with offset
  does map_with_index!, with offset
-  .copy_to(Slice)
-    raises if dst is smaller
    raises if dst is smaller
-    copies at most src.size
    copies at most src.size
-    copies bytes
    copies bytes
-  shuffles
  shuffles
-  does macro []
  does macro []
-  does []
  does []
-  raises if size is negative on new
  raises if size is negative on new
-  does []? with start and count
  does []? with start and count
-  .additive_identity
-    returns an empty slice
    returns an empty slice
-  #hexdump
-    works for empty slice
    works for empty slice
-    works for Bytes
    works for Bytes
-  "#reverse_each" iterator
  "#reverse_each" iterator
-  does copy_from pointer
  does copy_from pointer
-  creates read-only slice
  creates read-only slice
-  does macro [] with numbers (#3055)
  does macro [] with numbers (#3055)
-  does map!
  does map!
-  #clone
-    buffer copy
    buffer copy
-    clones primitive
    clones primitive
-    deep copy
    deep copy
-    clones non-primitive
    clones non-primitive
-  #[] keeps read-only value
  #[] keeps read-only value
-  "#each" yielding
  "#each" yielding
-  creates empty slice
  creates empty slice
-  does rindex
  does rindex
-  .copy_from(Slice)
-    copies at most src.size
    copies at most src.size
-    copies bytes
    copies bytes
-    raises if dst is smaller
    raises if dst is smaller
-  #unsafe_slice_of
-    reinterprets a slice's elements
    reinterprets a slice's elements
-  reverses
  reverses
-  "#each_index" iterator
  "#each_index" iterator
-  #to_unsafe_bytes
-    reinterprets a slice's elements as bytes
    reinterprets a slice's elements as bytes
-  optimizes hash for Bytes
  optimizes hash for Bytes
-  #hexstring
-    works for Bytes
    works for Bytes
-  does to_s for bytes
  does to_s for bytes
-  #[]
  #[]
-  uses percent vars in [] macro (#2954)
  uses percent vars in [] macro (#2954)
-  does to_s
  does to_s
-  ==
-    does ==
    does ==
-    does == with same type, different runtime instances
    does == with same type, different runtime instances
-    does == for bytes
    does == for bytes
-  does bytesize
  does bytesize
-  gets pointer and size
  gets pointer and size
-  does map_with_index, with offset
  does map_with_index, with offset
-  "#each" iterator
  "#each" iterator
-  #dup
-    don't deep copy
    don't deep copy
-    buffer copy
    buffer copy
-  .move_to(Slice)
-    handles intersecting ranges
    handles intersecting ranges
-    moves bytes
    moves bytes
-    raises if dst is smaller
    raises if dst is smaller
-    moves most src.size
    moves most src.size
-  does [] with start and count
  does [] with start and count
-  #+(Slice)
-    concatenates two slices
    concatenates two slices
-  .move_from(Slice)
-    handles intersecting ranges
    handles intersecting ranges
-    moves bytes
    moves bytes
-    raises if dst is smaller
    raises if dst is smaller
-    moves at most src.size
    moves at most src.size
-  does to_a
  does to_a
-  does map_with_index
  does map_with_index
-  does map
  does map
-  sort
-    #sort!
-      can sort! just by using <=> (#6608)
      can sort! just by using <=> (#6608)
-      without block
      without block
-      stable sort with a block
      stable sort with a block
-      raises if sort! block returns nil
      raises if sort! block returns nil
-      raises if <=> returns nil
      raises if <=> returns nil
-      sorts with invalid block (#4379)
      sorts with invalid block (#4379)
-      stable sort without a block
      stable sort without a block
-      with a block
      with a block
-    #sort
-      stable sort without a block
      stable sort without a block
-      without block
      without block
-      with a block
      with a block
-      stable sort with a block
      stable sort with a block
-    #sort_by
-      sorts
      sorts
-      stable sort
      stable sort
-    #unstable_sort
-      without block
      without block
-      with a block
      with a block
-    #unstable_sort_by
-      sorts
      sorts
-    #unstable_sort!
-      without block
      without block
-      raises if <=> returns nil
      raises if <=> returns nil
-      raises if sort! block returns nil
      raises if sort! block returns nil
-      with a block
      with a block
-      sorts with invalid block (#4379)
      sorts with invalid block (#4379)
-      can sort! just by using <=> (#6608)
      can sort! just by using <=> (#6608)
-    #unstable_sort_by
-      sorts
      sorts
-      calls given block exactly once for each element
      calls given block exactly once for each element
-    #sort_by
-      stable sort
      stable sort
-      sorts
      sorts
-      calls given block exactly once for each element
      calls given block exactly once for each element
-  .join
-    concatenates a slice of slices
    concatenates a slice of slices
-    concatenates an empty indexable of slices
    concatenates an empty indexable of slices
-    concatenates an indexable of slices
    concatenates an indexable of slices
-  rotate!
+  &
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+  clone
     assert
    assert
     assert
    assert
+  to_s
     assert
    assert
     assert
    assert
+  ^
     assert
    assert
     assert
    assert
     assert
    assert
     assert
    assert
+  hash
     assert
    assert
-  "#reverse_each" yielding
  "#reverse_each" yielding
-  <=>
-    compares (UInt8)
    compares (UInt8)
-    is comparable
    is comparable
-    compares
    compares
-  does copy_to pointer
  does copy_to pointer
-  hashes each item in collection
  hashes each item in collection
-  #+(Int)
  #+(Int)
-  "#each_index" yielding
  "#each_index" yielding
-  does []=
  does []=
-  does []?
  does []?
-  #fill
-    works for bytes
    works for bytes
-    replaces values in a subrange
    replaces values in a subrange
-  does map_with_index!
  does map_with_index!
-  does empty?
  does empty?
-UUID
-  serializes
-    #to_json
    #to_json
-    from_json_object_key?
    from_json_object_key?
+.__powidf2
.__powidf2
+#to_www_form
+  Number
  Number
+  Enum
  Enum
+  Bool
  Bool
+  String
  String
+  Array(T)
+    of a union of types
    of a union of types
+    of a single type
    of a single type
+  Nil
  Nil
+  Time
  Time
 String#each_grapheme
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -31223,23 +27130,39 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
@@ -31249,7 +27172,7 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -31260,15 +27183,29 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -31276,39 +27213,53 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -31316,35 +27267,48 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  GB9c
  GB9c
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
@@ -31353,6 +27317,13 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
@@ -31362,65 +27333,90 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  GB9c
  GB9c
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  GB9c
  GB9c
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
@@ -31431,31 +27427,39 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -31466,21 +27470,29 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -31489,35 +27501,47 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -31525,21 +27549,18 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -31547,83 +27568,99 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  GB9c
  GB9c
-  GB9c
  GB9c
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -31632,86 +27669,90 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -31720,15 +27761,11 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -31737,8 +27774,6 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -31747,21 +27782,26 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -31769,18 +27809,14 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
@@ -31789,12 +27825,11 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -31806,30 +27841,37 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -31837,54 +27879,54 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  GB9c
  GB9c
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  GB9c
  GB9c
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -31896,7 +27938,8 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -31905,15 +27948,17 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -31926,38 +27971,46 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
@@ -31965,24 +28018,29 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -31990,25 +28048,32 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -32018,9 +28083,11 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -32030,18 +28097,24 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -32050,51 +28123,56 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  GB9c
  GB9c
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  GB9c
  GB9c
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -32102,11 +28180,9 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -32115,26 +28191,17 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -32146,33 +28213,36 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  GB9c
  GB9c
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -32182,38 +28252,32 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -32221,45 +28285,33 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -32267,13 +28319,14 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
@@ -32281,8 +28334,12 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -32291,28 +28348,29 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -32320,9 +28378,12 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -32330,28 +28391,33 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -32359,24 +28425,22 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -32384,75 +28448,41 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
@@ -32467,29 +28497,26 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
@@ -32497,8 +28524,11 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -32508,12 +28538,11 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  GB9c
  GB9c
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -32523,58 +28552,50 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -32586,21 +28607,14 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -32610,43 +28624,21 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -32664,15 +28656,9 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -32686,23 +28672,23 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  GB9c
  GB9c
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -32710,27 +28696,19 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -32741,13 +28719,8 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -32756,112 +28729,95 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -32869,6 +28825,7 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -32878,28 +28835,20 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
@@ -32911,33 +28860,21 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  GB9c
  GB9c
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -32948,59 +28885,35 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -33009,24 +28922,18 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -33034,47 +28941,33 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -33085,18 +28978,11 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -33104,58 +28990,46 @@
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -33167,22 +29041,25 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  GB9c
  GB9c
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -33192,6 +29069,8 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -33201,22 +29080,24 @@
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -33225,16 +29106,19 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
@@ -33242,13 +29126,7 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
@@ -33257,24 +29135,27 @@
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
@@ -33282,342 +29163,3455 @@
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
-  string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
-  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-  string.dump iterator
  string.dump iterator
+  string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
   string.dump yielding
  string.dump yielding
+  string.dump yielding
  string.dump yielding
   string.dump iterator
  string.dump iterator
-Pointer::Appender(T)
-  #size
  #size
-  #<<
  #<<
-  .new
  .new
-  #to_slice
  #to_slice
+IO::MultiWriter
+  #read
+    raises
    raises
+  #close
+    stops reading
    stops reading
+    closes the underlying stream if sync_close is true
    closes the underlying stream if sync_close is true
+  #flush
+    writes to IO and File
    writes to IO and File
+  #write
+    writes to multiple IOs
    writes to multiple IOs
+LLVM::Type
+  .const_int
+    support Int128
    support Int128
+    support Int64
    support Int64
+HTTP::Headers
+  #serialize
  #serialize
+  doesn't match empty string
  doesn't match empty string
+  deletes
  deletes
+  does to_s
  does to_s
+  doesn't match word with comma separated value, partial match
  doesn't match word with comma separated value, partial match
+  #==
+    equals other instance
    equals other instance
+    case-insensitive keys
    case-insensitive keys
+    different internal representation
    different internal representation
+  adds array of string
  adds array of string
+  matches word with comma separated value, partial match
  matches word with comma separated value, partial match
+  fetches with block
  fetches with block
+  is case insensitive
  is case insensitive
+  gets all values
  gets all values
+  is empty
  is empty
+  raises an error if header value contains invalid character
  raises an error if header value contains invalid character
+  dups
  dups
+  validates content
  validates content
+  merges and return self
  merges and return self
+  fetches with default value
  fetches with default value
+  matches word with comma separated value, partial match (array)
  matches word with comma separated value, partial match (array)
+  adds string
  adds string
+  matches word among headers
  matches word among headers
+  doesn't match word with comma separated value, partial match (array)
  doesn't match word with comma separated value, partial match (array)
+  is gets with []?
  is gets with []?
+  clones
  clones
+  matches word
  matches word
+  can create header value with all US-ASCII visible chars (#2999)
  can create header value with all US-ASCII visible chars (#2999)
+  matches word with comma separated value
  matches word with comma separated value
+  matches word with comma separated value, case insensitive (#3626)
  matches word with comma separated value, case insensitive (#3626)
+  has key
  has key
+  it allows indifferent access for underscore and dash separated keys
  it allows indifferent access for underscore and dash separated keys
+  should retain the input casing
  should retain the input casing
+  does not matches word if missing header
  does not matches word if missing header
+Char
+  hex?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  does to_s for multibyte char
  does to_s for multibyte char
+  to_i rejects unsupported base (37)
  to_i rejects unsupported base (37)
+  #dump
  #dump
+  bytesize
+    does for ascii
    does for ascii
+    does for unicode
    does for unicode
+  -
+    assert
    assert
+  in_set?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    rejects invalid ranges
    rejects invalid ranges
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  does <=>
  does <=>
+  does to_i with 16 base
  does to_i with 16 base
+  index
+    assert
    assert
+    assert
    assert
+  does bytes
  does bytes
+  #inspect
  #inspect
+  does to_i with base 36
  does to_i with base 36
+  ascii_whitespace?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  does to_f
  does to_f
+  #titlecase?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  does number?
  does number?
+  #unicode_escape
  #unicode_escape
+  does ord for multibyte char
  does ord for multibyte char
+  #step
+    "basic by" iterator
    "basic by" iterator
+    "basic" iterator
    "basic" iterator
+    "basic by" yielding
    "basic by" yielding
+    "basic" yielding
    "basic" yielding
+  does to_i without a base
  does to_i without a base
+  #letter?
  #letter?
+  does each_byte
  does each_byte
+  lowercase?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  +
+    assert
    assert
+  #titlecase
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #ascii_control?
  #ascii_control?
+  uppercase?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  escapes
  escapes
+  does ascii_number?
  does ascii_number?
+  #pred
  #pred
+  +
+    does for both unicode
    does for both unicode
+    does for both ascii
    does for both ascii
+  escapes with unicode
  escapes with unicode
+  ascii_uppercase?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #===(:Int)
  #===(:Int)
+  #downcase
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #upcase
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  ascii_letter?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  does mark?
  does mark?
+  ascii_lowercase?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  does ascii?
  does ascii?
+  #printable?
  #printable?
+  to_i rejects unsupported base (1)
  to_i rejects unsupported base (1)
+  clone
+    assert
    assert
+  #succ
  #succ
+  alphanumeric?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  does to_s for single-byte char
  does to_s for single-byte char
+.__ashlti3
.__ashlti3
+FileUtils
+  tests rm with an existing path
  tests rm with an existing path
+  .rm_rf
+    delete recursively multiple directory
    delete recursively multiple directory
+    doesn't return error on nonexistent file
    doesn't return error on nonexistent file
+    delete recursively a directory
    delete recursively a directory
+    doesn't return error on nonexistent files
    doesn't return error on nonexistent files
+  .touch
+    creates file if it doesn't exist
    creates file if it doesn't exist
+    creates multiple files if they don't exists
    creates multiple files if they don't exists
+  .ln
+    fails with an extant destination
    fails with an extant destination
+    fails with a nonexistent source
    fails with a nonexistent source
+    creates a hardlink inside a destination dir
    creates a hardlink inside a destination dir
+    creates multiple hardlinks inside a destination dir
    creates multiple hardlinks inside a destination dir
+    creates a hardlink
    creates a hardlink
+  tests mkdir_p with multiple existing path
  tests mkdir_p with multiple existing path
+  tests mkdir with an existing path
  tests mkdir with an existing path
+  .cp_r
+    copies a directory recursively if destination exists leaving existing files
    copies a directory recursively if destination exists leaving existing files
+    copies a directory recursively
    copies a directory recursively
+    copies a directory recursively if destination exists and is empty
    copies a directory recursively if destination exists and is empty
+  tests mkdir and rmdir with multiple new paths
  tests mkdir and rmdir with multiple new paths
+  tests rmdir with multiple nonexistent path
  tests rmdir with multiple nonexistent path
+  tests rmdir with an nonexistent path
  tests rmdir with an nonexistent path
+  .cmp
+    compares two equal files
    compares two equal files
+    compares two different files
    compares two different files
+  .pwd
+    returns the current working directory
    returns the current working directory
+  .mv
+    raises an error if non correct arguments
    raises an error if non correct arguments
+    raises an error if dest is non correct
    raises an error if dest is non correct
+    moves multiple files to one place
    moves multiple files to one place
+    moves a file from one place to another
    moves a file from one place to another
+    moves all existing files to destination
    moves all existing files to destination
+  .cp
+    copies a file
    copies a file
+    raises an error if the directory doesn't exist
    raises an error if the directory doesn't exist
+    copies permissions
    copies permissions
+    copies multiple files
    copies multiple files
+  tests rmdir with multiple path that cannot be removed
  tests rmdir with multiple path that cannot be removed
+  .ln_sf
+    overwrites a destination file inside a dir
    overwrites a destination file inside a dir
+    creates multiple symlinks in a destination dir, with overwrites
    creates multiple symlinks in a destination dir, with overwrites
+    overwrites a destination named pipe
    overwrites a destination named pipe
+    overwrites a destination file
    overwrites a destination file
+    overwrites a destination dir in dir
    overwrites a destination dir in dir
+    creates a symlink even if there's nothing to overwrite
    creates a symlink even if there's nothing to overwrite
+  .cd
+    accepts a block
    accepts a block
+    raises
    raises
+    should work
    should work
+  tests mkdir_p with multiples new path
  tests mkdir_p with multiples new path
+  tests rm with nonexistent path
  tests rm with nonexistent path
+  tests mkdir and rmdir with a new path
  tests mkdir and rmdir with a new path
+  tests mkdir with multiples existing paths
  tests mkdir with multiples existing paths
+  tests rm with multiple existing paths
  tests rm with multiple existing paths
+  .rm_r
+    deletes a directory recursively
    deletes a directory recursively
+    doesn't follow symlinks
    doesn't follow symlinks
+  tests rm with some nonexistent paths
  tests rm with some nonexistent paths
+  tests rmdir with a path that cannot be removed
  tests rmdir with a path that cannot be removed
+  .ln_s
+    creates a symlink
    creates a symlink
+    creates multiple symlinks inside a destination dir
    creates multiple symlinks inside a destination dir
+    creates a symlink inside a destination dir
    creates a symlink inside a destination dir
+    works with a nonexistent source
    works with a nonexistent source
+    fails with an existing destination
    fails with an existing destination
+BigDecimal
+  performs arithmetic with other number types
  performs arithmetic with other number types
+  can be converted from scientific notation
  can be converted from scientific notation
+  #inspect
+    assert
    assert
+  keeps precision
  keeps precision
+  upkeeps hashing invariant
  upkeeps hashing invariant
+  is comparable with other types
  is comparable with other types
+  #trunc
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #round
+    #integer?
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    with digits
+      to_positive
      to_positive
+      ties_away
      ties_away
+      to_negative
      to_negative
+      ties_even
      ties_even
+      to_zero
      to_zero
+    rounding modes
+      ties_even
      ties_even
+      to_positive
      to_positive
+      default (=ties_even)
      default (=ties_even)
+      to_zero
      to_zero
+      to_negative
      to_negative
+      ties_away
      ties_away
+  raises if creating from infinity
  raises if creating from infinity
+  performs arithmetic with bigdecimals
  performs arithmetic with bigdecimals
+  initializes from valid input
  initializes from valid input
+  exponentiates
  exponentiates
+  can normalize quotient
  can normalize quotient
+  exponentiates with negative powers
  exponentiates with negative powers
+  #<=>
+    compares against NaNs
    compares against NaNs
+  can be converted from other types
  can be converted from other types
+  converts to string
  converts to string
+  #ceil
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  raises if creating from NaN
  raises if creating from NaN
+  handles modulus correctly
  handles modulus correctly
+  converts to other number types
  converts to other number types
+  hashes
  hashes
+  #floor
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  raises InvalidBigDecimalException when initializing from invalid input
  raises InvalidBigDecimalException when initializing from invalid input
+Log
+  building for type ignores parent source (types are absolute sources)
  building for type ignores parent source (types are absolute sources)
+  can build with Log = ::Log.for(self)
  can build with Log = ::Log.for(self)
+  can build nested with level override
  can build nested with level override
+  can build for class
  can build for class
+  can build with level override
  can build with level override
+  can build sources from nested
  can build sources from nested
+  can build for structs
  can build for structs
+  can build for module type
  can build for module type
+  can build for generic class (ignores generic args)
  can build for generic class (ignores generic args)
+Class
+  does to_s
  does to_s
+  clones
  clones
+  #nilable?
  #nilable?
+  does |
  does |
+  does ===
  does ===
+  does to_s with name redefined (#7292)
  does to_s with name redefined (#7292)
+  comparison operators
+    >=
    >=
+    >
    >
+    <
    <
+    <=
    <=
+  dups
  dups
+  casts, allowing the class to be passed in at runtime
  casts, allowing the class to be passed in at runtime
+Socket
+  .accept
  .accept
+  .unix
+    creates a unix socket
    creates a unix socket
+  closes on exec by default
  closes on exec by default
+  sends messages
  sends messages
+  #tty?
+    with non TTY
    with non TTY
+  #finalize
+    does not flush
    does not flush
+  accept raises timeout error if read_timeout is specified
  accept raises timeout error if read_timeout is specified
+  #bind
+    using IPv4
+      binds to port using Socket::IPAddress
      binds to port using Socket::IPAddress
+      binds to port using default IP
      binds to port using default IP
+      binds to port
      binds to port
+    using IPv6
+      binds to port using Socket::IPAddress
      binds to port using Socket::IPAddress
+      binds to port using default IP
      binds to port using default IP
+      binds to port
      binds to port
+  sends datagram over unix socket
  sends datagram over unix socket
+XML::XPathContext
+  finds with variable binding (float)
  finds with variable binding (float)
+  finds nodes
  finds nodes
+  finds boolean
  finds boolean
+  finds with variable binding (nodes)
  finds with variable binding (nodes)
+  finds with implicit (root) namespaces
  finds with implicit (root) namespaces
+  finds string
  finds string
+  finds with root namespaces (using prefix)
  finds with root namespaces (using prefix)
+  finds with root namespaces
  finds with root namespaces
+  raises on invalid xpath
  raises on invalid xpath
+  NodeSet#to_s
  NodeSet#to_s
+  returns nil with invalid xpath
  returns nil with invalid xpath
+  finds with variable binding (bool)
  finds with variable binding (bool)
+  finds with variable binding
  finds with variable binding
+  finds with explicit namespace
  finds with explicit namespace
+  finds with variable binding (node)
  finds with variable binding (node)
+  finds with variable binding (string)
  finds with variable binding (string)
+  finds number
  finds number
+Compress::Gzip
+  writes and reads to memory
  writes and reads to memory
+  reads file with extra fields from file system
  reads file with extra fields from file system
+  rewinds
  rewinds
+  writes and reads file with extra fields
  writes and reads file with extra fields
+XML
+  doesn't set invalid node name
  doesn't set invalid node name
+  parses HTML UTF-8 from IO (#13703)
  parses HTML UTF-8 from IO (#13703)
+  unlinks nodes
  unlinks nodes
+  deletes an attribute
  deletes an attribute
+  parses XML UTF-8 from IO (#13703)
  parses XML UTF-8 from IO (#13703)
+  #namespace
+    when the element does not have a namespace, but has namespace declarations
+      should return nil
      should return nil
+    when the node has a namespace
+      with a default prefix
+        return the default namespace
        return the default namespace
+      with a prefix
+        return the prefixed namespace
        return the prefixed namespace
+      without an explicit declaration on the node
+        returns the related namespace
        returns the related namespace
+    when the node does not have namespace
+      should return nil
      should return nil
+  gets version
  gets version
+  parses
  parses
+  #namespace_scopes
+    includes parent namespaces
    includes parent namespaces
+    returns empty array if no namespaces scopes exists
    returns empty array if no namespaces scopes exists
+    gets root namespaces scopes
    gets root namespaces scopes
+  #namespaces
+    gets root namespaces as hash
    gets root namespaces as hash
+    returns an empty hash if there are no namespaces
    returns an empty hash if there are no namespaces
+    includes parent namespaces
    includes parent namespaces
+  does to_s with correct encoding (#2319)
  does to_s with correct encoding (#2319)
+  escapes content
  escapes content
+  shows content when inspecting attribute
  shows content when inspecting attribute
+  gets empty content
  gets empty content
+  changes an attribute
  changes an attribute
+  #namespace_definitions
+    returns namespaces explicitly defined
    returns namespaces explicitly defined
+    returns an empty array if no namespaces are defined
    returns an empty array if no namespaces are defined
+  parses HTML UTF-8 from memory (#13703)
  parses HTML UTF-8 from memory (#13703)
+  sets node text/content
  sets node text/content
+  does to_s
  does to_s
+  .build_fragment
+    closes open elements
    closes open elements
+    builds fragment without XML declaration
    builds fragment without XML declaration
+  gets encoding
  gets encoding
+  parses from io
  parses from io
+  sets an attribute
  sets an attribute
+  gets encoding when nil
  gets encoding when nil
+  escapes content HTML fragment
  escapes content HTML fragment
+  raises exception on empty string
  raises exception on empty string
+  #errors
  #errors
+  navigates in tree
  navigates in tree
+  parses XML UTF-8 from memory (#13703)
  parses XML UTF-8 from memory (#13703)
+  reads big xml file (#1455)
  reads big xml file (#1455)
+  .build
  .build
+  doesn't set invalid node content
  doesn't set invalid node content
+  sets node name
  sets node name
+String UTF16
+  .from_utf16
+    in the range U+D800..U+DFFF
    in the range U+D800..U+DFFF
+    in the range U+E000 to U+FFFF
    in the range U+E000 to U+FFFF
+    handles null bytes
    handles null bytes
+    in the range U+10000..U+10FFFF
    in the range U+10000..U+10FFFF
+    in the range U+0000..U+D7FF
    in the range U+0000..U+D7FF
+    with pointer reads multiple strings
    with pointer reads multiple strings
+  to_utf16
+    in the range U+E000 to U+FFFF
    in the range U+E000 to U+FFFF
+    in the range U+D800..U+DFFF
    in the range U+D800..U+DFFF
+    in the range U+0000..U+D7FF
    in the range U+0000..U+D7FF
+    in the range U+10000..U+10FFFF
    in the range U+10000..U+10FFFF
+    in the range U+0000..U+FF
    in the range U+0000..U+FF
+BitArray
+  #any?
+    without block
+      returns true if any bits are set
      returns true if any bits are set
+  "#each" yielding
  "#each" yielding
+  #rotate!
+    rotates medium BitArray
    rotates medium BitArray
+    rotates large BitArray
    rotates large BitArray
+    rotates short BitArray
    rotates short BitArray
+    rotates empty BitArray
    rotates empty BitArray
+  #includes?
+    returns whether the given bit is included
    returns whether the given bit is included
+  #toggle
+    toggles a bit
    toggles a bit
+    raises on out of bound index
    raises on out of bound index
+    toggles with index == size and count
    toggles with index == size and count
+    toggles with index and count
    toggles with index and count
+    toggles with range
    toggles with range
+    toggles with index < 0 and count
    toggles with index < 0 and count
+    toggles with index and count, not enough bits
    toggles with index and count, not enough bits
+    raises on negative count
    raises on negative count
+    toggles zero bits correctly
    toggles zero bits correctly
+  #none?
+    without block
+      returns true if no bits are set
      returns true if no bits are set
+  does to_s and inspect
  does to_s and inspect
+  .new
+    without block
+      initializes with initial value
      initializes with initial value
+      initializes with false by default
      initializes with false by default
+      initializes with non-Int32 size
      initializes with non-Int32 size
+      initializes with unused bits cleared
      initializes with unused bits cleared
+    raises if size is negative
    raises if size is negative
+    with block
+      initializes elements with block
      initializes elements with block
+  sets first bit to false
  sets first bit to false
+  #tally
+    without block
+      tallies into the given hash
      tallies into the given hash
+      doesn't add key into the tally hash if element doesn't exist
      doesn't add key into the tally hash if element doesn't exist
+      tallies the number of set and cleared bits
      tallies the number of set and cleared bits
+  sets first bit to true
  sets first bit to true
+  #one?
+    returns true if exactly one bit is set
    returns true if exactly one bit is set
+  "#each_index" yielding
  "#each_index" yielding
+  #fill
+    without block, with range
+      raises if start index is out of range
      raises if start index is out of range
+      sets or clears a subrange of bits
      sets or clears a subrange of bits
+    without block
+      sets all bits
      sets all bits
+      clears all bits
      clears all bits
+    without block, with start and count
+      raises if start index is out of range
      raises if start index is out of range
+      sets or clears a subrange of bits
      sets or clears a subrange of bits
+  reads bits from slice
  reads bits from slice
+  []
+    gets with start and count exceeding size
    gets with start and count exceeding size
+    gets on inclusive range
    gets on inclusive range
+    zeroes unused bits
    zeroes unused bits
+    raises on index out of bounds
    raises on index out of bounds
+    doesn't exceed limits
    doesn't exceed limits
+    gets on inclusive range with negative indices
    gets on inclusive range with negative indices
+    gets (0..0) on empty array
    gets (0..0) on empty array
+    raises on too negative left bound
    raises on too negative left bound
+    gets with negative start
    gets with negative start
+    raises on negative count
    raises on negative count
+    gets 0, 0 on empty array
    gets 0, 0 on empty array
+    gets on endless range
    gets on endless range
+    raises on index out of bounds with start and count
    raises on index out of bounds with start and count
+    gets on exclusive range
    gets on exclusive range
+    gets with start and count
    gets with start and count
+    gets on large bitarrays
    gets on large bitarrays
+    gets on beginless range
    gets on beginless range
+    raises on negative count on empty Array
    raises on negative count on empty Array
+    raises on index out of bounds with range
    raises on index out of bounds with range
+    gets on range with start higher than end
    gets on range with start higher than end
+    does not cause overflow (#8494)
    does not cause overflow (#8494)
+    gets on medium bitarrays
    gets on medium bitarrays
+    returns empty if at end
    returns empty if at end
+    gets on exclusive range with negative indices
    gets on exclusive range with negative indices
+    raises on negative count
    raises on negative count
+    preserves equality
    preserves equality
+    gets on range with start higher than negative end
    gets on range with start higher than negative end
+  sets second bit to false
  sets second bit to false
+  provides dup
  provides dup
+  #rindex
+    without block
+      accepts a start offset
      accepts a start offset
+      returns index of last bit cleared
      returns index of last bit cleared
+      returns index of last bit set
      returns index of last bit set
+  has size
  has size
+  #count
+    without block
+      returns the number of bits set
      returns the number of bits set
+      returns the number of bits cleared
      returns the number of bits cleared
+  "#reverse_each" iterator
  "#reverse_each" iterator
+  is initially empty
  is initially empty
+  #all?
+    without block
+      returns true if all bits are set
      returns true if all bits are set
+  sets last bit to true with negative index
  sets last bit to true with negative index
+  ==
+    compares other type
    compares other type
+    compares other initialized with true (#8543)
    compares other initialized with true (#8543)
+    compares empty
    compares empty
+    compares elements
    compares elements
+    compares other
    compares other
+  sets second bit to true
  sets second bit to true
+  raises when out of bounds
  raises when out of bounds
+  "#reverse_each" yielding
  "#reverse_each" yielding
+  inverts all bits
  inverts all bits
+  #reverse!
+    reverses large BitArray
    reverses large BitArray
+    reverses empty BitArray
    reverses empty BitArray
+    reverses short BitArray
    reverses short BitArray
+    reverses medium BitArray
    reverses medium BitArray
+  read bits written from slice
  read bits written from slice
+  #index
+    without block
+      returns index of first bit cleared
      returns index of first bit cleared
+      accepts a start offset
      accepts a start offset
+      returns index of first bit set
      returns index of first bit set
+  "#each_index" iterator
  "#each_index" iterator
+  "#each" iterator
  "#each" iterator
+Exception
+  inspects with cause
  inspects with cause
+  allows subclassing #message
  allows subclassing #message
+  inspects
  inspects
+  collect memory within ensure block
  collect memory within ensure block
+IO::Buffered
+  does new with block
  does new with block
+  sync
+    syncs (write)
    syncs (write)
+  does puts with big string
  does puts with big string
+  encoding
+    decode
+      gets big string
      gets big string
+      gets
      gets
+      gets_to_end
      gets_to_end
+      gets big EUC-JP string
      gets big EUC-JP string
+      reads char
      reads char
+      gets with chomp = false
      gets with chomp = false
+  does gets with chomp = false
  does gets with chomp = false
+  shouldn't call unbuffered read if reading to an empty slice
  shouldn't call unbuffered read if reading to an empty slice
+  skips
  skips
+  does gets with char delimiter
  does gets with char delimiter
+  does gets with char and limit without off-by-one
  does gets with char and limit without off-by-one
+  does gets
  does gets
+  does gets with big line
  does gets with big line
+  read_buffering
+    works with IO#read_byte
    works with IO#read_byte
+    works with IO#read_byte (already buffered)
    works with IO#read_byte (already buffered)
+    works with IO#read
    works with IO#read
+    works with IO#read (already buffered)
    works with IO#read (already buffered)
+  does gets with char and limit when not found in buffer
  does gets with char and limit when not found in buffer
+  does puts
  does puts
+  does gets with unicode char delimiter
  does gets with unicode char delimiter
+  does gets with char and limit
  does gets with char and limit
+  can set buffer_size to the same value after first use
  can set buffer_size to the same value after first use
+  raises if invoking gets with negative limit
  raises if invoking gets with negative limit
+  does puts many times
  does puts many times
+  does gets with limit
  does gets with limit
+  reads char
  reads char
+  skips big
  skips big
+  can report buffer_size
  can report buffer_size
+  does gets with char and limit when not found in buffer (2)
  does gets with char and limit when not found in buffer (2)
+  can not set buffer_size after first use
  can not set buffer_size after first use
+  does gets with big line and \r\n
  does gets with big line and \r\n
+  rewinds
  rewinds
+  reads more than the buffer's internal capacity
  reads more than the buffer's internal capacity
+  peeks
  peeks
+  flush_on_newline
+    flushes on 
+
    flushes on 
+
+    doesn't write past count
    doesn't write past count
+  can set buffer_size
  can set buffer_size
+  reads byte
  reads byte
+  does gets with big line and chomp = false
  does gets with big line and chomp = false
+  writes more than the buffer's internal capacity
  writes more than the buffer's internal capacity
+  writes bytes
  writes bytes
+Log::Metadata::Value
+  initialize
  initialize
+  json
  json
+  accessors
  accessors
+Float::Printer::DiyFP
+  normalizes ordered
  normalizes ordered
+  converts min f64
  converts min f64
+  multiply rounding
  multiply rounding
+  normalizes min f64
  normalizes min f64
+  converts ordered 64
  converts ordered 64
+  multiply rounding
  multiply rounding
+  multiply
  multiply
+  converts ordered 32
  converts ordered 32
+  converts max f64
  converts max f64
+  converts min f32
  converts min f32
+  multiply
  multiply
+  normalizes max f64
  normalizes max f64
+  multiply big numbers
  multiply big numbers
+  converts max f32
  converts max f32
+Crypto::Bcrypt::Password
+  new
+    parses salt
    parses salt
+    validates the hash string has the required amount of parts
    validates the hash string has the required amount of parts
+    parses cost
    parses cost
+    parses digest
    parses digest
+    raises on unsupported version (#11584)
    raises on unsupported version (#11584)
+    parses version
    parses version
+  verify
+    verifies password version 2 is correct (#11584)
    verifies password version 2 is correct (#11584)
+    verifies password version 2y is correct
    verifies password version 2y is correct
+    verifies password version 2b is correct (#11584)
    verifies password version 2b is correct (#11584)
+    verifies password is correct
    verifies password is correct
+    verifies password version 2a is correct (#11584)
    verifies password version 2a is correct (#11584)
+    verifies password is incorrect
    verifies password is incorrect
+  create
+    generates salt
    generates salt
+    generates digest
    generates digest
+    uses cost
    uses cost
+OAuth::AuthorizationHeader
+  builds
  builds
+Digest::CRC32
+  calculates hash from UInt8 slices
  calculates hash from UInt8 slices
+  calculates digest from string
  calculates digest from string
+  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
+  can take a block
  can take a block
+  calculates hash from string
  calculates hash from string
+  should be able to calculate crc32
  should be able to calculate crc32
+  digest with file content
  digest with file content
+  context are independent
  context are independent
+  should be able to calculate crc32 combined
  should be able to calculate crc32 combined
+  calculates hash from unicode string
  calculates hash from unicode string
+  resets
  resets
+  calculates base64'd hash from string
  calculates base64'd hash from string
+  .dup
+    preserves type
    preserves type
+    preserves value
    preserves value
+    leads to deterministic updates
    leads to deterministic updates
+    leads to not sharing state
    leads to not sharing state
+  return the digest size
  return the digest size
+  can't call final twice
  can't call final twice
+  calculates hash of #to_slice
  calculates hash of #to_slice
+  #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
+UUID
+  parsing strings
+    returns nil if it has the wrong number of characters
    returns nil if it has the wrong number of characters
+    returns a properly parsed UUID
    returns a properly parsed UUID
+    returns nil if it has incorrect characters
    returns nil if it has incorrect characters
+  initialize from static array
+    works with static array and version
    works with static array and version
+    works with static array, variant and version
    works with static array, variant and version
+    works with static array and variant
    works with static array and variant
+    works with static array only
    works with static array only
+  #==
+    matches identical UUIDs
    matches identical UUIDs
+  initialize with String
+    works with string and version
    works with string and version
+    works with string only
    works with string only
+    works with string and variant
    works with string and variant
+    can be built from strings
    can be built from strings
+  v1
+    returns true if UUID is v1, false otherwise
    returns true if UUID is v1, false otherwise
+  v4!
+    returns true if UUID is v4, raises otherwise
    returns true if UUID is v4, raises otherwise
+  v3
+    generates DNS based names correctly
    generates DNS based names correctly
+    generates X500 based names correctly
    generates X500 based names correctly
+    generates OID based names correctly
    generates OID based names correctly
+    generates URL based names correctly
    generates URL based names correctly
+  v4?
+    returns true if UUID is v4, false otherwise
    returns true if UUID is v4, false otherwise
+  v7
+    generates UUIDs that are sortable with 1ms precision
    generates UUIDs that are sortable with 1ms precision
+    generates a v7 UUID
    generates a v7 UUID
+  initializes zeroed UUID
  initializes zeroed UUID
+  fails on invalid arguments when creating
  fails on invalid arguments when creating
+  #<=>
+    correctly compares two UUIDs
    correctly compares two UUIDs
+  v2
+    returns true if UUID is v2, false otherwise
    returns true if UUID is v2, false otherwise
+  v5
+    generates OID based names correctly
    generates OID based names correctly
+    generates X500 based names correctly
    generates X500 based names correctly
+    generates DNS based names correctly
    generates DNS based names correctly
+    generates URL based names correctly
    generates URL based names correctly
+  initializes with slice
  initializes with slice
+  initializes from UUID
  initializes from UUID
+  supports different string formats
+    hexstring
    hexstring
+    urn
    urn
+    normal output
    normal output
+  random initialize
+    does inspect
    does inspect
+    works with no options
    works with no options
+    works with variant
    works with variant
+    works with version
    works with version
+exit
+  exits with given error code
  exits with given error code
+  exits normally with status 0
  exits normally with status 0
+Log::Dispatcher
+  create dispatcher from enum
  create dispatcher from enum
+Log::Metadata
+  empty?
  empty?
+  []?
  []?
+  extend
  extend
+  json
  json
+  extend against empty values without creating a new instance
  extend against empty values without creating a new instance
+  #dup
+    creates a shallow copy
    creates a shallow copy
+  defrags
  defrags
+  []
  []
+  ==
  ==
+  empty
  empty
+Regex
+  #inspect
+    with literal-compatible options
+      escapes
      escapes
+      prints flags
      prints flags
+    with non-literal-compatible options
+      escapes
      escapes
+      prints flags
      prints flags
+  #==
  #==
+  .error?
  .error?
+  #matches?
+    options
+      anchored
      anchored
+      extended
+        ignores white space
        ignores white space
+        ignores comments
        ignores comments
+      multiline
+        anchor
        anchor
+        span
        span
+      ignore case
      ignore case
+    with options
+      deprecated Regex::Options
      deprecated Regex::Options
+      Regex::MatchOptions
      Regex::MatchOptions
+    doesn't crash with a large single line string
    doesn't crash with a large single line string
+    basic
    basic
+    unicode
+      unicode support
      unicode support
+      matches unicode char against [[:print:]] (#11262)
      matches unicode char against [[:print:]] (#11262)
+      matches unicode char against [[:alnum:]] (#4704)
      matches unicode char against [[:alnum:]] (#4704)
+      invalid codepoint
      invalid codepoint
+  #===
+    basic
    basic
+    assigns captures
    assigns captures
+  #match
+    with options
+      deprecated Regex::Options
      deprecated Regex::Options
+      Regex::Match options
      Regex::Match options
+    returns nil on non-match
    returns nil on non-match
+    with invalid UTF-8
    with invalid UTF-8
+    skip invalid UTF check
    skip invalid UTF check
+    with pos
+      char index
      char index
+      positive
      positive
+      negative
      negative
+    assigns captures
    assigns captures
+    returns matchdata
    returns matchdata
+  #options
  #options
+  #+
  #+
+  #match!
+    with options
+      Regex::Match options
      Regex::Match options
+    assigns captures
    assigns captures
+    raises on non-match
    raises on non-match
+    returns match data
    returns match data
+  #name_table
+    alpanumeric
    alpanumeric
+    is a map of capture group number to name
    is a map of capture group number to name
+    more than 255 groups
    more than 255 groups
+    duplicate name
    duplicate name
+  .new
+    doesn't crash when PCRE tries to free some memory (#771)
    doesn't crash when PCRE tries to free some memory (#771)
+    raises on invalid UTF-8
    raises on invalid UTF-8
+    raises exception with invalid regex
    raises exception with invalid regex
+    options
+      regular
      regular
+      unnamed option
      unnamed option
+  #capture_count
  #capture_count
+  #clone
  #clone
+  .supports_match_options?
  .supports_match_options?
+  .escape
  .escape
+  #to_s
+    with options
    with options
+    with slash
    with slash
+    interpolation
    interpolation
+  #matches_at_byte_index?
+    positive index
    positive index
+    multibyte index
    multibyte index
+    negative
    negative
+    with options
+      deprecated Regex::Options
      deprecated Regex::Options
+      Regex::MatchOptions
      Regex::MatchOptions
+  #dup
  #dup
+  .literal
  .literal
+  .union
+    combines Regex objects in the same way as Regex#+
    combines Regex objects in the same way as Regex#+
+    constructs a Regex that matches things any of its arguments match
    constructs a Regex that matches things any of its arguments match
+    returns a regular expression that will match passed arguments
    returns a regular expression that will match passed arguments
+    accepts a single Array(String | Regex) argument
    accepts a single Array(String | Regex) argument
+    quotes any string arguments
    quotes any string arguments
+    returns a Regex with an Array(String) with special characters
    returns a Regex with an Array(String) with special characters
+    accepts a single Tuple(String | Regex) argument
    accepts a single Tuple(String | Regex) argument
+  #hash
  #hash
+  #=~
+    accepts any type
    accepts any type
+    returns match index or nil
    returns match index or nil
+    assigns captures
    assigns captures
+  #match_at_byte_index
+    negative
    negative
+    with options
+      deprecated Regex::Options
      deprecated Regex::Options
+      Regex::MatchOptions
      Regex::MatchOptions
+    assigns captures
    assigns captures
+    positive index
    positive index
+    multibyte index
    multibyte index
+  .supports_compile_options?
  .supports_compile_options?
+  #source
  #source
+  .needs_escape?
+    String
    String
+    Char
    Char
+XML::Reader
+  #node_type
+    returns the node type
    returns the node type
+  #next
+    reads next node in doc order, skipping subtrees
    reads next node in doc order, skipping subtrees
+  #[]?
+    reads node attributes
    reads node attributes
+    raises if attribute contains null byte
    raises if attribute contains null byte
+  #move_to_first_attribute
+    moves to the first attribute of the node
    moves to the first attribute of the node
+  #move_to_attribute
+    moves to attribute with the specified name
    moves to attribute with the specified name
+    raises if attribute contains null byte
    raises if attribute contains null byte
+  #read_inner_xml
+    reads the contents of the node including child nodes and markup
    reads the contents of the node including child nodes and markup
+  #expand?
+    is only available until the next read
    is only available until the next read
+    parses the content of the node and subtree
    parses the content of the node and subtree
+  .new
+    with default parser options
+      can be initialized from an io
      can be initialized from an io
+      can be initialized from a string
      can be initialized from a string
+    with custom parser options
+      can be initialized from a string
      can be initialized from a string
+      can be initialized from an io
      can be initialized from an io
+  #expand
+    parses the content of the node and subtree
    parses the content of the node and subtree
+    is only available until the next read
    is only available until the next read
+    raises an exception if the node could not be expanded
    raises an exception if the node could not be expanded
+  #read
+    reads all nodes
    reads all nodes
+    reads all non-blank nodes with NOBLANKS option
    reads all non-blank nodes with NOBLANKS option
+  #move_to_next_attribute
+    moves to the next attribute of the node
    moves to the next attribute of the node
+  #depth
+    returns the depth of the node
    returns the depth of the node
+  #empty_element?
+    checks if the node is empty
    checks if the node is empty
+  #to_unsafe
+    returns a pointer to the underlying LibXML::XMLTextReader
    returns a pointer to the underlying LibXML::XMLTextReader
+  #read_outer_xml
+    reads the xml of the node including child nodes and markup
    reads the xml of the node including child nodes and markup
+  #move_to_element
+    moves to the element node that contains the current attribute node
    moves to the element node that contains the current attribute node
+  #value
+    reads node text value
    reads node text value
+  #[]
+    reads node attributes
    reads node attributes
+    raises if attribute contains null byte
    raises if attribute contains null byte
+  #name
+    reads node name
    reads node name
+  #has_attributes?
+    checks if the node has attributes
    checks if the node has attributes
+  #attributes_count
+    returns the node's number of attributes
    returns the node's number of attributes
+  #next_sibling
+    reads next sibling node in doc order, skipping subtrees
    reads next sibling node in doc order, skipping subtrees
+Spec
+  list_tags
+    does nothing if there are no examples
    does nothing if there are no examples
+    lists the count of all tags
    lists the count of all tags
+    lists the count of slow tags
    lists the count of slow tags
+Indexable(T)
+  #to_a
+    without a block of an interface type
    without a block of an interface type
+  permutations
+    accepts a block
    accepts a block
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    returns iterator
    returns iterator
+    yielding dup of arrays
    yielding dup of arrays
+    yields with reuse = true
    yields with reuse = true
+    returns iterator with given size
    returns iterator with given size
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    returns iterator with reuse = true
    returns iterator with reuse = true
+  does each
  does each
+  .each_cartesian
+    does with an Indexable of Indexables, without block, combined with select
    does with an Indexable of Indexables, without block, combined with select
+    does with reuse = array, with block
    does with reuse = array, with block
+    does with an Indexable of Indexables, without block
    does with an Indexable of Indexables, without block
+    does with reuse = true, with block
    does with reuse = true, with block
+    does with reuse = true, without block
    does with reuse = true, without block
+    does with an Indexable of Indexables, with block
    does with an Indexable of Indexables, with block
+    does with reuse = array, without block
    does with reuse = array, without block
+  combinations
+    yielding dup of arrays
    yielding dup of arrays
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    accepts a block
    accepts a block
+    assert
    assert
+    does with reuse = true
    does with reuse = true
+    returns iterator with reuse = array
    returns iterator with reuse = array
+    assert
    assert
+    assert
    assert
+    returns iterator with reuse = true
    returns iterator with reuse = true
+    assert
    assert
+    does with reuse = array
    does with reuse = array
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    returns iterator
    returns iterator
+    assert
    assert
+  fetch
+    fetches with block
    fetches with block
+    fetches with default value
    fetches with default value
+  .cartesian_product
+    does with an Indexable of Indexables
    does with an Indexable of Indexables
+    does with a Tuple of Tuples with mixed types
    does with a Tuple of Tuples with mixed types
+  #join
+    joins non-strings
    joins non-strings
+    joins strings (non-empty case)
    joins strings (non-empty case)
+    joins when T has String
    joins when T has String
+    joins strings (empty case)
    joins strings (empty case)
+    with IO
    with IO
+  iterates until its size, having mutated (#3386)
  iterates until its size, having mutated (#3386)
+  iterates through a subset of its elements (#3386)
  iterates through a subset of its elements (#3386)
+  #index
+    does index with big offset
    does index with big offset
+    offset type
    offset type
+    does index with big negative offset
    does index with big negative offset
+  #index!
+    raises if no element is found
    raises if no element is found
+    offset type
    offset type
+  #rindex
+    does rindex with big offset
    does rindex with big offset
+    offset type
    offset type
+    does rindex with big negative offset
    does rindex with big negative offset
+  #cartesian_product
+    does with >1 other Indexables
    does with >1 other Indexables
+    does with 1 other Indexable
    does with 1 other Indexable
+  does each_index
  does each_index
+  iterates within a range of indices, no beginning
  iterates within a range of indices, no beginning
+  iterates within a range of indices, no end
  iterates within a range of indices, no end
+  iterates until its size, having mutated (#3386)
  iterates until its size, having mutated (#3386)
+  #rindex!
+    does rindex with big negative offset
    does rindex with big negative offset
+    does rindex with big offset
    does rindex with big offset
+    offset type
    offset type
+  iterates within a range of indices (#3386)
  iterates within a range of indices (#3386)
+  iterates until its size (#3386)
  iterates until its size (#3386)
+  dig
+    raises IndexError if not found
    raises IndexError if not found
+    gets the value at given path given splat
    gets the value at given path given splat
+  dig?
+    returns nil if not found
    returns nil if not found
+    gets the value at given path given splat
    gets the value at given path given splat
+  repeated_combinations
+    returns iterator with reuse = array
    returns iterator with reuse = array
+    assert
    assert
+    yields with reuse = array
    yields with reuse = array
+    assert
    assert
+    returns iterator
    returns iterator
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    yielding dup of arrays
    yielding dup of arrays
+    returns iterator with reuse = true
    returns iterator with reuse = true
+    assert
    assert
+    accepts a block
    accepts a block
+    n > size (#14088)
+      "#each_repeated_combination" iterator
      "#each_repeated_combination" iterator
+      "#each_repeated_combination" yielding
      "#each_repeated_combination" yielding
+      "#each_repeated_combination" iterator
      "#each_repeated_combination" iterator
+      "#each_repeated_combination" yielding
      "#each_repeated_combination" yielding
+    assert
    assert
+    yields with reuse = true
    yields with reuse = true
+    assert
    assert
+    assert
    assert
+  #each_cartesian
+    does with 1 other Indexable, without block
    does with 1 other Indexable, without block
+    does with >1 other Indexables, without block
    does with >1 other Indexables, without block
+    does with 1 other Indexable, with block
    does with 1 other Indexable, with block
+    does with 1 other Indexable, without block, combined with select
    does with 1 other Indexable, without block, combined with select
+    does with >1 other Indexables, with block
    does with >1 other Indexables, with block
+JSON serialization
+  provide symmetric encoding and decoding for Union types
  provide symmetric encoding and decoding for Union types
+  to_json
+    does for Int32
    does for Int32
+    does for Hash with Float64 keys
    does for Hash with Float64 keys
+    does for Iterator
    does for Iterator
+    does for Set
    does for Set
+    does for Array
    does for Array
+    does for Int128
    does for Int128
+    does for BigDecimal
    does for BigDecimal
+    does for Hash with Float32 keys
    does for Hash with Float32 keys
+    does for String with control codes
    does for String with control codes
+    does for Tuple
    does for Tuple
+    does for String with control codes in a few places
    does for String with control codes in a few places
+    does for String with quote
    does for String with quote
+    raises if Float is NaN
    raises if Float is NaN
+    does for String
    does for String
+    does for BigFloat
    does for BigFloat
+    raises if Float is infinity
    raises if Float is infinity
+    Enum
+      normal enum
      normal enum
+      flag enum
      flag enum
+    does for NamedTuple
    does for NamedTuple
+    does for Path
    does for Path
+    does for Hash
    does for Hash
+    does for Nil
    does for Nil
+    does for Float64
    does for Float64
+    does for Hash with symbol keys
    does for Hash with symbol keys
+    does for Hash with newlines
    does for Hash with newlines
+    Enum::ValueConverter
+      flag enum
      flag enum
+      normal enum
      normal enum
+    does for Hash with BigInt keys
    does for Hash with BigInt keys
+    does for Hash with int keys
    does for Hash with int keys
+    does for UUID
    does for UUID
+    does for Deque
    does for Deque
+    does for StaticArray
    does for StaticArray
+    does for Bool
    does for Bool
+    does for BigInt
    does for BigInt
+    does for String with slash
    does for String with slash
+  from_json
+    deserializes union with Int64 (fast path)
    deserializes union with Int64 (fast path)
+    does UInt128.from_json
    does UInt128.from_json
+    deserializes with root
    deserializes with root
+    does for tuple
    does for tuple
+    parse exceptions
+      captures overflows for integer types
      captures overflows for integer types
+      has correct location when raises in NamedTuple#from_json
      has correct location when raises in NamedTuple#from_json
+      has correct location when raises in Union#from_json
      has correct location when raises in Union#from_json
+    deserializes union with UInt64 (fast path)
    deserializes union with UInt64 (fast path)
+    errors on non-base-10 ints
    errors on non-base-10 ints
+    does for BigDecimal from int
    does for BigDecimal from int
+    does Array(Float64)#from_json
    does Array(Float64)#from_json
+    Enum::ValueConverter.from_json
+      flag enum
      flag enum
+      normal enum
      normal enum
+    deserializes union with Int16 (fast path)
    deserializes union with Int16 (fast path)
+    does UInt16.from_json
    does UInt16.from_json
+    raises for BigFloat from unsupported types
    raises for BigFloat from unsupported types
+    deserializes union with Float64 (fast path)
    deserializes union with Float64 (fast path)
+    does for tuple with file-private type
    does for tuple with file-private type
+    Enum
+      flag enum
      flag enum
+      normal enum
      normal enum
+    does for empty named tuple
    does for empty named tuple
+    does for BigFloat from int
    does for BigFloat from int
+    does Path.from_json
    does Path.from_json
+    does UInt32.from_json
    does UInt32.from_json
+    does Hash(String, String)#from_json
    does Hash(String, String)#from_json
+    does Array(Float32)#from_json
    does Array(Float32)#from_json
+    does Hash(String, Int32)#from_json
    does Hash(String, Int32)#from_json
+    deserializes union with UInt8 (fast path)
    deserializes union with UInt8 (fast path)
+    raises if Int32.from_json overflows
    raises if Int32.from_json overflows
+    deserializes union with Int128 (fast path)
    deserializes union with Int128 (fast path)
+    raises an error Iterator(String)#from_json with invalid JSON
    raises an error Iterator(String)#from_json with invalid JSON
+    does Int64.from_json
    does Int64.from_json
+    does Array(Bool)#from_json
    does Array(Bool)#from_json
+    does for UUID (hyphenated)
    does for UUID (hyphenated)
+    deserializes union
    deserializes union
+    does for BigFloat from string
    does for BigFloat from string
+    does for named tuple with nilable fields and null (#8089)
    does for named tuple with nilable fields and null (#8089)
+    raises if UInt128.from_json overflows
    raises if UInt128.from_json overflows
+    does Hash(BigDecimal, String)#from_json
    does Hash(BigDecimal, String)#from_json
+    deserializes union with bool (fast path)
    deserializes union with bool (fast path)
+    deserializes Time
    deserializes Time
+    does for BigInt
    does for BigInt
+    raises for BigInt from unsupported types
    raises for BigInt from unsupported types
+    deserializes union with Int8 (fast path)
    deserializes union with Int8 (fast path)
+    does String.from_json
    does String.from_json
+    deserializes union with UInt16 (fast path)
    deserializes union with UInt16 (fast path)
+    deserializes union with Int32 (fast path)
    deserializes union with Int32 (fast path)
+    raises if Int8.from_json overflows
    raises if Int8.from_json overflows
+    does Hash(Float64, String)#from_json
    does Hash(Float64, String)#from_json
+    deserializes union with Float32 (fast path)
    deserializes union with Float32 (fast path)
+    does for UUID (hex)
    does for UUID (hex)
+    raises if UInt32.from_json overflows
    raises if UInt32.from_json overflows
+    does Hash(Float32, String)#from_json
    does Hash(Float32, String)#from_json
+    does UInt64.from_json
    does UInt64.from_json
+    does Hash(BigFloat, String)#from_json
    does Hash(BigFloat, String)#from_json
+    does for named tuple with file-private type
    does for named tuple with file-private type
+    does UInt8.from_json
    does UInt8.from_json
+    raises an error Iterator(String)#from_json with invalid types
    raises an error Iterator(String)#from_json with invalid types
+    does for Array(Int32) from IO
    does for Array(Int32) from IO
+    raises for BigDecimal from unsupported types
    raises for BigDecimal from unsupported types
+    raises if UInt8.from_json overflows
    raises if UInt8.from_json overflows
+    does Int16.from_json
    does Int16.from_json
+    errors on underscores inside ints
    errors on underscores inside ints
+    does for named tuple with nilable fields (#8089)
    does for named tuple with nilable fields (#8089)
+    does Hash(BigInt, String)#from_json
    does Hash(BigInt, String)#from_json
+    raises if UInt64.from_json overflows
    raises if UInt64.from_json overflows
+    does for empty tuple
    does for empty tuple
+    raises an error Hash(String, Int32)#from_json with null value
    raises an error Hash(String, Int32)#from_json with null value
+    does for named tuple
    does for named tuple
+    does Deque(String)#from_json
    does Deque(String)#from_json
+    does Array(Int64)#from_json
    does Array(Int64)#from_json
+    does Array(Int32)#from_json
    does Array(Int32)#from_json
+    does for named tuple with spaces in key and quote char (#10918)
    does for named tuple with spaces in key and quote char (#10918)
+    does for Array(Int32) with block
    does for Array(Int32) with block
+    does Iterator(String)#from_json
    does Iterator(String)#from_json
+    deserializes unions of the same kind and remains stable
    deserializes unions of the same kind and remains stable
+    deserializes union with UInt128 (fast path)
    deserializes union with UInt128 (fast path)
+    does Int128.from_json
    does Int128.from_json
+    raises if Int128.from_json overflows
    raises if Int128.from_json overflows
+    deserializes union with UInt32 (fast path)
    deserializes union with UInt32 (fast path)
+    does for named tuple with spaces in key (#10918)
    does for named tuple with spaces in key (#10918)
+    deserializes union of Int32 and Float64 (#7333)
    deserializes union of Int32 and Float64 (#7333)
+    raises if Int64.from_json overflows
    raises if Int64.from_json overflows
+    raises if UInt16.from_json overflows
    raises if UInt16.from_json overflows
+    does for UUID (urn)
    does for UUID (urn)
+    does for BigDecimal from string
    does for BigDecimal from string
+    does Int8.from_json
    does Int8.from_json
+    does Hash(Int32, String)#from_json
    does Hash(Int32, String)#from_json
+    does for BigDecimal from float
    does for BigDecimal from float
+    does Array(Nil)#from_json
    does Array(Nil)#from_json
+    raises if Int16.from_json overflows
    raises if Int16.from_json overflows
+    does Int32.from_json
    does Int32.from_json
+    does for BigFloat
    does for BigFloat
+  to_pretty_json
+    does for empty Array
    does for empty Array
+    does for Array with indent
    does for Array with indent
+    does for Float64
    does for Float64
+    Time
+      omit sub-second precision
      omit sub-second precision
+      #to_json
      #to_json
+    does for empty Hash
    does for empty Hash
+    does for Int32
    does for Int32
+    does for Hash
    does for Hash
+    does for String
    does for String
+    does for Bool
    does for Bool
+    does for nested Array
    does for nested Array
+    does for nested Hash with indent
    does for nested Hash with indent
+    does for Nil
    does for Nil
+    does for Array
    does for Array
+    does for nested Hash
    does for nested Hash
+Spec::ExampleGroup
+  #randomize
+    with a seed
    with a seed
+    by default
    by default
+  #report
+    should include parent's description
    should include parent's description
+  #all_tags
+    should include ancestor tags
    should include ancestor tags
 Box
-  boxing a nilable reference returns the same pointer
  boxing a nilable reference returns the same pointer
+  boxing nil in a reference-like union returns a null pointer (#11839)
  boxing nil in a reference-like union returns a null pointer (#11839)
+  boxing a nilable value returns the same value
  boxing a nilable value returns the same value
   boxing nil in a value-like union doesn't crash (#11839)
  boxing nil in a value-like union doesn't crash (#11839)
+  boxing a nilable reference returns the same pointer
  boxing a nilable reference returns the same pointer
+  boxes with explicit type
  boxes with explicit type
   boxes and unboxes
  boxes and unboxes
   boxing a reference returns the same pointer
  boxing a reference returns the same pointer
-  boxing nil in a reference-like union returns a null pointer (#11839)
  boxing nil in a reference-like union returns a null pointer (#11839)
   boxing nil returns a null pointer
  boxing nil returns a null pointer
-  boxes with explicit type
  boxes with explicit type
-  boxing a nilable value returns the same value
  boxing a nilable value returns the same value
-OAuth2::Client
-  get_access_token_using_*
-    using Request Body to pass credentials
-      #make_token_request
      #make_token_request
-      #get_access_token_using_refresh_token
      #get_access_token_using_refresh_token
-      #get_access_token_using_client_credentials
      #get_access_token_using_client_credentials
-      #get_access_token_using_authorization_code
      #get_access_token_using_authorization_code
-      #get_access_token_using_resource_owner_credentials
      #get_access_token_using_resource_owner_credentials
-    using HTTP Basic authentication to pass credentials
-      #get_access_token_using_refresh_token
      #get_access_token_using_refresh_token
-      #make_token_request
      #make_token_request
-      #get_access_token_using_authorization_code
      #get_access_token_using_authorization_code
-      #get_access_token_using_resource_owner_credentials
      #get_access_token_using_resource_owner_credentials
-      configures HTTP::Client
      configures HTTP::Client
-      #get_access_token_using_client_credentials
      #get_access_token_using_client_credentials
-  authorization uri
-    gets with default endpoint
    gets with default endpoint
-    gets with custom endpoint
    gets with custom endpoint
-    gets with block
    gets with block
-    gets with absolute uri
    gets with absolute uri
-    gets with state
    gets with state
-Complex
-  conj
  conj
-  abs
  abs
-  inv
  inv
-  *
-    number * complex
    number * complex
-    complex * number
    complex * number
-    complex * complex
    complex * complex
-  abs2
  abs2
-  polar
  polar
-  test zero?
  test zero?
-  sign
-    real zero
    real zero
-    infinity
    infinity
-    imaginary zero
    imaginary zero
-    finite, non-zero
    finite, non-zero
-    complex zero
    complex zero
-    not-a-number
    not-a-number
-  +
-    number + complex
    number + complex
-    complex + complex
    complex + complex
-    + complex
    + complex
-    complex + number
    complex + number
-  i
  i
-  as numbers
-    division between UInt32 / Complex returns Complex
    division between UInt32 / Complex returns Complex
-    division between Int64 / Complex returns Complex
    division between Int64 / Complex returns Complex
-    converts from UInt8 to Complex
    converts from UInt8 to Complex
-    division between Complex / UInt128 returns Complex
    division between Complex / UInt128 returns Complex
-    division between Int128 / Complex returns Complex
    division between Int128 / Complex returns Complex
-    converts from Complex to UInt128
    converts from Complex to UInt128
-    division between Complex / UInt16 returns Complex
    division between Complex / UInt16 returns Complex
-    converts from Int8 to Complex
    converts from Int8 to Complex
-    division between Complex / Int8 returns Complex
    division between Complex / Int8 returns Complex
-    converts from UInt8 to Complex
    converts from UInt8 to Complex
-    division between UInt8 / Complex returns Complex
    division between UInt8 / Complex returns Complex
-    division between Int16 / Complex returns Complex
    division between Int16 / Complex returns Complex
-    division between Complex / UInt32 returns Complex
    division between Complex / UInt32 returns Complex
-    converts from Complex to Int16
    converts from Complex to Int16
-    converts from UInt16 to Complex
    converts from UInt16 to Complex
-    converts from Complex to UInt32
    converts from Complex to UInt32
-    converts from Int128 to Complex
    converts from Int128 to Complex
-    converts from Complex to Float64
    converts from Complex to Float64
-    converts from UInt64 to Complex
    converts from UInt64 to Complex
-    division between Float32 / Complex returns Complex
    division between Float32 / Complex returns Complex
-    converts from Complex to Float32
    converts from Complex to Float32
-    converts from Float64 to Complex
    converts from Float64 to Complex
-    converts from Complex to Int64
    converts from Complex to Int64
-    division between UInt64 / Complex returns Complex
    division between UInt64 / Complex returns Complex
-    converts from Complex to Int128
    converts from Complex to Int128
-    converts from Complex to Int64
    converts from Complex to Int64
-    converts from Complex to Float64
    converts from Complex to Float64
-    division between Complex / Int64 returns Complex
    division between Complex / Int64 returns Complex
-    division between Complex / UInt8 returns Complex
    division between Complex / UInt8 returns Complex
-    converts from Float64 to Complex
    converts from Float64 to Complex
-    converts from Complex to UInt8
    converts from Complex to UInt8
-    division between Complex / Float64 returns Complex
    division between Complex / Float64 returns Complex
-    converts from Int32 to Complex
    converts from Int32 to Complex
-    division between Complex / Complex returns Complex
    division between Complex / Complex returns Complex
-    converts from Complex to Int8
    converts from Complex to Int8
-    converts from Complex to Int128
    converts from Complex to Int128
-    converts from Complex to UInt16
    converts from Complex to UInt16
-    converts from Complex to UInt64
    converts from Complex to UInt64
-    converts from Complex to Int8
    converts from Complex to Int8
-    division between Complex / Int128 returns Complex
    division between Complex / Int128 returns Complex
-    converts from Int64 to Complex
    converts from Int64 to Complex
-    converts from Complex to UInt32
    converts from Complex to UInt32
-    division between Int8 / Complex returns Complex
    division between Int8 / Complex returns Complex
-    division between Float64 / Complex returns Complex
    division between Float64 / Complex returns Complex
-    converts from Complex to Int16
    converts from Complex to Int16
-    division between Int32 / Complex returns Complex
    division between Int32 / Complex returns Complex
-    converts from Float32 to Complex
    converts from Float32 to Complex
-    converts from Complex to Complex
    converts from Complex to Complex
-    division between Complex / Int32 returns Complex
    division between Complex / Int32 returns Complex
-    converts from UInt32 to Complex
    converts from UInt32 to Complex
-    converts from Complex to Int32
    converts from Complex to Int32
-    converts from UInt128 to Complex
    converts from UInt128 to Complex
-    converts from Complex to UInt64
    converts from Complex to UInt64
-    converts from Complex to Int32
    converts from Complex to Int32
-    converts from Complex to UInt128
    converts from Complex to UInt128
-    converts from Int64 to Complex
    converts from Int64 to Complex
-    converts from Int16 to Complex
    converts from Int16 to Complex
-    converts from Int8 to Complex
    converts from Int8 to Complex
-    converts from Complex to UInt8
    converts from Complex to UInt8
-    converts from UInt16 to Complex
    converts from UInt16 to Complex
-    converts from Complex to Complex
    converts from Complex to Complex
-    division between Complex / Int16 returns Complex
    division between Complex / Int16 returns Complex
-    converts from UInt128 to Complex
    converts from UInt128 to Complex
-    division between UInt16 / Complex returns Complex
    division between UInt16 / Complex returns Complex
-    converts from UInt64 to Complex
    converts from UInt64 to Complex
-    division between UInt128 / Complex returns Complex
    division between UInt128 / Complex returns Complex
-    converts from Complex to Float32
    converts from Complex to Float32
-    converts from Complex to UInt16
    converts from Complex to UInt16
-    division between Complex / Float32 returns Complex
    division between Complex / Float32 returns Complex
-    converts from Int32 to Complex
    converts from Int32 to Complex
-    converts from Int128 to Complex
    converts from Int128 to Complex
-    converts from Float32 to Complex
    converts from Float32 to Complex
-    converts from Int16 to Complex
    converts from Int16 to Complex
-    division between Complex / UInt64 returns Complex
    division between Complex / UInt64 returns Complex
-    converts from UInt32 to Complex
    converts from UInt32 to Complex
-  to_s
  to_s
-  hashes real without imag like real only
  hashes real without imag like real only
-  phase
  phase
-  /
-    number / complex
    number / complex
-    complex / number
    complex / number
-    complex / complex
    complex / complex
-  Math
-    log10
    log10
-    sqrt
    sqrt
-    log
    log
-    exp
    exp
-    log2
    log2
-  test additive_identity
  test additive_identity
-  ==
-    complex == number
    complex == number
-    number == complex
    number == complex
-    complex == complex
    complex == complex
-  rounds
  rounds
-  -
-    complex - complex
    complex - complex
-    - complex
    - complex
-    number - complex
    number - complex
-    complex - number
    complex - number
-  test zero
  test zero
+File
+  .tempfile
+    accepts single suffix argument
    accepts single suffix argument
+    with block
+      accepts dir argument
      accepts dir argument
+      closes file
      closes file
+      accepts single suffix argument
      accepts single suffix argument
+      accepts prefix and suffix arguments
      accepts prefix and suffix arguments
+    accepts prefix and suffix arguments
    accepts prefix and suffix arguments
+    creates and writes
    creates and writes
+    fails in nonwriteable folder
    fails in nonwriteable folder
+    accepts dir argument
    accepts dir argument
+    rejects null byte
    rejects null byte
+  .tempname
+    accepts single suffix argument
    accepts single suffix argument
+    accepts dir argument
    accepts dir argument
+    creates a path without creating the file
    creates a path without creating the file
+    accepts prefix with separator
    accepts prefix with separator
+    accepts prefix and suffix arguments
    accepts prefix and suffix arguments
+WaitGroup
+  waits until concurrent executions are finished
  waits until concurrent executions are finished
+  increments the counter from executing fibers
  increments the counter from executing fibers
+  #add
+    can't increment after reaching negative counter
    can't increment after reaching negative counter
+    resumes waiters when reaching negative counter
    resumes waiters when reaching negative counter
+    can't decrement to a negative counter
    can't decrement to a negative counter
+  takes a block to WaitGroup.wait
  takes a block to WaitGroup.wait
+  #done
+    can't decrement to a negative counter
    can't decrement to a negative counter
+    resumes waiters when reaching negative counter
    resumes waiters when reaching negative counter
+  stress add/done/wait
  stress add/done/wait
+  #wait
+    immediately raises when counter is negative
    immediately raises when counter is negative
+    raises when counter is positive after wake up
    raises when counter is positive after wake up
+    immediately returns when counter is zero
    immediately returns when counter is zero
+__modti3
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+  passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
+YAML::Any
+  .new
  .new
+  clones
  clones
+  exposes $~ when doing Regex#===
  exposes $~ when doing Regex#===
+  #size
+    of array
    of array
+    of hash
    of hash
+  can compare with ===
  can compare with ===
+  #dig?
+    returns nil for non-Hash/Array intermediary values
    returns nil for non-Hash/Array intermediary values
+    returns nil if not found
    returns nil if not found
+    gets the value at given path given splat
    gets the value at given path given splat
+  #[]?
+    hash
+      fetches Float64
      fetches Float64
+      fetches Slice(UInt8)
      fetches Slice(UInt8)
+      fetches Int64
      fetches Int64
+      fetches Array(YAML::Any)
      fetches Array(YAML::Any)
+      fetches Set(YAML::Any)
      fetches Set(YAML::Any)
+      fetches Nil
      fetches Nil
+      fetches Hash(YAML::Any, YAML::Any)
      fetches Hash(YAML::Any, YAML::Any)
+      fetches Time
      fetches Time
+      fetches Bool
      fetches Bool
+      fetches String
      fetches String
+    of array
    of array
+    of hash with integer keys
    of hash with integer keys
+    of hash
    of hash
+  is enumerable
  is enumerable
+  returns array of any when doing parse all
  returns array of any when doing parse all
+  #[]
+    of array
    of array
+    hash
+      fetches Hash(YAML::Any, YAML::Any)
      fetches Hash(YAML::Any, YAML::Any)
+      fetches Bool
      fetches Bool
+      fetches Time
      fetches Time
+      fetches Nil
      fetches Nil
+      fetches Array(YAML::Any)
      fetches Array(YAML::Any)
+      fetches Slice(UInt8)
      fetches Slice(UInt8)
+      fetches Set(YAML::Any)
      fetches Set(YAML::Any)
+      fetches String
      fetches String
+      fetches Float64
      fetches Float64
+      fetches Int64
      fetches Int64
+  #to_json
  #to_json
+  traverses big structure
  traverses big structure
+  dups
  dups
+  compares to other objects
  compares to other objects
+  dig
+    raises if not found
    raises if not found
+    gets the value at given path given splat
    gets the value at given path given splat
+  casts
+    gets anchor
    gets anchor
+    gets float64
    gets float64
+    doesn't get quoted numbers
    doesn't get quoted numbers
+    gets int32
    gets int32
+    gets bytes
    gets bytes
+    gets hash
    gets hash
+    gets int64
    gets int64
+    gets string
    gets string
+    gets yes/no unquoted booleans
    gets yes/no unquoted booleans
+    gets nil
    gets nil
+    gets float32 from JSON integer (#8618)
    gets float32 from JSON integer (#8618)
+    gets float64 from JSON integer (#8618)
    gets float64 from JSON integer (#8618)
+    gets time
    gets time
+    gets array
    gets array
+    gets bool
    gets bool
+    gets float32
    gets float32
+String::Builder
+  raises EOFError
  raises EOFError
+  raises if invokes to_s twice
  raises if invokes to_s twice
+  builds
  builds
+  #chomp!
+    returns self
    returns self
+  goes back
  goes back
+  allocates for > 1 GB
  allocates for > 1 GB
+  goes back all
  goes back all
+HTTP::Client
+  will retry once on connection error
  will retry once on connection error
+  cannot reconnect when initialized with IO
  cannot reconnect when initialized with IO
+  doesn't read the body if request was HEAD
  doesn't read the body if request was HEAD
+  tests write_timeout
  tests write_timeout
+  #set_defaults
+    sets default Host header
    sets default Host header
+  will not retry when closed (block) (#12464)
  will not retry when closed (block) (#12464)
+  will not retry when closed (non-block) (#12464)
  will not retry when closed (non-block) (#12464)
+  works with IO
  works with IO
+  tests empty Content-Type
  tests empty Content-Type
+  tests read_timeout
  tests read_timeout
+  can be subclassed
  can be subclassed
+  raises if URI is missing scheme
  raises if URI is missing scheme
+  from String
+    raises when not a host
    raises when not a host
+  will retry a broken socket
  will retry a broken socket
+  sends a 'connection: close' header on one-shot request with block
  sends a 'connection: close' header on one-shot request with block
+  raises if URI is missing host
  raises if URI is missing host
+  logging
+    emit logs with block
    emit logs with block
+    emit logs
    emit logs
+  tests connect_timeout
  tests connect_timeout
+  sends a 'connection: close' header on one-shot request
  sends a 'connection: close' header on one-shot request
+  from a host
+    yields to a block
    yields to a block
+  will not retry if IO::Error in request handling
  will not retry if IO::Error in request handling
+  from URI
+    raises error if URI is missing host
    raises error if URI is missing host
+    keeps context
    keeps context
+    allows for specified ports
    allows for specified ports
+    has sane defaults
    has sane defaults
+    doesn't take context for HTTP
    doesn't take context for HTTP
+    yields to a block
    yields to a block
+    raises error if not http schema
    raises error if not http schema
+    detects HTTPS
    detects HTTPS
+  can specify host and port when initialized with IO
  can specify host and port when initialized with IO
+  ensures closing the response when breaking out of block
  ensures closing the response when breaking out of block
+  sends the host header ipv6 with brackets
  sends the host header ipv6 with brackets
+  retry does not affect implicit compression (#11354)
  retry does not affect implicit compression (#11354)
+Log::Builder
+  creates a log with nil backend
  creates a log with nil backend
+  can turn off parent and allow child source
  can turn off parent and allow child source
+  creates a log for broadcast backend
  creates a log for broadcast backend
+  can reconfigures existing logs
  can reconfigures existing logs
+  creates a log with single backend
  creates a log with single backend
+  uses last level for a source x backend (single-backend)
  uses last level for a source x backend (single-backend)
+  creates a log with broadcast backend
  creates a log with broadcast backend
+  removes all logs backends on .clear
  removes all logs backends on .clear
+  should allow collection of unreferenced logs
  should allow collection of unreferenced logs
+  creates a log for same broadcast backend added multiple times
  creates a log for same broadcast backend added multiple times
+  should allow recreation of deallocated logs
  should allow recreation of deallocated logs
+  returns log without backend if pattern does not match
  returns log without backend if pattern does not match
+  returns log with backend if pattern matches
  returns log with backend if pattern matches
+  uses last level for a source x backend
  uses last level for a source x backend
+  returns same instance
  returns same instance
+  .matches
+    on third level
    on third level
+    on second level
    on second level
+    on top-level
    on top-level
+    avoids prefix collision
    avoids prefix collision
+    on first level
    on first level
+  does not alter user-provided broadcast backend
  does not alter user-provided broadcast backend
+UNIXSocket
+  sends and receives messages
  sends and receives messages
+  tests read and write timeouts
  tests read and write timeouts
+  raises when path is too long
  raises when path is too long
+  tests socket options
  tests socket options
+  creates a pair of sockets
  creates a pair of sockets
+  sync flag after accept
  sync flag after accept
+Backtrace
+  prints exception backtrace to stderr
  prints exception backtrace to stderr
+  print exception with non-existing PWD
  print exception with non-existing PWD
+  prints file line:column
  prints file line:column
+  prints crash backtrace to stderr
  prints crash backtrace to stderr
+  doesn't relativize paths outside of current dir (#10169)
  doesn't relativize paths outside of current dir (#10169)
+OpenSSL::SSL::Context
+  insecure for server
  insecure for server
+  returns options
  returns options
+  sets the verify mode
  sets the verify mode
+  fails to set private key
  fails to set private key
+  new for server
  new for server
+  sets certificate chain
  sets certificate chain
+  ciphers
+    sets cipher_suites
    sets cipher_suites
+    sets old ciphers
    sets old ciphers
+    sets modern ciphers
    sets modern ciphers
+    sets ciphers
    sets ciphers
+    sets intermediate ciphers
    sets intermediate ciphers
+    uses intermediate default ciphers
    uses intermediate default ciphers
+  removes options
  removes options
+  returns modes
  returns modes
+  sets private key
  sets private key
+  adds options
  adds options
+  calls #finalize on insecure client context
  calls #finalize on insecure client context
+  calls #finalize on insecure server context
  calls #finalize on insecure server context
+  new for client
  new for client
+  adds temporary ecdh curve (P-256)
  adds temporary ecdh curve (P-256)
+  changes security level
  changes security level
+  LibSSL::VerifyMode
+    .parse none (#7455)
    .parse none (#7455)
+  removes modes
  removes modes
+  fails to set certificate chain
  fails to set certificate chain
+  .from_hash
+    builds
    builds
+    errors
    errors
+  alpn_protocol=
  alpn_protocol=
+  adds modes
  adds modes
+  insecure for client
  insecure for client
+IO::Delimited
+  #write
+    raises
    raises
+  #read
+    with partial read
+      handles partial reads
      handles partial reads
+    without peeking
+      doesn't clobber active_delimiter_buffer
      doesn't clobber active_delimiter_buffer
+      handles nearly a delimiter at the end
      handles nearly a delimiter at the end
+      doesn't clobber the buffer on closely-offset partial matches
      doesn't clobber the buffer on closely-offset partial matches
+      doesn't read past the limit
      doesn't read past the limit
+      handles the delimiter at the start
      handles the delimiter at the start
+      doesn't read past the limit (char-by-char)
      doesn't read past the limit (char-by-char)
+      handles the delimiter at the end
      handles the delimiter at the end
+    with peeking
+      handles the delimiter at the end
      handles the delimiter at the end
+      handles the delimiter at the start
      handles the delimiter at the start
+      handles the case of peek matching first byte, not having enough room, but later matching
      handles the case of peek matching first byte, not having enough room, but later matching
+      handles the case of peek matching first byte, not having enough room, but rest not matching
      handles the case of peek matching first byte, not having enough room, but rest not matching
+      doesn't read past the limit, single byte
      doesn't read past the limit, single byte
+      returns empty when there's no data
      returns empty when there's no data
+      peeks, everything matches but we can't know what will happen after that
      peeks, everything matches but we can't know what will happen after that
+      handles the case of the active delimited buffer including the delimiter
      handles the case of the active delimited buffer including the delimiter
+      handles nearly a delimiter at the end
      handles nearly a delimiter at the end
+      handles the case of peek matching first byte, not having enough room, but later not matching
      handles the case of peek matching first byte, not having enough room, but later not matching
+      handles the case of peek matching first byte, not having enough room, but rest not immediately matching (with a potential match afterwards)
      handles the case of peek matching first byte, not having enough room, but rest not immediately matching (with a potential match afterwards)
+      doesn't read past the limit (char-by-char)
      doesn't read past the limit (char-by-char)
+      can peek if first byte found but doesn't fully match, and the byte isn't there in the peek buffer
      can peek if first byte found but doesn't fully match, and the byte isn't there in the peek buffer
+      doesn't clobber the buffer on closely-offset partial matches
      doesn't clobber the buffer on closely-offset partial matches
+      doesn't read past the limit
      doesn't read past the limit
+      handles the case of peek matching first byte, not having enough room, but later not matching (limted slice)
      handles the case of peek matching first byte, not having enough room, but later not matching (limted slice)
+      doesn't clobber active_delimiter_buffer
      doesn't clobber active_delimiter_buffer
+      can peek if first byte found but doesn't fully match, and there's that first byte again in the peek buffer
      can peek if first byte found but doesn't fully match, and there's that first byte again in the peek buffer
+      handles the case of peek matching first byte, not having enough room, later only partially matching
      handles the case of peek matching first byte, not having enough room, later only partially matching
+  #gets with peeking when can't peek
+    gets
    gets
+    peeks
    peeks
+  #close
+    stops reading
    stops reading
+    closes the underlying stream if sync_close is true
    closes the underlying stream if sync_close is true
+Number
+  #format
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    does not perform double rounding when decimal places are given
    does not perform double rounding when decimal places are given
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    extracts integer part correctly (#12997)
    extracts integer part correctly (#12997)
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #humanize
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    using custom prefixes
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+Enumerable
+  index_by
+    creates a hash indexed by the value returned by the block
    creates a hash indexed by the value returned by the block
+    overrides values if a value is returned twice
    overrides values if a value is returned twice
+  first
+    calls block if empty
    calls block if empty
+    assert
    assert
+    raises if enumerable empty
    raises if enumerable empty
+    gets first
    gets first
+  in_groups_of
+    raises argument error if size is less than 0
    raises argument error if size is less than 0
+    assert
    assert
+    reuses with existing array
    reuses with existing array
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    reuses with true
    reuses with true
+    takes a block
    takes a block
+    assert
    assert
+  to_h
+    with block
    with block
+    for array
    for array
+    for tuples
    for tuples
+  find!
+    finds
    finds
+    raises if not found
    raises if not found
+  sum
+    assert
    assert
+    slices
    slices
+    strings
    strings
+    assert
    assert
+    array of arrays
    array of arrays
+    assert
    assert
+    assert
    assert
+    uses additive_identity from type
    uses additive_identity from type
+    assert
    assert
+    assert
    assert
+    float
    float
+  max_by?
+    returns nil if empty
    returns nil if empty
+  first?
+    returns nil if enumerable empty
    returns nil if enumerable empty
+    gets first?
    gets first?
+  zip
+    works for Iterators as receiver
    works for Iterators as receiver
+  minmax_by
+    assert
    assert
+  product
+    assert
    assert
+    assert
    assert
+    uses zero from type
    uses zero from type
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #present?
+    assert
    assert
+    assert
    assert
+  partition
+    assert
    assert
+    with mono type on mono type
    with mono type on mono type
+    with missing type on union type
    with missing type on union type
+    assert
    assert
+    with mono type on union type
    with mono type on union type
+    with union type on union type
    with union type on union type
+  max_of
+    raises if not comparable
    raises if not comparable
+    assert
    assert
+  #join
+    (&)
    (&)
+    (io, separator, &)
    (io, separator, &)
+    (separator, io) (deprecated)
    (separator, io) (deprecated)
+    (io)
    (io)
+    (separator, io, &) (deprecated)
    (separator, io, &) (deprecated)
+    (separator, &)
    (separator, &)
+    (separator)
    (separator)
+    (io, &)
    (io, &)
+    (io, separator)
    (io, separator)
+    ()
    ()
+  all? with pattern
+    returns true
    returns true
+    returns false
    returns false
+  map_with_index
+    yields the element and the index
    yields the element and the index
+    yields the element and the index of an iterator
    yields the element and the index of an iterator
+  count with block
+    returns the number of the times the item is present
    returns the number of the times the item is present
+  chunk
+    does not return elements for which the block returns Enumerable::Chunk::Drop
    does not return elements for which the block returns Enumerable::Chunk::Drop
+    rewind
    rewind
+    returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays
    returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays
+    nil allowed as value
    nil allowed as value
+    alone all
    alone all
+    work with class
    work with class
+    drop all
    drop all
+    nil 2 case
    nil 2 case
+    works with block
    works with block
+    returns elements of the Enumerable in an Array of Tuple, {v, ary}, where 'ary' contains the consecutive elements for which the block returned the value 'v'
    returns elements of the Enumerable in an Array of Tuple, {v, ary}, where 'ary' contains the consecutive elements for which the block returned the value 'v'
+    reuses true
    reuses true
+    works
    works
+  #to_set
+    without block
+      creates a Set from the unique elements of the collection
      creates a Set from the unique elements of the collection
+    with block
+      creates a Set from running the block against the collection's elements
      creates a Set from running the block against the collection's elements
+  first
+    assert
    assert
+    raises if count is negative
    raises if count is negative
+    assert
    assert
+  min
+    raises if empty
    raises if empty
+    raises if n is negative
    raises if n is negative
+    assert
    assert
+    assert
    assert
+    raises if not comparable
    raises if not comparable
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    raises if not comparable in min(n)
    raises if not comparable in min(n)
+    assert
    assert
+    does not modify the array
    does not modify the array
+  #empty?
+    assert
    assert
+    assert
    assert
+  max?
+    returns nil if empty
    returns nil if empty
+  max_of?
+    returns nil if empty
    returns nil if empty
+  none?
+    assert
    assert
+    assert
    assert
+  to_a
+    without a block of an interface type
    without a block of an interface type
+    without a block
    without a block
+    with a block
    with a block
+  index with a block
+    returns nil if no object could be found
    returns nil if no object could be found
+    returns the index of the first element where the block returns true
    returns the index of the first element where the block returns true
+  to_a
+    converts to an Array
    converts to an Array
+  reduce
+    does not raise if empty if there is a memo argument
    does not raise if empty if there is a memo argument
+    assert
    assert
+    assert
    assert
+    raises if empty
    raises if empty
+    assert
    assert
+    allows block return type to be different from element type
    allows block return type to be different from element type
+    assert
    assert
+  zip?
+    works for Iterators as receiver
    works for Iterators as receiver
+  any? without block
+    returns true if at least one element is truthy
    returns true if at least one element is truthy
+    returns false if all elements are falsey
    returns false if all elements are falsey
+  size without block
+    returns the number of elements in the Enumerable
    returns the number of elements in the Enumerable
+  #accumulate
+    prefix sums
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    prefix sums, with init
+      assert
      assert
+      preserves initial type
      preserves initial type
+      assert
      assert
+      assert
      assert
+    generic cumulative fold
+      assert
      assert
+      assert
      assert
+    generic cumulative fold, with init
+      preserves initial type
      preserves initial type
+      assert
      assert
+      assert
      assert
+  max_by
+    assert
    assert
+  index! with a block
+    raises if not found
    raises if not found
+    returns the index of the first element where the block returns true
    returns the index of the first element where the block returns true
+  min?
+    returns nil if empty
    returns nil if empty
+  sample
+    multiple-element
+      samples k elements out of n
      samples k elements out of n
+      samples 0 elements
      samples 0 elements
+      samples k elements out of n, where k > n
      samples k elements out of n, where k > n
+      raises on k < 0
      raises on k < 0
+      samples k elements out of n, with random
      samples k elements out of n, with random
+      samples 1 element
      samples 1 element
+    single-element
+      raises on empty self
      raises on empty self
+      samples without random
      samples without random
+      samples with random
      samples with random
+  each_with_index
+    gets each_with_index iterator
    gets each_with_index iterator
+    yields the element and the index
    yields the element and the index
+    accepts an optional offset parameter
    accepts an optional offset parameter
+  index with an object
+    returns nil if the object was not found
    returns nil if the object was not found
+    returns the index of that object if found
    returns the index of that object if found
+  compact map
+    assert
    assert
+  each_with_object
+    yields the element and the given object
    yields the element and the given object
+    gets each_with_object iterator
    gets each_with_object iterator
+  includes?
+    is false if the object is not part of the collection
    is false if the object is not part of the collection
+    is true if the object exists in the collection
    is true if the object exists in the collection
+  skip
+    returns an empty array when skipping more elements than array size
    returns an empty array when skipping more elements than array size
+    returns an array without the skipped elements
    returns an array without the skipped elements
+    raises if count is negative
    raises if count is negative
+  min_of?
+    returns nil if empty
    returns nil if empty
+  map
+    applies the function to each element and returns a new array
    applies the function to each element and returns a new array
+    leaves the original unmodified
    leaves the original unmodified
+  minmax_of
+    assert
    assert
+    raises if not comparable
    raises if not comparable
+  index! with an object
+    raises if not found
    raises if not found
+    returns the index of that object if found
    returns the index of that object if found
+  min_by
+    assert
    assert
+  all? with block
+    returns false
    returns false
+    returns true
    returns true
+  minmax
+    assert
    assert
+    raises if empty
    raises if empty
+  min_by?
+    returns nil if empty
    returns nil if empty
+  minmax?
+    raises if not comparable
    raises if not comparable
+    returns two nils if empty
    returns two nils if empty
+  group_by
+    groups can group by size (like the doc example)
    groups can group by size (like the doc example)
+    assert
    assert
+  all? without block
+    returns false
    returns false
+    returns true
    returns true
+  none? with pattern
+    assert
    assert
+    assert
    assert
+  select
+    with type
    with type
+    selects the values for which the block returns true
    selects the values for which the block returns true
+    with pattern
    with pattern
+  in slices of
+    assert
    assert
+    assert
    assert
+    raises argument error if size is less than 0
    raises argument error if size is less than 0
+    assert
    assert
+    assert
    assert
+  each_slice
+    reuses with existing array
    reuses with existing array
+    returns each_slice iterator
    returns each_slice iterator
+    returns full slices
    returns full slices
+    returns partial slices
    returns partial slices
+    reuses with true
    reuses with true
+  none? without block
+    assert
    assert
+    assert
    assert
+  any? with block
+    returns true if at least one element fulfills the condition
    returns true if at least one element fulfills the condition
+    returns false if all elements does not fulfill the condition
    returns false if all elements does not fulfill the condition
+  reduce?
+    assert
    assert
+    returns nil if empty
    returns nil if empty
+    allows block return type to be different from element type
    allows block return type to be different from element type
+  cycle
+    calls forever if we don't break
    calls forever if we don't break
+    calls the block n times given the optional argument
    calls the block n times given the optional argument
+  #each_cons_pair
+    returns running pairs
    returns running pairs
+  minmax_of?
+    returns two nils if empty
    returns two nils if empty
+  any? with pattern
+    returns false
    returns false
+    returns true
    returns true
+  reject
+    with type
    with type
+    with type, for tuples
    with type, for tuples
+    rejects with pattern
    rejects with pattern
+    rejects the values for which the block returns true
    rejects the values for which the block returns true
+  tally_by
+    returns a hash with counts according to the value returned by the block
    returns a hash with counts according to the value returned by the block
+    with hash
+      returns a hash with counts according to the value returned by the block
      returns a hash with counts according to the value returned by the block
+  min_of
+    assert
    assert
+    raises if not comparable
    raises if not comparable
+  flat_map
+    does example 4
    does example 4
+    does example 1
    does example 1
+    does example 2
    does example 2
+    does example 3
    does example 3
+    accepts mixed element types
    accepts mixed element types
+    flattens iterators
    flattens iterators
+  find
+    doesn't find with default value
    doesn't find with default value
+    doesn't find
    doesn't find
+    finds
    finds
+  each_step
+    "accepts an offset larger then the enumerable size" yielding
    "accepts an offset larger then the enumerable size" yielding
+    "yields every 2nd element" yielding
    "yields every 2nd element" yielding
+    "accepts an optional offset parameter" iterator
    "accepts an optional offset parameter" iterator
+    "accepts an offset larger then the step size" yielding
    "accepts an offset larger then the step size" yielding
+    doesn't accept a negative offset
    doesn't accept a negative offset
+    "accepts a step larger then the enumerable size" iterator
    "accepts a step larger then the enumerable size" iterator
+    doesn't accept a step of 0
    doesn't accept a step of 0
+    "accepts an offset larger then the enumerable size" iterator
    "accepts an offset larger then the enumerable size" iterator
+    "accepts a step larger then the enumerable size" yielding
    "accepts a step larger then the enumerable size" yielding
+    "accepts an offset larger then the step size" iterator
    "accepts an offset larger then the step size" iterator
+    "accepts an offset of 0" yielding
    "accepts an offset of 0" yielding
+    "accepts an offset of 0" iterator
    "accepts an offset of 0" iterator
+    doesn't accept a negative step
    doesn't accept a negative step
+    "yields every 2nd element" iterator
    "yields every 2nd element" iterator
+    "accepts an optional offset parameter" yielding
    "accepts an optional offset parameter" yielding
+  max
+    raises if n is negative
    raises if n is negative
+    assert
    assert
+    does not modify the array
    does not modify the array
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    raises if not comparable
    raises if not comparable
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    raises if empty
    raises if empty
+    raises if not comparable in max(n)
    raises if not comparable in max(n)
+  chunks
+    nil 2 case
    nil 2 case
+    returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays
    returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays
+    works
    works
+    drop all
    drop all
+    work with class
    work with class
+    nil allowed as value
    nil allowed as value
+    work with pure enumerable
    work with pure enumerable
+    alone all
    alone all
+    does not return elements for which the block returns Enumerable::Chunk::Drop
    does not return elements for which the block returns Enumerable::Chunk::Drop
+  minmax_by?
+    returns two nils if empty
    returns two nils if empty
+  tally
+    returns a hash with counts according to the value
    returns a hash with counts according to the value
+    with hash
+      tallies an interface type
      tallies an interface type
+      updates existing hash with counts according to the value
      updates existing hash with counts according to the value
+      returns a hash with Int64 counts according to the value
      returns a hash with Int64 counts according to the value
+      returns a hash with counts according to the value
      returns a hash with counts according to the value
+      ignores the default value
      ignores the default value
+  one?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  skip_while
+    skips elements while the condition holds true
    skips elements while the condition holds true
+    returns the full Array if the first check is false
    returns the full Array if the first check is false
+    does not yield to the block anymore once it returned false
    does not yield to the block anymore once it returned false
+    returns an empty array if the condition is always true
    returns an empty array if the condition is always true
+  take_while
+    returns the full Array if the condition is always true
    returns the full Array if the condition is always true
+    returns an empty Array if the block is false for the first element
    returns an empty Array if the block is false for the first element
+    keeps elements while the block returns true
    keeps elements while the block returns true
+    does not call the block again once it returned false
    does not call the block again once it returned false
+  #each_cons
+    yield
+      returns running pairs
      returns running pairs
+      yields running pairs with reuse = deque
      yields running pairs with reuse = deque
+      yields running pairs with reuse = true
      yields running pairs with reuse = true
+      yields running pairs with reuse = array
      yields running pairs with reuse = array
+      returns running triples
      returns running triples
+    iterator
+      iterates
      iterates
+      iterates with reuse = true
      iterates with reuse = true
+      iterates with reuse = array
      iterates with reuse = array
+      iterates with reuse = deque
      iterates with reuse = deque
+Struct
+  does dup
  does dup
+  does ==
  does ==
+  does hash for struct wrapper (#1940)
  does hash for struct wrapper (#1940)
+  should retrieve multiple descendants from hashed data structure
  should retrieve multiple descendants from hashed data structure
+  clones with def_clone
  clones with def_clone
+  does hash
  does hash
+  does to_s
  does to_s
+File
+  iterates with each_byte
  iterates with each_byte
+  fsync
+    syncs OS file buffer to disk
    syncs OS file buffer to disk
+  closed stream
+    raises if writing on a closed stream
    raises if writing on a closed stream
+  size
+    raises an error when the file does not exist
    raises an error when the file does not exist
+    assert
    assert
+    raises an error when a component of the path is a file
    raises an error when a component of the path is a file
+    assert
    assert
+  .copy
+    copies a file
    copies a file
+    overwrites existing destination and permissions
    overwrites existing destination and permissions
+    copies permissions
    copies permissions
+  link
+    creates a hard link
    creates a hard link
+  rewinds
  rewinds
+  encoding
+    reads with encoding
    reads with encoding
+    writes with encoding
    writes with encoding
+    does each line with encoding
    does each line with encoding
+    reads lines with encoding
    reads lines with encoding
+    opens with encoding
    opens with encoding
+  raises if invoking seek with a closed file
  raises if invoking seek with a closed file
+  reads at offset
  reads at offset
+  opens with perm (File::Permissions)
  opens with perm (File::Permissions)
+  File::Info
+    gets for a character device
    gets for a character device
+    .readable?
+      gives false when the file has no read permissions
      gives false when the file has no read permissions
+      gives false when the file has no permissions
      gives false when the file has no permissions
+      gives false when the file doesn't exist
      gives false when the file doesn't exist
+      follows symlinks
      follows symlinks
+      gives true
      gives true
+      gives false when the symbolic link destination doesn't exist
      gives false when the symbolic link destination doesn't exist
+      gives false when a component of the path is a file
      gives false when a component of the path is a file
+    tests unequal for file and directory
    tests unequal for file and directory
+    gets mtime for new file
    gets mtime for new file
+    gets for non-existent file and raises
    gets for non-existent file and raises
+    tests equal for the same file
    tests equal for the same file
+    .executable?
+      gives true
      gives true
+      gives false when the file doesn't exist
      gives false when the file doesn't exist
+      gives false when a component of the path is a file
      gives false when a component of the path is a file
+      gives false
      gives false
+      follows symlinks
      follows symlinks
+    gets for a symlink
    gets for a symlink
+    gets for this file
    gets for this file
+    gets for pipe
    gets for pipe
+    .writable?
+      gives true
      gives true
+      gives false when the symbolic link destination doesn't exist
      gives false when the symbolic link destination doesn't exist
+      gives false when a component of the path is a file
      gives false when a component of the path is a file
+      gives false when the file doesn't exist
      gives false when the file doesn't exist
+      follows symlinks
      follows symlinks
+      gives false when the file has no write permissions
      gives false when the file has no write permissions
+    tests unequal for different files
    tests unequal for different files
+    gets for this directory
    gets for this directory
+    tests equal for the same directory
    tests equal for the same directory
+    gets for open file
    gets for open file
+  raises when reading at offset outside of bounds
  raises when reading at offset outside of bounds
+  raises when writing to a file with no permission
  raises when writing to a file with no permission
+  raises when reading a file with no permission
  raises when reading a file with no permission
+  .match?
+    * don't match path separator
    * don't match path separator
+    special chars
    special chars
+    ** matches path separator
    ** matches path separator
+    alternates
    alternates
+    matches basics
    matches basics
+    matches unicode characters
    matches unicode characters
+    classes
    classes
+    escape
    escape
+    classes escapes
    classes escapes
+    matches multiple expansions
    matches multiple expansions
+  truncate
+    truncates
    truncates
+    truncates completely when no size is passed
    truncates completely when no size is passed
+    requires a file opened for writing
    requires a file opened for writing
+  .expand_path
+    converts a pathname to an absolute pathname
    converts a pathname to an absolute pathname
+  gets basename
  gets basename
+  .readlink
+    reads link
    reads link
+  utime
+    raises if file not found
    raises if file not found
+    sets times with instance method
    sets times with instance method
+    sets times with class method
    sets times with class method
+  reads lines from file with chomp = false
  reads lines from file with chomp = false
+  raises if invoking tell with a closed file
  raises if invoking tell with a closed file
+  opens with perm (int)
  opens with perm (int)
+  raises on null byte
+    errors on symlink?
    errors on symlink?
+    errors on basename
    errors on basename
+    errors on directory?
    errors on directory?
+    errors on exists?
    errors on exists?
+    errors on symlink, second arg
    errors on symlink, second arg
+    errors on executable?
    errors on executable?
+    errors on rename (second arg)
    errors on rename (second arg)
+    errors on symlink, first arg
    errors on symlink, first arg
+    errors on file?
    errors on file?
+    errors on link, second arg
    errors on link, second arg
+    errors on expand_path, first arg
    errors on expand_path, first arg
+    errors on extname
    errors on extname
+    errors on new
    errors on new
+    errors on rename (first arg)
    errors on rename (first arg)
+    errors on join
    errors on join
+    errors on readable?
    errors on readable?
+    errors on link, first arg
    errors on link, first arg
+    errors on expand_path, second arg
    errors on expand_path, second arg
+    errors on writable?
    errors on writable?
+    errors on size
    errors on size
+    errors on info?
    errors on info?
+    errors on basename 2, first arg
    errors on basename 2, first arg
+    errors on basename 2, second arg
    errors on basename 2, second arg
+    errors on dirname
    errors on dirname
+    errors on delete
    errors on delete
+    errors on info
    errors on info
+  returns the current write position with tell
  returns the current write position with tell
+  gets dirname
  gets dirname
+  close
+    should not raise when closing twice
    should not raise when closing twice
+    is not closed when opening
    is not closed when opening
+    does to_s when closed
    does to_s when closed
+    is closed when closed
    is closed when closed
+  rename
+    renames a File instance
    renames a File instance
+    replaces a file
    replaces a file
+    raises if old file doesn't exist
    raises if old file doesn't exist
+    renames a file
    renames a file
+  returns the actual position with tell after append
  returns the actual position with tell after append
+  locks file opened in append mode (#14702)
  locks file opened in append mode (#14702)
+  exists?
+    gives false
    gives false
+    gives true
    gives true
+    follows symlinks
    follows symlinks
+    gives false when a component of the path is a file
    gives false when a component of the path is a file
+  clears the read buffer after a seek
  clears the read buffer after a seek
+  reads entire file from proc virtual filesystem
  reads entire file from proc virtual filesystem
+  truncates file opened in append mode (#14702)
  truncates file opened in append mode (#14702)
+  #realpath
+    raises if file doesn't exist
    raises if file doesn't exist
+    expands paths for normal files
    expands paths for normal files
+    expands paths of symlinks
    expands paths of symlinks
+    expands multiple layers of symlinks
    expands multiple layers of symlinks
+  empty?
+    gives false when file is not empty
    gives false when file is not empty
+    gives true when file is empty
    gives true when file is empty
+    raises an error when a component of the path is a file
    raises an error when a component of the path is a file
+    raises an error when the file does not exist
    raises an error when the file does not exist
+  can navigate with pos
  can navigate with pos
+  blocking
+    reads non-blocking file
    reads non-blocking file
+    opens regular file as blocking
    opens regular file as blocking
+    opens regular file as non-blocking
    opens regular file as non-blocking
+    writes and reads large non-blocking file
    writes and reads large non-blocking file
+    opens fifo file as non-blocking
    opens fifo file as non-blocking
+    opens character device
    opens character device
+  symlink
+    works if destination contains forward slashes (#14520)
    works if destination contains forward slashes (#14520)
+    creates a symbolic link
    creates a symbolic link
+  reads entire file
  reads entire file
+  chmod
+    can take File::Permissions
    can take File::Permissions
+    changes file permissions with instance method
    changes file permissions with instance method
+    raises when destination doesn't exist
    raises when destination doesn't exist
+    changes dir permissions
    changes dir permissions
+    changes file permissions with class method
    changes file permissions with class method
+    follows symlinks
    follows symlinks
+  #delete
+    deletes
    deletes
+  reads lines from file
  reads lines from file
+  supports the `b` mode flag
  supports the `b` mode flag
+  file?
+    gives false when a component of the path is a file
    gives false when a component of the path is a file
+    gives false when the file doesn't exist
    gives false when the file doesn't exist
+    gives false with dir
    gives false with dir
+    gives true
    gives true
+  flock
+    blocking: false
+      #flock_exclusive soft blocking fiber
      #flock_exclusive soft blocking fiber
+      #flock_shared soft blocking fiber
      #flock_shared soft blocking fiber
+      #flock_shared
      #flock_shared
+    blocking: true
+      #flock_shared
      #flock_shared
+      #flock_shared soft blocking fiber
      #flock_shared soft blocking fiber
+      #flock_exclusive soft blocking fiber
      #flock_exclusive soft blocking fiber
+    #flock_exclusive
    #flock_exclusive
+  write
+    raises if trying to write to a file not opened for writing
    raises if trying to write to a file not opened for writing
+    can write to a file
    can write to a file
+    writes bytes
    writes bytes
+    can create a new file in append mode
    can create a new file in append mode
+    writes io
    writes io
+    can append to an existing file
    can append to an existing file
+  does not overwrite existing content in append mode
  does not overwrite existing content in append mode
+  .same_content?
+    compares two different files
    compares two different files
+    compares two equal files
    compares two equal files
+  symlink?
+    gives false when the symlink doesn't exist
    gives false when the symlink doesn't exist
+    gives false when a component of the path is a file
    gives false when a component of the path is a file
+    gives false
    gives false
+  reads lines from file with each
  reads lines from file with each
+  gets path
  gets path
+  returns the current read position with tell
  returns the current read position with tell
+  .delete
+    deletes a read-only file
    deletes a read-only file
+    deletes a file
    deletes a file
+    deletes an open file
    deletes an open file
+    raises when file doesn't exist
    raises when file doesn't exist
+    deletes? a file
    deletes? a file
+    deletes a symlink directory
    deletes a symlink directory
+  same?
+    compares following symlinks only if requested
    compares following symlinks only if requested
+  does to_s and inspect
  does to_s and inspect
+  constructs a path from parts
  constructs a path from parts
+  raises if opening a non-existent file
  raises if opening a non-existent file
+  File::Permissions
+    does to_s
    does to_s
+  iterates with each_char
  iterates with each_char
+  .touch
+    touches existing
+      directory
      directory
+      file
      file
+    raises if path contains non-existent directory
    raises if path contains non-existent directory
+    creates file if it doesn't exist
    creates file if it doesn't exist
+    sets file times to given time
    sets file times to given time
+    sets file times to current time if no time argument given
    sets file times to current time if no time argument given
+    raises if file cannot be accessed
    raises if file cannot be accessed
+  gets extname
  gets extname
+  seeks from the current position
  seeks from the current position
+  reads lines from file with each, chomp = false
  reads lines from file with each, chomp = false
+  chown
  chown
+  directory?
+    gives false
    gives false
+    gives true
    gives true
+    gives false when the directory doesn't exist
    gives false when the directory doesn't exist
+    gives false when a component of the path is a file
    gives false when a component of the path is a file
+  gets basename removing suffix
  gets basename removing suffix
+Float
+  does infinite?
  does infinite?
+  #next_float
+    does for f64
    does for f64
+    does for f32
    does for f32
+  #prev_float
+    does for f32
    does for f32
+    does for f64
    does for f64
+  **
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  hash
+    does for Float64
    does for Float64
+    does for Float32
    does for Float32
+  round
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  remainder
+    preserves type
    preserves type
+    assert
    assert
+    assert
    assert
+    raises when mods by zero
    raises when mods by zero
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  floor division //
+    applies floor
    applies floor
+    preserves type of lhs
    preserves type of lhs
   clones
  clones
-  inspect
  inspect
-  test multiplicative_identity
  test multiplicative_identity
-  cis
  cis
-URI::Params
+  #inspect
+    does inspect for f64 with IO
    does inspect for f64 with IO
+    does inspect for f64
    does inspect for f64
+    does inspect for f32
    does inspect for f32
+    does inspect for f32
    does inspect for f32
+  does nan?
  does nan?
+  does finite?
  does finite?
+  constants have right binary value
  constants have right binary value
+  does unary -
  does unary -
+  fdiv
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  converts infinity
  converts infinity
+  ceil
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #abs
  #abs
+  #to_s
+    does to_s for f32
    does to_s for f32
+    does to_s for f64
    does to_s for f64
+  divmod
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #integer?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  %
+    uses modulo behavior, not remainder behavior
    uses modulo behavior, not remainder behavior
+  returns nil in <=> for NaN values (Float32)
  returns nil in <=> for NaN values (Float32)
+  modulo
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    raises when mods by zero
    raises when mods by zero
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  returns nil in <=> for NaN values (Float64)
  returns nil in <=> for NaN values (Float64)
   .new
+    fallback overload
    fallback overload
+    String overload
    String overload
+  floor
     assert
    assert
-  #dup
-    gives a whole new set of params
    gives a whole new set of params
-  #fetch_all(name)
-    fetches list of all values for provided param name
    fetches list of all values for provided param name
-  #set_all(name, values)
-    sets values for provided param name
    sets values for provided param name
-  #add(name, value)
-    appends new value for provided param name
    appends new value for provided param name
-  .build
-    builds form from {"foo" => [""], "bar" => [""]}
    builds form from {"foo" => [""], "bar" => [""]}
-    builds form from {"foo" => [""]}
    builds form from {"foo" => [""]}
-    builds form from {"foo" => ["hello+world"]}
    builds form from {"foo" => ["hello+world"]}
-    builds with IO
    builds with IO
-    builds form from {"foo" => ["hello world"]}
    builds form from {"foo" => ["hello world"]}
-    builds form from {"bar" => [""], "foo" => [""]}
    builds form from {"bar" => [""], "foo" => [""]}
-    builds form from {"foo" => ["bar"]}
    builds form from {"foo" => ["bar"]}
-    builds form from {"foo" => ["bar", "baz"]}
    builds form from {"foo" => ["bar", "baz"]}
-    turns spaces to %20 if wanted
    turns spaces to %20 if wanted
-    builds form from {"foo" => ["bar"], "baz" => ["qux"]}
    builds form from {"foo" => ["bar"], "baz" => ["qux"]}
-  .parse
-    parses foo=bar=qux
    parses foo=bar=qux
-    parses foo=bar&foo=baz
    parses foo=bar&foo=baz
-    parses foo=bar
    parses foo=bar
-    parses foo=bar;baz=qux
    parses foo=bar;baz=qux
-    parses bar&foo
    parses bar&foo
-    parses foo=&bar
    parses foo=&bar
-    parses foo=bar&baz=qux
    parses foo=bar&baz=qux
-    parses &&
    parses &&
-    parses foo=hello+world
    parses foo=hello+world
-    parses foo=hello%2Bworld
    parses foo=hello%2Bworld
-    parses    
    parses    
-    parses foo
    parses foo
-    parses foo=
    parses foo=
-    parses 
    parses 
-  #fetch(name, &block)
-    return default value when there is no such param
    return default value when there is no such param
-    returns first value for provided param name
    returns first value for provided param name
-  #[](name)
-    returns first value for provided param name
    returns first value for provided param name
-    raises KeyError when there is no such param
    raises KeyError when there is no such param
-  #empty?
-    test empty?
    test empty?
-  #clone
-    gives a whole new set of params
    gives a whole new set of params
-  #fetch(name, default)
-    returns first value for provided param name
    returns first value for provided param name
-    return default value when there is no such param
    return default value when there is no such param
-  #merge!
-    does not modify the other params
-      with replace: true
      with replace: true
-      with replace: false
      with replace: false
-    modifies the receiver
    modifies the receiver
-  #delete
-    deletes first value for provided param name and returns it
    deletes first value for provided param name and returns it
-  #merge
-    does not modify the receiver
    does not modify the receiver
-    appends values with the same key with replace: false
    appends values with the same key with replace: false
-    replaces all values with the same key by default
    replaces all values with the same key by default
-  #[]=(name, value)
-    sets value for provided param name (array)
    sets value for provided param name (array)
-    sets value for provided param name
    sets value for provided param name
-    adds new name => value pair if there is no such param
    adds new name => value pair if there is no such param
-  .encode
-    builds from hash with IO
    builds from hash with IO
-    builds from hash
    builds from hash
-    builds from named tuple with IO
    builds from named tuple with IO
-    builds from named tuple
    builds from named tuple
+    assert
    assert
+ARGV
+  accepts UTF-8 command-line arguments
  accepts UTF-8 command-line arguments
+Int
+  #rotate_right
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  does %
  does %
+  "#times for UInt32 (#5019)" yielding
  "#times for UInt32 (#5019)" yielding
+  #to_unsigned!
+    does for Int16
    does for Int16
+    does for Int128
    does for Int128
+    does for UInt128
    does for UInt128
+    does for UInt64
    does for UInt64
+    does for Int32
    does for Int32
+    does for Int64
    does for Int64
+    does for UInt16
    does for UInt16
+    does for UInt32
    does for UInt32
+    does for UInt8
    does for UInt8
+    does for Int8
    does for Int8
+  #popcount
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #to_unsigned
+    does for Int8
    does for Int8
+    does for UInt128
    does for UInt128
+    does for Int128
    does for Int128
+    does for Int32
    does for Int32
+    does for UInt64
    does for UInt64
+    does for Int64
    does for Int64
+    does for Int16
    does for Int16
+    does for UInt8
    does for UInt8
+    does for UInt32
    does for UInt32
+    does for UInt16
    does for UInt16
+  arithmetic division /
+    divides negative numbers
    divides negative numbers
+    divides Int::MIN by -1
    divides Int::MIN by -1
+    divides by zero
    divides by zero
+  upto iterator ups and downs
  upto iterator ups and downs
+  #to_signed
+    does for UInt128
    does for UInt128
+    does for Int64
    does for Int64
+    does for UInt32
    does for UInt32
+    does for UInt64
    does for UInt64
+    does for Int8
    does for Int8
+    does for Int128
    does for Int128
+    does for UInt8
    does for UInt8
+    does for UInt16
    does for UInt16
+    does for Int16
    does for Int16
+    does for Int32
    does for Int32
+  #unsafe_chr
  #unsafe_chr
+  lcm
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    doesn't silently overflow
    doesn't silently overflow
+  gcd
+    assert
    assert
+    doesn't silently overflow
    doesn't silently overflow
+    assert
    assert
+    raises on too big result to fit in result type
    raises on too big result to fit in result type
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  does downto
  does downto
+  tdivs
  tdivs
+  downto iterator ups and downs
  downto iterator ups and downs
+  abs
+    does for unsigned
    does for unsigned
+    does for signed
    does for signed
+  floor division //
+    preserves type of lhs
    preserves type of lhs
+    divides negative numbers
    divides negative numbers
+  pred
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #bits
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    raises when invalid indexes are provided
    raises when invalid indexes are provided
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #chr
  #chr
+  raises when divides Int::MIN by -1
  raises when divides Int::MIN by -1
+  fdiv
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #to_signed!
+    does for Int64
    does for Int64
+    does for Int8
    does for Int8
+    does for UInt32
    does for UInt32
+    does for UInt64
    does for UInt64
+    does for Int16
    does for Int16
+    does for Int128
    does for Int128
+    does for UInt16
    does for UInt16
+    does for Int32
    does for Int32
+    does for UInt128
    does for UInt128
+    does for UInt8
    does for UInt8
+  gets upto iterator max
  gets upto iterator max
+  **
+    with positive Int32
    with positive Int32
+    should work with large integers
    should work with large integers
+    raises with negative exponent
    raises with negative exponent
+    with positive UInt8
    with positive UInt8
+    with float
+      assert
      assert
+      assert
      assert
+      assert
      assert
   #to_s
-    serializes params to http form
    serializes params to http form
-    turns spaces to %20 if space_to_plus is false
    turns spaces to %20 if space_to_plus is false
-    turns spaces to + by default
    turns spaces to + by default
-  #has_key?(name)
-    returns true if param with provided name exists
    returns true if param with provided name exists
-    return false if param with provided name does not exist
    return false if param with provided name does not exist
-  #each
-    calls provided proc for each name, value pair, including multiple values per one param name
    calls provided proc for each name, value pair, including multiple values per one param name
-  #[]?(name)
-    return nil when there is no such param
    return nil when there is no such param
-    returns first value for provided param name
    returns first value for provided param name
-  #inspect
  #inspect
-  #==
-    compares other
    compares other
-    compares other types
    compares other types
-  #delete_all
-    deletes all values for provided param name and returns them
    deletes all values for provided param name and returns them
-Backtrace
-  prints exception backtrace to stderr
  prints exception backtrace to stderr
-  prints crash backtrace to stderr
  prints crash backtrace to stderr
-  prints file line:column
  prints file line:column
-  print exception with non-existing PWD
  print exception with non-existing PWD
-  doesn't relativize paths outside of current dir (#10169)
  doesn't relativize paths outside of current dir (#10169)
-Digest::MD5
-  #hexdigest can update within a loop from explicit expr (#9483)
  #hexdigest can update within a loop from explicit expr (#9483)
-  calculates hash from UInt8 slices
  calculates hash from UInt8 slices
-  can take a block
  can take a block
-  #hexdigest can update within a loop by indirect expr (#9483)
  #hexdigest can update within a loop by indirect expr (#9483)
-  .dup
-    leads to not sharing state
    leads to not sharing state
-    leads to deterministic updates
    leads to deterministic updates
-    preserves value
    preserves value
-    preserves type
    preserves type
-  can't call final twice
  can't call final twice
-  calculates hash from string
  calculates hash from string
-  resets
  resets
-  calculates hash of #to_slice
  calculates hash of #to_slice
-  calculates hash from unicode string
  calculates hash from unicode string
-  calculates base64'd hash from string
  calculates base64'd hash from string
-  context are independent
  context are independent
-  return the digest size
  return the digest size
-  digest with file content
  digest with file content
-  #hexfinal
  #hexfinal
-  calculates digest from string
  calculates digest from string
-Subtle
-  compares constant time and slices strings
  compares constant time and slices strings
-  compares constant time bytes on equality
  compares constant time bytes on equality
-  compares constant time bytes bug
  compares constant time bytes bug
-  compares constant times
  compares constant times
-IO::MultiWriter
-  #close
-    stops reading
    stops reading
-    closes the underlying stream if sync_close is true
    closes the underlying stream if sync_close is true
-  #flush
-    writes to IO and File
    writes to IO and File
-  #write
-    writes to multiple IOs
    writes to multiple IOs
-  #read
-    raises
    raises
+    precision parameter
+      converts 0 to "0" * 200
      converts 0 to "0" * 200
+      converts -1 to "-#{"0" * 199}1"
      converts -1 to "-#{"0" * 199}1"
+      converts 1 to "1"
      converts 1 to "1"
+      converts 1 to "01"
      converts 1 to "01"
+      converts 123 to "123"
      converts 123 to "123"
+      converts 0 to "00000"
      converts 0 to "00000"
+      converts 9223372036854775807_i64 to "#{"0" * 137}#{"1" * 63}"
      converts 9223372036854775807_i64 to "#{"0" * 137}#{"1" * 63}"
+      converts 1 to "1"
      converts 1 to "1"
+      converts 1 to "00001"
      converts 1 to "00001"
+      converts 9223372036854775807_i64 to "#{"1" * 63}"
      converts 9223372036854775807_i64 to "#{"1" * 63}"
+      converts 123 to "123"
      converts 123 to "123"
+      converts 2 to "#{"0" * 199}2"
      converts 2 to "#{"0" * 199}2"
+      converts -9223372036854775808_i64 to "-#{"0" * 136}1#{"0" * 63}"
      converts -9223372036854775808_i64 to "-#{"0" * 136}1#{"0" * 63}"
+      converts 0 to "0"
      converts 0 to "0"
+      converts 1 to "#{"0" * 199}1"
      converts 1 to "#{"0" * 199}1"
+      converts -9223372036854775808_i64 to "-01#{"0" * 63}"
      converts -9223372036854775808_i64 to "-01#{"0" * 63}"
+      converts -1 to "-1"
      converts -1 to "-1"
+      converts 123 to "#{"0" * 197}123"
      converts 123 to "#{"0" * 197}123"
+      raises on negative precision
      raises on negative precision
+      converts -1 to "-00001"
      converts -1 to "-00001"
+      converts -9223372036854775808_i64 to "-1#{"0" * 63}"
      converts -9223372036854775808_i64 to "-1#{"0" * 63}"
+      converts 0 to ""
      converts 0 to ""
+      converts 2 to "2"
      converts 2 to "2"
+      converts 2 to "02"
      converts 2 to "02"
+      converts 9223372036854775807_i64 to "#{"1" * 63}"
      converts 9223372036854775807_i64 to "#{"1" * 63}"
+      converts 9223372036854775807_i64 to "0#{"1" * 63}"
      converts 9223372036854775807_i64 to "0#{"1" * 63}"
+      converts 2 to "2"
      converts 2 to "2"
+      converts 123 to "123"
      converts 123 to "123"
+      converts 0 to "00"
      converts 0 to "00"
+      converts -1 to "-01"
      converts -1 to "-01"
+      converts -9223372036854775808_i64 to "-1#{"0" * 63}"
      converts -9223372036854775808_i64 to "-1#{"0" * 63}"
+      converts 123 to "00123"
      converts 123 to "00123"
+      converts -1 to "-1"
      converts -1 to "-1"
+      converts 2 to "00002"
      converts 2 to "00002"
+    converts 1 to "1"
    converts 1 to "1"
+    converts 0 to "0"
    converts 0 to "0"
+    extrema for various int sizes
+      converts -32768_i16 to "-32768"
      converts -32768_i16 to "-32768"
+      converts 65535_u16 to "65535"
      converts 65535_u16 to "65535"
+      converts Int128::MIN to "-170141183460469231731687303715884105728"
      converts Int128::MIN to "-170141183460469231731687303715884105728"
+      converts 9223372036854775807_i64 to "9223372036854775807"
      converts 9223372036854775807_i64 to "9223372036854775807"
+      converts 18446744073709551615_u64 to "18446744073709551615"
      converts 18446744073709551615_u64 to "18446744073709551615"
+      converts 255_u8 to "255"
      converts 255_u8 to "255"
+      converts Int128::MAX to "170141183460469231731687303715884105727"
      converts Int128::MAX to "170141183460469231731687303715884105727"
+      converts 127_i8 to "127"
      converts 127_i8 to "127"
+      converts -9223372036854775808_i64 to "-9223372036854775808"
      converts -9223372036854775808_i64 to "-9223372036854775808"
+      converts 32767_i16 to "32767"
      converts 32767_i16 to "32767"
+      converts UInt128::MAX to "340282366920938463463374607431768211455"
      converts UInt128::MAX to "340282366920938463463374607431768211455"
+      converts -128_i8 to "-128"
      converts -128_i8 to "-128"
+      converts -2147483648 to "-2147483648"
      converts -2147483648 to "-2147483648"
+      converts 2147483647 to "2147483647"
      converts 2147483647 to "2147483647"
+      converts 4294967295_u32 to "4294967295"
      converts 4294967295_u32 to "4294967295"
+    base and upcase parameters
+      converts 61 to "Z"
      converts 61 to "Z"
+      converts -12 to "-1100"
      converts -12 to "-1100"
+      converts -1234 to "-ya"
      converts -1234 to "-ya"
+      converts -1234 to "-4d2"
      converts -1234 to "-4d2"
+      converts 0 to "0"
      converts 0 to "0"
+      converts 1 to "1"
      converts 1 to "1"
+      converts -1234 to "-YA"
      converts -1234 to "-YA"
+      raises on base 1
      raises on base 1
+      converts 1234 to "4d2"
      converts 1234 to "4d2"
+      converts 0 to "0"
      converts 0 to "0"
+      converts 0 to "0"
      converts 0 to "0"
+      converts 36 to "A"
      converts 36 to "A"
+      raises on base 62 with upcase
      raises on base 62 with upcase
+      converts 12 to "1100"
      converts 12 to "1100"
+      converts 3843 to "ZZ"
      converts 3843 to "ZZ"
+      converts 10 to "a"
      converts 10 to "a"
+      converts 1234 to "YA"
      converts 1234 to "YA"
+      converts Int128::MIN to "-1#{"0" * 127}"
      converts Int128::MIN to "-1#{"0" * 127}"
+      converts -1234 to "-4D2"
      converts -1234 to "-4D2"
+      converts 1 to "1"
      converts 1 to "1"
+      converts 35 to "z"
      converts 35 to "z"
+      converts 97 to "1z"
      converts 97 to "1z"
+      converts 1 to "1"
      converts 1 to "1"
+      converts 62 to "10"
      converts 62 to "10"
+      raises on base 37
      raises on base 37
+      converts 1234 to "ya"
      converts 1234 to "ya"
+      converts -123456 to "-11110001001000000"
      converts -123456 to "-11110001001000000"
+      converts 1234 to "4D2"
      converts 1234 to "4D2"
+  divisible_by?
+    assert
    assert
+    assert
    assert
+  returns 0 when doing IntN::MIN % -1 (#8306)
  returns 0 when doing IntN::MIN % -1 (#8306)
+  #integer?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  step
+    steps through limit
    steps through limit
+  ~
+    assert
    assert
+    assert
    assert
+  .new
+    fallback overload
    fallback overload
+    String overload
    String overload
+  #byte_swap
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  does upto
  does upto
+  #neg_signed
+    does not overflow on Int32::MIN.abs_unsigned
    does not overflow on Int32::MIN.abs_unsigned
+    does for Int64
    does for Int64
+    does for UInt128
    does for UInt128
+    does for UInt32
    does for UInt32
+    does for Int128
    does for Int128
+    does for UInt8
    does for UInt8
+    does for Int32
    does for Int32
+    does for Int16
    does for Int16
+    does for UInt64
    does for UInt64
+    does for UInt16
    does for UInt16
+    does for Int8
    does for Int8
+    does not overflow on Int128::MIN.abs_unsigned
    does not overflow on Int128::MIN.abs_unsigned
+    does not overflow on Int16::MIN.abs_unsigned
    does not overflow on Int16::MIN.abs_unsigned
+    does not overflow on Int64::MIN.abs_unsigned
    does not overflow on Int64::MIN.abs_unsigned
+    does not overflow on Int8::MIN.abs_unsigned
    does not overflow on Int8::MIN.abs_unsigned
+  raises when mods by zero
  raises when mods by zero
+  gets downto iterator unsigned
  gets downto iterator unsigned
+  holds true that x == q*y + r
  holds true that x == q*y + r
+  &**
+    works with large integers
    works with large integers
+    wraps with larger integers
    wraps with larger integers
+    with UInt8
    with UInt8
+    raises with negative exponent
    raises with negative exponent
+    with positive Int32
    with positive Int32
+  "#times" yielding
  "#times" yielding
+  #inspect
+    doesn't append the type using IO
    doesn't append the type using IO
+    doesn't append the type
    doesn't append the type
+  gets upto iterator
  gets upto iterator
+  does downto min
  does downto min
+  #bit_reverse
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  divmod
+    assert
    assert
+  gets to iterator
  gets to iterator
+  #===(:Char)
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  odd?
+    assert
    assert
+    assert
    assert
+  does downto min unsigned
  does downto min unsigned
+  compares signed vs. unsigned integers
  compares signed vs. unsigned integers
+  "#times" iterator
  "#times" iterator
+  bit
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #trailing_zeros_count
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  % doesn't overflow (#7979)
  % doesn't overflow (#7979)
+  #rotate_left
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  compares equality and inequality of signed vs. unsigned integers
  compares equality and inequality of signed vs. unsigned integers
+  #abs_unsigned
+    does for UInt8
    does for UInt8
+    does for Int8
    does for Int8
+    does for Int128
    does for Int128
+    does not overflow on Int128::MIN
    does not overflow on Int128::MIN
+    does for Int64
    does for Int64
+    does for UInt32
    does for UInt32
+    does for Int16
    does for Int16
+    does for UInt128
    does for UInt128
+    does for Int32
    does for Int32
+    does not overflow on Int8::MIN
    does not overflow on Int8::MIN
+    does for UInt64
    does for UInt64
+    does not overflow on Int64::MIN
    does not overflow on Int64::MIN
+    does for UInt16
    does for UInt16
+    does not overflow on Int16::MIN
    does not overflow on Int16::MIN
+    does not overflow on Int32::MIN
    does not overflow on Int32::MIN
+  <<
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  gets downto iterator
  gets downto iterator
+  succ
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  returns 0 when doing IntN::MIN.remainder(-1) (#8306)
  returns 0 when doing IntN::MIN.remainder(-1) (#8306)
+  even?
+    assert
    assert
+    assert
    assert
+  "#times for UInt32 (#5019)" iterator
  "#times for UInt32 (#5019)" iterator
+  does upto max
  does upto max
+  #digits
+    works for non-Int32
    works for non-Int32
+    works for positive numbers or zero
    works for positive numbers or zero
+    works with a base
    works with a base
+    raises for invalid base
    raises for invalid base
+    raises for negative numbers
    raises for negative numbers
+    works for maximums
    works for maximums
+  raises when divides by zero
  raises when divides by zero
+  #leading_zeros_count
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  >>
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  clones
  clones
+  #bit_length
+    for primitive integers
    for primitive integers
+    for BigInt
    for BigInt
+  does remainder
  does remainder
+  to
+    does downwards
    does downwards
+    does upwards
    does upwards
+    does when same
    does when same
+Compress::Zlib::Writer
+  can be closed without sync
  can be closed without sync
+  can be closed with sync (2)
  can be closed with sync (2)
+  can be flushed
  can be flushed
+  can be closed with sync (1)
  can be closed with sync (1)
+  should be able to write
  should be able to write
+Process.find_executable
+  fails to find '/tmp/cr-spec-abc463dd/find_executable/base/inbase/'
  fails to find '/tmp/cr-spec-abc463dd/find_executable/base/inbase/'
+  fails to find 'inbase/'
  fails to find 'inbase/'
+  fails to find 'inbase'
  fails to find 'inbase'
+  fails to find './inpath'
  fails to find './inpath'
+  fails to find 'not_exe'
  fails to find 'not_exe'
+  finds '../base/inbase' as 'inbase'
  finds '../base/inbase' as 'inbase'
+  fails to find '.'
  fails to find '.'
+  fails to find './not_exe'
  fails to find './not_exe'
+  finds '/tmp/cr-spec-abc463dd/find_executable/base/inbase' as 'inbase'
  finds '/tmp/cr-spec-abc463dd/find_executable/base/inbase' as 'inbase'
+  fails to find 'sub/insub/'
  fails to find 'sub/insub/'
+  fails to find './sub'
  fails to find './sub'
+  finds './inbase' as 'inbase'
  finds './inbase' as 'inbase'
+  fails to find ''
  fails to find ''
+  fails to find 'sub'
  fails to find 'sub'
+  finds 'inpath' as '../path/inpath'
  finds 'inpath' as '../path/inpath'
+  fails to find '/tmp/cr-spec-abc463dd/find_executable/base/sub'
  fails to find '/tmp/cr-spec-abc463dd/find_executable/base/sub'
+  finds 'sub/insub' as 'sub/insub'
  finds 'sub/insub' as 'sub/insub'
+  fails to find 'sub/not_exe'
  fails to find 'sub/not_exe'
+Process
+  .parse_arguments_windows
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    raises an error if double quote is unclosed
    raises an error if double quote is unclosed
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  .quote_posix
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    join
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    assert
    assert
+    assert
    assert
+  .parse_arguments_posix
+    assert
    assert
+    raises an error when double quote is unclosed
    raises an error when double quote is unclosed
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    raises an error if single quote is unclosed
    raises an error if single quote is unclosed
+  .executable_path
+    searches executable
    searches executable
+  .quote_windows
+    assert
    assert
+    assert
    assert
+    join
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  .parse_arguments
+    uses the native platform rules
    uses the native platform rules
+BigInt
+  adds
  adds
+  #bit
  #bit
+  can use Number::[]
  can use Number::[]
+  #divisible_by?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  exponentiates
  exponentiates
+  raises if creating from infinity
  raises if creating from infinity
+  raises if factorial of negative
  raises if factorial of negative
+  creates from unsigned ints
  creates from unsigned ints
+  does gcd and lcm
  does gcd and lcm
+  #to_u128!
+    converts to UInt128
    converts to UInt128
+    converts modulo (2 ** 128)
    converts modulo (2 ** 128)
+  negates
  negates
+  #to_i8
+    converts to Int8
    converts to Int8
+    raises OverflowError
    raises OverflowError
+  #integer?
+    assert
    assert
+    assert
    assert
+  #trailing_zeros_count
  #trailing_zeros_count
+  #to_u32!
+    converts modulo (2 ** 32)
    converts modulo (2 ** 32)
+    converts to UInt32
    converts to UInt32
+  #to_i!
+    converts to Int32
    converts to Int32
+  multiplies
  multiplies
+  tdivs
  tdivs
+  #to_i
+    converts to Int32
    converts to Int32
+  does modulo with negative numbers
  does modulo with negative numbers
+  #to_u64
+    raises OverflowError
    raises OverflowError
+    converts to UInt64
    converts to UInt64
+  #to_u8!
+    converts to UInt8
    converts to UInt8
+    converts modulo (2 ** 8)
    converts modulo (2 ** 8)
+  #to_u128
+    converts to UInt128
    converts to UInt128
+    raises OverflowError
    raises OverflowError
+  subs
  subs
+  #to_u16!
+    converts modulo (2 ** 16)
    converts modulo (2 ** 16)
+    converts to UInt16
    converts to UInt16
+  #to_u!
+    converts to UInt32
    converts to UInt32
+  #to_i16
+    converts to Int16
    converts to Int16
+    raises OverflowError
    raises OverflowError
+  does bitwise not
  does bitwise not
+  has unsafe_shr (#8691)
  has unsafe_shr (#8691)
+  does remainder with negative numbers
  does remainder with negative numbers
+  does String#to_big_i
  does String#to_big_i
+  compares against float
  compares against float
+  does to_big_f
  does to_big_f
+  creates from signed ints
  creates from signed ints
+  #to_i8!
+    converts modulo (2 ** 8)
    converts modulo (2 ** 8)
+    converts to Int8
    converts to Int8
+  divides
  divides
+  #to_i32
+    raises OverflowError
    raises OverflowError
+    converts to Int32
    converts to Int32
+  creates from string
  creates from string
+  compares
  compares
+  #digits
+    raises for invalid base
    raises for invalid base
+    works for positive numbers or zero
    works for positive numbers or zero
+    raises for negative numbers
    raises for negative numbers
+    works with a base
    works with a base
+  raises if creating from NaN
  raises if creating from NaN
+  #to_s
+    precision parameter
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    base and upcase parameters
+      assert
      assert
+      raises on base 1
      raises on base 1
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      raises on base 37
      raises on base 37
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      raises on base 62 with upcase
      raises on base 62 with upcase
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+  raises if mods by zero
  raises if mods by zero
+  #to_u16
+    raises OverflowError
    raises OverflowError
+    converts to UInt16
    converts to UInt16
+  does bitwise and
  does bitwise and
+  gets factorial value
  gets factorial value
+  clones
  clones
+  #to_u8
+    raises OverflowError
    raises OverflowError
+    converts to UInt8
    converts to UInt8
+  #humanize_bytes
+    assert
    assert
+    assert
    assert
+  divides with negative numbers
  divides with negative numbers
+  raises if factorial of 2^64
  raises if factorial of 2^64
+  raises if divides by zero
  raises if divides by zero
+  creates with a value of zero
  creates with a value of zero
+  raises if creates from string but invalid
  raises if creates from string but invalid
+  #to_i64
+    converts to Int64
    converts to Int64
+    raises OverflowError
    raises OverflowError
+  #to_i16!
+    converts modulo (2 ** 16)
    converts modulo (2 ** 16)
+    converts to Int16
    converts to Int16
+  creates from float
  creates from float
+  #hash
  #hash
+  #to_u
+    converts to UInt32
    converts to UInt32
+  #to_i64!
+    converts to Int64
    converts to Int64
+    converts modulo (2 ** 64)
    converts modulo (2 ** 64)
+  #to_u64!
+    converts to UInt64
    converts to UInt64
+    converts modulo (2 ** 64)
    converts modulo (2 ** 64)
+  raises if divides by zero
  raises if divides by zero
+  does bitwise left shift
  does bitwise left shift
+  #to_i128!
+    converts modulo (2 ** 128)
    converts modulo (2 ** 128)
+    converts to Int128
    converts to Int128
+  does modulo
  does modulo
+  #to_i32!
+    converts modulo (2 ** 32)
    converts modulo (2 ** 32)
+    converts to Int32
    converts to Int32
+  divides with negative numbers
  divides with negative numbers
+  #inspect
+    assert
    assert
+  #to_i128
+    raises OverflowError
    raises OverflowError
+    converts to Int128
    converts to Int128
+  divides
  divides
+  does bitwise or
  does bitwise or
+  gets absolute value
  gets absolute value
+  does bitwise xor
  does bitwise xor
+  does popcount
  does popcount
+  #to_u32
+    converts to UInt32
    converts to UInt32
+    raises OverflowError
    raises OverflowError
+  does bitwise right shift
  does bitwise right shift
+  divides and calculates the modulo
  divides and calculates the modulo
 Spec::Methods
-  .assert_iterates_iterator
-    more than expected elements
    more than expected elements
+  .assert_iterates_yielding
     tuple
    tuple
-    basic
    basic
-    ensures type equality
    ensures type equality
     less than expected elements
    less than expected elements
-    infinite
    infinite
-  .assert_iterates_yielding
     ensures type equality
    ensures type equality
-    more than expected elements
    more than expected elements
     infinite
    infinite
+    more than expected elements
    more than expected elements
+    basic
    basic
+  .assert_iterates_iterator
     less than expected elements
    less than expected elements
+    ensures type equality
    ensures type equality
     basic
    basic
+    more than expected elements
    more than expected elements
+    infinite
    infinite
     tuple
    tuple
+YAML::Schema::FailSafe
+  raises on parse all ":"
  raises on parse all ":"
+  raises on parse all "\n    this: \"raises\"\n      an: \"yaml\"\n        parse: \"exception\"\n  "
  raises on parse all "\n    this: \"raises\"\n      an: \"yaml\"\n        parse: \"exception\"\n  "
+  raises on parse "\n    this: \"gives\"\n      an: \"error\"\n  "
  raises on parse "\n    this: \"gives\"\n      an: \"error\"\n  "
+  parses "\n    context:\n        replace_me: \"Yes please!\"\n  "
  parses "\n    context:\n        replace_me: \"Yes please!\"\n  "
+  parses "123"
  parses "123"
+  parses all "\n    context:\n        replace_me: \"Yes please!\"\n  "
  parses all "\n    context:\n        replace_me: \"Yes please!\"\n  "
+  raises on parse ":"
  raises on parse ":"
+  parses "321"
  parses "321"
+  parses "\n    first:\n      document:\n\n    second:\n      document:\n  "
  parses "\n    first:\n      document:\n\n    second:\n      document:\n  "
+  parses all "\n    foo:\n      bar: 123\n\n    bar:\n      foo: 321\n  "
  parses all "\n    foo:\n      bar: 123\n\n    bar:\n      foo: 321\n  "
+Log::ShortFormat
+  appends the exception
  appends the exception
+  shows the context data
  shows the context data
+  formats an entry
  formats an entry
+  shows context and entry data
  shows context and entry data
+  hides the source if empty
  hides the source if empty
+Atomic(T)
+  #max with signed enum
  #max with signed enum
+  #max with pointer type
  #max with pointer type
+  #min with signed
  #min with signed
+  #xor
  #xor
+  #compare_and_set
+    with integer
    with integer
+    with pointer
    with pointer
+    with reference union
    with reference union
+    with bool
    with bool
+    explicit ordering
    explicit ordering
+    with nilable reference
    with nilable reference
+    with enum
    with enum
+    with flags enum
    with flags enum
+    with reference type
    with reference type
+  #min with signed enum
  #min with signed enum
+  #adds
  #adds
+  #max with unsigned
  #max with unsigned
+  #and
  #and
+  #min with unsigned
  #min with unsigned
+  #sub
  #sub
+  #swap
+    with integer
    with integer
+    with reference union
    with reference union
+    explicit ordering
    explicit ordering
+    with reference type
    with reference type
+    with bool
    with bool
+    with nilable reference
    with nilable reference
+    with pointer type
    with pointer type
+  #nand
  #nand
+  #min with pointer type
  #min with pointer type
+  atomic bool
+    sizeof
    sizeof
+    gets and sets
    gets and sets
+  #or
  #or
+  #set
+    with integer
    with integer
+    with pointer type
    with pointer type
+    explicit ordering
    explicit ordering
+    with bool
    with bool
+    with nil (#4062)
    with nil (#4062)
+  #max with signed
  #max with signed
+  #lazy_set
  #lazy_set
+OpenSSL::SSL::Socket
+  closes connection to server that doesn't properly terminate SSL session
  closes connection to server that doesn't properly terminate SSL session
+  returns the peer certificate
  returns the peer certificate
+  accepts clients that only write then close the connection
  accepts clients that only write then close the connection
+  interprets graceful EOF of underlying socket as SSL termination
  interprets graceful EOF of underlying socket as SSL termination
+  returns selected alpn protocol
  returns selected alpn protocol
+  returns the TLS version
  returns the TLS version
+  returns the cipher that is currently in use
  returns the cipher that is currently in use
 __floattidf
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
@@ -33677,132 +32671,1170 @@
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
   passes compiler-rt builtins unit tests
  passes compiler-rt builtins unit tests
-Websocket integration tests
-  streams single messages made up of multiple parts that eventually become more than the buffer frame size
  streams single messages made up of multiple parts that eventually become more than the buffer frame size
-  sends single text messages
  sends single text messages
-  streams single messages more than the buffer frame size
  streams single messages more than the buffer frame size
-  streams less than the buffer frame size
  streams less than the buffer frame size
-String::Builder
-  builds
  builds
-  raises EOFError
  raises EOFError
-  raises if invokes to_s twice
  raises if invokes to_s twice
-  #chomp!
-    returns self
    returns self
-  allocates for > 1 GB
  allocates for > 1 GB
-  goes back
  goes back
-  goes back all
  goes back all
+record
+  can copy_with record with parent type
  can copy_with record with parent type
+  uses the default values on the ivars
  uses the default values on the ivars
+  can clone record with parent type
  can clone record with parent type
+  defines record with type declaration and initialization
  defines record with type declaration and initialization
+  defines record with type declarations
  defines record with type declarations
+  defines record with assignments
  defines record with assignments
+IO::ByteFormat
+  big endian
+    decode
+      from slice
+        reads float64
        reads float64
+        reads float32
        reads float32
+        reads int16
        reads int16
+        reads int8
        reads int8
+      from io
+        reads float32
        reads float32
+        reads unt16
        reads unt16
+        reads int8
        reads int8
+        reads int16
        reads int16
+        reads int32
        reads int32
+        reads float64
        reads float64
+        reads int64
        reads int64
+    encode
+      writes float64
      writes float64
+      writes int16
      writes int16
+      writes int8
      writes int8
+      writes int64
      writes int64
+      writes float32
      writes float32
+      writes int32
      writes int32
+  little endian
+    encode
+      to slice
+        writes int16 to larger slice
        writes int16 to larger slice
+        writes int8
        writes int8
+        writes int16
        writes int16
+      to io
+        writes float32
        writes float32
+        writes int32
        writes int32
+        writes float64
        writes float64
+        writes int8
        writes int8
+        writes int16
        writes int16
+        writes uint16
        writes uint16
+        writes int64
        writes int64
+    decode
+      from io
+        reads int16
        reads int16
+        reads float32
        reads float32
+        reads int64
        reads int64
+        reads float64
        reads float64
+        reads int8
        reads int8
+        reads int32
        reads int32
+        reads unt16
        reads unt16
+      from slice
+        reads int16
        reads int16
+        reads float32
        reads float32
+        reads int16 from larger slice
        reads int16 from larger slice
+        reads int8
        reads int8
+        reads float64
        reads float64
+Random::Secure
+  returns a random integer in range (#8219)
  returns a random integer in range (#8219)
+  fully fills a large buffer
  fully fills a large buffer
+  returns random number from a secure system source
  returns random number from a secure system source
+HTTP::Request
+  doesn't raise on request with multiple Content_length headers
  doesn't raise on request with multiple Content_length headers
+  serialize GET (with cookie)
  serialize GET (with cookie)
+  serialize POST (with bytes body)
  serialize POST (with bytes body)
+  #path
+    returns parsed path
    returns parsed path
+    falls back to /
    falls back to /
+  .from_io
+    handles malformed request
    handles malformed request
+    parses empty string (EOF), returns nil (no peek)
    parses empty string (EOF), returns nil (no peek)
+    parses POST (with body)
    parses POST (with body)
+    handles unsupported HTTP version
    handles unsupported HTTP version
+    headers are case insensitive
    headers are case insensitive
+    parses GET
    parses GET
+    stores normalized case for common header name (capitalized) (#8060)
    stores normalized case for common header name (capitalized) (#8060)
+    parses GET with query params
    parses GET with query params
+    parses GET with spaces in request line
    parses GET with spaces in request line
+    parses empty header
    parses empty header
+    stores normalized case for common header name (mixed) (#8060)
    stores normalized case for common header name (mixed) (#8060)
+    parses empty string (EOF), returns nil
    parses empty string (EOF), returns nil
+    long headers
+      fails for too-long headers with custom size
      fails for too-long headers with custom size
+      fails for too-long headers
      fails for too-long headers
+      handles long headers with custom size
      handles long headers with custom size
+      handles long headers
      handles long headers
+    stores normalized case for common header name (lowercase) (#8060)
    stores normalized case for common header name (lowercase) (#8060)
+    long single header
+      fails for too-long header
      fails for too-long header
+      handles long header
      handles long header
+    parses GET without \r
    parses GET without \r
+    parses GET with cookie
    parses GET with cookie
+    parses GET (just \n instead of \r\n)
    parses GET (just \n instead of \r\n)
+    long request lines
+      fails for too-long URI with custom size
      fails for too-long URI with custom size
+      handles long URI
      handles long URI
+      handles long URI with custom size
      handles long URI with custom size
+      fails for too-long URI
      fails for too-long URI
+  #if_match
+    reads single value
    reads single value
+    reads multiple values
    reads multiple values
+    reads *
    reads *
+  keep-alive
+    is false in HTTP/1.1 if `Connection: close` header is present
    is false in HTTP/1.1 if `Connection: close` header is present
+    is true by default in HTTP/1.1
    is true by default in HTTP/1.1
+    is true in HTTP/1.0 if `Connection: keep-alive` header is present
    is true in HTTP/1.0 if `Connection: keep-alive` header is present
+    is false by default in HTTP/1.0
    is false by default in HTTP/1.0
+  raises if serializing POST body with incorrect content-length (less then real)
  raises if serializing POST body with incorrect content-length (less then real)
+  #path=
+    updates serialized form
    updates serialized form
+    updates @resource
    updates @resource
+    sets path
    sets path
+  serialize GET (with cookies, from headers)
  serialize GET (with cookies, from headers)
+  #host_with_port
+    gets request host with port from the headers
    gets request host with port from the headers
+  #hostname
+    #hostname
    #hostname
+    gets request hostname from the headers
    gets request hostname from the headers
+  #if_none_match
+    reads single value
    reads single value
+    reads multiple values
    reads multiple values
+    reads *
    reads *
+  #form_params
+    returns ignors invalid content-type
    returns ignors invalid content-type
+    returns can safely be called on get requests
    returns can safely be called on get requests
+    returns parsed HTTP::Params
    returns parsed HTTP::Params
+  serialize POST (with body)
  serialize POST (with body)
+  #query_params
+    affects #query when modified
    affects #query when modified
+    updates serialized form when modified
    updates serialized form when modified
+    happily parses when query is not a canonical url-encoded string
    happily parses when query is not a canonical url-encoded string
+    updates @resource when modified
    updates @resource when modified
+    is affected when #query is modified
    is affected when #query is modified
+    returns parsed URI::Params
    returns parsed URI::Params
+  serialize POST (with io body, with content-length header)
  serialize POST (with io body, with content-length header)
+  serialize GET (with query params)
  serialize GET (with query params)
+  #query=
+    updates @resource
    updates @resource
+    sets query
    sets query
+    updates serialized form
    updates serialized form
+  #query
+    returns request's query
    returns request's query
+  raises if request has multiple and differing content-length headers
  raises if request has multiple and differing content-length headers
+  raises if serializing POST body with incorrect content-length (more then real)
  raises if serializing POST body with incorrect content-length (more then real)
+  serialize GET
  serialize GET
+  serialize POST (with io body, without content-length header)
  serialize POST (with io body, without content-length header)
+Compress::Zlib::Reader
+  can be closed without sync
  can be closed without sync
+  should not freeze when reading empty slice
  should not freeze when reading empty slice
+  should not read from empty stream
  should not read from empty stream
+  can be closed with sync (2)
  can be closed with sync (2)
+  can be closed with sync (1)
  can be closed with sync (1)
+  rewinds
  rewinds
+  should be able to read
  should be able to read
+  should raise buffer error on error (#6575)
  should raise buffer error on error (#6575)
+.__lshrti3
.__lshrti3
+Socket
+  .ip?
  .ip?
+  ==
  ==
+StringScanner
+  #string
+    assert
    assert
+  #scan
+    returns nil if it can't match from the offset
    returns nil if it can't match from the offset
+    returns the string matched and advances the offset
    returns the string matched and advances the offset
+  #skip
+    advances the offset but does not returns the string matched
    advances the offset but does not returns the string matched
+  #check_until
+    returns the string matched and advances the offset
    returns the string matched and advances the offset
+    returns nil if it can't match from the offset
    returns nil if it can't match from the offset
+  #eos
+    it is true when the offset is at the end
    it is true when the offset is at the end
+  #peek
+    shows the next len characters without advancing the offset
    shows the next len characters without advancing the offset
+  #offset
+    returns the current position
    returns the current position
+  #rest
+    returns the remainder of the string from the offset
    returns the remainder of the string from the offset
+  #reset
+    resets the scan offset to the beginning and clears the last match
    resets the scan offset to the beginning and clears the last match
+  #offset=
+    sets the current position
    sets the current position
+    raises on negative positions
    raises on negative positions
+  #scan_until
+    returns nil if it can't match from the offset
    returns nil if it can't match from the offset
+    returns the string matched and advances the offset
    returns the string matched and advances the offset
+  #skip_until
+    advances the offset but does not returns the string matched
    advances the offset but does not returns the string matched
+  #[]?
+    allows access to subgroups of the last match
    allows access to subgroups of the last match
+    raises when there is no subgroup
    raises when there is no subgroup
+    returns nil when there is no last match
    returns nil when there is no last match
+  #inspect
+    works with small strings
    works with small strings
+    has information on the scanner
    has information on the scanner
+  #check
+    returns the string matched but does not advances the offset
    returns the string matched but does not advances the offset
+    returns nil if it can't match from the offset
    returns nil if it can't match from the offset
+  #terminate
+    moves the scan offset to the end of the string and clears the last match
    moves the scan offset to the end of the string and clears the last match
+  #[]
+    allows access to subgroups of the last match
    allows access to subgroups of the last match
+    raises when there is no subgroup
    raises when there is no subgroup
+    raises when there is no last match
    raises when there is no last match
 unbuffered
-  can be closed after sending
  can be closed after sending
-  wakes up sender fiber when channel is closed
  wakes up sender fiber when channel is closed
-  can receive? when closed
  can receive? when closed
-  wakes up receiver fibers when channel is closed
  wakes up receiver fibers when channel is closed
-  can send successfully without raise
  can send successfully without raise
-  can send and receive nil
  can send and receive nil
   can be closed
  can be closed
+  can receive? when closed
  can receive? when closed
+  blocks if there is no receiver
  blocks if there is no receiver
+  pings
  pings
   deliver many senders
  deliver many senders
+  wakes up sender fiber when channel is closed
  wakes up sender fiber when channel is closed
+  can be closed after sending
  can be closed after sending
+  works with select
  works with select
   can receive? when not empty
  can receive? when not empty
   can be closed from different fiber
  can be closed from different fiber
-  blocks if there is no receiver
  blocks if there is no receiver
+  can send and receive nil
  can send and receive nil
+  wakes up receiver fibers when channel is closed
  wakes up receiver fibers when channel is closed
   cannot send if closed
  cannot send if closed
-  pings
  pings
-  works with select
  works with select
-OpenSSL::SSL::Socket
-  OpenSSL::SSL::Socket::Server
-    doesn't accept client when specified
    doesn't accept client when specified
-    auto accept client by default
    auto accept client by default
-Double
-  **
+  can send successfully without raise
  can send successfully without raise
+OpenSSL::X509::Certificate
+  extension
  extension
+  #signature_algorithm
  #signature_algorithm
+  subject
  subject
+  #digest
  #digest
+LLVM::ABI::AVR
+  abi_info
+    struct args within 18 bytes
    struct args within 18 bytes
+    struct args over 18 bytes
    struct args over 18 bytes
+    returns struct within 8 bytes
    returns struct within 8 bytes
+    multiple arguments
    multiple arguments
+    int64
    int64
+    double
    double
+    int32
    int32
+    int1
    int1
+    float
    float
+    int16
    int16
+    multiple arguments above registers
    multiple arguments above registers
+    int8
    int8
+    returns struct over 8 bytes
    returns struct over 8 bytes
+  size
+    for struct
    for struct
+    for packed struct
    for packed struct
+    for pointer
    for pointer
+    for integer
    for integer
+    for float
    for float
+    for array
    for array
+    for double
    for double
+  align
+    for double
    for double
+    for packed struct
    for packed struct
+    for struct
    for struct
+    for integer
    for integer
+    for array
    for array
+    for float
    for float
+    for pointer
    for pointer
+Socket::IPAddress
+  .parse_v4_fields?
     assert
    assert
     assert
    assert
     assert
    assert
-Time::Span
-  can substract big amount using milliseconds
  can substract big amount using milliseconds
-  test negate and abs
  test negate and abs
-  max days
  max days
-  should sum
  should sum
-  negative timespan
  negative timespan
-  #positive?
  #positive?
-  max milliseconds
  max milliseconds
-  #step
-    "basic" iterator
    "basic" iterator
-    "basic" yielding
    "basic" yielding
-  test int extension methods
  test int extension methods
-  test hash code
  test hash code
-  min seconds
  min seconds
-  initializes
  initializes
-  initializes with big seconds value
  initializes with big seconds value
-  test totals
  test totals
-  min days
  min days
-  initializes with type restrictions
  initializes with type restrictions
-  test float extension methods
  test float extension methods
-  arithmetic
-    #/(self)
    #/(self)
-    #sign
    #sign
-    #+
    #+
-    #/(Number)
    #/(Number)
-    #-
    #-
-    #*
    #*
-  test to_s
  test to_s
-  converts units
  converts units
-  #zero?
  #zero?
-  max seconds
  max seconds
-  #negative?
  #negative?
-  min milliseconds
  min milliseconds
-  test equals
  test equals
-  test compare
  test compare
-  can substract big amount using microseconds
  can substract big amount using microseconds
-  test properties
  test properties
-  days overflows
  days overflows
-String UTF16
-  .from_utf16
-    in the range U+10000..U+10FFFF
    in the range U+10000..U+10FFFF
-    in the range U+0000..U+D7FF
    in the range U+0000..U+D7FF
-    handles null bytes
    handles null bytes
-    in the range U+E000 to U+FFFF
    in the range U+E000 to U+FFFF
-    in the range U+D800..U+DFFF
    in the range U+D800..U+DFFF
-    with pointer reads multiple strings
    with pointer reads multiple strings
-  to_utf16
-    in the range U+10000..U+10FFFF
    in the range U+10000..U+10FFFF
-    in the range U+E000 to U+FFFF
    in the range U+E000 to U+FFFF
-    in the range U+0000..U+D7FF
    in the range U+0000..U+D7FF
-    in the range U+0000..U+FF
    in the range U+0000..U+FF
-    in the range U+D800..U+DFFF
    in the range U+D800..U+DFFF
-Crypto::Bcrypt::Password
-  create
-    generates salt
    generates salt
-    uses cost
    uses cost
-    generates digest
    generates digest
-  new
-    parses version
    parses version
-    parses salt
    parses salt
-    parses cost
    parses cost
-    raises on unsupported version (#11584)
    raises on unsupported version (#11584)
-    parses digest
    parses digest
-    validates the hash string has the required amount of parts
    validates the hash string has the required amount of parts
-  verify
-    verifies password version 2y is correct
    verifies password version 2y is correct
-    verifies password version 2a is correct (#11584)
    verifies password version 2a is correct (#11584)
-    verifies password version 2b is correct (#11584)
    verifies password version 2b is correct (#11584)
-    verifies password version 2 is correct (#11584)
    verifies password version 2 is correct (#11584)
-    verifies password is incorrect
    verifies password is incorrect
-    verifies password is correct
    verifies password is correct
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #==
  #==
+  .v4_mapped_v6
+    constructs an IPv4-mapped IPv6 address
    constructs an IPv4-mapped IPv6 address
+    raises on out of bound port number
    raises on out of bound port number
+    constructs from StaticArray
    constructs from StaticArray
+    raises on out of bound field
    raises on out of bound field
+  .v6
+    constructs from StaticArray
    constructs from StaticArray
+    raises on out of bound port number
    raises on out of bound port number
+    raises on out of bound field
    raises on out of bound field
+    constructs an IPv6 address
    constructs an IPv6 address
+  .valid_v6?
  .valid_v6?
+  #private?
  #private?
+  errors on out of range port numbers
  errors on out of range port numbers
+  .parse
+    parses IPv6
    parses IPv6
+    ignores path and params
    ignores path and params
+    fails with missing host
    fails with missing host
+    fails host name
    fails host name
+    fails with missing port
    fails with missing port
+    parses IPv4
    parses IPv4
+  transforms an IPv6 address into a C struct and back
  transforms an IPv6 address into a C struct and back
+  .valid?
  .valid?
+  .parse_v6_fields?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #loopback?
  #loopback?
+  transforms an IPv4 address into a C struct and back
  transforms an IPv4 address into a C struct and back
+  #unspecified?
  #unspecified?
+  #to_s
  #to_s
+  .valid_port?
  .valid_port?
+  #link_local?
  #link_local?
+  .v4
+    raises on out of bound field
    raises on out of bound field
+    constructs an IPv4 address
    constructs an IPv4 address
+    constructs from StaticArray
    constructs from StaticArray
+    raises on out of bound port number
    raises on out of bound port number
+  .valid_v4?
  .valid_v4?
+  #address
  #address
+  won't resolve domains
  won't resolve domains
+Float64
+  #to_hexfloat
+    hexits
+      assert
      assert
+      assert
      assert
+    exponents
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    trimming
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    corner cases
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    special cases
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+  .parse_hexfloat
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    special cases
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    values close to zero
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    values close to MIN_POSITIVE and MAX
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    invalid hexfloats
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    round-to-nearest, ties-to-even
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+      assert
      assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+IO::Sized
+  peeks
  peeks
+  gets
  gets
+  #close
+    closes the underlying stream if sync_close is true
    closes the underlying stream if sync_close is true
+    stops reading
    stops reading
+  gets with chomp = false
  gets with chomp = false
+  skips
  skips
+  read_byte
  read_byte
+  #read
+    allows extending the size
    allows extending the size
+    doesn't read past the limit when reading char-by-char
    doesn't read past the limit when reading char-by-char
+    doesn't read past the limit when reading the correct size
    doesn't read past the limit when reading the correct size
+    raises on negative numbers
    raises on negative numbers
+    reads partially when supplied with a larger slice
    reads partially when supplied with a larger slice
+  doesn't peek when remaining = 0 (#4261)
  doesn't peek when remaining = 0 (#4261)
+  #write
+    raises
    raises
+Regex::MatchData
+  #to_s
  #to_s
+  #byte_end
+    with unmatched capture
    with unmatched capture
+    char index
    char index
+  #to_a
+    converts into an array
    converts into an array
+    converts into an array having nil
    converts into an array having nil
+  #pre_match
+    returns the part of the string before the match
    returns the part of the string before the match
+    works with unicode
    works with unicode
+    returns an empty string when there's nothing before
    returns an empty string when there's nothing before
+  #to_h
+    converts into a hash
    converts into a hash
+    converts into a hash with duplicated names
    converts into a hash with duplicated names
+    converts into a hash having nil
    converts into a hash having nil
+  #string
  #string
+  #size
  #size
+  #==
  #==
+  #begin
+    with unmatched capture
    with unmatched capture
+    out of range
    out of range
+    with capture
    with capture
+    no captures
    no captures
+    char index
    char index
+  #end
+    out of range
    out of range
+    char index
    char index
+    no captures
    no captures
+    with capture
    with capture
+    with unmatched capture
    with unmatched capture
+  #[]
+    String
+      captures duplicated named group
      captures duplicated named group
+      raises exception on optional empty group
      raises exception on optional empty group
+      raises exception when named group doesn't exist
      raises exception when named group doesn't exist
+      captures empty group
      captures empty group
+      capture named group
      capture named group
+      named groups with same prefix
      named groups with same prefix
+    Range
+      can use range
      can use range
+      can use start and count
      can use start and count
+    Int
+      captures empty group
      captures empty group
+      raises exception on optional empty group
      raises exception on optional empty group
+      raises if outside match range with []
      raises if outside match range with []
+      raises if special variable accessed on invalid capture group
      raises if special variable accessed on invalid capture group
+      can use negative index
      can use negative index
+  #named_captures
+    gets more than 127 named captures
    gets more than 127 named captures
+    gets a hash of named captures with optional
    gets a hash of named captures with optional
+    gets a hash of named captures
    gets a hash of named captures
+    gets a hash of named captures with duplicated name
    gets a hash of named captures with duplicated name
+  #inspect
  #inspect
+  #byte_begin
+    char index
    char index
+    with unmatched capture
    with unmatched capture
+  #pretty_print
  #pretty_print
+  #captures
+    gets an array of unnamed captures
    gets an array of unnamed captures
+    gets an array of unnamed captures with optional
    gets an array of unnamed captures with optional
+    doesn't get named captures when there are more than 255
    doesn't get named captures when there are more than 255
+  #post_match
+    works with unicode
    works with unicode
+    returns the part of the string after the match
    returns the part of the string after the match
+    returns an empty string when there's nothing after
    returns an empty string when there's nothing after
+  #regex
  #regex
+  #hash
  #hash
+  #[]?
+    Range
+      can use start and count
      can use start and count
+      can use range
      can use range
+    Int
+      can use negative index
      can use negative index
+      returns nil if outside match range with []
      returns nil if outside match range with []
+      capture optional empty group
      capture optional empty group
+      capture empty group
      capture empty group
+    String
+      capture empty group
      capture empty group
+      capture named group
      capture named group
+      capture optional empty group
      capture optional empty group
+      returns nil exception when named group doesn't exist
      returns nil exception when named group doesn't exist
+      captures duplicated named group
      captures duplicated named group
+CSV
+  strips
  strips
+  gets row values with string
  gets row values with string
+  gets row values with regex
  gets row values with regex
+  can do new with block
  can do new with block
+  works without headers
  works without headers
+  rewind
+    IO based
+      without headers
      without headers
+      with headers
      with headers
+    string based
+      without headers
      without headers
+      with headers
      with headers
+  raises if trying to access before first row
  raises if trying to access before first row
+  returns a Tuple(String, String) for current row with indices
  returns a Tuple(String, String) for current row with indices
+  gets row values with integer
  gets row values with integer
+  works without headers
  works without headers
+  can do each
  can do each
+  returns a Tuple(String, String) for current row with headers
  returns a Tuple(String, String) for current row with headers
+  gets current row
  gets current row
+  gets headers
  gets headers
+  returns a Tuple(String, String) for this row with headers
  returns a Tuple(String, String) for this row with headers
+  returns a Tuple(String, String) for this row with indices
  returns a Tuple(String, String) for this row with indices
+raise
+  shouldn't overwrite the callstack on re-raise
  shouldn't overwrite the callstack on re-raise
+  should set exception's callstack
  should set exception's callstack
+Comparable(T)
+  clamp
+    number
+      clamps integers
      clamps integers
+      fails with an exclusive range
      fails with an exclusive range
+      clamps floats
      clamps floats
+    String
+      clamps strings
      clamps strings
+  can compare against Int (#2461)
  can compare against Int (#2461)
+  checks for nil
  checks for nil
+Socket::Address
+  .parse
+    fails with unknown scheme
    fails with unknown scheme
+    accepts URI
    accepts URI
+    parses UNIX
    parses UNIX
+    parses UDP
    parses UDP
+    parses TCP
    parses TCP
+URI::Punycode
+  encodes Hello-Another-Way-それぞれ to Hello-Another-Way--fc4qua97gba
  encodes Hello-Another-Way-それぞれ to Hello-Another-Way--fc4qua97gba
+  decodes Hello-Another-Way--fc4qua05auwb3674vfr0b to Hello-Another-Way-それぞれの場所
  decodes Hello-Another-Way--fc4qua05auwb3674vfr0b to Hello-Another-Way-それぞれの場所
+  decodes de-jg4avhby1noc0d to パフィーdeルンバ
  decodes de-jg4avhby1noc0d to パフィーdeルンバ
+  translate to ascii only host name
  translate to ascii only host name
+  encodes MajiでKoiする5秒前 to MajiKoi5-783gue6qz075azm5e
  encodes MajiでKoiする5秒前 to MajiKoi5-783gue6qz075azm5e
+  encodes ひとつ屋根の下2 to 2-u9tlzr9756bt3uc0v
  encodes ひとつ屋根の下2 to 2-u9tlzr9756bt3uc0v
+  decodes MajiKoi5-783gue6qz075azm5e to MajiでKoiする5秒前
  decodes MajiKoi5-783gue6qz075azm5e to MajiでKoiする5秒前
+  decodes -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n to 安室奈美恵-with-SUPER-MONKEYS
  decodes -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n to 安室奈美恵-with-SUPER-MONKEYS
+  decodes d9juau41awczczp to そのスピードで
  decodes d9juau41awczczp to そのスピードで
+  decodes 3B-ww4c5e180e575a65lsy2b to 3年B組金八先生
  decodes 3B-ww4c5e180e575a65lsy2b to 3年B組金八先生
+  encodes 3年B組金八先生 to 3B-ww4c5e180e575a65lsy2b
  encodes 3年B組金八先生 to 3B-ww4c5e180e575a65lsy2b
+  decodes Hello-Another-Way--fc4qua97gba to Hello-Another-Way-それぞれ
  decodes Hello-Another-Way--fc4qua97gba to Hello-Another-Way-それぞれ
+  encodes 安室奈美恵-with-SUPER-MONKEYS to -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n
  encodes 安室奈美恵-with-SUPER-MONKEYS to -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n
+  encodes Hello-Another-Way-それぞれの場所 to Hello-Another-Way--fc4qua05auwb3674vfr0b
  encodes Hello-Another-Way-それぞれの場所 to Hello-Another-Way--fc4qua05auwb3674vfr0b
+  encodes そのスピードで to d9juau41awczczp
  encodes そのスピードで to d9juau41awczczp
+  encodes パフィーdeルンバ to de-jg4avhby1noc0d
  encodes パフィーdeルンバ to de-jg4avhby1noc0d
+  decodes 2-u9tlzr9756bt3uc0v to ひとつ屋根の下2
  decodes 2-u9tlzr9756bt3uc0v to ひとつ屋根の下2
+Thread
+  allows passing an argumentless fun to execute
  allows passing an argumentless fun to execute
+  names the thread
  names the thread
+  yields the processor
  yields the processor
+  returns current thread object
  returns current thread object
+  raises inside thread and gets it on join
  raises inside thread and gets it on join
+BigRational
+  #denominator
  #denominator
+  #to_big_r
  #to_big_r
+  #%
  #%
+  #to_f
  #to_f
+  #to_f!
  #to_f!
+  #*
  #*
+  is a number
  is a number
+  clones
  clones
+  #floor
  #floor
+  #ceil
  #ceil
+  #//
  #//
+  #to_f64!
  #to_f64!
+  #format
  #format
+  #to_s
  #to_s
+  #round
+    rounding modes
+      to_negative
      to_negative
+      default (=ties_even)
      default (=ties_even)
+      to_zero
      to_zero
+      ties_away
      ties_away
+      to_positive
      to_positive
+      ties_even
      ties_even
+  #+
  #+
+  Float64#to_big_r
  Float64#to_big_r
+  #to_f32!
  #to_f32!
+  #tdiv
  #tdiv
+  BigDecimal#to_big_r
  BigDecimal#to_big_r
+  .new
+    initializes from BigFloat with high precision
    initializes from BigFloat with high precision
+    raises if creating from infinity
    raises if creating from infinity
+    raises if creating from NaN
    raises if creating from NaN
+    initialize
    initialize
+  #remainder
  #remainder
+  #-
  #-
+  #<<
  #<<
+  #to_f32
  #to_f32
+  #>>
  #>>
+  Int#to_big_r
  Int#to_big_r
+  #- (negation)
  #- (negation)
+  #abs
  #abs
+  Float32#to_big_r
  Float32#to_big_r
+  #inspect
+    assert
    assert
+  #<=>
+    Float and Comparable
    Float and Comparable
+    Int and Comparable
    Int and Comparable
+    compares against NaNs
    compares against NaNs
+    BigFloat and Comparable
    BigFloat and Comparable
+    BigInt and Comparable
    BigInt and Comparable
+    BigRational and Comparable
    BigRational and Comparable
+  #/
  #/
+  #numerator
  #numerator
+  #to_f64
  #to_f64
+  #**
+    exponentiates with negative powers
    exponentiates with negative powers
+    exponentiates with positive powers
    exponentiates with positive powers
+    cannot raise 0 to a negative power
    cannot raise 0 to a negative power
+  #integer?
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+    assert
    assert
+  #inv
  #inv
+  #trunc
  #trunc
+  #to_big_f
  #to_big_f
+XML
+  parses HTML from IO
  parses HTML from IO
+  parses HTML
  parses HTML
+  raises error when parsing empty string (#2752)
  raises error when parsing empty string (#2752)
+  gets name of HTML document node (#4040)
  gets name of HTML document node (#4040)
+  parses html5 (#1404)
  parses html5 (#1404)
+Crystal::SyntaxHighlighter::HTML
+  #highlight!
+    "foo = bar(\"baz\#{PI + 1}\") # comment"
    "foo = bar(\"baz\#{PI + 1}\") # comment"
+    "\"foo"
    "\"foo"
+    "%i[foo"
    "%i[foo"
+    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO"
    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO"
+    "foo, bar = <<-FOO, <<-BAR\n  foo"
    "foo, bar = <<-FOO, <<-BAR\n  foo"
+    "%w[foo"
    "%w[foo"
+  .highlight
+    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO\n  bar\n  BAR"
    "foo, bar = <<-FOO, <<-BAR\n  foo\n  FOO\n  bar\n  BAR"
+    "require"
    "require"
+    "def []"
    "def []"
+    "if"
    "if"
+    "1 - 2"
    "1 - 2"
+    "%w(foo  bar\n  baz)"
    "%w(foo  bar\n  baz)"
+    "extend"
    "extend"
+    "1 |= 2"
    "1 |= 2"
+    "def >>"
    "def >>"
+    "1 > 2"
    "1 > 2"
+    "\"foo\#{[1, bar, \"str\"]}baz\""
    "\"foo\#{[1, bar, \"str\"]}baz\""
+    "def <="
    "def <="
+    "asm"
    "asm"
+    "# foo"
    "# foo"
+    "with"
    "with"
+    "1 %= 2"
    "1 %= 2"
+    "1 **= 2"
    "1 **= 2"
+    "def +"
    "def +"
+    "$~"
    "$~"
+    "rescue"
    "rescue"
+    "\"<>\""
    "\"<>\""
+    "# foo\n# bar\n"
    "# foo\n# bar\n"
+    "struct"
    "struct"
+    "pointerof"
    "pointerof"
+    "1 &** 2"
    "1 &** 2"
+    "yield"
    "yield"
+    "enum"
    "enum"
+    ":\"foo\""
    ":\"foo\""
+    "`foo`"
    "`foo`"
+    "# <\">"
    "# <\">"
+    "1 ! 2"
    "1 ! 2"
+    "def []="
    "def []="
+    "def <<"
    "def <<"
+    "private"
    "private"
+    "abstract"
    "abstract"
+    "offsetof"
    "offsetof"
+    "next"
    "next"
+    "%w<foo bar baz>"
    "%w<foo bar baz>"
+    "1 += 2"
    "1 += 2"
+    "1 /2"
    "1 /2"
+    "def &"
    "def &"
+    "select"
    "select"
+    "1/ 2"
    "1/ 2"
+    "1 || 2"
    "1 || 2"
+    "false"
    "false"
+    "ensure"
    "ensure"
+    "fun"
    "fun"
+    "1 //= 2"
    "1 //= 2"
+    "1 | 2"
    "1 | 2"
+    "then"
    "then"
+    "def **"
    "def **"
+    "super"
    "super"
+    "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\""
    "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\""
+    "1 <=> 2"
    "1 <=> 2"
+    "Foo"
    "Foo"
+    "a /b/"
    "a /b/"
+    "%<foo>"
    "%<foo>"
+    "self"
    "self"
+    "macro"
    "macro"
+    "for"
    "for"
+    "1 -= 2"
    "1 -= 2"
+    "1 ** 2"
    "1 ** 2"
+    "break"
    "break"
+    "42"
    "42"
+    "$2?"
    "$2?"
+    "1 >= 2"
    "1 >= 2"
+    "def !="
    "def !="
+    "%Q(foo)"
    "%Q(foo)"
+    "typeof"
    "typeof"
+    "def -"
    "def -"
+    "%r(foo)xim"
    "%r(foo)xim"
+    "'a'"
    "'a'"
+    "# bar\n"
    "# bar\n"
+    "sizeof"
    "sizeof"
+    "1 < 2"
    "1 < 2"
+    "foo"
    "foo"
+    "1 && 2"
    "1 && 2"
+    "alias"
    "alias"
+    "def //"
    "def //"
+    "is_a?"
    "is_a?"
+    "lib"
    "lib"
+    "/foo/xim"
    "/foo/xim"
+    "%w(foo bar baz)"
    "%w(foo bar baz)"
+    "1 >> 2"
    "1 >> 2"
+    "1 = 2"
    "1 = 2"
+    "def >"
    "def >"
+    "def |"
    "def |"
+    "1 ^ 2"
    "1 ^ 2"
+    "1 != 2"
    "1 != 2"
+    "1 /= 2"
    "1 /= 2"
+    "module"
    "module"
+    "nil?"
    "nil?"
+    "1 []? 2"
    "1 []? 2"
+    "1 =~ 2"
    "1 =~ 2"
+    "1 &+ 2"
    "1 &+ 2"
+    "1 / 2"
    "1 / 2"
+    "1 &* 2"
    "1 &* 2"
+    "do"
    "do"
+    "$?"
    "$?"
+    "nil"
    "nil"
+    "1 &- 2"
    "1 &- 2"
+    "union"
    "union"
+    "self"
    "self"
+    "out"
    "out"
+    "1 &&= 2"
    "1 &&= 2"
+    "elsif"
    "elsif"
+    "while"
    "while"
+    "1 !~ 2"
    "1 !~ 2"
+    "%x(foo)"
    "%x(foo)"
+    "def =~"
    "def =~"
+    "until"
    "until"
+    "true"
    "true"
+    "def >="
    "def >="
+    "1 <<= 2"
    "1 <<= 2"
+    "1 <= 2"
    "1 <= 2"
+    "alignof"
    "alignof"
+    "a/ b"
    "a/ b"
+    "def foo"
    "def foo"
+    "include"
    "include"
+    "'<'"
    "'<'"
+    "\"foo\#{bar}baz\""
    "\"foo\#{bar}baz\""
+    "of"
    "of"
+    "$1"
    "$1"
+    "1/2"
    "1/2"
+    "a / b"
    "a / b"
+    "%i(foo bar baz)"
    "%i(foo bar baz)"
+    "end"
    "end"
+    "1 % 2"
    "1 % 2"
+    "uninitialized"
    "uninitialized"
+    "1 ||= 2"
    "1 ||= 2"
+    "foo = bar(\"baz\#{PI + 1}\") # comment"
    "foo = bar(\"baz\#{PI + 1}\") # comment"
+    "1 * 2"
    "1 * 2"
+    "instance_sizeof"
    "instance_sizeof"
+    "1 &-= 2"
    "1 &-= 2"
+    "def"
    "def"
+    "1 &+= 2"
    "1 &+= 2"
+    "1 &= 2"
    "1 &= 2"
+    "when"
    "when"
+    "def ^"
    "def ^"
+    "def =="
    "def =="
+    "1 &*= 2"
    "1 &*= 2"
+    "1 === 2"
    "1 === 2"
+    "1 << 2"
    "1 << 2"
+    "def <"
    "def <"
+    "verbatim"
    "verbatim"
+    "1 [] 2"
    "1 [] 2"
+    "\"foo\""
    "\"foo\""
+    "type"
    "type"
+    "1 ^= 2"
    "1 ^= 2"
+    "1 & 2"
    "1 & 2"
+    "123_i64"
    "123_i64"
+    "annotation"
    "annotation"
+    "1 *= 2"
    "1 *= 2"
+    "else"
    "else"
+    "protected"
    "protected"
+    "unless"
    "unless"
+    "instance_alignof"
    "instance_alignof"
+    "def %"
    "def %"
+    "begin"
    "begin"
+    "Foo::Bar"
    "Foo::Bar"
+    "as"
    "as"
+    "a/b"
    "a/b"
+    "as?"
    "as?"
+    "%q(foo)"
    "%q(foo)"
+    "Set{1, 2, 3}"
    "Set{1, 2, 3}"
+    "return"
    "return"
+    "def *"
    "def *"
+    "def !~"
    "def !~"
+    "def <=>"
    "def <=>"
+    "1 == 2"
    "1 == 2"
+    "case"
    "case"
+    "def ~"
    "def ~"
+    "1 []= 2"
    "1 []= 2"
+    "def []?"
    "def []?"
+    "1 + 2"
    "1 + 2"
+    "class"
    "class"
+    "foo\nbar"
    "foo\nbar"
+    "%(foo)"
    "%(foo)"
+    "in"
    "in"
+    "1 ~ 2"
    "1 ~ 2"
+    ":foo"
    ":foo"
+    "foo bar"
    "foo bar"
+    "1 // 2"
    "1 // 2"
+    "1 >>= 2"
    "1 >>= 2"
+    "3.14"
    "3.14"
+    "def /"
    "def /"
+OAuth::AccessToken
+  creates from response body
  creates from response body
+WinError
+  #message
  #message
+  .value
  .value
+  .wsa_value
  .wsa_value
+Random::PCG32
+  can be initialized without explicit seed
  can be initialized without explicit seed
+  can jump ahead
  can jump ahead
+  can jump back
  can jump back
+  generates random numbers as generated official implementation
  generates random numbers as generated official implementation
+concurrent
+  spawn
+    uses spawn macro
    uses spawn macro
+    spawns named with macro
    spawns named with macro
+    spawns named
    spawns named
+  schedules intermitting sleeps
  schedules intermitting sleeps
+  accepts method call with receiver
  accepts method call with receiver
+YAML
+  parser
+    parses recursive sequence
    parses recursive sequence
+    assert
    assert
+    parses alias to scalar
    parses alias to scalar
+    assert
    assert
+    assert
    assert
+    parses recursive mapping
    parses recursive mapping
+    assert
    assert
+    assert
    assert
+    merging with << key
+      parses from IO
      parses from IO
+      raises if merging with missing alias
      raises if merging with missing alias
+      doesn't merge explicit string key <<
      doesn't merge explicit string key <<
+      merges other mapping with alias
      merges other mapping with alias
+      has correct line/number info (#2585)
      has correct line/number info (#2585)
+      merges other mapping
      merges other mapping
+      has correct line/number info (2)
      has correct line/number info (2)
+      merges other mapping with array of alias
      merges other mapping with array of alias
+      has correct message (#4006)
      has correct message (#4006)
+      doesn't merge empty mapping
      doesn't merge empty mapping
+      doesn't merge arrays
      doesn't merge arrays
+    assert
    assert
+  dump
+    writes YAML to a stream
    writes YAML to a stream
+    returns YAML as a string
    returns YAML as a string
+OpenSSL::PKCS5
+  computes pbkdf2_hmac MD5
  computes pbkdf2_hmac MD5
+  computes pbkdf2_hmac SHA256
  computes pbkdf2_hmac SHA256
+  computes pbkdf2_hmac SHA1
  computes pbkdf2_hmac SHA1
+  computes pbkdf2_hmac SHA384
  computes pbkdf2_hmac SHA384
+  computes pbkdf2_hmac SHA256
  computes pbkdf2_hmac SHA256
+  computes pbkdf2_hmac SHA384
  computes pbkdf2_hmac SHA384
+  computes pbkdf2_hmac SHA512
  computes pbkdf2_hmac SHA512
+  computes pbkdf2_hmac SHA224
  computes pbkdf2_hmac SHA224
+  computes pbkdf2_hmac SHA512
  computes pbkdf2_hmac SHA512
+  computes pbkdf2_hmac SHA256
  computes pbkdf2_hmac SHA256
+  computes pbkdf2_hmac SHA224
  computes pbkdf2_hmac SHA224
+  computes pbkdf2_hmac SHA384
  computes pbkdf2_hmac SHA384
+  computes pbkdf2_hmac SHA1
  computes pbkdf2_hmac SHA1
+  computes pbkdf2_hmac MD5
  computes pbkdf2_hmac MD5
+  computes pbkdf2_hmac_sha1
  computes pbkdf2_hmac_sha1
+  computes pbkdf2_hmac SHA256
  computes pbkdf2_hmac SHA256
+  computes pbkdf2_hmac MD5
  computes pbkdf2_hmac MD5
+  computes pbkdf2_hmac SHA224
  computes pbkdf2_hmac SHA224
+  computes pbkdf2_hmac SHA512
  computes pbkdf2_hmac SHA512
+  computes pbkdf2_hmac MD5
  computes pbkdf2_hmac MD5
+  computes pbkdf2_hmac SHA384
  computes pbkdf2_hmac SHA384
+  computes pbkdf2_hmac SHA1
  computes pbkdf2_hmac SHA1
+  computes pbkdf2_hmac SHA1
  computes pbkdf2_hmac SHA1
+  computes pbkdf2_hmac SHA512
  computes pbkdf2_hmac SHA512
+  computes pbkdf2_hmac SHA224
  computes pbkdf2_hmac SHA224
 
 Pending:
-  Math Functions for computing quotient and remainder
-  String #reverse converts invalid code units to replacement char
-  TCPServer settings
-  Regex #matches_at_byte_index? negative
-  Regex #match_at_byte_index negative
-  Regex #match with pos negative
-  Spec matchers pending block is not compiled pending has block with valid syntax, but invalid semantics
   Number #round edge cases
   URI .parse unescaped @ in user/password should not confuse host
-  Path #expand converts a pathname to an absolute pathname, using a complete path assert
-  OpenSSL::X509::Certificate #digest
-  OpenSSL::SSL::Context ciphers uses intermediate default ciphers
-  UDPSocket using IPv4 joins and transmits to multicast groups
-  UDPSocket using IPv6 joins and transmits to multicast groups
+  TCPServer settings
+  Spec matchers pending block is not compiled pending has block with valid syntax, but invalid semantics
   UDPSocket #connect with a IPv6 address
+  UDPSocket using IPv6 joins and transmits to multicast groups
+  UDPSocket using IPv4 joins and transmits to multicast groups
+  Math Functions for computing quotient and remainder
+  String #reverse converts invalid code units to replacement char
+  Path #expand converts a pathname to an absolute pathname, using a complete path assert
   String#each_grapheme GB9c
   String#each_grapheme GB9c
   String#each_grapheme GB9c
@@ -33810,751 +33842,756 @@
   String#each_grapheme GB9c
   String#each_grapheme GB9c
   String#each_grapheme GB9c
+  Regex #match with pos negative
+  Regex #matches_at_byte_index? negative
+  Regex #match_at_byte_index negative
+  OpenSSL::SSL::Context ciphers uses intermediate default ciphers
+  OpenSSL::X509::Certificate #digest
 
-Finished in 2:40 minutes
+Finished in 8:52 minutes
 17720 examples, 0 failures, 0 errors, 22 pending
-Randomized with seed: 89008
+Randomized with seed: 26192
 make[2]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg'
-make release=1 verbose=1 progress=1 threads=42 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 primitives_spec
+make release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 primitives_spec
 make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg'
-./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 42 --link-flags="-Wl,-z,relro"  --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/primitives_spec spec/primitives_spec.cr
+./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 20 --link-flags="-Wl,-z,relro"  --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/primitives_spec spec/primitives_spec.cr
 Using compiled compiler at .build/crystal
 [1/13] Parse                             
[1/13] Parse                             
[2/13] Semantic (top level)              
[2/13] Semantic (top level)              
[3/13] Semantic (new)                    
[3/13] Semantic (new)                    
[4/13] Semantic (type declarations)      
[4/13] Semantic (type declarations)      
[5/13] Semantic (abstract def check)     
[5/13] Semantic (abstract def check)     
[6/13] Semantic (restrictions augmenter) 
[6/13] Semantic (restrictions augmenter) 
[7/13] Semantic (ivars initializers)     
[7/13] Semantic (ivars initializers)     
[8/13] Semantic (cvars initializers)     
[8/13] Semantic (cvars initializers)     
[9/13] Semantic (main)                   
[9/13] Semantic (main)                   
[10/13] Semantic (cleanup)                
[10/13] Semantic (cleanup)                
[11/13] Semantic (recursive struct check) 
[11/13] Semantic (recursive struct check) 
[12/13] Codegen (crystal)                 
[12/13] Codegen (crystal)                 
[13/13] Codegen (bc+obj)                  
[13/13] [0/1] Codegen (bc+obj)                  
[13/13] [1/1] Codegen (bc+obj)                  
[13/13] [1/1] Codegen (bc+obj)                  
[14/13] Codegen (linking)                 
[14/13] Codegen (linking)                 
                                       
.build/primitives_spec -v --order=random   
-Randomized with seed: 13354
+Randomized with seed: 92833
+Primitives: Slice
+  .literal
+    creates multiple literals
    creates multiple literals
+    creates a read-only Slice(Float64)
    creates a read-only Slice(Float64)
+    creates multiple literals
    creates multiple literals
+    creates a read-only Slice(Int128)
    creates a read-only Slice(Int128)
+    creates multiple literals
    creates multiple literals
+    creates multiple literals
    creates multiple literals
+    creates a read-only Slice(UInt32)
    creates a read-only Slice(UInt32)
+    creates a read-only Slice(UInt64)
    creates a read-only Slice(UInt64)
+    creates multiple literals
    creates multiple literals
+    creates multiple literals
    creates multiple literals
+    creates multiple literals
    creates multiple literals
+    creates multiple literals
    creates multiple literals
+    creates a read-only Slice(UInt16)
    creates a read-only Slice(UInt16)
+    creates multiple literals
    creates multiple literals
+    creates a read-only Slice(Int64)
    creates a read-only Slice(Int64)
+    creates a read-only Slice(UInt128)
    creates a read-only Slice(UInt128)
+    creates a read-only Slice(Int16)
    creates a read-only Slice(Int16)
+    creates a read-only Slice(UInt8)
    creates a read-only Slice(UInt8)
+    creates a read-only Slice(Int8)
    creates a read-only Slice(Int8)
+    creates a read-only Slice(Int32)
    creates a read-only Slice(Int32)
+    creates multiple literals
    creates multiple literals
+    creates multiple literals
    creates multiple literals
+    creates a read-only Slice(Float32)
    creates a read-only Slice(Float32)
+    creates multiple literals
    creates multiple literals
+Primitives: pointer
+  .malloc
+    is non-atomic for ReferenceStorage(T) if T is non-atomic (#14692)
    is non-atomic for ReferenceStorage(T) if T is non-atomic (#14692)
+Crystal::Command
+  exec external commands
  exec external commands
 Primitives: Int
+  #unsafe_chr
+    doesn't raise on overflow
    doesn't raise on overflow
+  #to_f
+    raises on overflow for UInt128#to_f32
    raises on overflow for UInt128#to_f32
+  #to_i
+    raises on overflow for Int32#to_i128
    raises on overflow for Int32#to_i128
+    raises on overflow for UInt16#to_i
    raises on overflow for UInt16#to_i
+    raises on overflow for Int64#to_u32
    raises on overflow for Int64#to_u32
+    raises on overflow for Int8#to_i32
    raises on overflow for Int8#to_i32
+    raises on overflow for Int64#to_i16
    raises on overflow for Int64#to_i16
+    raises on overflow for UInt128#to_u8
    raises on overflow for UInt128#to_u8
+    raises on overflow for UInt32#to_u128
    raises on overflow for UInt32#to_u128
+    raises on overflow for Int16#to_u16
    raises on overflow for Int16#to_u16
+    raises on overflow for UInt64#to_i32
    raises on overflow for UInt64#to_i32
+    raises on overflow for UInt8#to_u64
    raises on overflow for UInt8#to_u64
+    raises on overflow for UInt64#to_i
    raises on overflow for UInt64#to_i
+    raises on overflow for Int128#to_i64
    raises on overflow for Int128#to_i64
+    raises on overflow for UInt8#to_u
    raises on overflow for UInt8#to_u
+    raises on overflow for UInt32#to_u16
    raises on overflow for UInt32#to_u16
+    raises on overflow for UInt8#to_u128
    raises on overflow for UInt8#to_u128
+    raises on overflow for Int32#to_u32
    raises on overflow for Int32#to_u32
+    raises on overflow for Int16#to_i
    raises on overflow for Int16#to_i
+    raises on overflow for UInt32#to_i16
    raises on overflow for UInt32#to_i16
+    raises on overflow for Int16#to_i8
    raises on overflow for Int16#to_i8
+    raises on overflow for UInt128#to_u
    raises on overflow for UInt128#to_u
+    raises on overflow for UInt128#to_i32
    raises on overflow for UInt128#to_i32
+    raises on overflow for Int16#to_u128
    raises on overflow for Int16#to_u128
+    raises on overflow for UInt8#to_u16
    raises on overflow for UInt8#to_u16
+    raises on overflow for UInt128#to_u16
    raises on overflow for UInt128#to_u16
+    raises on overflow for Int128#to_u32
    raises on overflow for Int128#to_u32
+    raises on overflow for Int128#to_u
    raises on overflow for Int128#to_u
+    raises on overflow for UInt64#to_u
    raises on overflow for UInt64#to_u
+    raises on overflow for Int32#to_i8
    raises on overflow for Int32#to_i8
+    raises on overflow for UInt32#to_u64
    raises on overflow for UInt32#to_u64
+    raises on overflow for Int32#to_i64
    raises on overflow for Int32#to_i64
+    raises on overflow for UInt32#to_i128
    raises on overflow for UInt32#to_i128
+    raises on overflow for Int8#to_u
    raises on overflow for Int8#to_u
+    raises on overflow for UInt32#to_i
    raises on overflow for UInt32#to_i
+    raises on overflow for UInt64#to_u8
    raises on overflow for UInt64#to_u8
+    raises on overflow for UInt16#to_i64
    raises on overflow for UInt16#to_i64
+    raises on overflow for Int64#to_u16
    raises on overflow for Int64#to_u16
+    raises on overflow for Int128#to_u128
    raises on overflow for Int128#to_u128
+    raises on overflow for Int8#to_u8
    raises on overflow for Int8#to_u8
+    raises on overflow for Int32#to_u
    raises on overflow for Int32#to_u
+    raises on overflow for Int16#to_u32
    raises on overflow for Int16#to_u32
+    raises on overflow for Int8#to_u32
    raises on overflow for Int8#to_u32
+    raises on overflow for UInt128#to_i8
    raises on overflow for UInt128#to_i8
+    raises on overflow for UInt16#to_u64
    raises on overflow for UInt16#to_u64
+    raises on overflow for UInt32#to_i32
    raises on overflow for UInt32#to_i32
+    raises on overflow for Int8#to_u16
    raises on overflow for Int8#to_u16
+    raises on overflow for UInt64#to_u128
    raises on overflow for UInt64#to_u128
+    raises on overflow for UInt8#to_u32
    raises on overflow for UInt8#to_u32
+    raises on overflow for Int32#to_u128
    raises on overflow for Int32#to_u128
+    raises on overflow for Int8#to_i128
    raises on overflow for Int8#to_i128
+    raises on overflow for UInt16#to_i128
    raises on overflow for UInt16#to_i128
+    raises on overflow for Int8#to_u64
    raises on overflow for Int8#to_u64
+    raises on overflow for UInt128#to_i
    raises on overflow for UInt128#to_i
+    raises on overflow for UInt64#to_i64
    raises on overflow for UInt64#to_i64
+    raises on overflow for UInt128#to_i64
    raises on overflow for UInt128#to_i64
+    raises on overflow for Int64#to_i32
    raises on overflow for Int64#to_i32
+    raises on overflow for UInt16#to_i8
    raises on overflow for UInt16#to_i8
+    raises on overflow for UInt8#to_i
    raises on overflow for UInt8#to_i
+    raises on overflow for Int64#to_i8
    raises on overflow for Int64#to_i8
+    raises on overflow for UInt32#to_i64
    raises on overflow for UInt32#to_i64
+    raises on overflow for UInt16#to_u8
    raises on overflow for UInt16#to_u8
+    raises on overflow for Int64#to_u128
    raises on overflow for Int64#to_u128
+    raises on overflow for UInt64#to_u32
    raises on overflow for UInt64#to_u32
+    raises on overflow for UInt8#to_i32
    raises on overflow for UInt8#to_i32
+    raises on overflow for UInt16#to_u32
    raises on overflow for UInt16#to_u32
+    raises on overflow for Int16#to_u
    raises on overflow for Int16#to_u
+    raises on overflow for UInt32#to_i8
    raises on overflow for UInt32#to_i8
+    raises on overflow for Int16#to_u64
    raises on overflow for Int16#to_u64
+    raises on overflow for Int8#to_u128
    raises on overflow for Int8#to_u128
+    raises on overflow for Int64#to_i
    raises on overflow for Int64#to_i
+    raises on overflow for Int32#to_i16
    raises on overflow for Int32#to_i16
+    raises on overflow for Int32#to_u8
    raises on overflow for Int32#to_u8
+    raises on overflow for UInt128#to_u32
    raises on overflow for UInt128#to_u32
+    raises on overflow for UInt16#to_u
    raises on overflow for UInt16#to_u
+    raises on overflow for Int64#to_u
    raises on overflow for Int64#to_u
+    raises on overflow for UInt128#to_i128
    raises on overflow for UInt128#to_i128
+    raises on overflow for Int16#to_u8
    raises on overflow for Int16#to_u8
+    raises on overflow for Int64#to_u64
    raises on overflow for Int64#to_u64
+    raises on overflow for UInt64#to_i8
    raises on overflow for UInt64#to_i8
+    raises on overflow for UInt64#to_u16
    raises on overflow for UInt64#to_u16
+    raises on overflow for UInt64#to_i16
    raises on overflow for UInt64#to_i16
+    raises on overflow for UInt128#to_i16
    raises on overflow for UInt128#to_i16
+    raises on overflow for UInt8#to_i8
    raises on overflow for UInt8#to_i8
+    raises on overflow for Int8#to_i16
    raises on overflow for Int8#to_i16
+    raises on overflow for Int64#to_u8
    raises on overflow for Int64#to_u8
+    raises on overflow for Int16#to_i64
    raises on overflow for Int16#to_i64
+    raises on overflow for UInt16#to_u128
    raises on overflow for UInt16#to_u128
+    raises on overflow for Int32#to_u64
    raises on overflow for Int32#to_u64
+    raises on overflow for UInt128#to_u64
    raises on overflow for UInt128#to_u64
+    raises on overflow for Int128#to_i8
    raises on overflow for Int128#to_i8
+    raises on overflow for Int128#to_i
    raises on overflow for Int128#to_i
+    raises on overflow for Int64#to_i128
    raises on overflow for Int64#to_i128
+    raises on overflow for UInt32#to_u8
    raises on overflow for UInt32#to_u8
+    raises on overflow for Int32#to_u16
    raises on overflow for Int32#to_u16
+    raises on overflow for UInt16#to_i32
    raises on overflow for UInt16#to_i32
+    raises on overflow for Int16#to_i128
    raises on overflow for Int16#to_i128
+    raises on overflow for UInt8#to_i128
    raises on overflow for UInt8#to_i128
+    raises on overflow for Int16#to_i32
    raises on overflow for Int16#to_i32
+    raises on overflow for Int128#to_u64
    raises on overflow for Int128#to_u64
+    raises on overflow for UInt64#to_i128
    raises on overflow for UInt64#to_i128
+    raises on overflow for Int128#to_u16
    raises on overflow for Int128#to_u16
+    raises on overflow for Int8#to_i
    raises on overflow for Int8#to_i
+    raises on overflow for Int8#to_i64
    raises on overflow for Int8#to_i64
+    raises on overflow for Int128#to_i32
    raises on overflow for Int128#to_i32
+    raises on overflow for Int128#to_u8
    raises on overflow for Int128#to_u8
+    raises on overflow for UInt8#to_i16
    raises on overflow for UInt8#to_i16
+    raises on overflow for UInt8#to_i64
    raises on overflow for UInt8#to_i64
+    raises on overflow for Int128#to_i16
    raises on overflow for Int128#to_i16
+    raises on overflow for UInt16#to_i16
    raises on overflow for UInt16#to_i16
+  #to_f!
+    doesn't raise on overflow for UInt128#to_f32
    doesn't raise on overflow for UInt128#to_f32
+  #to_i!
+    preserves negative sign
    preserves negative sign
+    works from greater values to smaller types
    works from greater values to smaller types
+    works from negative values to unsigned types
    works from negative values to unsigned types
+  #-
+    overflow test UInt16 - Int128
    overflow test UInt16 - Int128
+    overflow test Int32 - UInt64
    overflow test Int32 - UInt64
+    overflow test UInt32 - UInt128
    overflow test UInt32 - UInt128
+    overflow test Int16 - Int64
    overflow test Int16 - Int64
+    overflow test UInt8 - UInt32
    overflow test UInt8 - UInt32
+    overflow test Int16 - UInt32
    overflow test Int16 - UInt32
+    overflow test Int16 - Int128
    overflow test Int16 - Int128
+    overflow test Int8 - Int64
    overflow test Int8 - Int64
+    overflow test Int16 - Int16
    overflow test Int16 - Int16
+    overflow test UInt8 - UInt128
    overflow test UInt8 - UInt128
+    overflow test Int128 - Int32
    overflow test Int128 - Int32
+    overflow test UInt32 - Int64
    overflow test UInt32 - Int64
+    overflow test UInt128 - Int8
    overflow test UInt128 - Int8
+    overflow test UInt32 - UInt32
    overflow test UInt32 - UInt32
+    overflow test UInt64 - Int128
    overflow test UInt64 - Int128
+    overflow test UInt128 - Int32
    overflow test UInt128 - Int32
+    overflow test Int64 - UInt128
    overflow test Int64 - UInt128
+    overflow test UInt64 - Int64
    overflow test UInt64 - Int64
+    overflow test UInt32 - Int32
    overflow test UInt32 - Int32
+    overflow test UInt8 - Int64
    overflow test UInt8 - Int64
+    overflow test UInt32 - UInt16
    overflow test UInt32 - UInt16
+    overflow test UInt16 - UInt16
    overflow test UInt16 - UInt16
+    overflow test Int16 - UInt16
    overflow test Int16 - UInt16
+    overflow test Int32 - Int128
    overflow test Int32 - Int128
+    overflow test UInt16 - UInt64
    overflow test UInt16 - UInt64
+    overflow test Int32 - UInt8
    overflow test Int32 - UInt8
+    overflow test UInt8 - UInt64
    overflow test UInt8 - UInt64
+    overflow test UInt128 - UInt8
    overflow test UInt128 - UInt8
+    overflow test Int8 - Int128
    overflow test Int8 - Int128
+    overflow test Int128 - UInt8
    overflow test Int128 - UInt8
+    overflow test Int64 - Int8
    overflow test Int64 - Int8
+    overflow test Int32 - UInt32
    overflow test Int32 - UInt32
+    overflow test Int32 - Int8
    overflow test Int32 - Int8
+    overflow test UInt64 - UInt128
    overflow test UInt64 - UInt128
+    overflow test Int64 - Int64
    overflow test Int64 - Int64
+    overflow test Int8 - Int32
    overflow test Int8 - Int32
+    overflow test UInt64 - UInt8
    overflow test UInt64 - UInt8
+    overflow test UInt32 - Int16
    overflow test UInt32 - Int16
+    overflow test Int32 - Int32
    overflow test Int32 - Int32
+    overflow test Int16 - UInt8
    overflow test Int16 - UInt8
+    overflow test Int64 - Int16
    overflow test Int64 - Int16
+    overflow test Int128 - UInt16
    overflow test Int128 - UInt16
+    overflow test UInt128 - Int128
    overflow test UInt128 - Int128
+    overflow test Int32 - UInt128
    overflow test Int32 - UInt128
+    overflow test UInt64 - UInt16
    overflow test UInt64 - UInt16
+    overflow test UInt16 - Int64
    overflow test UInt16 - Int64
+    overflow test UInt64 - UInt32
    overflow test UInt64 - UInt32
+    overflow test UInt128 - Int64
    overflow test UInt128 - Int64
+    overflow test Int8 - Int16
    overflow test Int8 - Int16
+    overflow test UInt8 - UInt16
    overflow test UInt8 - UInt16
+    overflow test UInt64 - Int8
    overflow test UInt64 - Int8
+    overflow test Int8 - UInt64
    overflow test Int8 - UInt64
+    overflow test UInt32 - UInt8
    overflow test UInt32 - UInt8
+    overflow test UInt128 - Int16
    overflow test UInt128 - Int16
+    overflow test Int8 - Int8
    overflow test Int8 - Int8
+    overflow test Int8 - UInt16
    overflow test Int8 - UInt16
+    overflow test UInt16 - Int32
    overflow test UInt16 - Int32
+    overflow test Int16 - Int32
    overflow test Int16 - Int32
+    overflow test Int64 - UInt64
    overflow test Int64 - UInt64
+    overflow test Int64 - Int128
    overflow test Int64 - Int128
+    overflow test Int64 - UInt8
    overflow test Int64 - UInt8
+    overflow test Int64 - UInt16
    overflow test Int64 - UInt16
+    overflow test Int128 - UInt64
    overflow test Int128 - UInt64
+    overflow test Int32 - Int16
    overflow test Int32 - Int16
+    overflow test Int128 - Int64
    overflow test Int128 - Int64
+    overflow test UInt64 - Int16
    overflow test UInt64 - Int16
+    overflow test UInt32 - Int8
    overflow test UInt32 - Int8
+    overflow test Int64 - Int32
    overflow test Int64 - Int32
+    overflow test UInt8 - Int16
    overflow test UInt8 - Int16
+    overflow test Int8 - UInt8
    overflow test Int8 - UInt8
+    overflow test UInt8 - Int8
    overflow test UInt8 - Int8
+    overflow test Int16 - Int8
    overflow test Int16 - Int8
+    overflow test Int128 - UInt128
    overflow test Int128 - UInt128
+    overflow test Int128 - Int8
    overflow test Int128 - Int8
+    overflow test UInt128 - UInt16
    overflow test UInt128 - UInt16
+    overflow test UInt32 - UInt64
    overflow test UInt32 - UInt64
+    overflow test Int16 - UInt128
    overflow test Int16 - UInt128
+    overflow test UInt8 - Int32
    overflow test UInt8 - Int32
+    overflow test Int64 - UInt32
    overflow test Int64 - UInt32
+    overflow test Int32 - UInt16
    overflow test Int32 - UInt16
+    overflow test UInt32 - Int128
    overflow test UInt32 - Int128
+    overflow test Int32 - Int64
    overflow test Int32 - Int64
+    overflow test UInt16 - UInt32
    overflow test UInt16 - UInt32
+    overflow test UInt128 - UInt32
    overflow test UInt128 - UInt32
+    overflow test UInt16 - Int8
    overflow test UInt16 - Int8
+    overflow test UInt128 - UInt128
    overflow test UInt128 - UInt128
+    overflow test Int128 - Int16
    overflow test Int128 - Int16
+    overflow test UInt8 - Int128
    overflow test UInt8 - Int128
+    overflow test Int16 - UInt64
    overflow test Int16 - UInt64
+    overflow test UInt128 - UInt64
    overflow test UInt128 - UInt64
+    overflow test UInt16 - UInt8
    overflow test UInt16 - UInt8
+    overflow test UInt16 - UInt128
    overflow test UInt16 - UInt128
+    overflow test UInt8 - UInt8
    overflow test UInt8 - UInt8
+    overflow test Int128 - UInt32
    overflow test Int128 - UInt32
+    overflow test Int8 - UInt32
    overflow test Int8 - UInt32
+    overflow test Int128 - Int128
    overflow test Int128 - Int128
+    overflow test UInt64 - Int32
    overflow test UInt64 - Int32
+    overflow test UInt16 - Int16
    overflow test UInt16 - Int16
+    overflow test UInt64 - UInt64
    overflow test UInt64 - UInt64
+    overflow test Int8 - UInt128
    overflow test Int8 - UInt128
   #&*
-    wraps around for Int64
    wraps around for Int64
-    wraps around for Int32
    wraps around for Int32
-    wraps around for UInt16
    wraps around for UInt16
-    wraps around for UInt128
    wraps around for UInt128
     wraps around for UInt8
    wraps around for UInt8
     wraps around for UInt64
    wraps around for UInt64
     wraps around for Int128
    wraps around for Int128
-    wraps around for Int16
    wraps around for Int16
+    wraps around for UInt128
    wraps around for UInt128
     wraps around for UInt32
    wraps around for UInt32
+    wraps around for UInt16
    wraps around for UInt16
     wraps around for Int8
    wraps around for Int8
+    wraps around for Int16
    wraps around for Int16
+    wraps around for Int32
    wraps around for Int32
+    wraps around for Int64
    wraps around for Int64
   #&-
-    wraps around for Int8
    wraps around for Int8
     wraps around for Int16
    wraps around for Int16
-    wraps around for UInt16
    wraps around for UInt16
+    wraps around for Int8
    wraps around for Int8
     wraps around for UInt8
    wraps around for UInt8
     wraps around for UInt64
    wraps around for UInt64
-    wraps around for UInt32
    wraps around for UInt32
+    wraps around for UInt16
    wraps around for UInt16
     wraps around for Int32
    wraps around for Int32
     wraps around for UInt128
    wraps around for UInt128
+    wraps around for UInt32
    wraps around for UInt32
     wraps around for Int64
    wraps around for Int64
     wraps around for Int128
    wraps around for Int128
   #&+
-    wraps around for Int16
    wraps around for Int16
-    wraps around for UInt16
    wraps around for UInt16
-    wraps around for Int8
    wraps around for Int8
+    wraps around for UInt128
    wraps around for UInt128
     wraps around for UInt8
    wraps around for UInt8
+    wraps around for UInt16
    wraps around for UInt16
+    wraps around for Int16
    wraps around for Int16
+    wraps around for Int64
    wraps around for Int64
     wraps around for UInt32
    wraps around for UInt32
+    wraps around for UInt64
    wraps around for UInt64
     wraps around for Int32
    wraps around for Int32
     wraps around for Int128
    wraps around for Int128
-    wraps around for UInt128
    wraps around for UInt128
-    wraps around for Int64
    wraps around for Int64
-    wraps around for UInt64
    wraps around for UInt64
-  #to_i
-    raises on overflow for Int128#to_i16
    raises on overflow for Int128#to_i16
-    raises on overflow for UInt64#to_u32
    raises on overflow for UInt64#to_u32
-    raises on overflow for UInt16#to_i64
    raises on overflow for UInt16#to_i64
-    raises on overflow for UInt32#to_u64
    raises on overflow for UInt32#to_u64
-    raises on overflow for UInt64#to_i32
    raises on overflow for UInt64#to_i32
-    raises on overflow for Int64#to_u32
    raises on overflow for Int64#to_u32
-    raises on overflow for UInt8#to_u32
    raises on overflow for UInt8#to_u32
-    raises on overflow for UInt128#to_i
    raises on overflow for UInt128#to_i
-    raises on overflow for Int128#to_u
    raises on overflow for Int128#to_u
-    raises on overflow for UInt64#to_i8
    raises on overflow for UInt64#to_i8
-    raises on overflow for UInt8#to_u128
    raises on overflow for UInt8#to_u128
-    raises on overflow for UInt128#to_i64
    raises on overflow for UInt128#to_i64
-    raises on overflow for Int64#to_u16
    raises on overflow for Int64#to_u16
-    raises on overflow for UInt8#to_u64
    raises on overflow for UInt8#to_u64
-    raises on overflow for Int16#to_i8
    raises on overflow for Int16#to_i8
-    raises on overflow for Int16#to_i32
    raises on overflow for Int16#to_i32
-    raises on overflow for UInt128#to_i16
    raises on overflow for UInt128#to_i16
-    raises on overflow for UInt32#to_u8
    raises on overflow for UInt32#to_u8
-    raises on overflow for Int128#to_i8
    raises on overflow for Int128#to_i8
-    raises on overflow for Int16#to_u
    raises on overflow for Int16#to_u
-    raises on overflow for UInt32#to_i16
    raises on overflow for UInt32#to_i16
-    raises on overflow for UInt8#to_i
    raises on overflow for UInt8#to_i
-    raises on overflow for Int32#to_u64
    raises on overflow for Int32#to_u64
-    raises on overflow for Int16#to_i64
    raises on overflow for Int16#to_i64
-    raises on overflow for Int8#to_u128
    raises on overflow for Int8#to_u128
-    raises on overflow for UInt8#to_i32
    raises on overflow for UInt8#to_i32
-    raises on overflow for UInt8#to_u16
    raises on overflow for UInt8#to_u16
-    raises on overflow for UInt32#to_i32
    raises on overflow for UInt32#to_i32
-    raises on overflow for Int128#to_i32
    raises on overflow for Int128#to_i32
-    raises on overflow for UInt128#to_u
    raises on overflow for UInt128#to_u
-    raises on overflow for UInt64#to_i64
    raises on overflow for UInt64#to_i64
-    raises on overflow for Int32#to_u16
    raises on overflow for Int32#to_u16
-    raises on overflow for Int8#to_u32
    raises on overflow for Int8#to_u32
-    raises on overflow for UInt32#to_i128
    raises on overflow for UInt32#to_i128
-    raises on overflow for Int32#to_i8
    raises on overflow for Int32#to_i8
-    raises on overflow for Int64#to_u64
    raises on overflow for Int64#to_u64
-    raises on overflow for UInt16#to_i
    raises on overflow for UInt16#to_i
-    raises on overflow for Int64#to_i32
    raises on overflow for Int64#to_i32
-    raises on overflow for Int64#to_u8
    raises on overflow for Int64#to_u8
-    raises on overflow for Int16#to_i128
    raises on overflow for Int16#to_i128
-    raises on overflow for Int16#to_u16
    raises on overflow for Int16#to_u16
-    raises on overflow for UInt64#to_u128
    raises on overflow for UInt64#to_u128
-    raises on overflow for Int8#to_u
    raises on overflow for Int8#to_u
-    raises on overflow for Int8#to_u16
    raises on overflow for Int8#to_u16
-    raises on overflow for Int128#to_u64
    raises on overflow for Int128#to_u64
-    raises on overflow for UInt32#to_i64
    raises on overflow for UInt32#to_i64
-    raises on overflow for UInt64#to_i16
    raises on overflow for UInt64#to_i16
-    raises on overflow for Int8#to_i
    raises on overflow for Int8#to_i
-    raises on overflow for Int32#to_i16
    raises on overflow for Int32#to_i16
-    raises on overflow for Int128#to_u32
    raises on overflow for Int128#to_u32
-    raises on overflow for UInt128#to_u16
    raises on overflow for UInt128#to_u16
-    raises on overflow for Int32#to_i128
    raises on overflow for Int32#to_i128
-    raises on overflow for Int128#to_i
    raises on overflow for Int128#to_i
-    raises on overflow for UInt32#to_u128
    raises on overflow for UInt32#to_u128
-    raises on overflow for Int16#to_u128
    raises on overflow for Int16#to_u128
-    raises on overflow for UInt64#to_u
    raises on overflow for UInt64#to_u
-    raises on overflow for Int32#to_u128
    raises on overflow for Int32#to_u128
-    raises on overflow for UInt8#to_i16
    raises on overflow for UInt8#to_i16
-    raises on overflow for Int8#to_u8
    raises on overflow for Int8#to_u8
-    raises on overflow for Int64#to_u
    raises on overflow for Int64#to_u
-    raises on overflow for UInt8#to_i128
    raises on overflow for UInt8#to_i128
-    raises on overflow for Int16#to_u64
    raises on overflow for Int16#to_u64
-    raises on overflow for UInt16#to_u32
    raises on overflow for UInt16#to_u32
-    raises on overflow for Int64#to_i16
    raises on overflow for Int64#to_i16
-    raises on overflow for Int8#to_i16
    raises on overflow for Int8#to_i16
-    raises on overflow for UInt32#to_u16
    raises on overflow for UInt32#to_u16
-    raises on overflow for Int128#to_u128
    raises on overflow for Int128#to_u128
-    raises on overflow for UInt128#to_i128
    raises on overflow for UInt128#to_i128
-    raises on overflow for UInt128#to_i32
    raises on overflow for UInt128#to_i32
-    raises on overflow for UInt64#to_u8
    raises on overflow for UInt64#to_u8
-    raises on overflow for Int16#to_i
    raises on overflow for Int16#to_i
-    raises on overflow for Int8#to_i32
    raises on overflow for Int8#to_i32
-    raises on overflow for UInt128#to_u64
    raises on overflow for UInt128#to_u64
-    raises on overflow for UInt8#to_i64
    raises on overflow for UInt8#to_i64
-    raises on overflow for UInt64#to_i
    raises on overflow for UInt64#to_i
-    raises on overflow for UInt64#to_u16
    raises on overflow for UInt64#to_u16
-    raises on overflow for UInt16#to_u64
    raises on overflow for UInt16#to_u64
-    raises on overflow for UInt16#to_i128
    raises on overflow for UInt16#to_i128
-    raises on overflow for UInt16#to_i16
    raises on overflow for UInt16#to_i16
-    raises on overflow for UInt16#to_i8
    raises on overflow for UInt16#to_i8
-    raises on overflow for UInt128#to_u32
    raises on overflow for UInt128#to_u32
-    raises on overflow for Int16#to_u8
    raises on overflow for Int16#to_u8
-    raises on overflow for Int32#to_u32
    raises on overflow for Int32#to_u32
-    raises on overflow for UInt16#to_u
    raises on overflow for UInt16#to_u
-    raises on overflow for UInt16#to_u8
    raises on overflow for UInt16#to_u8
-    raises on overflow for UInt128#to_u8
    raises on overflow for UInt128#to_u8
-    raises on overflow for Int128#to_u8
    raises on overflow for Int128#to_u8
-    raises on overflow for Int16#to_u32
    raises on overflow for Int16#to_u32
-    raises on overflow for Int8#to_i128
    raises on overflow for Int8#to_i128
-    raises on overflow for Int32#to_u
    raises on overflow for Int32#to_u
-    raises on overflow for Int64#to_i8
    raises on overflow for Int64#to_i8
-    raises on overflow for Int8#to_i64
    raises on overflow for Int8#to_i64
-    raises on overflow for Int32#to_u8
    raises on overflow for Int32#to_u8
-    raises on overflow for Int32#to_i64
    raises on overflow for Int32#to_i64
-    raises on overflow for Int64#to_i
    raises on overflow for Int64#to_i
-    raises on overflow for UInt32#to_i
    raises on overflow for UInt32#to_i
-    raises on overflow for UInt128#to_i8
    raises on overflow for UInt128#to_i8
-    raises on overflow for UInt16#to_i32
    raises on overflow for UInt16#to_i32
-    raises on overflow for UInt8#to_u
    raises on overflow for UInt8#to_u
-    raises on overflow for Int128#to_i64
    raises on overflow for Int128#to_i64
-    raises on overflow for Int64#to_u128
    raises on overflow for Int64#to_u128
-    raises on overflow for Int64#to_i128
    raises on overflow for Int64#to_i128
-    raises on overflow for Int128#to_u16
    raises on overflow for Int128#to_u16
-    raises on overflow for UInt8#to_i8
    raises on overflow for UInt8#to_i8
-    raises on overflow for Int8#to_u64
    raises on overflow for Int8#to_u64
-    raises on overflow for UInt16#to_u128
    raises on overflow for UInt16#to_u128
-    raises on overflow for UInt32#to_i8
    raises on overflow for UInt32#to_i8
-    raises on overflow for UInt64#to_i128
    raises on overflow for UInt64#to_i128
+    wraps around for Int8
    wraps around for Int8
   #*
-    overflow test UInt16 * Int32
    overflow test UInt16 * Int32
-    overflow test UInt32 * Int8
    overflow test UInt32 * Int8
-    overflow test UInt8 * UInt8
    overflow test UInt8 * UInt8
+    overflow test Int8 * UInt32
    overflow test Int8 * UInt32
+    overflow test UInt8 * Int32
    overflow test UInt8 * Int32
+    overflow test Int64 * Int64
    overflow test Int64 * Int64
+    overflow test UInt32 * UInt64
    overflow test UInt32 * UInt64
+    overflow test Int16 * UInt32
    overflow test Int16 * UInt32
+    overflow test Int8 * Int8
    overflow test Int8 * Int8
+    overflow test UInt128 * UInt32
    overflow test UInt128 * UInt32
+    overflow test UInt32 * Int128
    overflow test UInt32 * Int128
+    overflow test Int8 * UInt128
    overflow test Int8 * UInt128
+    overflow test UInt32 * UInt128
    overflow test UInt32 * UInt128
+    overflow test Int32 * UInt64
    overflow test Int32 * UInt64
+    overflow test Int128 * UInt128
    overflow test Int128 * UInt128
+    overflow test Int16 * UInt16
    overflow test Int16 * UInt16
+    overflow test Int16 * Int128
    overflow test Int16 * Int128
+    overflow test UInt8 * UInt128
    overflow test UInt8 * UInt128
+    overflow test Int128 * UInt16
    overflow test Int128 * UInt16
+    overflow test UInt16 * UInt64
    overflow test UInt16 * UInt64
+    overflow test Int64 * UInt64
    overflow test Int64 * UInt64
+    overflow test Int16 * UInt8
    overflow test Int16 * UInt8
+    overflow test Int16 * Int16
    overflow test Int16 * Int16
+    overflow test UInt64 * Int32
    overflow test UInt64 * Int32
+    overflow test Int32 * UInt8
    overflow test Int32 * UInt8
     overflow test Int8 * Int64
    overflow test Int8 * Int64
-    overflow test UInt128 * Int64
    overflow test UInt128 * Int64
+    overflow test UInt128 * Int128
    overflow test UInt128 * Int128
+    overflow test UInt64 * UInt8
    overflow test UInt64 * UInt8
+    overflow test Int32 * UInt16
    overflow test Int32 * UInt16
+    overflow test UInt128 * UInt128
    overflow test UInt128 * UInt128
     overflow test Int16 * UInt128
    overflow test Int16 * UInt128
-    overflow test Int64 * Int16
    overflow test Int64 * Int16
-    overflow test Int128 * Int8
    overflow test Int128 * Int8
-    overflow test Int64 * Int64
    overflow test Int64 * Int64
     overflow test UInt128 * Int32
    overflow test UInt128 * Int32
+    overflow test Int8 * UInt16
    overflow test Int8 * UInt16
+    overflow test UInt128 * UInt8
    overflow test UInt128 * UInt8
+    overflow test UInt8 * Int64
    overflow test UInt8 * Int64
     overflow test Int128 * Int16
    overflow test Int128 * Int16
-    overflow test UInt8 * UInt32
    overflow test UInt8 * UInt32
+    overflow test Int8 * UInt64
    overflow test Int8 * UInt64
+    overflow test UInt16 * Int16
    overflow test UInt16 * Int16
     overflow test Int128 * UInt32
    overflow test Int128 * UInt32
-    overflow test Int8 * Int8
    overflow test Int8 * Int8
-    overflow test UInt32 * Int64
    overflow test UInt32 * Int64
-    overflow test Int8 * UInt16
    overflow test Int8 * UInt16
-    overflow test UInt8 * Int128
    overflow test UInt8 * Int128
-    overflow test UInt32 * UInt64
    overflow test UInt32 * UInt64
+    overflow test Int16 * UInt64
    overflow test Int16 * UInt64
+    overflow test Int64 * UInt8
    overflow test Int64 * UInt8
+    overflow test Int64 * Int128
    overflow test Int64 * Int128
+    overflow test UInt8 * Int16
    overflow test UInt8 * Int16
+    overflow test Int32 * Int128
    overflow test Int32 * Int128
+    overflow test Int32 * UInt32
    overflow test Int32 * UInt32
+    overflow test UInt16 * UInt128
    overflow test UInt16 * UInt128
+    overflow test UInt32 * Int16
    overflow test UInt32 * Int16
     overflow test Int32 * Int16
    overflow test Int32 * Int16
+    overflow test Int128 * Int8
    overflow test Int128 * Int8
     overflow test UInt8 * UInt16
    overflow test UInt8 * UInt16
-    overflow test UInt8 * Int8
    overflow test UInt8 * Int8
-    overflow test UInt64 * Int32
    overflow test UInt64 * Int32
-    overflow test UInt64 * Int128
    overflow test UInt64 * Int128
+    overflow test Int64 * Int32
    overflow test Int64 * Int32
+    overflow test UInt64 * Int64
    overflow test UInt64 * Int64
+    overflow test UInt16 * Int8
    overflow test UInt16 * Int8
+    overflow test Int64 * UInt16
    overflow test Int64 * UInt16
+    overflow test UInt8 * UInt64
    overflow test UInt8 * UInt64
+    overflow test Int64 * Int16
    overflow test Int64 * Int16
+    overflow test Int128 * UInt64
    overflow test Int128 * UInt64
+    overflow test Int128 * Int32
    overflow test Int128 * Int32
+    overflow test UInt128 * UInt16
    overflow test UInt128 * UInt16
+    overflow test UInt32 * UInt16
    overflow test UInt32 * UInt16
+    overflow test UInt16 * UInt16
    overflow test UInt16 * UInt16
+    overflow test Int16 * Int8
    overflow test Int16 * Int8
+    overflow test UInt64 * UInt16
    overflow test UInt64 * UInt16
     overflow test UInt64 * Int8
    overflow test UInt64 * Int8
+    overflow test Int32 * Int64
    overflow test Int32 * Int64
+    overflow test UInt32 * UInt8
    overflow test UInt32 * UInt8
+    overflow test UInt128 * Int16
    overflow test UInt128 * Int16
+    overflow test Int16 * Int32
    overflow test Int16 * Int32
+    overflow test UInt128 * Int64
    overflow test UInt128 * Int64
+    overflow test UInt32 * Int32
    overflow test UInt32 * Int32
     overflow test UInt16 * UInt32
    overflow test UInt16 * UInt32
-    overflow test UInt64 * UInt64
    overflow test UInt64 * UInt64
-    overflow test UInt16 * Int8
    overflow test UInt16 * Int8
-    overflow test Int32 * Int128
    overflow test Int32 * Int128
-    overflow test Int64 * UInt64
    overflow test Int64 * UInt64
-    overflow test Int128 * UInt16
    overflow test Int128 * UInt16
-    overflow test Int64 * UInt128
    overflow test Int64 * UInt128
+    overflow test Int8 * Int16
    overflow test Int8 * Int16
+    overflow test Int8 * UInt8
    overflow test Int8 * UInt8
     overflow test Int8 * Int32
    overflow test Int8 * Int32
-    overflow test Int16 * UInt64
    overflow test Int16 * UInt64
-    overflow test Int16 * UInt32
    overflow test Int16 * UInt32
-    overflow test UInt32 * UInt128
    overflow test UInt32 * UInt128
-    overflow test UInt16 * UInt8
    overflow test UInt16 * UInt8
-    overflow test UInt128 * Int8
    overflow test UInt128 * Int8
-    overflow test UInt8 * Int16
    overflow test UInt8 * Int16
+    overflow test UInt8 * UInt32
    overflow test UInt8 * UInt32
     overflow test Int8 * Int128
    overflow test Int8 * Int128
-    overflow test UInt8 * UInt64
    overflow test UInt8 * UInt64
-    overflow test UInt8 * Int64
    overflow test UInt8 * Int64
-    overflow test UInt64 * UInt8
    overflow test UInt64 * UInt8
-    overflow test UInt64 * UInt128
    overflow test UInt64 * UInt128
     overflow test Int32 * Int8
    overflow test Int32 * Int8
-    overflow test Int16 * UInt16
    overflow test Int16 * UInt16
-    overflow test UInt64 * Int64
    overflow test UInt64 * Int64
-    overflow test Int64 * Int32
    overflow test Int64 * Int32
+    overflow test UInt16 * Int128
    overflow test UInt16 * Int128
+    overflow test Int64 * UInt128
    overflow test Int64 * UInt128
+    overflow test Int64 * Int8
    overflow test Int64 * Int8
+    overflow test Int128 * UInt8
    overflow test Int128 * UInt8
+    overflow test UInt64 * UInt32
    overflow test UInt64 * UInt32
+    overflow test UInt8 * UInt8
    overflow test UInt8 * UInt8
     overflow test Int32 * Int32
    overflow test Int32 * Int32
-    overflow test Int128 * Int32
    overflow test Int128 * Int32
-    overflow test Int128 * Int128
    overflow test Int128 * Int128
-    overflow test Int32 * Int64
    overflow test Int32 * Int64
-    overflow test UInt8 * UInt128
    overflow test UInt8 * UInt128
+    overflow test UInt64 * UInt64
    overflow test UInt64 * UInt64
+    overflow test Int64 * UInt32
    overflow test Int64 * UInt32
+    overflow test UInt64 * Int128
    overflow test UInt64 * Int128
     overflow test UInt128 * UInt64
    overflow test UInt128 * UInt64
-    overflow test UInt8 * Int32
    overflow test UInt8 * Int32
-    overflow test Int8 * UInt128
    overflow test Int8 * UInt128
-    overflow test Int64 * Int128
    overflow test Int64 * Int128
+    overflow test Int16 * Int64
    overflow test Int16 * Int64
+    overflow test UInt16 * Int32
    overflow test UInt16 * Int32
+    overflow test UInt128 * Int8
    overflow test UInt128 * Int8
+    overflow test UInt32 * UInt32
    overflow test UInt32 * UInt32
+    overflow test UInt16 * UInt8
    overflow test UInt16 * UInt8
+    overflow test UInt32 * Int8
    overflow test UInt32 * Int8
+    overflow test Int128 * Int128
    overflow test Int128 * Int128
     overflow test Int128 * Int64
    overflow test Int128 * Int64
-    overflow test UInt64 * UInt32
    overflow test UInt64 * UInt32
-    overflow test Int128 * UInt128
    overflow test Int128 * UInt128
-    overflow test UInt64 * UInt16
    overflow test UInt64 * UInt16
-    overflow test Int32 * UInt32
    overflow test Int32 * UInt32
-    overflow test UInt16 * UInt128
    overflow test UInt16 * UInt128
-    overflow test Int128 * UInt64
    overflow test Int128 * UInt64
-    overflow test UInt128 * UInt8
    overflow test UInt128 * UInt8
-    overflow test UInt16 * Int128
    overflow test UInt16 * Int128
-    overflow test Int64 * UInt16
    overflow test Int64 * UInt16
-    overflow test UInt16 * UInt64
    overflow test UInt16 * UInt64
-    overflow test UInt32 * Int32
    overflow test UInt32 * Int32
-    overflow test UInt128 * UInt16
    overflow test UInt128 * UInt16
-    overflow test UInt16 * Int64
    overflow test UInt16 * Int64
+    overflow test UInt8 * Int128
    overflow test UInt8 * Int128
     overflow test Int32 * UInt128
    overflow test Int32 * UInt128
-    overflow test Int16 * Int32
    overflow test Int16 * Int32
-    overflow test UInt32 * Int128
    overflow test UInt32 * Int128
-    overflow test Int8 * Int16
    overflow test Int8 * Int16
-    overflow test Int8 * UInt32
    overflow test Int8 * UInt32
-    overflow test UInt128 * UInt128
    overflow test UInt128 * UInt128
-    overflow test Int64 * UInt32
    overflow test Int64 * UInt32
-    overflow test UInt32 * UInt32
    overflow test UInt32 * UInt32
-    overflow test UInt128 * UInt32
    overflow test UInt128 * UInt32
-    overflow test Int8 * UInt64
    overflow test Int8 * UInt64
-    overflow test UInt32 * UInt8
    overflow test UInt32 * UInt8
-    overflow test Int16 * Int128
    overflow test Int16 * Int128
-    overflow test UInt16 * UInt16
    overflow test UInt16 * UInt16
-    overflow test Int32 * UInt64
    overflow test Int32 * UInt64
-    overflow test Int128 * UInt8
    overflow test Int128 * UInt8
-    overflow test Int16 * Int8
    overflow test Int16 * Int8
-    overflow test UInt128 * Int16
    overflow test UInt128 * Int16
-    overflow test UInt32 * Int16
    overflow test UInt32 * Int16
-    overflow test UInt16 * Int16
    overflow test UInt16 * Int16
-    overflow test UInt32 * UInt16
    overflow test UInt32 * UInt16
-    overflow test Int16 * UInt8
    overflow test Int16 * UInt8
-    overflow test Int16 * Int16
    overflow test Int16 * Int16
-    overflow test Int32 * UInt8
    overflow test Int32 * UInt8
-    overflow test Int16 * Int64
    overflow test Int16 * Int64
-    overflow test UInt128 * Int128
    overflow test UInt128 * Int128
-    overflow test Int64 * UInt8
    overflow test Int64 * UInt8
-    overflow test Int64 * Int8
    overflow test Int64 * Int8
-    overflow test Int32 * UInt16
    overflow test Int32 * UInt16
-    overflow test Int8 * UInt8
    overflow test Int8 * UInt8
+    overflow test UInt32 * Int64
    overflow test UInt32 * Int64
+    overflow test UInt8 * Int8
    overflow test UInt8 * Int8
+    overflow test UInt16 * Int64
    overflow test UInt16 * Int64
     overflow test UInt64 * Int16
    overflow test UInt64 * Int16
-  #to_i!
-    works from greater values to smaller types
    works from greater values to smaller types
-    preserves negative sign
    preserves negative sign
-    works from negative values to unsigned types
    works from negative values to unsigned types
-  #unsafe_chr
-    doesn't raise on overflow
    doesn't raise on overflow
-  #to_f!
-    doesn't raise on overflow for UInt128#to_f32
    doesn't raise on overflow for UInt128#to_f32
+    overflow test UInt64 * UInt128
    overflow test UInt64 * UInt128
   #+
-    overflow test UInt64 + Int32
    overflow test UInt64 + Int32
-    overflow test Int64 + UInt64
    overflow test Int64 + UInt64
-    overflow test Int128 + Int8
    overflow test Int128 + Int8
-    overflow test Int8 + Int8
    overflow test Int8 + Int8
-    overflow test UInt16 + Int128
    overflow test UInt16 + Int128
-    overflow test UInt32 + UInt8
    overflow test UInt32 + UInt8
-    overflow test UInt32 + Int16
    overflow test UInt32 + Int16
-    overflow test UInt8 + Int8
    overflow test UInt8 + Int8
-    overflow test UInt128 + UInt128
    overflow test UInt128 + UInt128
-    overflow test UInt128 + Int32
    overflow test UInt128 + Int32
-    overflow test Int32 + UInt16
    overflow test Int32 + UInt16
-    overflow test UInt8 + Int128
    overflow test UInt8 + Int128
-    overflow test UInt16 + UInt8
    overflow test UInt16 + UInt8
-    overflow test Int8 + Int128
    overflow test Int8 + Int128
-    overflow test UInt16 + Int8
    overflow test UInt16 + Int8
-    overflow test Int32 + UInt128
    overflow test Int32 + UInt128
-    overflow test UInt64 + Int64
    overflow test UInt64 + Int64
-    overflow test UInt64 + UInt16
    overflow test UInt64 + UInt16
-    overflow test UInt32 + Int8
    overflow test UInt32 + Int8
-    overflow test Int8 + UInt64
    overflow test Int8 + UInt64
-    overflow test Int128 + Int128
    overflow test Int128 + Int128
-    overflow test UInt64 + UInt128
    overflow test UInt64 + UInt128
-    overflow test Int16 + Int128
    overflow test Int16 + Int128
-    overflow test Int32 + UInt64
    overflow test Int32 + UInt64
     overflow test Int128 + UInt16
    overflow test Int128 + UInt16
-    overflow test Int64 + UInt8
    overflow test Int64 + UInt8
-    overflow test Int64 + UInt128
    overflow test Int64 + UInt128
-    overflow test Int128 + UInt32
    overflow test Int128 + UInt32
-    overflow test Int8 + Int16
    overflow test Int8 + Int16
-    overflow test Int8 + UInt8
    overflow test Int8 + UInt8
-    overflow test Int8 + UInt128
    overflow test Int8 + UInt128
-    overflow test Int64 + Int8
    overflow test Int64 + Int8
-    overflow test UInt128 + Int16
    overflow test UInt128 + Int16
-    overflow test UInt8 + UInt128
    overflow test UInt8 + UInt128
-    overflow test UInt128 + UInt16
    overflow test UInt128 + UInt16
-    overflow test UInt64 + Int128
    overflow test UInt64 + Int128
-    overflow test Int16 + UInt128
    overflow test Int16 + UInt128
-    overflow test Int16 + Int64
    overflow test Int16 + Int64
-    overflow test UInt8 + UInt8
    overflow test UInt8 + UInt8
-    overflow test Int16 + Int32
    overflow test Int16 + Int32
-    overflow test Int128 + UInt128
    overflow test Int128 + UInt128
-    overflow test Int128 + Int16
    overflow test Int128 + Int16
-    overflow test Int128 + Int64
    overflow test Int128 + Int64
-    overflow test UInt16 + Int64
    overflow test UInt16 + Int64
-    overflow test UInt8 + Int16
    overflow test UInt8 + Int16
-    overflow test UInt32 + UInt32
    overflow test UInt32 + UInt32
-    overflow test Int32 + UInt8
    overflow test Int32 + UInt8
-    overflow test UInt32 + UInt64
    overflow test UInt32 + UInt64
-    overflow test UInt128 + UInt8
    overflow test UInt128 + UInt8
+    overflow test UInt128 + Int64
    overflow test UInt128 + Int64
+    overflow test UInt64 + UInt8
    overflow test UInt64 + UInt8
+    overflow test Int16 + UInt8
    overflow test Int16 + UInt8
     overflow test UInt64 + Int16
    overflow test UInt64 + Int16
-    overflow test Int64 + Int64
    overflow test Int64 + Int64
-    overflow test UInt16 + UInt32
    overflow test UInt16 + UInt32
-    overflow test UInt8 + Int32
    overflow test UInt8 + Int32
-    overflow test Int16 + UInt64
    overflow test Int16 + UInt64
-    overflow test Int64 + Int32
    overflow test Int64 + Int32
-    overflow test Int16 + UInt32
    overflow test Int16 + UInt32
+    overflow test Int128 + UInt8
    overflow test Int128 + UInt8
+    overflow test Int32 + Int128
    overflow test Int32 + Int128
+    overflow test UInt32 + UInt16
    overflow test UInt32 + UInt16
+    overflow test UInt64 + UInt16
    overflow test UInt64 + UInt16
     overflow test Int16 + Int16
    overflow test Int16 + Int16
-    overflow test Int64 + UInt16
    overflow test Int64 + UInt16
+    overflow test Int64 + Int64
    overflow test Int64 + Int64
     overflow test Int64 + UInt32
    overflow test Int64 + UInt32
-    overflow test UInt128 + Int64
    overflow test UInt128 + Int64
-    overflow test UInt32 + Int64
    overflow test UInt32 + Int64
+    overflow test Int128 + Int128
    overflow test Int128 + Int128
+    overflow test Int16 + UInt128
    overflow test Int16 + UInt128
+    overflow test UInt128 + UInt128
    overflow test UInt128 + UInt128
     overflow test Int32 + Int8
    overflow test Int32 + Int8
-    overflow test Int32 + Int64
    overflow test Int32 + Int64
-    overflow test UInt32 + UInt16
    overflow test UInt32 + UInt16
-    overflow test Int64 + Int128
    overflow test Int64 + Int128
+    overflow test Int8 + Int64
    overflow test Int8 + Int64
+    overflow test Int32 + Int32
    overflow test Int32 + Int32
+    overflow test Int16 + UInt64
    overflow test Int16 + UInt64
+    overflow test UInt32 + Int32
    overflow test UInt32 + Int32
     overflow test UInt128 + Int8
    overflow test UInt128 + Int8
-    overflow test UInt16 + Int16
    overflow test UInt16 + Int16
-    overflow test UInt32 + UInt128
    overflow test UInt32 + UInt128
-    overflow test UInt16 + UInt16
    overflow test UInt16 + UInt16
-    overflow test Int128 + Int32
    overflow test Int128 + Int32
-    overflow test UInt8 + UInt16
    overflow test UInt8 + UInt16
-    overflow test UInt16 + Int32
    overflow test UInt16 + Int32
     overflow test UInt8 + UInt32
    overflow test UInt8 + UInt32
-    overflow test Int16 + Int8
    overflow test Int16 + Int8
-    overflow test Int64 + Int16
    overflow test Int64 + Int16
-    overflow test Int8 + UInt16
    overflow test Int8 + UInt16
-    overflow test UInt16 + UInt64
    overflow test UInt16 + UInt64
     overflow test UInt64 + Int8
    overflow test UInt64 + Int8
-    overflow test UInt64 + UInt8
    overflow test UInt64 + UInt8
-    overflow test UInt128 + UInt32
    overflow test UInt128 + UInt32
-    overflow test Int16 + UInt8
    overflow test Int16 + UInt8
-    overflow test Int8 + UInt32
    overflow test Int8 + UInt32
-    overflow test Int128 + UInt64
    overflow test Int128 + UInt64
-    overflow test UInt64 + UInt64
    overflow test UInt64 + UInt64
+    overflow test Int128 + UInt128
    overflow test Int128 + UInt128
+    overflow test Int64 + UInt16
    overflow test Int64 + UInt16
+    overflow test Int32 + UInt32
    overflow test Int32 + UInt32
+    overflow test UInt128 + Int16
    overflow test UInt128 + Int16
+    overflow test UInt32 + UInt8
    overflow test UInt32 + UInt8
+    overflow test UInt8 + Int32
    overflow test UInt8 + Int32
+    overflow test Int16 + Int64
    overflow test Int16 + Int64
     overflow test Int32 + Int16
    overflow test Int32 + Int16
+    overflow test UInt64 + UInt64
    overflow test UInt64 + UInt64
+    overflow test UInt32 + Int128
    overflow test UInt32 + Int128
+    overflow test UInt8 + Int64
    overflow test UInt8 + Int64
+    overflow test Int8 + UInt64
    overflow test Int8 + UInt64
+    overflow test Int16 + Int8
    overflow test Int16 + Int8
+    overflow test Int8 + UInt32
    overflow test Int8 + UInt32
+    overflow test UInt32 + Int64
    overflow test UInt32 + Int64
+    overflow test Int16 + Int128
    overflow test Int16 + Int128
+    overflow test UInt64 + Int64
    overflow test UInt64 + Int64
     overflow test UInt128 + UInt64
    overflow test UInt128 + UInt64
-    overflow test UInt32 + Int32
    overflow test UInt32 + Int32
-    overflow test UInt128 + Int128
    overflow test UInt128 + Int128
-    overflow test Int128 + UInt8
    overflow test Int128 + UInt8
+    overflow test UInt16 + UInt32
    overflow test UInt16 + UInt32
+    overflow test Int128 + Int64
    overflow test Int128 + Int64
+    overflow test Int128 + UInt32
    overflow test Int128 + UInt32
+    overflow test UInt16 + Int16
    overflow test UInt16 + Int16
+    overflow test Int8 + Int32
    overflow test Int8 + Int32
+    overflow test UInt32 + Int8
    overflow test UInt32 + Int8
+    overflow test UInt128 + UInt8
    overflow test UInt128 + UInt8
+    overflow test Int64 + UInt64
    overflow test Int64 + UInt64
+    overflow test UInt16 + Int128
    overflow test UInt16 + Int128
+    overflow test Int128 + Int8
    overflow test Int128 + Int8
+    overflow test UInt16 + Int32
    overflow test UInt16 + Int32
+    overflow test Int64 + Int8
    overflow test Int64 + Int8
+    overflow test UInt32 + Int16
    overflow test UInt32 + Int16
+    overflow test UInt16 + UInt8
    overflow test UInt16 + UInt8
+    overflow test UInt8 + UInt128
    overflow test UInt8 + UInt128
+    overflow test Int32 + UInt16
    overflow test Int32 + UInt16
+    overflow test UInt16 + Int8
    overflow test UInt16 + Int8
+    overflow test Int8 + UInt16
    overflow test Int8 + UInt16
+    overflow test UInt8 + UInt16
    overflow test UInt8 + UInt16
+    overflow test UInt8 + Int128
    overflow test UInt8 + Int128
+    overflow test Int8 + Int128
    overflow test Int8 + Int128
+    overflow test Int8 + UInt8
    overflow test Int8 + UInt8
+    overflow test UInt32 + UInt128
    overflow test UInt32 + UInt128
+    overflow test Int64 + Int128
    overflow test Int64 + Int128
     overflow test UInt64 + UInt32
    overflow test UInt64 + UInt32
-    overflow test UInt32 + Int128
    overflow test UInt32 + Int128
+    overflow test Int32 + UInt8
    overflow test Int32 + UInt8
+    overflow test Int32 + UInt64
    overflow test Int32 + UInt64
+    overflow test Int16 + UInt32
    overflow test Int16 + UInt32
+    overflow test UInt8 + Int16
    overflow test UInt8 + Int16
+    overflow test UInt32 + UInt32
    overflow test UInt32 + UInt32
+    overflow test Int64 + Int16
    overflow test Int64 + Int16
+    overflow test Int128 + Int16
    overflow test Int128 + Int16
+    overflow test UInt128 + UInt16
    overflow test UInt128 + UInt16
+    overflow test Int64 + Int32
    overflow test Int64 + Int32
+    overflow test UInt64 + UInt128
    overflow test UInt64 + UInt128
+    overflow test Int32 + UInt128
    overflow test Int32 + UInt128
+    overflow test UInt16 + UInt16
    overflow test UInt16 + UInt16
+    overflow test UInt64 + Int128
    overflow test UInt64 + Int128
     overflow test UInt16 + UInt128
    overflow test UInt16 + UInt128
-    overflow test UInt8 + Int64
    overflow test UInt8 + Int64
+    overflow test UInt64 + Int32
    overflow test UInt64 + Int32
+    overflow test Int128 + UInt64
    overflow test Int128 + UInt64
+    overflow test Int16 + Int32
    overflow test Int16 + Int32
+    overflow test UInt16 + UInt64
    overflow test UInt16 + UInt64
+    overflow test Int8 + Int16
    overflow test Int8 + Int16
     overflow test Int16 + UInt16
    overflow test Int16 + UInt16
-    overflow test Int8 + Int32
    overflow test Int8 + Int32
-    overflow test Int32 + Int128
    overflow test Int32 + Int128
-    overflow test Int32 + Int32
    overflow test Int32 + Int32
     overflow test UInt8 + UInt64
    overflow test UInt8 + UInt64
-    overflow test Int32 + UInt32
    overflow test Int32 + UInt32
-    overflow test Int8 + Int64
    overflow test Int8 + Int64
-  #to_f
-    raises on overflow for UInt128#to_f32
    raises on overflow for UInt128#to_f32
-  #-
-    overflow test Int32 - UInt32
    overflow test Int32 - UInt32
-    overflow test Int64 - Int64
    overflow test Int64 - Int64
-    overflow test Int32 - Int128
    overflow test Int32 - Int128
-    overflow test UInt8 - Int16
    overflow test UInt8 - Int16
-    overflow test Int8 - UInt16
    overflow test Int8 - UInt16
-    overflow test Int16 - Int64
    overflow test Int16 - Int64
-    overflow test UInt128 - UInt128
    overflow test UInt128 - UInt128
-    overflow test UInt8 - UInt64
    overflow test UInt8 - UInt64
-    overflow test UInt16 - UInt16
    overflow test UInt16 - UInt16
-    overflow test Int8 - Int32
    overflow test Int8 - Int32
-    overflow test UInt8 - Int128
    overflow test UInt8 - Int128
-    overflow test Int128 - Int8
    overflow test Int128 - Int8
-    overflow test UInt128 - Int8
    overflow test UInt128 - Int8
-    overflow test Int128 - UInt64
    overflow test Int128 - UInt64
-    overflow test UInt8 - UInt8
    overflow test UInt8 - UInt8
-    overflow test UInt128 - Int16
    overflow test UInt128 - Int16
-    overflow test Int32 - UInt128
    overflow test Int32 - UInt128
-    overflow test UInt16 - UInt8
    overflow test UInt16 - UInt8
-    overflow test Int128 - UInt16
    overflow test Int128 - UInt16
-    overflow test UInt16 - Int8
    overflow test UInt16 - Int8
-    overflow test UInt32 - Int16
    overflow test UInt32 - Int16
-    overflow test Int64 - UInt64
    overflow test Int64 - UInt64
-    overflow test Int8 - UInt64
    overflow test Int8 - UInt64
-    overflow test Int8 - Int64
    overflow test Int8 - Int64
-    overflow test UInt16 - Int16
    overflow test UInt16 - Int16
-    overflow test Int8 - UInt32
    overflow test Int8 - UInt32
-    overflow test Int8 - UInt128
    overflow test Int8 - UInt128
-    overflow test Int32 - Int32
    overflow test Int32 - Int32
-    overflow test UInt8 - Int32
    overflow test UInt8 - Int32
-    overflow test UInt16 - UInt32
    overflow test UInt16 - UInt32
-    overflow test UInt64 - UInt32
    overflow test UInt64 - UInt32
-    overflow test UInt16 - Int64
    overflow test UInt16 - Int64
-    overflow test UInt32 - UInt16
    overflow test UInt32 - UInt16
-    overflow test UInt64 - Int8
    overflow test UInt64 - Int8
-    overflow test UInt32 - UInt64
    overflow test UInt32 - UInt64
-    overflow test UInt16 - Int128
    overflow test UInt16 - Int128
-    overflow test Int8 - Int8
    overflow test Int8 - Int8
-    overflow test Int64 - Int128
    overflow test Int64 - Int128
-    overflow test Int32 - Int64
    overflow test Int32 - Int64
-    overflow test UInt32 - Int128
    overflow test UInt32 - Int128
-    overflow test UInt16 - UInt128
    overflow test UInt16 - UInt128
-    overflow test Int16 - Int32
    overflow test Int16 - Int32
-    overflow test Int64 - Int8
    overflow test Int64 - Int8
-    overflow test UInt32 - UInt32
    overflow test UInt32 - UInt32
-    overflow test UInt16 - UInt64
    overflow test UInt16 - UInt64
-    overflow test UInt128 - UInt8
    overflow test UInt128 - UInt8
-    overflow test Int16 - UInt32
    overflow test Int16 - UInt32
-    overflow test Int64 - Int32
    overflow test Int64 - Int32
-    overflow test UInt32 - UInt8
    overflow test UInt32 - UInt8
-    overflow test Int16 - UInt64
    overflow test Int16 - UInt64
-    overflow test Int16 - UInt8
    overflow test Int16 - UInt8
-    overflow test UInt8 - Int8
    overflow test UInt8 - Int8
-    overflow test Int32 - Int8
    overflow test Int32 - Int8
-    overflow test UInt64 - UInt64
    overflow test UInt64 - UInt64
-    overflow test UInt32 - UInt128
    overflow test UInt32 - UInt128
-    overflow test Int8 - UInt8
    overflow test Int8 - UInt8
-    overflow test Int16 - UInt128
    overflow test Int16 - UInt128
-    overflow test UInt32 - Int64
    overflow test UInt32 - Int64
-    overflow test Int128 - UInt128
    overflow test Int128 - UInt128
-    overflow test Int32 - UInt8
    overflow test Int32 - UInt8
-    overflow test UInt64 - Int128
    overflow test UInt64 - Int128
-    overflow test Int32 - UInt64
    overflow test Int32 - UInt64
-    overflow test Int128 - UInt32
    overflow test Int128 - UInt32
-    overflow test UInt32 - Int32
    overflow test UInt32 - Int32
-    overflow test Int8 - Int128
    overflow test Int8 - Int128
-    overflow test Int128 - UInt8
    overflow test Int128 - UInt8
-    overflow test Int64 - UInt32
    overflow test Int64 - UInt32
-    overflow test UInt128 - Int64
    overflow test UInt128 - Int64
-    overflow test UInt8 - UInt128
    overflow test UInt8 - UInt128
-    overflow test Int64 - Int16
    overflow test Int64 - Int16
-    overflow test Int128 - Int128
    overflow test Int128 - Int128
-    overflow test UInt128 - UInt16
    overflow test UInt128 - UInt16
-    overflow test Int16 - Int8
    overflow test Int16 - Int8
-    overflow test UInt128 - Int32
    overflow test UInt128 - Int32
-    overflow test Int32 - Int16
    overflow test Int32 - Int16
-    overflow test UInt32 - Int8
    overflow test UInt32 - Int8
-    overflow test UInt64 - Int32
    overflow test UInt64 - Int32
-    overflow test UInt8 - Int64
    overflow test UInt8 - Int64
-    overflow test Int16 - Int16
    overflow test Int16 - Int16
-    overflow test UInt8 - UInt32
    overflow test UInt8 - UInt32
-    overflow test Int32 - UInt16
    overflow test Int32 - UInt16
-    overflow test Int64 - UInt8
    overflow test Int64 - UInt8
-    overflow test UInt64 - UInt128
    overflow test UInt64 - UInt128
-    overflow test Int64 - UInt128
    overflow test Int64 - UInt128
-    overflow test Int16 - UInt16
    overflow test Int16 - UInt16
-    overflow test UInt64 - Int64
    overflow test UInt64 - Int64
-    overflow test UInt64 - UInt8
    overflow test UInt64 - UInt8
-    overflow test UInt128 - Int128
    overflow test UInt128 - Int128
-    overflow test Int128 - Int64
    overflow test Int128 - Int64
-    overflow test Int8 - Int16
    overflow test Int8 - Int16
-    overflow test UInt16 - Int32
    overflow test UInt16 - Int32
-    overflow test UInt8 - UInt16
    overflow test UInt8 - UInt16
-    overflow test Int16 - Int128
    overflow test Int16 - Int128
-    overflow test UInt128 - UInt64
    overflow test UInt128 - UInt64
-    overflow test UInt64 - UInt16
    overflow test UInt64 - UInt16
-    overflow test UInt128 - UInt32
    overflow test UInt128 - UInt32
-    overflow test Int64 - UInt16
    overflow test Int64 - UInt16
-    overflow test Int128 - Int32
    overflow test Int128 - Int32
-    overflow test Int128 - Int16
    overflow test Int128 - Int16
-    overflow test UInt64 - Int16
    overflow test UInt64 - Int16
-Primitives: pointer
-  .malloc
-    is non-atomic for ReferenceStorage(T) if T is non-atomic (#14692)
    is non-atomic for ReferenceStorage(T) if T is non-atomic (#14692)
-Primitives: reference
-  .unsafe_construct
-    constructs an object in-place
    constructs an object in-place
-  .pre_initialize
-    works when address is on the stack
    works when address is on the stack
-    works with virtual type
    works with virtual type
-    raises on abstract virtual type
    raises on abstract virtual type
-    zeroes the instance data
    zeroes the instance data
-    sets type ID
    sets type ID
-    doesn't fail on complex ivar initializer if value is discarded (#14325)
    doesn't fail on complex ivar initializer if value is discarded (#14325)
-    runs inline instance initializers
    runs inline instance initializers
-  .allocate
-    doesn't fail on complex ivar initializer if value is discarded (#14325)
    doesn't fail on complex ivar initializer if value is discarded (#14325)
+    overflow test UInt16 + Int64
    overflow test UInt16 + Int64
+    overflow test Int128 + Int32
    overflow test Int128 + Int32
+    overflow test Int8 + Int8
    overflow test Int8 + Int8
+    overflow test Int8 + UInt128
    overflow test Int8 + UInt128
+    overflow test UInt128 + UInt32
    overflow test UInt128 + UInt32
+    overflow test UInt32 + UInt64
    overflow test UInt32 + UInt64
+    overflow test UInt128 + Int32
    overflow test UInt128 + Int32
+    overflow test Int64 + UInt128
    overflow test Int64 + UInt128
+    overflow test Int32 + Int64
    overflow test Int32 + Int64
+    overflow test UInt8 + Int8
    overflow test UInt8 + Int8
+    overflow test UInt8 + UInt8
    overflow test UInt8 + UInt8
+    overflow test Int64 + UInt8
    overflow test Int64 + UInt8
+    overflow test UInt128 + Int128
    overflow test UInt128 + Int128
 Primitives: Float
-  #to_f
-    doesn't raise for NaN
    doesn't raise for NaN
-    doesn't raise for infinity
    doesn't raise for infinity
-    raises on overflow for Float64#to_f32
    raises on overflow for Float64#to_f32
-  #!=
-    returns true for Float64::NAN != Float64.zero
    returns true for Float64::NAN != Float64.zero
-    returns true for Float32::NAN != Float64.zero
    returns true for Float32::NAN != Float64.zero
-    returns true for Float32::NAN != Int64.zero
    returns true for Float32::NAN != Int64.zero
-    returns true for Float64::NAN != Int128.zero
    returns true for Float64::NAN != Int128.zero
-    returns true for Float64::NAN != UInt8.zero
    returns true for Float64::NAN != UInt8.zero
-    returns true for Float64::NAN != UInt32.zero
    returns true for Float64::NAN != UInt32.zero
-    returns true for Float32::NAN != UInt16.zero
    returns true for Float32::NAN != UInt16.zero
-    returns true for Float64::NAN != UInt128.zero
    returns true for Float64::NAN != UInt128.zero
-    returns true for Float64::NAN != Float32::NAN
    returns true for Float64::NAN != Float32::NAN
-    returns true for Float64::NAN != Float32.zero
    returns true for Float64::NAN != Float32.zero
-    returns true for Float32::NAN != UInt64.zero
    returns true for Float32::NAN != UInt64.zero
-    returns true for Float64::NAN != UInt64.zero
    returns true for Float64::NAN != UInt64.zero
-    returns true for Float64::NAN != UInt16.zero
    returns true for Float64::NAN != UInt16.zero
-    returns true for Float32::NAN != Int8.zero
    returns true for Float32::NAN != Int8.zero
-    returns true for Float32::NAN != Int16.zero
    returns true for Float32::NAN != Int16.zero
-    returns true for Float32::NAN != Float32::NAN
    returns true for Float32::NAN != Float32::NAN
-    returns true for Float64::NAN != Int64.zero
    returns true for Float64::NAN != Int64.zero
-    returns true for Float32::NAN != UInt32.zero
    returns true for Float32::NAN != UInt32.zero
-    returns true for Float32::NAN != UInt8.zero
    returns true for Float32::NAN != UInt8.zero
-    returns true for Float64::NAN != Int8.zero
    returns true for Float64::NAN != Int8.zero
-    returns true for Float32::NAN != Float32.zero
    returns true for Float32::NAN != Float32.zero
-    returns true for Float32::NAN != UInt128.zero
    returns true for Float32::NAN != UInt128.zero
-    returns true for Float64::NAN != Int32.zero
    returns true for Float64::NAN != Int32.zero
-    returns true for Float64::NAN != Int16.zero
    returns true for Float64::NAN != Int16.zero
-    returns true for Float32::NAN != Int32.zero
    returns true for Float32::NAN != Int32.zero
-    returns true for Float32::NAN != Float64::NAN
    returns true for Float32::NAN != Float64::NAN
-    returns true for Float64::NAN != Float64::NAN
    returns true for Float64::NAN != Float64::NAN
-    returns true for Float32::NAN != Int128.zero
    returns true for Float32::NAN != Int128.zero
-  #==
-    returns false for Float64::NAN == Float32.zero
    returns false for Float64::NAN == Float32.zero
-    returns false for Float32::NAN == Int128.zero
    returns false for Float32::NAN == Int128.zero
-    returns false for Float32::NAN == Float32::NAN
    returns false for Float32::NAN == Float32::NAN
-    returns false for Float32::NAN == Float64::NAN
    returns false for Float32::NAN == Float64::NAN
-    returns false for Float32::NAN == UInt32.zero
    returns false for Float32::NAN == UInt32.zero
-    returns false for Float32::NAN == UInt64.zero
    returns false for Float32::NAN == UInt64.zero
-    returns false for Float32::NAN == UInt16.zero
    returns false for Float32::NAN == UInt16.zero
-    returns false for Float32::NAN == Float32.zero
    returns false for Float32::NAN == Float32.zero
-    returns false for Float64::NAN == Int16.zero
    returns false for Float64::NAN == Int16.zero
-    returns false for Float32::NAN == Int64.zero
    returns false for Float32::NAN == Int64.zero
-    returns false for Float64::NAN == Float64.zero
    returns false for Float64::NAN == Float64.zero
-    returns false for Float32::NAN == Int8.zero
    returns false for Float32::NAN == Int8.zero
-    returns false for Float64::NAN == UInt32.zero
    returns false for Float64::NAN == UInt32.zero
-    returns false for Float64::NAN == Float32::NAN
    returns false for Float64::NAN == Float32::NAN
-    returns false for Float32::NAN == Float64.zero
    returns false for Float32::NAN == Float64.zero
-    returns false for Float64::NAN == Float64::NAN
    returns false for Float64::NAN == Float64::NAN
-    returns false for Float64::NAN == UInt64.zero
    returns false for Float64::NAN == UInt64.zero
-    returns false for Float32::NAN == UInt128.zero
    returns false for Float32::NAN == UInt128.zero
-    returns false for Float32::NAN == UInt8.zero
    returns false for Float32::NAN == UInt8.zero
-    returns false for Float64::NAN == UInt16.zero
    returns false for Float64::NAN == UInt16.zero
-    returns false for Float32::NAN == Int16.zero
    returns false for Float32::NAN == Int16.zero
-    returns false for Float64::NAN == Int32.zero
    returns false for Float64::NAN == Int32.zero
-    returns false for Float64::NAN == UInt128.zero
    returns false for Float64::NAN == UInt128.zero
-    returns false for Float64::NAN == UInt8.zero
    returns false for Float64::NAN == UInt8.zero
-    returns false for Float64::NAN == Int8.zero
    returns false for Float64::NAN == Int8.zero
-    returns false for Float64::NAN == Int128.zero
    returns false for Float64::NAN == Int128.zero
-    returns false for Float64::NAN == Int64.zero
    returns false for Float64::NAN == Int64.zero
-    returns false for Float32::NAN == Int32.zero
    returns false for Float32::NAN == Int32.zero
   #>
-    returns false for Float64::NAN > UInt64.zero
    returns false for Float64::NAN > UInt64.zero
-    returns false for Float64::NAN > UInt128.zero
    returns false for Float64::NAN > UInt128.zero
-    returns false for Float64::NAN > Int16.zero
    returns false for Float64::NAN > Int16.zero
+    returns false for Float64::NAN > Float64::NAN
    returns false for Float64::NAN > Float64::NAN
+    returns false for Float32::NAN > UInt16.zero
    returns false for Float32::NAN > UInt16.zero
     returns false for Float32::NAN > Int8.zero
    returns false for Float32::NAN > Int8.zero
+    returns false for Float64::NAN > Int32.zero
    returns false for Float64::NAN > Int32.zero
     returns false for Float32::NAN > Int32.zero
    returns false for Float32::NAN > Int32.zero
-    returns false for Float32::NAN > Int64.zero
    returns false for Float32::NAN > Int64.zero
-    returns false for Float32::NAN > Int128.zero
    returns false for Float32::NAN > Int128.zero
-    returns false for Float32::NAN > Int16.zero
    returns false for Float32::NAN > Int16.zero
-    returns false for Float32::NAN > UInt128.zero
    returns false for Float32::NAN > UInt128.zero
+    returns false for Float32::NAN > Float64.zero
    returns false for Float32::NAN > Float64.zero
+    returns false for Float64::NAN > Int8.zero
    returns false for Float64::NAN > Int8.zero
     returns false for Float64::NAN > Int64.zero
    returns false for Float64::NAN > Int64.zero
-    returns false for Float64::NAN > Float64.zero
    returns false for Float64::NAN > Float64.zero
+    returns false for Float32::NAN > UInt128.zero
    returns false for Float32::NAN > UInt128.zero
     returns false for Float32::NAN > Float32.zero
    returns false for Float32::NAN > Float32.zero
-    returns false for Float64::NAN > Float32.zero
    returns false for Float64::NAN > Float32.zero
-    returns false for Float32::NAN > Float32::NAN
    returns false for Float32::NAN > Float32::NAN
-    returns false for Float32::NAN > UInt32.zero
    returns false for Float32::NAN > UInt32.zero
-    returns false for Float64::NAN > Float64::NAN
    returns false for Float64::NAN > Float64::NAN
-    returns false for Float64::NAN > Int32.zero
    returns false for Float64::NAN > Int32.zero
-    returns false for Float32::NAN > UInt16.zero
    returns false for Float32::NAN > UInt16.zero
-    returns false for Float32::NAN > UInt64.zero
    returns false for Float32::NAN > UInt64.zero
+    returns false for Float64::NAN > Int16.zero
    returns false for Float64::NAN > Int16.zero
     returns false for Float64::NAN > UInt32.zero
    returns false for Float64::NAN > UInt32.zero
-    returns false for Float64::NAN > Int8.zero
    returns false for Float64::NAN > Int8.zero
-    returns false for Float32::NAN > Float64::NAN
    returns false for Float32::NAN > Float64::NAN
-    returns false for Float64::NAN > UInt16.zero
    returns false for Float64::NAN > UInt16.zero
+    returns false for Float64::NAN > UInt128.zero
    returns false for Float64::NAN > UInt128.zero
     returns false for Float32::NAN > UInt8.zero
    returns false for Float32::NAN > UInt8.zero
+    returns false for Float32::NAN > Int16.zero
    returns false for Float32::NAN > Int16.zero
+    returns false for Float32::NAN > Float32::NAN
    returns false for Float32::NAN > Float32::NAN
+    returns false for Float64::NAN > UInt64.zero
    returns false for Float64::NAN > UInt64.zero
+    returns false for Float64::NAN > Float32.zero
    returns false for Float64::NAN > Float32.zero
+    returns false for Float32::NAN > Float64::NAN
    returns false for Float32::NAN > Float64::NAN
+    returns false for Float32::NAN > Int64.zero
    returns false for Float32::NAN > Int64.zero
+    returns false for Float64::NAN > Float64.zero
    returns false for Float64::NAN > Float64.zero
+    returns false for Float32::NAN > UInt64.zero
    returns false for Float32::NAN > UInt64.zero
     returns false for Float64::NAN > UInt8.zero
    returns false for Float64::NAN > UInt8.zero
+    returns false for Float64::NAN > UInt16.zero
    returns false for Float64::NAN > UInt16.zero
     returns false for Float64::NAN > Int128.zero
    returns false for Float64::NAN > Int128.zero
-    returns false for Float32::NAN > Float64.zero
    returns false for Float32::NAN > Float64.zero
     returns false for Float64::NAN > Float32::NAN
    returns false for Float64::NAN > Float32::NAN
+    returns false for Float32::NAN > Int128.zero
    returns false for Float32::NAN > Int128.zero
+    returns false for Float32::NAN > UInt32.zero
    returns false for Float32::NAN > UInt32.zero
+  #!=
+    returns true for Float32::NAN != Int128.zero
    returns true for Float32::NAN != Int128.zero
+    returns true for Float32::NAN != Float32::NAN
    returns true for Float32::NAN != Float32::NAN
+    returns true for Float64::NAN != Int128.zero
    returns true for Float64::NAN != Int128.zero
+    returns true for Float64::NAN != Float64::NAN
    returns true for Float64::NAN != Float64::NAN
+    returns true for Float64::NAN != Int16.zero
    returns true for Float64::NAN != Int16.zero
+    returns true for Float64::NAN != Int64.zero
    returns true for Float64::NAN != Int64.zero
+    returns true for Float32::NAN != Int64.zero
    returns true for Float32::NAN != Int64.zero
+    returns true for Float32::NAN != UInt128.zero
    returns true for Float32::NAN != UInt128.zero
+    returns true for Float64::NAN != Float32::NAN
    returns true for Float64::NAN != Float32::NAN
+    returns true for Float64::NAN != Float64.zero
    returns true for Float64::NAN != Float64.zero
+    returns true for Float64::NAN != UInt8.zero
    returns true for Float64::NAN != UInt8.zero
+    returns true for Float32::NAN != Int32.zero
    returns true for Float32::NAN != Int32.zero
+    returns true for Float64::NAN != UInt64.zero
    returns true for Float64::NAN != UInt64.zero
+    returns true for Float64::NAN != UInt16.zero
    returns true for Float64::NAN != UInt16.zero
+    returns true for Float64::NAN != Float32.zero
    returns true for Float64::NAN != Float32.zero
+    returns true for Float32::NAN != Int16.zero
    returns true for Float32::NAN != Int16.zero
+    returns true for Float32::NAN != UInt16.zero
    returns true for Float32::NAN != UInt16.zero
+    returns true for Float64::NAN != Int32.zero
    returns true for Float64::NAN != Int32.zero
+    returns true for Float32::NAN != Float64::NAN
    returns true for Float32::NAN != Float64::NAN
+    returns true for Float64::NAN != UInt32.zero
    returns true for Float64::NAN != UInt32.zero
+    returns true for Float64::NAN != UInt128.zero
    returns true for Float64::NAN != UInt128.zero
+    returns true for Float32::NAN != UInt8.zero
    returns true for Float32::NAN != UInt8.zero
+    returns true for Float32::NAN != Float64.zero
    returns true for Float32::NAN != Float64.zero
+    returns true for Float64::NAN != Int8.zero
    returns true for Float64::NAN != Int8.zero
+    returns true for Float32::NAN != Int8.zero
    returns true for Float32::NAN != Int8.zero
+    returns true for Float32::NAN != UInt32.zero
    returns true for Float32::NAN != UInt32.zero
+    returns true for Float32::NAN != UInt64.zero
    returns true for Float32::NAN != UInt64.zero
+    returns true for Float32::NAN != Float32.zero
    returns true for Float32::NAN != Float32.zero
+  #<=
+    returns false for Float32::NAN <= UInt64.zero
    returns false for Float32::NAN <= UInt64.zero
+    returns false for Float64::NAN <= UInt128.zero
    returns false for Float64::NAN <= UInt128.zero
+    returns false for Float32::NAN <= UInt16.zero
    returns false for Float32::NAN <= UInt16.zero
+    returns false for Float32::NAN <= Float32.zero
    returns false for Float32::NAN <= Float32.zero
+    returns false for Float64::NAN <= Int64.zero
    returns false for Float64::NAN <= Int64.zero
+    returns false for Float32::NAN <= Float32::NAN
    returns false for Float32::NAN <= Float32::NAN
+    returns false for Float32::NAN <= Int8.zero
    returns false for Float32::NAN <= Int8.zero
+    returns false for Float32::NAN <= UInt8.zero
    returns false for Float32::NAN <= UInt8.zero
+    returns false for Float64::NAN <= Int16.zero
    returns false for Float64::NAN <= Int16.zero
+    returns false for Float64::NAN <= Int128.zero
    returns false for Float64::NAN <= Int128.zero
+    returns false for Float64::NAN <= Int32.zero
    returns false for Float64::NAN <= Int32.zero
+    returns false for Float64::NAN <= Float32.zero
    returns false for Float64::NAN <= Float32.zero
+    returns false for Float64::NAN <= UInt16.zero
    returns false for Float64::NAN <= UInt16.zero
+    returns false for Float64::NAN <= Float64.zero
    returns false for Float64::NAN <= Float64.zero
+    returns false for Float32::NAN <= Int32.zero
    returns false for Float32::NAN <= Int32.zero
+    returns false for Float32::NAN <= Int128.zero
    returns false for Float32::NAN <= Int128.zero
+    returns false for Float32::NAN <= Int64.zero
    returns false for Float32::NAN <= Int64.zero
+    returns false for Float64::NAN <= UInt8.zero
    returns false for Float64::NAN <= UInt8.zero
+    returns false for Float64::NAN <= UInt64.zero
    returns false for Float64::NAN <= UInt64.zero
+    returns false for Float64::NAN <= Int8.zero
    returns false for Float64::NAN <= Int8.zero
+    returns false for Float64::NAN <= Float64::NAN
    returns false for Float64::NAN <= Float64::NAN
+    returns false for Float32::NAN <= Int16.zero
    returns false for Float32::NAN <= Int16.zero
+    returns false for Float32::NAN <= UInt32.zero
    returns false for Float32::NAN <= UInt32.zero
+    returns false for Float32::NAN <= UInt128.zero
    returns false for Float32::NAN <= UInt128.zero
+    returns false for Float64::NAN <= Float32::NAN
    returns false for Float64::NAN <= Float32::NAN
+    returns false for Float64::NAN <= UInt32.zero
    returns false for Float64::NAN <= UInt32.zero
+    returns false for Float32::NAN <= Float64.zero
    returns false for Float32::NAN <= Float64.zero
+    returns false for Float32::NAN <= Float64::NAN
    returns false for Float32::NAN <= Float64::NAN
+  #<
+    returns false for Float64::NAN < Int128.zero
    returns false for Float64::NAN < Int128.zero
+    returns false for Float64::NAN < Float32.zero
    returns false for Float64::NAN < Float32.zero
+    returns false for Float32::NAN < Int32.zero
    returns false for Float32::NAN < Int32.zero
+    returns false for Float32::NAN < Int8.zero
    returns false for Float32::NAN < Int8.zero
+    returns false for Float32::NAN < UInt64.zero
    returns false for Float32::NAN < UInt64.zero
+    returns false for Float32::NAN < UInt128.zero
    returns false for Float32::NAN < UInt128.zero
+    returns false for Float64::NAN < Int8.zero
    returns false for Float64::NAN < Int8.zero
+    returns false for Float32::NAN < Float64.zero
    returns false for Float32::NAN < Float64.zero
+    returns false for Float32::NAN < UInt8.zero
    returns false for Float32::NAN < UInt8.zero
+    returns false for Float32::NAN < Float32::NAN
    returns false for Float32::NAN < Float32::NAN
+    returns false for Float64::NAN < UInt128.zero
    returns false for Float64::NAN < UInt128.zero
+    returns false for Float64::NAN < UInt8.zero
    returns false for Float64::NAN < UInt8.zero
+    returns false for Float32::NAN < Int128.zero
    returns false for Float32::NAN < Int128.zero
+    returns false for Float32::NAN < Float64::NAN
    returns false for Float32::NAN < Float64::NAN
+    returns false for Float64::NAN < UInt32.zero
    returns false for Float64::NAN < UInt32.zero
+    returns false for Float64::NAN < UInt16.zero
    returns false for Float64::NAN < UInt16.zero
+    returns false for Float64::NAN < Float64.zero
    returns false for Float64::NAN < Float64.zero
+    returns false for Float64::NAN < Int32.zero
    returns false for Float64::NAN < Int32.zero
+    returns false for Float64::NAN < UInt64.zero
    returns false for Float64::NAN < UInt64.zero
+    returns false for Float32::NAN < Int64.zero
    returns false for Float32::NAN < Int64.zero
+    returns false for Float32::NAN < Int16.zero
    returns false for Float32::NAN < Int16.zero
+    returns false for Float32::NAN < UInt16.zero
    returns false for Float32::NAN < UInt16.zero
+    returns false for Float32::NAN < UInt32.zero
    returns false for Float32::NAN < UInt32.zero
+    returns false for Float64::NAN < Int16.zero
    returns false for Float64::NAN < Int16.zero
+    returns false for Float64::NAN < Float32::NAN
    returns false for Float64::NAN < Float32::NAN
+    returns false for Float64::NAN < Int64.zero
    returns false for Float64::NAN < Int64.zero
+    returns false for Float32::NAN < Float32.zero
    returns false for Float32::NAN < Float32.zero
+    returns false for Float64::NAN < Float64::NAN
    returns false for Float64::NAN < Float64::NAN
   #to_i
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
-    raises on overflow for Float64#to_i32
    raises on overflow for Float64#to_i32
+    raises on overflow for Float64#to_i16
    raises on overflow for Float64#to_i16
+    raises on overflow for Float64#to_i
    raises on overflow for Float64#to_i
+    raises on overflow for Float32#to_i64
    raises on overflow for Float32#to_i64
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
-    raises on overflow for Float64#to_i16
    raises on overflow for Float64#to_i16
-    raises on overflow for Float32#to_u32
    raises on overflow for Float32#to_u32
-    raises on overflow for Float32#to_i32
    raises on overflow for Float32#to_i32
-    raises overflow if equal to Int::MAX (#11105)
    raises overflow if equal to Int::MAX (#11105)
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
+    raises on overflow for Float32#to_i8
    raises on overflow for Float32#to_i8
+    raises on overflow for Float64#to_i64
    raises on overflow for Float64#to_i64
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
-    raises on overflow for Float64#to_u32
    raises on overflow for Float64#to_u32
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
-    raises on overflow for Float32#to_u128
    raises on overflow for Float32#to_u128
-    raises on overflow for Float64#to_u16
    raises on overflow for Float64#to_u16
-    raises on overflow for Float32#to_i128
    raises on overflow for Float32#to_i128
+    raises on overflow for Float64#to_i8
    raises on overflow for Float64#to_i8
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
-    raises on overflow for Float64#to_i128
    raises on overflow for Float64#to_i128
-    raises on overflow for Float64#to_u128
    raises on overflow for Float64#to_u128
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
-    raises on overflow for Float64#to_i
    raises on overflow for Float64#to_i
-    raises on overflow for Float64#to_i8
    raises on overflow for Float64#to_i8
+    raises on overflow for Float32#to_u8
    raises on overflow for Float32#to_u8
+    raises overflow if equal to Int::MAX (#11105)
    raises overflow if equal to Int::MAX (#11105)
+    raises on overflow for Float32#to_i128
    raises on overflow for Float32#to_i128
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
+    raises on overflow for Float64#to_u32
    raises on overflow for Float64#to_u32
+    raises on overflow for Float32#to_i16
    raises on overflow for Float32#to_i16
+    raises on overflow for Float64#to_u16
    raises on overflow for Float64#to_u16
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
+    raises on overflow for Float32#to_i
    raises on overflow for Float32#to_i
+    raises on overflow for Float32#to_u64
    raises on overflow for Float32#to_u64
+    raises on overflow for Float64#to_u8
    raises on overflow for Float64#to_u8
+    raises on overflow for Float32#to_u32
    raises on overflow for Float32#to_u32
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
-    raises on overflow for Float32#to_u8
    raises on overflow for Float32#to_u8
+    raises on overflow for Float64#to_u64
    raises on overflow for Float64#to_u64
+    raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
+    raises on overflow for Float64#to_i32
    raises on overflow for Float64#to_i32
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
-    raises on overflow for Float64#to_u
    raises on overflow for Float64#to_u
     raises on overflow for Float32#to_u
    raises on overflow for Float32#to_u
-    raises on overflow for Float32#to_i16
    raises on overflow for Float32#to_i16
+    raises on overflow for Float64#to_i128
    raises on overflow for Float64#to_i128
+    raises on overflow for Float32#to_u128
    raises on overflow for Float32#to_u128
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
+    doesn't raise overflow if lower than Int::MAX (#11105)
    doesn't raise overflow if lower than Int::MAX (#11105)
     raises on overflow for Float32#to_u16
    raises on overflow for Float32#to_u16
-    raises on overflow for Float32#to_i64
    raises on overflow for Float32#to_i64
-    raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
-    raises on overflow for Float32#to_u64
    raises on overflow for Float32#to_u64
-    raises on overflow for Float64#to_u64
    raises on overflow for Float64#to_u64
-    raises on overflow for Float32#to_i
    raises on overflow for Float32#to_i
-    raises on overflow for Float64#to_u8
    raises on overflow for Float64#to_u8
-    raises on overflow for Float32#to_i8
    raises on overflow for Float32#to_i8
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
-    raises on overflow for Float64#to_i64
    raises on overflow for Float64#to_i64
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
+    raises on overflow for Float64#to_u
    raises on overflow for Float64#to_u
+    raises on overflow for Float32#to_i32
    raises on overflow for Float32#to_i32
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
     raises overflow if not a number (#10421)
    raises overflow if not a number (#10421)
-    doesn't raise overflow if lower than Int::MAX (#11105)
    doesn't raise overflow if lower than Int::MAX (#11105)
-  #<
-    returns false for Float32::NAN < Int8.zero
    returns false for Float32::NAN < Int8.zero
-    returns false for Float32::NAN < Int32.zero
    returns false for Float32::NAN < Int32.zero
-    returns false for Float32::NAN < UInt128.zero
    returns false for Float32::NAN < UInt128.zero
-    returns false for Float32::NAN < Int64.zero
    returns false for Float32::NAN < Int64.zero
-    returns false for Float32::NAN < Float32::NAN
    returns false for Float32::NAN < Float32::NAN
-    returns false for Float32::NAN < Float64::NAN
    returns false for Float32::NAN < Float64::NAN
-    returns false for Float64::NAN < Int8.zero
    returns false for Float64::NAN < Int8.zero
-    returns false for Float64::NAN < UInt16.zero
    returns false for Float64::NAN < UInt16.zero
-    returns false for Float64::NAN < Float64.zero
    returns false for Float64::NAN < Float64.zero
-    returns false for Float32::NAN < Float32.zero
    returns false for Float32::NAN < Float32.zero
-    returns false for Float32::NAN < UInt8.zero
    returns false for Float32::NAN < UInt8.zero
-    returns false for Float64::NAN < Int16.zero
    returns false for Float64::NAN < Int16.zero
-    returns false for Float64::NAN < UInt32.zero
    returns false for Float64::NAN < UInt32.zero
-    returns false for Float64::NAN < UInt64.zero
    returns false for Float64::NAN < UInt64.zero
-    returns false for Float64::NAN < Int32.zero
    returns false for Float64::NAN < Int32.zero
-    returns false for Float64::NAN < Float64::NAN
    returns false for Float64::NAN < Float64::NAN
-    returns false for Float64::NAN < Float32.zero
    returns false for Float64::NAN < Float32.zero
-    returns false for Float32::NAN < UInt16.zero
    returns false for Float32::NAN < UInt16.zero
-    returns false for Float64::NAN < UInt128.zero
    returns false for Float64::NAN < UInt128.zero
-    returns false for Float64::NAN < UInt8.zero
    returns false for Float64::NAN < UInt8.zero
-    returns false for Float32::NAN < Int128.zero
    returns false for Float32::NAN < Int128.zero
-    returns false for Float32::NAN < Int16.zero
    returns false for Float32::NAN < Int16.zero
-    returns false for Float32::NAN < UInt64.zero
    returns false for Float32::NAN < UInt64.zero
-    returns false for Float32::NAN < UInt32.zero
    returns false for Float32::NAN < UInt32.zero
-    returns false for Float64::NAN < Float32::NAN
    returns false for Float64::NAN < Float32::NAN
-    returns false for Float64::NAN < Int128.zero
    returns false for Float64::NAN < Int128.zero
-    returns false for Float64::NAN < Int64.zero
    returns false for Float64::NAN < Int64.zero
-    returns false for Float32::NAN < Float64.zero
    returns false for Float32::NAN < Float64.zero
+    raises on overflow for Float64#to_u128
    raises on overflow for Float64#to_u128
   #>=
-    returns false for Float64::NAN >= Int8.zero
    returns false for Float64::NAN >= Int8.zero
-    returns false for Float32::NAN >= UInt16.zero
    returns false for Float32::NAN >= UInt16.zero
-    returns false for Float32::NAN >= Int32.zero
    returns false for Float32::NAN >= Int32.zero
-    returns false for Float64::NAN >= UInt8.zero
    returns false for Float64::NAN >= UInt8.zero
-    returns false for Float32::NAN >= UInt32.zero
    returns false for Float32::NAN >= UInt32.zero
-    returns false for Float64::NAN >= Int16.zero
    returns false for Float64::NAN >= Int16.zero
-    returns false for Float64::NAN >= Int64.zero
    returns false for Float64::NAN >= Int64.zero
+    returns false for Float64::NAN >= Int32.zero
    returns false for Float64::NAN >= Int32.zero
+    returns false for Float64::NAN >= UInt64.zero
    returns false for Float64::NAN >= UInt64.zero
+    returns false for Float32::NAN >= Int16.zero
    returns false for Float32::NAN >= Int16.zero
     returns false for Float64::NAN >= Float32::NAN
    returns false for Float64::NAN >= Float32::NAN
     returns false for Float64::NAN >= UInt32.zero
    returns false for Float64::NAN >= UInt32.zero
-    returns false for Float64::NAN >= Float64.zero
    returns false for Float64::NAN >= Float64.zero
-    returns false for Float32::NAN >= Float32.zero
    returns false for Float32::NAN >= Float32.zero
-    returns false for Float64::NAN >= Float32.zero
    returns false for Float64::NAN >= Float32.zero
-    returns false for Float32::NAN >= Float64.zero
    returns false for Float32::NAN >= Float64.zero
+    returns false for Float64::NAN >= UInt16.zero
    returns false for Float64::NAN >= UInt16.zero
     returns false for Float32::NAN >= UInt64.zero
    returns false for Float32::NAN >= UInt64.zero
-    returns false for Float32::NAN >= Int16.zero
    returns false for Float32::NAN >= Int16.zero
+    returns false for Float64::NAN >= Int64.zero
    returns false for Float64::NAN >= Int64.zero
     returns false for Float32::NAN >= Float64::NAN
    returns false for Float32::NAN >= Float64::NAN
     returns false for Float32::NAN >= UInt128.zero
    returns false for Float32::NAN >= UInt128.zero
+    returns false for Float32::NAN >= Int32.zero
    returns false for Float32::NAN >= Int32.zero
+    returns false for Float32::NAN >= Float32.zero
    returns false for Float32::NAN >= Float32.zero
+    returns false for Float32::NAN >= Int8.zero
    returns false for Float32::NAN >= Int8.zero
+    returns false for Float64::NAN >= Int16.zero
    returns false for Float64::NAN >= Int16.zero
+    returns false for Float64::NAN >= Int8.zero
    returns false for Float64::NAN >= Int8.zero
+    returns false for Float32::NAN >= Float64.zero
    returns false for Float32::NAN >= Float64.zero
+    returns false for Float64::NAN >= Float32.zero
    returns false for Float64::NAN >= Float32.zero
+    returns false for Float32::NAN >= Float32::NAN
    returns false for Float32::NAN >= Float32::NAN
+    returns false for Float64::NAN >= UInt8.zero
    returns false for Float64::NAN >= UInt8.zero
     returns false for Float32::NAN >= Int64.zero
    returns false for Float32::NAN >= Int64.zero
-    returns false for Float64::NAN >= Float64::NAN
    returns false for Float64::NAN >= Float64::NAN
     returns false for Float32::NAN >= UInt8.zero
    returns false for Float32::NAN >= UInt8.zero
+    returns false for Float64::NAN >= Float64::NAN
    returns false for Float64::NAN >= Float64::NAN
+    returns false for Float64::NAN >= Float64.zero
    returns false for Float64::NAN >= Float64.zero
     returns false for Float32::NAN >= Int128.zero
    returns false for Float32::NAN >= Int128.zero
-    returns false for Float32::NAN >= Float32::NAN
    returns false for Float32::NAN >= Float32::NAN
-    returns false for Float64::NAN >= Int128.zero
    returns false for Float64::NAN >= Int128.zero
-    returns false for Float64::NAN >= Int32.zero
    returns false for Float64::NAN >= Int32.zero
-    returns false for Float64::NAN >= UInt16.zero
    returns false for Float64::NAN >= UInt16.zero
     returns false for Float64::NAN >= UInt128.zero
    returns false for Float64::NAN >= UInt128.zero
-    returns false for Float32::NAN >= Int8.zero
    returns false for Float32::NAN >= Int8.zero
-    returns false for Float64::NAN >= UInt64.zero
    returns false for Float64::NAN >= UInt64.zero
-  #<=
-    returns false for Float32::NAN <= Int64.zero
    returns false for Float32::NAN <= Int64.zero
-    returns false for Float64::NAN <= Float64::NAN
    returns false for Float64::NAN <= Float64::NAN
-    returns false for Float32::NAN <= Float64::NAN
    returns false for Float32::NAN <= Float64::NAN
-    returns false for Float64::NAN <= Int8.zero
    returns false for Float64::NAN <= Int8.zero
-    returns false for Float64::NAN <= UInt128.zero
    returns false for Float64::NAN <= UInt128.zero
-    returns false for Float32::NAN <= Int16.zero
    returns false for Float32::NAN <= Int16.zero
-    returns false for Float64::NAN <= Int64.zero
    returns false for Float64::NAN <= Int64.zero
-    returns false for Float64::NAN <= Int128.zero
    returns false for Float64::NAN <= Int128.zero
-    returns false for Float64::NAN <= UInt64.zero
    returns false for Float64::NAN <= UInt64.zero
-    returns false for Float64::NAN <= UInt8.zero
    returns false for Float64::NAN <= UInt8.zero
-    returns false for Float64::NAN <= UInt16.zero
    returns false for Float64::NAN <= UInt16.zero
-    returns false for Float64::NAN <= Float32.zero
    returns false for Float64::NAN <= Float32.zero
-    returns false for Float32::NAN <= UInt64.zero
    returns false for Float32::NAN <= UInt64.zero
-    returns false for Float64::NAN <= UInt32.zero
    returns false for Float64::NAN <= UInt32.zero
-    returns false for Float32::NAN <= UInt8.zero
    returns false for Float32::NAN <= UInt8.zero
-    returns false for Float32::NAN <= UInt128.zero
    returns false for Float32::NAN <= UInt128.zero
-    returns false for Float64::NAN <= Int16.zero
    returns false for Float64::NAN <= Int16.zero
-    returns false for Float64::NAN <= Float64.zero
    returns false for Float64::NAN <= Float64.zero
-    returns false for Float32::NAN <= Int8.zero
    returns false for Float32::NAN <= Int8.zero
-    returns false for Float64::NAN <= Int32.zero
    returns false for Float64::NAN <= Int32.zero
-    returns false for Float32::NAN <= Float64.zero
    returns false for Float32::NAN <= Float64.zero
-    returns false for Float32::NAN <= Int128.zero
    returns false for Float32::NAN <= Int128.zero
-    returns false for Float32::NAN <= Int32.zero
    returns false for Float32::NAN <= Int32.zero
-    returns false for Float32::NAN <= Float32::NAN
    returns false for Float32::NAN <= Float32::NAN
-    returns false for Float32::NAN <= Float32.zero
    returns false for Float32::NAN <= Float32.zero
-    returns false for Float32::NAN <= UInt32.zero
    returns false for Float32::NAN <= UInt32.zero
-    returns false for Float64::NAN <= Float32::NAN
    returns false for Float64::NAN <= Float32::NAN
-    returns false for Float32::NAN <= UInt16.zero
    returns false for Float32::NAN <= UInt16.zero
-Crystal::Command
-  exec external commands
  exec external commands
-Primitives: Slice
-  .literal
-    creates multiple literals
    creates multiple literals
-    creates a read-only Slice(UInt128)
    creates a read-only Slice(UInt128)
-    creates a read-only Slice(UInt64)
    creates a read-only Slice(UInt64)
-    creates multiple literals
    creates multiple literals
-    creates multiple literals
    creates multiple literals
-    creates a read-only Slice(Int32)
    creates a read-only Slice(Int32)
-    creates multiple literals
    creates multiple literals
-    creates a read-only Slice(UInt16)
    creates a read-only Slice(UInt16)
-    creates a read-only Slice(Int8)
    creates a read-only Slice(Int8)
-    creates a read-only Slice(Float64)
    creates a read-only Slice(Float64)
-    creates multiple literals
    creates multiple literals
-    creates multiple literals
    creates multiple literals
-    creates a read-only Slice(UInt32)
    creates a read-only Slice(UInt32)
-    creates a read-only Slice(Int64)
    creates a read-only Slice(Int64)
-    creates multiple literals
    creates multiple literals
-    creates multiple literals
    creates multiple literals
-    creates multiple literals
    creates multiple literals
-    creates multiple literals
    creates multiple literals
-    creates a read-only Slice(Int16)
    creates a read-only Slice(Int16)
-    creates multiple literals
    creates multiple literals
-    creates a read-only Slice(Int128)
    creates a read-only Slice(Int128)
-    creates a read-only Slice(UInt8)
    creates a read-only Slice(UInt8)
-    creates multiple literals
    creates multiple literals
-    creates a read-only Slice(Float32)
    creates a read-only Slice(Float32)
+    returns false for Float64::NAN >= Int128.zero
    returns false for Float64::NAN >= Int128.zero
+    returns false for Float32::NAN >= UInt32.zero
    returns false for Float32::NAN >= UInt32.zero
+    returns false for Float32::NAN >= UInt16.zero
    returns false for Float32::NAN >= UInt16.zero
+  #to_f
+    doesn't raise for infinity
    doesn't raise for infinity
+    raises on overflow for Float64#to_f32
    raises on overflow for Float64#to_f32
+    doesn't raise for NaN
    doesn't raise for NaN
+  #==
+    returns false for Float32::NAN == Float32.zero
    returns false for Float32::NAN == Float32.zero
+    returns false for Float32::NAN == Int32.zero
    returns false for Float32::NAN == Int32.zero
+    returns false for Float32::NAN == Int16.zero
    returns false for Float32::NAN == Int16.zero
+    returns false for Float32::NAN == Int64.zero
    returns false for Float32::NAN == Int64.zero
+    returns false for Float64::NAN == Int32.zero
    returns false for Float64::NAN == Int32.zero
+    returns false for Float64::NAN == Int8.zero
    returns false for Float64::NAN == Int8.zero
+    returns false for Float64::NAN == Float32::NAN
    returns false for Float64::NAN == Float32::NAN
+    returns false for Float32::NAN == Float64::NAN
    returns false for Float32::NAN == Float64::NAN
+    returns false for Float64::NAN == UInt16.zero
    returns false for Float64::NAN == UInt16.zero
+    returns false for Float64::NAN == Float64::NAN
    returns false for Float64::NAN == Float64::NAN
+    returns false for Float64::NAN == Int128.zero
    returns false for Float64::NAN == Int128.zero
+    returns false for Float32::NAN == UInt16.zero
    returns false for Float32::NAN == UInt16.zero
+    returns false for Float64::NAN == UInt8.zero
    returns false for Float64::NAN == UInt8.zero
+    returns false for Float32::NAN == Int8.zero
    returns false for Float32::NAN == Int8.zero
+    returns false for Float64::NAN == Float64.zero
    returns false for Float64::NAN == Float64.zero
+    returns false for Float64::NAN == Int16.zero
    returns false for Float64::NAN == Int16.zero
+    returns false for Float32::NAN == UInt64.zero
    returns false for Float32::NAN == UInt64.zero
+    returns false for Float64::NAN == UInt64.zero
    returns false for Float64::NAN == UInt64.zero
+    returns false for Float64::NAN == UInt32.zero
    returns false for Float64::NAN == UInt32.zero
+    returns false for Float32::NAN == UInt8.zero
    returns false for Float32::NAN == UInt8.zero
+    returns false for Float64::NAN == Float32.zero
    returns false for Float64::NAN == Float32.zero
+    returns false for Float32::NAN == UInt32.zero
    returns false for Float32::NAN == UInt32.zero
+    returns false for Float32::NAN == Int128.zero
    returns false for Float32::NAN == Int128.zero
+    returns false for Float64::NAN == UInt128.zero
    returns false for Float64::NAN == UInt128.zero
+    returns false for Float32::NAN == UInt128.zero
    returns false for Float32::NAN == UInt128.zero
+    returns false for Float32::NAN == Float64.zero
    returns false for Float32::NAN == Float64.zero
+    returns false for Float64::NAN == Int64.zero
    returns false for Float64::NAN == Int64.zero
+    returns false for Float32::NAN == Float32::NAN
    returns false for Float32::NAN == Float32::NAN
+Primitives: reference
+  .pre_initialize
+    doesn't fail on complex ivar initializer if value is discarded (#14325)
    doesn't fail on complex ivar initializer if value is discarded (#14325)
+    works when address is on the stack
    works when address is on the stack
+    sets type ID
    sets type ID
+    runs inline instance initializers
    runs inline instance initializers
+    raises on abstract virtual type
    raises on abstract virtual type
+    zeroes the instance data
    zeroes the instance data
+    works with virtual type
    works with virtual type
+  .allocate
+    doesn't fail on complex ivar initializer if value is discarded (#14325)
    doesn't fail on complex ivar initializer if value is discarded (#14325)
+  .unsafe_construct
+    constructs an object in-place
    constructs an object in-place
 
-Finished in 2.41 seconds
+Finished in 8.93 seconds
 700 examples, 0 failures, 0 errors, 0 pending
-Randomized with seed: 13354
+Randomized with seed: 92833
 make[2]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg'
 make[1]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg'
    create-stamp debian/debhelper-build-stamp
@@ -34562,7 +34599,7 @@
    debian/rules override_dh_auto_install
 make[1]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg'
 dh_auto_install -- PREFIX=/usr
-	make -j42 install DESTDIR=/build/reproducible-path/crystal-1.14.0\+dfsg/debian/tmp AM_UPDATE_INFO_DIR=no "INSTALL=install --strip-program=true" PREFIX=/usr
+	make -j20 install DESTDIR=/build/reproducible-path/crystal-1.14.0\+dfsg/debian/tmp AM_UPDATE_INFO_DIR=no "INSTALL=install --strip-program=true" PREFIX=/usr
 make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg'
 gzip -c -9 man/crystal.1 > man/crystal.1.gz
 install --strip-program=true -d -m 0755 "/build/reproducible-path/crystal-1.14.0+dfsg/debian/tmp/usr/bin/"
@@ -37209,8 +37246,8 @@
    dh_md5sums
    dh_builddeb
 dpkg-deb: building package 'crystal' in '../crystal_1.14.0+dfsg-1_amd64.deb'.
-dpkg-deb: building package 'crystal-dbgsym' in '../crystal-dbgsym_1.14.0+dfsg-1_amd64.deb'.
 dpkg-deb: building package 'crystal-doc' in '../crystal-doc_1.14.0+dfsg-1_all.deb'.
+dpkg-deb: building package 'crystal-dbgsym' in '../crystal-dbgsym_1.14.0+dfsg-1_amd64.deb'.
 dpkg-deb: building package 'crystal-samples' in '../crystal-samples_1.14.0+dfsg-1_all.deb'.
  dpkg-genbuildinfo --build=binary -O../crystal_1.14.0+dfsg-1_amd64.buildinfo
  dpkg-genchanges --build=binary -O../crystal_1.14.0+dfsg-1_amd64.changes
@@ -37219,12 +37256,14 @@
 dpkg-buildpackage: info: binary-only upload (no source included)
 dpkg-genchanges: info: including full source code in upload
 I: copying local configuration
+I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/B01_cleanup starting
+I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/B01_cleanup finished
 I: unmounting dev/ptmx filesystem
 I: unmounting dev/pts filesystem
 I: unmounting dev/shm filesystem
 I: unmounting proc filesystem
 I: unmounting sys filesystem
 I: cleaning the build env 
-I: removing directory /srv/workspace/pbuilder/3553977 and its subdirectories
-I: Current time: Sat Mar 21 01:51:19 -12 2026
-I: pbuilder-time-stamp: 1774101079
+I: removing directory /srv/workspace/pbuilder/2461830 and its subdirectories
+I: Current time: Mon Feb 17 01:09:07 +14 2025
+I: pbuilder-time-stamp: 1739704147