1
0
Fork 0
mirror of synced 2024-05-03 20:23:46 +12:00

Catching bugs

This commit is contained in:
Nikita Prokopov 2020-05-15 03:51:54 +02:00
parent c1c62fd720
commit 524a28629b
9 changed files with 1569 additions and 1876 deletions

File diff suppressed because one or more lines are too long

View file

@ -32,9 +32,20 @@
" " (str/join " " (drop 1 liga))
";\n"))))
;; #346 We need << <<< >> >>> || ||| substituted before -- --- == ===
;; so that `ignore [less greater bar] hyphen hyphen` would not trigger
(def priority?
#{["less" "less"]
["less" "less" "less"]
["greater" "greater"]
["greater" "greater" "greater"]
["bar" "bar"]
["bar" "bar" "bar"]})
(def ignores
{ ["slash" "asterisk"]
(coll/multimap-by str
["slash" "asterisk"]
(str
" ignore sub slash' asterisk slash;\n"
" ignore sub asterisk slash' asterisk;\n")
@ -65,23 +76,6 @@
["colon" "greater"]
" ignore sub colon' greater equal;\n"
;; #346 =:=
["colon" "equal"]
" ignore sub equal colon' equal;\n"
;; #346 =!=
["exclam" "equal"]
" ignore sub equal exclam' equal;\n"
;; #346 <=< <=> <=| <=: <=! <=/
["less" "equal"]
" ignore sub less' equal [less greater bar colon exclam slash];\n"
;; #548 >=<
;; #346 >=> >=< >=| >=: >=! >=/
["greater" "equal"]
" ignore sub greater' equal [less greater bar colon exclam slash];\n"
;; #593 {|}
["braceleft" "bar"]
" ignore sub braceleft' bar braceright;\n"
@ -97,55 +91,92 @@
" ignore sub bracketleft bar' bracketright;\n"
;; #410 <*>> <+>> <$>>
;; #346 >>->> >>=>>
["greater" "greater"]
(str " ignore sub [asterisk plus dollar hyphen equal] greater' greater;\n"
" ignore sub greater' greater [hyphen equal];\n")
" ignore sub [asterisk plus dollar] greater' greater;\n"
;; #410 <*>>> <+>>> <$>>>
;; #346 >>>->>> >>>=>>>
["greater" "greater" "greater"]
" ignore sub [asterisk plus dollar] greater' greater greater;\n"
;; #410 <<*> <<+> <<$>
;; #346 <<-<< <<=<<
["less" "less"]
(str " ignore sub [hyphen equal] less' less;\n"
" ignore sub less' less [asterisk plus dollar hyphen equal];\n")
" ignore sub less' less [asterisk plus dollar];\n"
;; #410 <<<*> <<<+> <<<$>
["less" "less" "less"]
" ignore sub less' less less [asterisk plus dollar];\n"
;; #968 [==
;; #346 <==> >==< |==| /==/
;; #968 [== ==]
["equal" "equal"]
(str " ignore sub [bracketleft less greater bar slash] equal' equal;\n"
" ignore sub equal' equal [bracketright less greater bar slash] ;\n")
(str " ignore sub bracketleft equal' equal;\n"
" ignore sub equal' equal bracketright;\n")
;; #968 [===
;; #346 <===> >===< |===| /===/
;; #968 [=== ===]
["equal" "equal" "equal"]
(str " ignore sub [bracketleft less greater bar slash] equal' equal equal;\n"
" ignore sub equal' equal equal [bracketright less greater bar slash];\n")
(str " ignore sub bracketleft equal' equal equal;\n"
" ignore sub equal' equal equal bracketright;\n")
;; #968 [--
;; #346 <--> >--< |--|
["hyphen" "hyphen"]
(str " ignore sub [bracketleft less greater bar] hyphen' hyphen;\n"
" ignore sub hyphen' hyphen [bracketright less greater bar];\n")
;; #346 =:=
["colon" "equal"]
" ignore sub equal colon' equal;\n"
;; #968 [---
;; #346 <---> >---< |---|
["hyphen" "hyphen" "hyphen"]
(str " ignore sub [bracketleft less greater bar] hyphen' hyphen hyphen;\n"
" ignore sub hyphen' hyphen hyphen [bracketright less greater bar];\n")
;; #346 =!=
["exclam" "equal"]
" ignore sub equal exclam' equal;\n"
;; #346 =!==
["exclam" "equal" "equal"]
" ignore sub equal exclam' equal equal;\n"
;; #346 =<= <=< <=> <=| <=: <=! <=/
["less" "equal"]
(str " ignore sub equal less' equal;\n"
" ignore sub less' equal [less greater bar colon exclam slash];\n")
;; #548 >=<
;; #346 =>= >=> >=< >=| >=: >=! >=/
["greater" "equal"]
(str " ignore sub equal greater' equal;\n"
" ignore sub greater' equal [less greater bar colon exclam slash];\n")
;; #346 >>->> >>=>>
["greater" "greater"]
(str " ignore sub [hyphen equal] greater' greater;\n"
" ignore sub greater' greater [hyphen equal];\n")
;; #346 <<-<< <<=<<
["less" "less"]
(str " ignore sub [hyphen equal] less' less;\n"
" ignore sub less' less [hyphen equal];\n")
;; #346 ||-|| ||=||
["bar" "bar"]
(str " ignore sub [hyphen equal] bar' bar;\n"
" ignore sub bar' bar [hyphen equal];\n")
})
;; #346 <--> >--< |--|
["hyphen" "hyphen"]
(str " ignore sub [less greater bar] hyphen' hyphen;\n"
" ignore sub hyphen' hyphen [less greater bar];\n")
;; #346 <---> >---< |---|
["hyphen" "hyphen" "hyphen"]
(str " ignore sub [less greater bar] hyphen' hyphen hyphen;\n"
" ignore sub hyphen' hyphen hyphen [less greater bar];\n")
;; #346 <==> >==< |==| /==/ =:== =!== ==:= ==!=
["equal" "equal"]
(str " ignore sub equal [colon exclam] equal' equal;\n"
" ignore sub [less greater bar slash] equal' equal;\n"
" ignore sub equal' equal [less greater bar slash] ;\n"
" ignore sub equal' equal [colon exclam] equal;\n")
;; #346 <===> >===< |===| /===/ =:=== =!=== ===:= ===!=
["equal" "equal" "equal"]
(str " ignore sub equal [colon exclam] equal' equal equal;\n"
" ignore sub [less greater bar slash] equal' equal equal;\n"
" ignore sub equal' equal equal [less greater bar slash];\n"
" ignore sub equal' equal equal [colon exclam] equal;\n")
))
;; DO NOT generate ignores at all
@ -238,6 +269,8 @@
(defn compare-ligas [l1 l2]
(cond
(and (priority? l1) (not (priority? l2))) -1
(and (not (priority? l1)) (priority? l2)) 1
(> (count l1) (count l2)) -1
(< (count l1) (count l2)) 1
:else (compare l1 l2)))

View file

@ -13,4 +13,13 @@
(fn [m k vs]
(assoc m k (value-fn vs)))
{}
(group-by key-fn xs)))
(group-by key-fn xs)))
(defn multimap-by [f & kvs]
(reduce
(fn [m [k v]]
(if (contains? m k)
(update m k f v)
(assoc m k v)))
{} (partition 2 kvs)))

View file

@ -1,51 +0,0 @@
### Arbitrary-length arrows #346
lookup arrows {
# Disable |||
ignore sub bar bar' bar hyphen;
ignore sub bar bar' hyphen;
ignore sub [hyphen_start.arw hyphen_end.arw] bar' bar bar;
# continue hyphen
sub [less_start.arw less_less_start.arw less_middle.arw less_less_middle.arw greater_start.arw greater_greater_start.arw greater_middle.arw greater_greater_middle.arw bar_start.arw bar_bar_start.arw bar_middle.arw bar_bar_middle.arw hyphen_start.arw hyphen_end.arw] hyphen' by hyphen_end.arw;
# double middles
sub [hyphen_start.arw hyphen_end.arw] less.spacer less' hyphen by less_less_middle.arw;
sub [hyphen_start.arw hyphen_end.arw] less' less hyphen by less.spacer;
sub [hyphen_start.arw hyphen_end.arw] greater.spacer greater' hyphen by greater_greater_middle.arw;
sub [hyphen_start.arw hyphen_end.arw] greater' greater hyphen by greater.spacer;
sub [hyphen_start.arw hyphen_end.arw] bar.spacer bar' hyphen by bar_bar_middle.arw;
sub [hyphen_start.arw hyphen_end.arw] bar' bar hyphen by bar.spacer;
# single middles
sub [hyphen_start.arw hyphen_end.arw] less' hyphen by less_middle.arw;
sub [hyphen_start.arw hyphen_end.arw] greater' hyphen by greater_middle.arw;
sub [hyphen_start.arw hyphen_end.arw] bar' hyphen by bar_middle.arw;
# double ends
sub [hyphen_start.arw hyphen_end.arw] less.spacer less' by less_less_end.arw;
sub [hyphen_start.arw hyphen_end.arw] less' less by less.spacer;
sub [hyphen_start.arw hyphen_end.arw] greater.spacer greater' by greater_greater_end.arw;
sub [hyphen_start.arw hyphen_end.arw] greater' greater by greater.spacer;
sub [hyphen_start.arw hyphen_end.arw] bar.spacer bar' by bar_bar_end.arw;
sub [hyphen_start.arw hyphen_end.arw] bar' bar by bar.spacer;
# single ends
sub [hyphen_start.arw hyphen_end.arw] less' by less_end.arw;
sub [hyphen_start.arw hyphen_end.arw] greater' by greater_end.arw;
sub [hyphen_start.arw hyphen_end.arw] bar' by bar_end.arw;
# double beginnings
sub less.spacer less' hyphen by less_less_start.arw;
sub less' less hyphen by less.spacer;
sub greater.spacer greater' hyphen by greater_greater_start.arw;
sub greater' greater hyphen by greater.spacer;
sub bar.spacer bar' hyphen by bar_bar_start.arw;
sub bar' bar hyphen by bar.spacer;
# single beginnings
sub less' hyphen by less_start.arw;
sub greater' hyphen by greater_start.arw;
sub bar' hyphen by bar_start.arw;
sub hyphen' [hyphen less greater bar] by hyphen_start.arw;
} arrows;

View file

@ -1,63 +0,0 @@
lookup double_arrows {
# Disable |||
ignore sub bar bar' bar equal;
ignore sub bar bar' equal;
ignore sub [equal_start.darw equal_end.darw] bar' bar bar;
# continue hyphen
sub [less_start.darw less_less_start.darw less_middle.darw less_less_middle.darw greater_start.darw greater_greater_start.darw greater_middle.darw greater_greater_middle.darw bar_start.darw bar_bar_start.darw bar_middle.darw bar_bar_middle.darw slash_start.darw slash_middle.darw colon_middle.darw exclam_middle.darw equal_start.darw equal_end.darw] equal' by equal_end.darw;
# double middles
sub [equal_start.darw equal_end.darw] less.spacer less' equal by less_less_middle.darw;
sub [equal_start.darw equal_end.darw] less' less equal by less.spacer;
sub [equal_start.darw equal_end.darw] greater.spacer greater' equal by greater_greater_middle.darw;
sub [equal_start.darw equal_end.darw] greater' greater equal by greater.spacer;
sub [equal_start.darw equal_end.darw] bar.spacer bar' equal by bar_bar_middle.darw;
sub [equal_start.darw equal_end.darw] bar' bar equal by bar.spacer;
# single middles
sub [equal_start.darw equal_end.darw] less' equal by less_middle.darw;
sub [equal_start.darw equal_end.darw] greater' equal by greater_middle.darw;
sub [equal_start.darw equal_end.darw] bar' equal by bar_middle.darw;
sub [equal_start.darw equal_end.darw] slash' equal by slash_middle.darw;
sub [equal_start.darw equal_end.darw] colon' equal by colon_middle.darw;
sub [equal_start.darw equal_end.darw] exclam' equal by exclam_middle.darw;
# double ends
sub [equal_start.darw equal_end.darw] less.spacer less' by less_less_end.darw;
sub [equal_start.darw equal_end.darw] less' less by less.spacer;
sub [equal_start.darw equal_end.darw] greater.spacer greater' by greater_greater_end.darw;
sub [equal_start.darw equal_end.darw] greater' greater by greater.spacer;
sub [equal_start.darw equal_end.darw] bar.spacer bar' by bar_bar_end.darw;
sub [equal_start.darw equal_end.darw] bar' bar by bar.spacer;
# single ends
sub [equal_start.darw equal_end.darw] less' by less_end.darw;
sub [equal_start.darw equal_end.darw] greater' by greater_end.darw;
sub [equal_start.darw equal_end.darw] bar' by bar_end.darw;
sub [equal_start.darw equal_end.darw] slash' by slash_end.darw;
# double beginnings
sub less.spacer less' equal by less_less_start.darw;
sub less' less equal by less.spacer;
sub greater.spacer greater' equal by greater_greater_start.darw;
sub greater' greater equal by greater.spacer;
sub bar.spacer bar' equal by bar_bar_start.darw;
sub bar' bar equal by bar.spacer;
# Disable >=< #548
sub greater' equal less [equal less] by greater_start.darw;
ignore sub greater' equal less;
# Disable =< #479 #468 #424 #406 #355 #305
sub equal' less [equal less] by equal_start.darw;
ignore sub equal' less;
# single beginnings
sub less' equal by less_start.darw;
sub greater' equal by greater_start.darw;
sub bar' equal by bar_start.darw;
sub slash' equal by slash_start.darw;
sub equal' [equal less greater bar colon exclam slash] by equal_start.darw;
} double_arrows;

View file

@ -0,0 +1,65 @@
lookup equal_arrows {
# Disable |||
ignore sub bar bar' bar equal;
ignore sub bar bar' equal;
ignore sub [equal_start.darw equal_middle.darw] bar' bar bar;
# equal middle & end
sub [less_start.darw less_less_start.darw less_middle.darw less_less_middle.darw greater_start.darw greater_greater_start.darw greater_middle.darw greater_greater_middle.darw bar_start.darw bar_bar_start.darw bar_middle.darw bar_bar_middle.darw slash_start.darw slash_middle.darw colon_middle.darw exclam_middle.darw equal_start.darw equal_middle.darw] equal' [equal less greater bar slash colon exclam] by equal_middle.darw;
sub [less_start.darw less_less_start.darw less_middle.darw less_less_middle.darw greater_start.darw greater_greater_start.darw greater_middle.darw greater_greater_middle.darw bar_start.darw bar_bar_start.darw bar_middle.darw bar_bar_middle.darw slash_start.darw slash_middle.darw colon_middle.darw exclam_middle.darw equal_start.darw equal_middle.darw] equal' by equal_end.darw;
# double middles
sub [equal_start.darw equal_middle.darw] less.spacer less' equal by less_less_middle.darw;
sub [equal_start.darw equal_middle.darw] less' less equal by less.spacer;
sub [equal_start.darw equal_middle.darw] greater.spacer greater' equal by greater_greater_middle.darw;
sub [equal_start.darw equal_middle.darw] greater' greater equal by greater.spacer;
sub [equal_start.darw equal_middle.darw] bar.spacer bar' equal by bar_bar_middle.darw;
sub [equal_start.darw equal_middle.darw] bar' bar equal by bar.spacer;
# single middles
sub [equal_start.darw equal_middle.darw] less' equal by less_middle.darw;
sub [equal_start.darw equal_middle.darw] greater' equal by greater_middle.darw;
sub [equal_start.darw equal_middle.darw] bar' equal by bar_middle.darw;
sub [equal_start.darw equal_middle.darw] slash' equal by slash_middle.darw;
sub [equal_start.darw equal_middle.darw] colon' equal by colon_middle.darw;
sub [equal_start.darw equal_middle.darw] exclam' equal by exclam_middle.darw;
# double ends
sub [equal_start.darw equal_middle.darw] less.spacer less' by less_less_end.darw;
sub [equal_start.darw equal_middle.darw] less' less by less.spacer;
sub [equal_start.darw equal_middle.darw] greater.spacer greater' by greater_greater_end.darw;
sub [equal_start.darw equal_middle.darw] greater' greater by greater.spacer;
sub [equal_start.darw equal_middle.darw] bar.spacer bar' by bar_bar_end.darw;
sub [equal_start.darw equal_middle.darw] bar' bar by bar.spacer;
# single ends
sub [equal_start.darw equal_middle.darw] less' by less_end.darw;
sub [equal_start.darw equal_middle.darw] greater' by greater_end.darw;
sub [equal_start.darw equal_middle.darw] bar' by bar_end.darw;
sub [equal_start.darw equal_middle.darw] slash' by slash_end.darw;
# double beginnings
sub less.spacer less' equal by less_less_start.darw;
sub less' less equal by less.spacer;
sub greater.spacer greater' equal by greater_greater_start.darw;
sub greater' greater equal by greater.spacer;
sub bar.spacer bar' equal by bar_bar_start.darw;
sub bar' bar equal by bar.spacer;
# Disable >=< #548
sub greater' equal less [equal less] by greater_start.darw;
ignore sub greater' equal less;
# Disable =< #479 #468 #424 #406 #355 #305
sub equal' less [equal less] by equal_start.darw;
ignore sub equal' less;
# single beginnings
sub less' equal by less_start.darw;
sub greater' equal by greater_start.darw;
sub bar' equal by bar_start.darw;
sub slash' equal by slash_start.darw;
sub equal' [equal less greater bar colon exclam slash] by equal_start.darw;
} equal_arrows;

View file

@ -0,0 +1,54 @@
### Arbitrary-length arrows #346
lookup hyphen_arrows {
# Disable |||
ignore sub bar bar' bar hyphen;
ignore sub bar bar' hyphen;
ignore sub [hyphen_start.arw hyphen_middle.arw] bar' bar bar;
# hyphen middle & end
sub [less_start.arw less_less_start.arw less_middle.arw less_less_middle.arw greater_start.arw greater_greater_start.arw greater_middle.arw greater_greater_middle.arw bar_start.arw bar_bar_start.arw bar_middle.arw bar_bar_middle.arw hyphen_start.arw hyphen_middle.arw] hyphen' [hyphen less greater bar] by hyphen_middle.arw;
sub [less_start.arw less_less_start.arw less_middle.arw less_less_middle.arw greater_start.arw greater_greater_start.arw greater_middle.arw greater_greater_middle.arw bar_start.arw bar_bar_start.arw bar_middle.arw bar_bar_middle.arw hyphen_start.arw hyphen_middle.arw] hyphen' by hyphen_end.arw;
# double middles
sub [hyphen_start.arw hyphen_middle.arw] less.spacer less' hyphen by less_less_middle.arw;
sub [hyphen_start.arw hyphen_middle.arw] less' less hyphen by less.spacer;
sub [hyphen_start.arw hyphen_middle.arw] greater.spacer greater' hyphen by greater_greater_middle.arw;
sub [hyphen_start.arw hyphen_middle.arw] greater' greater hyphen by greater.spacer;
sub [hyphen_start.arw hyphen_middle.arw] bar.spacer bar' hyphen by bar_bar_middle.arw;
sub [hyphen_start.arw hyphen_middle.arw] bar' bar hyphen by bar.spacer;
# single middles
sub [hyphen_start.arw hyphen_middle.arw] less' hyphen by less_middle.arw;
sub [hyphen_start.arw hyphen_middle.arw] greater' hyphen by greater_middle.arw;
sub [hyphen_start.arw hyphen_middle.arw] bar' hyphen by bar_middle.arw;
# double ends
sub [hyphen_start.arw hyphen_middle.arw] less.spacer less' by less_less_end.arw;
sub [hyphen_start.arw hyphen_middle.arw] less' less by less.spacer;
sub [hyphen_start.arw hyphen_middle.arw] greater.spacer greater' by greater_greater_end.arw;
sub [hyphen_start.arw hyphen_middle.arw] greater' greater by greater.spacer;
sub [hyphen_start.arw hyphen_middle.arw] bar.spacer bar' by bar_bar_end.arw;
sub [hyphen_start.arw hyphen_middle.arw] bar' bar by bar.spacer;
# single ends
sub [hyphen_start.arw hyphen_middle.arw] less' by less_end.arw;
sub [hyphen_start.arw hyphen_middle.arw] greater' by greater_end.arw;
sub [hyphen_start.arw hyphen_middle.arw] bar' by bar_end.arw;
# double beginnings
sub less.spacer less' hyphen by less_less_start.arw;
sub less' less hyphen by less.spacer;
sub greater.spacer greater' hyphen by greater_greater_start.arw;
sub greater' greater hyphen by greater.spacer;
sub bar.spacer bar' hyphen by bar_bar_start.arw;
sub bar' bar hyphen by bar.spacer;
# single beginnings
sub less' hyphen by less_start.arw;
sub greater' hyphen by greater_start.arw;
sub bar' hyphen by bar_start.arw;
sub hyphen' [hyphen less greater bar] by hyphen_start.arw;
} hyphen_arrows;

View file

@ -1,8 +1,14 @@
lookup underscore_arrows {
# middle parts
sub [underscore_start.uarw underscore_middle.uarw] bar' underscore by bar_middle.uarw;
sub [underscore_start.uarw underscore_middle.uarw bar_middle.uarw] underscore' bar underscore by underscore_middle.uarw;
sub [underscore_start.uarw underscore_middle.uarw bar_middle.uarw] underscore' underscore by underscore_middle.uarw;
# ends
sub [underscore_start.uarw underscore_middle.uarw bar_middle.uarw] underscore' by underscore_end.uarw;
# beginnings
sub underscore' bar underscore by underscore_start.uarw;
sub underscore' underscore by underscore_start.uarw;
} underscore_arrows;

View file

@ -93,42 +93,171 @@ r 0 123456789 & && $ <$ <$> $> @ <= >=
# Arbitrary-length arrows #346
<--------------------------------------------<<
----- ----< ---<< ----> --->> ----| ---||
<---- <---< <--<< <---> <-->> <---| <--|| --<--
<<--- <<--< <<-<< <<--> <<->> <<--| <<-|| -<<-
>---- >---< >--<< >---> >-->> >---| >--|| -->--
>>--- >>--< >>-<< >>--> >>->> >>--| >>-|| ->>-
|---- |---< |--<< |---> |-->> |---| |--|| --|--
||--- ||--< ||-<< ||--> ||->> ||--| ||-|| -||-
<---------------------------------------------<<
<- <-- <--- <---- ----> ---> --> ->
>- >-- >--- >---- ----< ---< --< -<
|- |-- |--- |---- ----| ---| --| -|
<<- <<-- <<--- <<---- ---->> --->> -->> ->>
>>- >>-- >>--- >>---- ----<< ---<< --<< -<<
||- ||-- ||--- ||---- ----|| ---|| --|| -||
----- ----< ---<< ----> --->> ----| ---||
<---- <---< <--<< <---> <-->> <---| <--|| --<--
<<--- <<--< <<-<< <<--> <<->> <<--| <<-|| -<<-
>---- >---< >--<< >---> >-->> >---| >--|| -->--
>>--- >>--< >>-<< >>--> >>->> >>--| >>-|| ->>-
|---- |---< |--<< |---> |-->> |---| |--|| --|--
||--- ||--< ||-<< ||--> ||->> ||--| ||-|| -||-
|-<-<<->>->-|-||-|
|--<--<<-->>-->--|--||--|
|---<---<<--->>--->---|---||---|
< -< --< ---< ----<
<- -<- --<- ---<- ----<-
<-- -<-- --<-- ---<-- ----<--
<--- -<--- --<--- ---<--- ----<---
<---- -<---- --<---- ---<---- ----<----
> -> --> ---> ---->
>- ->- -->- --->- ---->-
>-- ->-- -->-- --->-- ---->--
>--- ->--- -->--- --->--- ---->---
>---- ->---- -->---- --->---- ---->----
| -| --| ---| ----|
|- -|- --|- ---|- ----|-
|-- -|-- --|-- ---|-- ----|--
|--- -|--- --|--- ---|--- ----|---
|---- -|---- --|---- ---|---- ----|----
<< -<< --<< ---<< ----<<
<<- -<<- --<<- ---<<- ----<<-
<<-- -<<-- --<<-- ---<<-- ----<<--
<<--- -<<--- --<<--- ---<<--- ----<<---
<<---- -<<---- --<<---- ---<<---- ----<<----
>> ->> -->> --->> ---->>
>>- ->>- -->>- --->>- ---->>-
>>-- ->>-- -->>-- --->>-- ---->>--
>>--- ->>--- -->>--- --->>--- ---->>---
>>---- ->>---- -->>---- --->>---- ---->>----
|| -|| --|| ---|| ----||
||- -||- --||- ---||- ----||-
||-- -||-- --||-- ---||-- ----||--
||--- -||--- --||--- ---||--- ----||---
||---- -||---- --||---- ---||---- ----||----
<====================================================<<
<= <== <=== <==== ====> ===> ==> =>
>= >== >=== >==== ====< ===< ==< =<
|= |== |=== |==== ====| ===| ==| =|
<<= <<== <<=== <<==== ====>> ===>> ==>> =>>
>>= >>== >>=== >>==== ====<< ===<< ==<< =<<
||= ||== ||=== ||==== ====|| ===|| ==|| =||
===== ====< ===<< ====> ===>> ====| ===|| ====/
<==== <===< <==<< <===> <==>> <===| <==|| <===/ ==<==
<<=== <<==< <<=<< <<==> <<=>> <<==| <<=|| <<==/ =<<=
>==== >===< >==<< >===> >==>> >===| >==|| >===/ ==>==
>>=== >>==< >>=<< >>==> >>=>> >>==| >>=|| >>==/ =>>=
|==== |===< |==<< |===> |==>> |===| |==|| |===/ ==|==
||=== ||==< ||=<< ||==> ||=>> ||==| ||=|| ||==/ =||=
/==== /===< /==<< /===> /==>> /===| /==|| /===/ ==/==
|=<=<<=>>=>=|=||=/=:=!=|
|==<==<<==>>==>==|==||==/==:==!==|
|===<===<<===>>===>===|===||===/===:===!===|
< =< ==< ===< ====<
<= =<= ==<= ===<= ====<=
<== =<== ==<== ===<== ====<==
<=== =<=== ==<=== ===<=== ====<===
<==== =<==== ==<==== ===<==== ====<====
> => ==> ===> ====>
>= =>= ==>= ===>= ====>=
>== =>== ==>== ===>== ====>==
>=== =>=== ==>=== ===>=== ====>===
>==== =>==== ==>==== ===>==== ====>====
| =| ==| ===| ====|
|= =|= ==|= ===|= ====|=
|== =|== ==|== ===|== ====|==
|=== =|=== ==|=== ===|=== ====|===
|==== =|==== ==|==== ===|==== ====|====
<< =<< ==<< ===<< ====<<
<<= =<<= ==<<= ===<<= ====<<=
<<== =<<== ==<<== ===<<== ====<<==
<<=== =<<=== ==<<=== ===<<=== ====<<===
<<==== =<<==== ==<<==== ===<<==== ====<<====
>> =>> ==>> ===>> ====>>
>>= =>>= ==>>= ===>>= ====>>=
>>== =>>== ==>>== ===>>== ====>>==
>>=== =>>=== ==>>=== ===>>=== ====>>===
>>==== =>>==== ==>>==== ===>>==== ====>>====
|| =|| ==|| ===|| ====||
||= =||= ==||= ===||= ====||=
||== =||== ==||== ===||== ====||==
||=== =||=== ==||=== ===||=== ====||===
||==== =||==== ==||==== ===||==== ====||====
/ =/ ==/ ===/ ====/
/= =/= ==/= ===/= ====/=
/== =/== ==/== ===/== ====/==
/=== =/=== ==/=== ===/=== ====/===
/==== =/==== ==/==== ===/==== ====/====
: =: ==: ===: ====:
:= =:= ==:= ===:= ====:=
:== =:== ==:== ===:== ====:==
:=== =:=== ==:=== ===:=== ====:===
:==== =:==== ==:==== ===:==== ====:====
! =! ==! ===! ====!
!= =!= ==!= ===!= ====!=
!== =!== ==!== ===!== ====!==
!=== =!=== ==!=== ===!=== ====!===
!==== =!==== ==!==== ===!==== ====!====
_ __ ___ ____
_|_ __|_ _|__ __|__
_| |_ _||_ __| ___| |__ |___
# Progress bars
[>----------]
[=>---------]
[==>--------]
[===>-------]
[====>------]
[=====>-----]
[======>----]
[=======>---]
[========>--]
[=========>-]
[==========>]
# Sanity check
- -- --- |> <| ||> <|| <!-- -~ .- ~-
= == === .= ..= := ::= != !== ?= #= ^=
<= <=< <=> <=|
>=
#548 >=< >=> >=| >=<< >>=<
#479 #468 #424 #406 #355 #305 =< ==< =<< |=<
#574 :>=
#621 <||>
<<<-<<< <<<--<<< <<<---<<< <<<----<<<
>>>->>> >>>-->>> >>>--->>> >>>---->>>
|||-||| |||--||| |||---||| |||----|||
//- //-- //--- //----
///- ///-- ///--- ///----
<============================================<<
===== ====< ===<< ====> ===>> ====| ===|| ====/
<==== <===< <==<< <===> <==>> <===| <==|| <===/ ==<==
<<=== <<==< <<=<< <<==> <<=>> <<==| <<=|| <<==/ =<<=
>==== >===< >==<< >===> >==>> >===| >==|| >===/ ==>==
>>=== >>==< >>=<< >>==> >>=>> >>==| >>=|| >>==/ =>>=
|==== |===< |==<< |===> |==>> |===| |==|| |===/ ==|==
||=== ||==< ||=<< ||==> ||=>> ||==| ||=|| ||==/ =||=
/==== /===< /==<< /===> /==>> /===| /==|| /===/ ==/==
|==<==<<==>>==>==|==||==/==:==!==|
.= ..= := ::= != !== ?= #= ^=
=:= =!= =/= >=:=> <=!=< |=/=| >>=:=!=/=>>
/= /== //= //== //=== ///= ///== ///===
= == === ====
<= <=< <=> <=|
>= >=< >=> >=|
>=< >=<< >>=<
=< ==< =<< |=<
:>= <||>
<<<=<<< <<<==<<< <<<===<<< <<<====<<<
>>>=>>> >>>==>>> >>>===>>> >>>====>>>
|||=||| |||==||| |||===||| |||====|||
_ __ ___ ____ _|_ __|_ _|__ __|__
_| |_ _||_ __| ___| |__ |___
//= //== //=== //====
///= ///== ///=== ///====