Skip to content

Instantly share code, notes, and snippets.

@florianvazelle
Created January 23, 2024 17:40
Show Gist options
  • Save florianvazelle/bcc129883d46098a6ad09779c325326f to your computer and use it in GitHub Desktop.
Save florianvazelle/bcc129883d46098a6ad09779c325326f to your computer and use it in GitHub Desktop.
# godot --editor --quit
# godot -- --run-benchmarks
extends Benchmark
const ITERATIONS = 1_000
const EXAMPLE_TEXT := """
[snd 0][spd 0.3]///initialization basic test.com... [wait 60]", "[inst 4]done[wait 60] ", "[b]Press ENTER to execute test...[/b]", "Test 1: [wait 60] Rendering [wait 60]
We have recieved image file from [inst 10][b]//username:[/b]tester
Our REC system must render image information with ease
intiallization... [wait 120]
[code][spd 12]
. ..
.---+++**=+=+++=:.
:-=++***********#####**+--:
.-=*****######################**+-:
++*#################################**=.
.:-*#*###**#####**##*******###############*=:
:=*************###******#*****#######****#####*+-
.-+*##*****+++++***###***********####****+++**####*+.
-+**##***++==---====++***+++********+++======++**###*=.
-********+=---------------=--=++++++==---:::---=+***#**+:
.=*******=---------::::::::::::::::::::::::::::---=******+:
=+******=--------:::::::::::::::::::::::::::::::---=*****+=.
.+******+------::::::::::::::........:::::::::::::---+*#***+.
.+*****+=----:::::::::::::::..........:::::::::::::--=*****+=
.++****+=---:::::::::::::::...........::::::::::::::-=+****+-
.+*****+----:::::::::::::::...........:::::::::::::::-+****+-
+*****=----::::::::::::::................::::::::::--=*##**-
=*****=----:--=++++++==-:::..........:::--======-:::--*##**-
.*****-----=++++*+******+==-:::..::-==+*******+++=----*##*=.
-*#*#+---=+++++++===++++=+===-:::--=+++++++==-----==--+***:
.***+----*#*=---------::...:-+*=-*+-:....::-====++++*+++*+.
:+=**+---=*+======+++----:::-#=--+*::.:..-=+=-====--+#++**=
.++**=::--++====--==-::::::-++:..:*-::::::--:-------+=:==+=
:==+*=:::--+-----::::::::-:=*-::::=+:::::::::::::::-+::=--:
.--++-::::--======-----===++---:::-==--::::::::::--=-::--::
.--++=:::::-------------------::::::----=========--::::--::
.--=+=-::::::::::::::::::----::..::::-:::::::::::::::::-:::
----=-::::-:::::::::::.:---==----==-:::.:.:::::::::::::::.
::::---::::::::::::::.::===++===-=+=--:...:::::::::::::::
.:----::-::::::::::::::----:::::::--:::::::::::::::::..
.:--:::::::::::::::--:::::::::::::::::::::::::.
:---::::::::::::::------::--:::::::::::::::::
------:::::--::--=====++++===---:::::::::::.
-----------:--=+++===========++=--:::::::::
----------------====----------------::::::
:--------------------====-------------:-:.
:-==------------------------------------:
:-=====-------------:::::::::::---------:
.--========---------::::::::::-----====-:
:--===+++++===------------------======--:
.:-----===+++++++++==============++++===----===-.
.-+++=-------===+++++***************+++===---------=++==-:
.:==****+-----------=====+++*********++++====-------------+++***+-.
..:+****#***--------------======+++++++++=====----------------=*****+++++=-.
.-++***###******=---------------===============-------------------=*****+***++***+-:
:++**+*####*##****+---------------=============---------------------********==-=*+*****+=:.
:-+****##*##*#**##*###*+----------------============-------------------+********+++=+**********+
-=+******######***+*##****##+-----------------========-----------------::-+*************************
********#########*####***#*##+----------------------------------------::-*#**************++****##***
+*+****#**#######**#+##***####*=::----------------------------------:::=***#*****##****#****####*###
**********######*#####****######*-::::-------------------::::---:::::=*#***#*##**=***##***####*###**
*********#**####*#####**###*#####*+=:::::::::::::-----:::::::::::::=**###******+*##+##****###**#**##
*****+**###*+#**###########******##**+=-:::::::::::::::::::::::-=+*#########=*#########***######**##
#**#****#####**##########*##****+*######**++=--::::::::--==++*###########*##########**##**#######*##
####***+########################******#######**###**############****######**#################**##*##
##*****############################***##########################***=**+****+*####***####**###**#####
##*##**####***###############*#######+*##########*#######**#####*************-*#****###***--#*######
#*###*######****#*+############*######*#######*###########**##**********#******=-*#####*##**########
****#*:*###**#*#*+-*#######**###*##############*#**#######=##***++****====****++=*##***#########*###
****####--#**#+****########*############**####**##*=*#*:*######**++***===+*******########*#####***#*
##########***********####################*###*################***#**###*********###*##******###*#*##
***######*******#****#*##########**######*##*=###*###*#####**#*********#******########*+****########
#**#######********##****###**######*############*####*#*###*#####*#********=*######*######****###*** [spd 0.3] [wait 60]
done...[wait 60] integrity[wait 60] [inst 3]78%[wait 60]
pass[wait 60]
", "[b]Press ENTER to execute next test...[/b]", "Test 2: [wait 60] Encryption [wait 60]
[inst 10][b]//username:[/b]tester1 should not get the information you want to hide from wrong people.
REC system offers a \"///enc\" method that encrypts a certain part of the message.
[b]MUST CONFIGURE THE METHOD FIRST[/b]
using a template...
[b]<begin of encryption>[/b]
Test Log: Testing \"///enc\" method
Date: [inst 6][b]///enc[/b] cf0218e1f5a2811fa0389211311d4baf
Tester: [inst 6][b]///enc[/b] 53de8d64cc91d9f3dde88f4ab32444fd
Objective:
[inst 6][b]///enc[/b] 15c9fa2acc70f12a169205957bdeb835
Installation and Setup
-{REDACTED}
-{REDACTED}
-{REDACTED}
-Security
-{REDACTED}
Testing Procedures and Results:
Installation and Setup:
Procedure: [inst 6][b]///enc[/b] ee64e4c0470d43b93fea2a56412b0b93.
Results: [inst 6][b]///enc[/b] 09a1ed2cb4eb736d7a04f3886bb708a4.
{REDACTED}:
Procedure: [inst 6][b]///enc[/b] fc0c90f27924dd9b3268e52aa0037dd9.
Results: [inst 6][b]///enc[/b] ae428189c1aad2f03ba9e0e810b09145.
{REDACTED}:
Procedure: [inst 6][b]///enc[/b] f559046848cc03d37d0927ce922e8ba0.
Results: [inst 6][b]///enc[/b] 88d7b2f5b3b107340c5e454c7a34fc96.
{REDACTED}:
Procedure: [inst 6][b]///enc[/b] 0966219c61d98452d6b903f28d9dde35.
Results: [inst 6][b]///enc[/b] 779864aca77b3cac563da59ac1d65d13.
Security:
Procedure: The security features of the REC system will be tested.
Results: The security features were robust and effective. The REC system provided various security measures such as encryption, {REDACTED}, and {REDACTED}.
{REDACTED}:
Procedure: [inst 6][b]///enc[/b] 0df08012c92cd36ce997ec4a7c30a394.
Results: [inst 6][b]///enc[/b] f976d91f316e157185f32b5e1bd54e60.
Conclusion:
{REDACTED}, [inst 6][b]///enc[/b] 5a0310df9ab8928777b81a87ccb80cf4
[b]<end of encryption>[/b] [wait 120]
[b]pass[/b] [wait 120]
", "[b]Press ENTER to execute last test...[/b]", "Test 3: [wait 60] Communication [wait 60]
Say \"hello\" to [inst 10]//username:tester
Our REC system can transfer messages from user-to-user
intiallization... [wait 120]
<start of dialogue>
/you:Hello! [wait 360]
...[inst 10]//username:tester is typing...[wait 360]", "[snd 1][spd 20][color=red]ItCc0Ysg0LfQsNCy0YLRgNCw0LrQsNC70Lgg0LIg0LTQvtC80LUg0L3QsCDQn9C10LnQv9C10YAt0YHRgtGA0LjRgiwg0KLQsNC50LvQtdGAINGB0LrQsNC30LDQuywg0L/RgNC10LTRgdGC0LDQstGMINGB0LXQsdGPINCy0YvRgNCw0YnQuNCy0LDRjtGJ0LjQvCDRgNC10LTQuNGB0LrRgyDQuCDQutCw0YDRgtC+0YjQutGDINC90LAg0L/Rj9GC0L3QsNC00YbQsNGC0L7QuSDQu9GD0L3QutC1INC30LDQsdGL0YLQvtCz0L4g0L/QvtC70Y8g0LTQu9GPINCz0L7Qu9GM0YTQsC4K0KLRiyDQvtGF0L7RgtC40YjRjNGB0Y8g0L3QsCDQu9C+0YHRjyDQstC+INCy0LvQsNC20L3Ri9GFINC70LXRgdCw0YUg0L3QsCDRgdC60LvQvtC90LDRhSDQutCw0L3RjNC+0L3QsCDRgyDRgNGD0LjQvSDQoNC+0LrRhNC10LvQu9C10YAt0YbQtdC90YLRgNCwINC4INCy0YvQutCw0L/Ri9Cy0LDQtdGI0Ywg0YDQsNC60YPRiNC60Lgg0YDRj9C00L7QvCDRgSDQutCw0YDQutCw0YHQvtC8INCa0L7RgdC80LjRh9C10YHQutC+0Lkg0JjQs9C70YssINC90LDQutC70L7QvdC40LLRiNC10LnRgdGPINC/0L7QtCDRg9Cz0LvQvtC8INCyINGB0L7RgNC+0Log0L/Rj9GC0Ywg0LPRgNCw0LTRg9GB0L7Qsi4g0JzRiyDRgNCw0YHQutGA0LDRgdC40Lwg0L3QtdCx0L7RgdC60YDRkdCx0Ysg0L7Qs9GA0L7QvNC90YvQvNC4INC70LjRhtCw0LzQuCDQvdCw0YjQuNGFINGC0L7RgtC10LzQvtCyINC4INC30LvRi9GFINCx0L7QttC10YHRgtCyLCDQuCDQutCw0LbQtNGL0Lkg0LLQtdGH0LXRgCDRgtC+LCDRh9GC0L4g0L7RgdGC0LDQu9C+0YHRjCDQvtGCINGH0LXQu9C+0LLQtdGH0LXRgdGC0LLQsCwg0LHRg9C00LXRgiDQvtGC0YHRgtGD0L/QsNGC0Ywg0LIg0L/Rg9GB0YLRi9C1INC30L7QvtC/0LDRgNC60Lgg0Lgg0LfQsNC60YDRi9Cy0LDRgtGMINGB0LXQsdGPINCyINC60LvQtdGC0LrQsNGFLCDRh9GC0L7QsdGLINC30LDRidC40YLQuNGC0YzRgdGPINC+0YIg0LzQtdC00LLQtdC00LXQuSwg0Lgg0LHQvtC70YzRiNC40YUg0LrQvtGI0LXQuiwg0Lgg0LLQvtC70LrQvtCyLCDQutC+0YLQvtGA0YvQtSDQv9C+INC90L7Rh9Cw0Lwg0L/RgNC+0YXQvtC00Y/RgiDQvNC40LzQviDQuCDRgdC80L7RgtGA0Y/RgiDQvdCwINC90LDRgSDRgdC60LLQvtC30Ywg0L/RgNGD0YLRjNGPINGA0LXRiNGR0YLQutC4INGBINGC0L7QuSDRgdGC0L7RgNC+0L3Riy4KLSDQn9C10YDQtdGA0LDQsdC+0YLQutCwINCy0YLQvtGA0YHRi9GA0YzRjyDQuCDQvtCz0YDQsNC90LjRh9C10L3QuNC1INGB0LrQvtGA0L7RgdGC0LggLSDRjdGC0L4g0LTQtdGA0YzQvNC+LCAtINGB0LrQsNC30LDQuyDQotCw0LnQu9C10YAuIC0g0JHRg9C00YLQviDQutGC0L4t0YLQviDQvdC10L7QttC40LTQsNC90L3QviDQsdGA0L7RgdCw0LXRgiDQutGD0YDQuNGC0Ywg0L3QsCDRgdC80LXRgNGC0L3QvtC8INC+0LTRgNC1LgrQrdGC0L4g0L/RgNC+0LXQutGCICLQoNCw0LfQs9GA0L7QvCIsINC60L7RgtC+0YDRi9C5INGB0L7QsdC40YDQsNC10YLRgdGPINGB0L/QsNGB0YLQuCDQvNC40YAuINCa0YPQu9GM0YLRg9GA0L3Ri9C5INC70LXQtNC90LjQutC+0LLRi9C5INC/0LXRgNC40L7QtC4g0J/RgNC10LbQtNC10LLRgNC10LzQtdC90L3QviDQstGL0LfQstCw0L3QvdGL0Lkg0YLRkdC80L3Ri9C5INCy0LXQui4g0J/RgNC+0LXQutGCICLQoNCw0LfQs9GA0L7QvCIg0LfQsNGB0YLQsNCy0LjRgiDQs9GD0LzQsNC90LjQt9C8INC30LDRgdC90YPRgtGMINC40LvQuCDRgdC+0LfQtNCw0YHRgiDQtNC+0YHRgtCw0YLQvtGH0L3Rg9GOINGA0LXQvNC40YHRgdC40Y4sINGH0YLQvtCx0Ysg0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINCX0LXQvNC70Y4uCi0g0KLRiyDQv9C+0LTRgNCw0LLQvdC40LLQsNC10YjRjCDQsNC90LDRgNGF0LjRjiwgLSDQs9C+0LLQvtGA0LjRgiDQotCw0LnQu9C10YAuIC0g0J3Rgywg0YLRiyDQv9C+0L3Rj9C7LgrQn9C+0LTQvtCx0L3QviDRgtC+0LzRgywg0YfRgtC+INCx0L7QudGG0L7QstGB0LrQuNC5INC60LvRg9CxINC00LXQu9Cw0LXRgiDRgSDQutC70LXRgNC60LDQvNC4INC4INC60LDRgdGB0LjRgNCw0LzQuCwg0L/RgNC+0LXQutGCICLQoNCw0LfQs9GA0L7QvCIg0YHQu9C+0LzQuNGCINGG0LjQstC40LvQuNC30LDRhtC40Y4sINGC0LDQuiDRh9GC0L4g0LzRiyDRgdC80L7QttC10Lwg0YHQtNC10LvQsNGC0Ywg0LjQtyDQvdCw0YjQtdCz0L4g0LzQuNGA0LAg0L3QtdGH0YLQviDQu9GD0YfRiNC10LUuCi0g0J/RgNC10LTRgdGC0LDQstGMLCAtINCz0L7QstC+0YDQuNGCINCi0LDQudC70LXRgCwgLSDQutCw0Log0LvQvtGB0Ywg0L/RgNC+0LHQuNGA0LDQtdGC0YHRjyDQt9CwINC+0LrQvdCw0LzQuCDRgdGD0L/QtdGA0LzQsNGA0LrQtdGC0LAg0Lgg0LzQtdC2INCy0L7QvdGP0Y7RidC40YUg0LrQvtGA0L7QsdC+0Log0YEg0L/RgNC10LvQtdGB0YLQvdGL0LzQuCDQs9C90LjRjtGJ0LjQvNC4INC/0LvQsNGC0YzRj9C80Lgg0Lgg0YTRgNCw0LrQsNC80Lgg0L3QsCDQstC10YjQsNC70LrQsNGFOyDRgtGLINCyINC60L7QttCw0L3QvtC5INC+0LTQtdC20LTQtSwg0L7QtNC90L7QuSDQtNC+INC60L7QvdGG0LAg0LbQuNC30L3QuDsg0Lgg0L/QviDQu9C40LDQvdC1INGC0L7Qu9GJ0LjQvdC+0Lkg0YEg0LfQsNC/0Y/RgdGC0YzQtSDRgtGLINCy0LfQsdC40YDQsNC10YjRjNGB0Y8g0L3QsCDQodC40YDQty3RgtCw0YPRjdGALiDQlNC20LXQuiDQuCDQkdC+0LHQvtCy0YvQuSDRgdGC0LXQsdC10LvRjCwg0YLRiyDQv9GA0L7QtNC40YDQsNC10YjRjNGB0Y8g0YHQutCy0L7Qt9GMINCx0LDQu9C00LDRhdC40L0g0LLQu9Cw0LbQvdGL0YUg0LLQtdGA0YjQuNC9INC00LXRgNC10LLRjNC10LIsINC4INCy0L7Qt9C00YPRhSDQsdGD0LTQtdGCINGC0LDQuiDRh9C40YHRgiwg0YfRgtC+INGC0Ysg0YPQstC40LTQuNGI0Ywg0LrRgNC+0YXQvtGC0L3Ri9C1INGE0LjQs9GD0YDQutC4LCDQvNC+0LvQvtGC0Y/RidC40LUg0LfQtdGA0L3QviDQuCDQstGL0LrQu9Cw0LTRi9Cy0LDRjtGJ0LjQtSDQv9C+0LvQvtGB0LrQuCDQvNGP0YHQsCDQstGP0LvQuNGC0YzRgdGPINC90LAg0L/Rg9GB0YLQvtC5INC30LDQsdGA0L7RiNC10L3QvdC+0Lkg0LLQtdGC0LrQtSDQvdC40LrQvtC80YMg0L3QtSDQvdGD0LbQvdC+0Lkg0YHRg9C/0LXRgNCw0LLRgtC+0LzQsNCz0LjRgdGC0YDQsNC70LgsINGA0LDRgdGC0Y/QvdGD0LLRiNC10LnRgdGPINC90LAg0LLQvtGB0LXQvNGMINC/0L7Qu9C+0YEg0LIg0YjQuNGA0LjQvdGDINC4INC/0L4t0LDQstCz0YPRgdGC0L7QstGB0LrQuCDQttCw0YDQutC+0Lkg0L3QsCDRgtGL0YHRj9GH0Lgg0Lgg0YLRi9GB0Y/Rh9C4INC80LjQu9GMLiI=ItCc0Ysg0LfQsNCy0YLRgNCw0LrQsNC70Lgg0LIg0LTQvtC80LUg0L3QsCDQn9C10LnQv9C10YAt0YHRgtGA0LjRgiwg0KLQsNC50LvQtdGAINGB0LrQsNC30LDQuywg0L/RgNC10LTRgdGC0LDQstGMINGB0LXQsdGPINCy0YvRgNCw0YnQuNCy0LDRjtGJ0LjQvCDRgNC10LTQuNGB0LrRgyDQuCDQutCw0YDRgtC+0YjQutGDINC90LAg0L/Rj9GC0L3QsNC00YbQsNGC0L7QuSDQu9GD0L3QutC1INC30LDQsdGL0YLQvtCz0L4g0L/QvtC70Y8g0LTQu9GPINCz0L7Qu9GM0YTQsC4K0KLRiyDQvtGF0L7RgtC40YjRjNGB0Y8g0L3QsCDQu9C+0YHRjyDQstC+INCy0LvQsNC20L3Ri9GFINC70LXRgdCw0YUg0L3QsCDRgdC60LvQvtC90LDRhSDQutCw0L3RjNC+0L3QsCDRgyDRgNGD0LjQvSDQoNC+0LrRhNC10LvQu9C10YAt0YbQtdC90YLRgNCwINC4INCy0YvQutCw0L/Ri9Cy0LDQtdGI0Ywg0YDQsNC60YPRiNC60Lgg0YDRj9C00L7QvCDRgSDQutCw0YDQutCw0YHQvtC8INCa0L7RgdC80LjRh9C10YHQutC+0Lkg0JjQs9C70YssINC90LDQutC70L7QvdC40LLRiNC10LnRgdGPINC/0L7QtCDRg9Cz0LvQvtC8INCyINGB0L7RgNC+0Log0L/Rj9GC0Ywg0LPRgNCw0LTRg9GB0L7Qsi4g0JzRiyDRgNCw0YHQutGA0LDRgdC40Lwg0L3QtdCx0L7RgdC60YDRkdCx0Ysg0L7Qs9GA0L7QvNC90YvQvNC4INC70LjRhtCw0LzQuCDQvdCw0YjQuNGFINGC0L7RgtC10LzQvtCyINC4INC30LvRi9GFINCx0L7QttC10YHRgtCyLCDQuCDQutCw0LbQtNGL0Lkg0LLQtdGH0LXRgCDRgtC+LCDRh9GC0L4g0L7RgdGC0LDQu9C+0YHRjCDQvtGCINGH0LXQu9C+0LLQtdGH0LXRgdGC0LLQsCwg0LHRg9C00LXRgiDQvtGC0YHRgtGD0L/QsNGC0Ywg0LIg0L/Rg9GB0YLRi9C1INC30L7QvtC/0LDRgNC60Lgg0Lgg0LfQsNC60YDRi9Cy0LDRgtGMINGB0LXQsdGPINCyINC60LvQtdGC0LrQsNGFLCDRh9GC0L7QsdGLINC30LDRidC40YLQuNGC0YzRgdGPINC+0YIg0LzQtdC00LLQtdC00LXQuSwg0Lgg0LHQvtC70YzRiNC40YUg0LrQvtGI0LXQuiwg0Lgg0LLQvtC70LrQvtCyLCDQutC+0YLQvtGA0YvQtSDQv9C+INC90L7Rh9Cw0Lwg0L/RgNC+0YXQvtC00Y/RgiDQvNC40LzQviDQuCDRgdC80L7RgtGA0Y/RgiDQvdCwINC90LDRgSDRgdC60LLQvtC30Ywg0L/RgNGD0YLRjNGPINGA0LXRiNGR0YLQutC4INGBINGC0L7QuSDRgdGC0L7RgNC+0L3Riy4KLSDQn9C10YDQtdGA0LDQsdC+0YLQutCwINCy0YLQvtGA0YHRi9GA0YzRjyDQuCDQvtCz0YDQsNC90LjRh9C10L3QuNC1INGB0LrQvtGA0L7RgdGC0LggLSDRjdGC0L4g0LTQtdGA0YzQvNC+LCAtINGB0LrQsNC30LDQuyDQotCw0LnQu9C10YAuIC0g0JHRg9C00YLQviDQutGC0L4t0YLQviDQvdC10L7QttC40LTQsNC90L3QviDQsdGA0L7RgdCw0LXRgiDQutGD0YDQuNGC0Ywg0L3QsCDRgdC80LXRgNGC0L3QvtC8INC+0LTRgNC1LgrQrdGC0L4g0L/RgNC+0LXQutGCICLQoNCw0LfQs9GA0L7QvCIsINC60L7RgtC+0YDRi9C5INGB0L7QsdC40YDQsNC10YLRgdGPINGB0L/QsNGB0YLQuCDQvNC40YAuINCa0YPQu9GM0YLRg9GA0L3Ri9C5INC70LXQtNC90LjQutC+0LLRi9C5INC/0LXRgNC40L7QtC4g0J/RgNC10LbQtNC10LLRgNC10LzQtdC90L3QviDQstGL0LfQstCw0L3QvdGL0Lkg0YLRkdC80L3Ri9C5INCy0LXQui4g0J/RgNC+0LXQutGCICLQoNCw0LfQs9GA0L7QvCIg0LfQsNGB0YLQsNCy0LjRgiDQs9GD0LzQsNC90LjQt9C8INC30LDRgdC90YPRgtGMINC40LvQuCDRgdC+0LfQtNCw0YHRgiDQtNC+0YHRgtCw0YLQvtGH0L3Rg9GOINGA0LXQvNC40YHRgdC40Y4sINGH0YLQvtCx0Ysg0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINCX0LXQvNC70Y4uCi0g0KLRiyDQv9C+0LTRgNCw0LLQvdC40LLQsNC10YjRjCDQsNC90LDRgNGF0LjRjiwgLSDQs9C+0LLQvtGA0LjRgiDQotCw0LnQu9C10YAuIC0g0J3Rgywg0YLRiyDQv9C+0L3Rj9C7LgrQn9C+0LTQvtCx0L3QviDRgtC+0LzRgywg0YfRgtC+INCx0L7QudGG0L7QstGB0LrQuNC5INC60LvRg9CxINC00LXQu9Cw0LXRgiDRgSDQutC70LXRgNC60LDQvNC4INC4INC60LDRgdGB0LjRgNCw0LzQuCwg0L/RgNC+0LXQutGCICLQoNCw0LfQs9GA0L7QvCIg0YHQu9C+0LzQuNGCINGG0LjQstC40LvQuNC30LDRhtC40Y4sINGC0LDQuiDRh9GC0L4g0LzRiyDRgdC80L7QttC10Lwg0YHQtNC10LvQsNGC0Ywg0LjQtyDQvdCw0YjQtdCz0L4g0LzQuNGA0LAg0L3QtdGH0YLQviDQu9GD0YfRiNC10LUuCi0g0J/RgNC10LTRgdGC0LDQstGMLCAtINCz0L7QstC+0YDQuNGCINCi0LDQudC70LXRgCwgLSDQutCw0Log0LvQvtGB0Ywg0L/RgNC+0LHQuNGA0LDQtdGC0YHRjyDQt9CwINC+0LrQvdCw0LzQuCDRgdGD0L/QtdGA0LzQsNGA0LrQtdGC0LAg0Lgg0LzQtdC2INCy0L7QvdGP0Y7RidC40YUg0LrQvtGA0L7QsdC+0Log0YEg0L/RgNC10LvQtdGB0YLQvdGL0LzQuCDQs9C90LjRjtGJ0LjQvNC4INC/0LvQsNGC0YzRj9C80Lgg0Lgg0YTRgNCw0LrQsNC80Lgg0L3QsCDQstC10YjQsNC70LrQsNGFOyDRgtGLINCyINC60L7QttCw0L3QvtC5INC+0LTQtdC20LTQtSwg0L7QtNC90L7QuSDQtNC+INC60L7QvdGG0LAg0LbQuNC30L3QuDsg0Lgg0L/QviDQu9C40LDQvdC1INGC0L7Qu9GJ0LjQvdC+0Lkg0YEg0LfQsNC/0Y/RgdGC0YzQtSDRgtGLINCy0LfQsdC40YDQsNC10YjRjNGB0Y8g0L3QsCDQodC40YDQty3RgtCw0YPRjdGALiDQlNC20LXQuiDQuCDQkdC+0LHQvtCy0YvQuSDRgdGC0LXQsdC10LvRjCwg0YLRiyDQv9GA0L7QtNC40YDQsNC10YjRjNGB0Y8g0YHQutCy0L7Qt9GMINCx0LDQu9C00LDRhdC40L0g0LLQu9Cw0LbQvdGL0YUg0LLQtdGA0YjQuNC9INC00LXRgNC10LLRjNC10LIsINC4INCy0L7Qt9C00YPRhSDQsdGD0LTQtdGCINGC0LDQuiDRh9C40YHRgiwg0YfRgtC+INGC0Ysg0YPQstC40LTQuNGI0Ywg0LrRgNC+0YXQvtGC0L3Ri9C1INGE0LjQs9GD0YDQutC4LCDQvNC+0LvQvtGC0Y/RidC40LUg0LfQtdGA0L3QviDQuCDQstGL0LrQu9Cw0LTRi9Cy0LDRjtGJ0LjQtSDQv9C+0LvQvtGB0LrQuCDQvNGP0YHQsCDQstGP0LvQuNGC0YzRgdGPINC90LAg0L/Rg9GB0YLQvtC5INC30LDQsdGA0L7RiNC10L3QvdC+0Lkg0LLQtdGC0LrQtSDQvdC40LrQvtC80YMg0L3QtSDQvdGD0LbQvdC+0Lkg0YHRg9C/0LXRgNCw0LLRgtC+0LzQsNCz0LjRgdGC0YDQsNC70LgsINGA0LDRgdGC0Y/QvdGD0LLRiNC10LnRgdGPINC90LAg0LLQvtGB0LXQvNGMINC/0L7Qu9C+0YEg0LIg0YjQuNGA0LjQvdGDINC4INC/0L4t0LDQstCz0YPRgdGC0L7QstGB0LrQuCDQttCw0YDQutC+0Lkg0L3QsCDRgtGL0YHRj9GH0Lgg0Lgg0YLRi9GB0Y/Rh9C4INC80LjQu9GMLiI=[/color][spd 0.3]", "[inst 222]Test 3: Communication
Say \"hello\" to //username:tester
Our REC system can transfer messages from user-to-user
intiallization...
<start of dialogue>
/you: Hello!
...//username:tester is typing...
[wait 120]
", "[b]pass[/b] [wait 360] ", "///tests were completed successfully[wait 180] ", "[b]Press ENTER to shut down...[/b]
"""
func benchmark_original_parse_custom_tags_solution() -> void:
for i in ITERATIONS:
_parse_custom_tags(EXAMPLE_TEXT)
func _parse_custom_tags(str:String)->Array:
var result = [""]
var inside_tag = false
var current_pos = 0
var inside_tag_name = false
var inside_tag_value = false
var current_tag = ""
var current_tag_value = ""
for char in str:
if inside_tag:
if char == "]":
inside_tag = false
if current_tag in ["inst", "spd", "snd", "wait"]:
result.append( {
"name":current_tag,
"pos": current_pos,
"value":current_tag_value} )
# else:
# push_error("Malformed bbcode tag '" + current_tag + "' in message . Please be sure to use square brackets only for valid bbcode tags, otherwise bugs may occur")
current_tag = ""
current_tag_value = ""
continue
if char == " ":
inside_tag_name = false
if current_tag in ["inst", "spd", "snd", "wait"]:
inside_tag_value = true
continue
if inside_tag_name:
current_tag+=char
continue
if inside_tag_value:
current_tag_value+=char
continue
continue
if char == "[":
inside_tag = true
inside_tag_name = true
continue
result[0] += char
current_pos+=1
return result
func benchmark_regex_parse_custom_tags_solution() -> void:
for i in ITERATIONS:
_regex_custom_tags(EXAMPLE_TEXT)
func _regex_custom_tags(str: String) -> Array:
var result = [str]
var regex = RegEx.create_from_string(
"\\[(?<tag_name>inst|spd|snd|wait) (?<tag_digit>-?[0-9]+(\\.[0-9]+)?)\\]"
)
for regex_match in regex.search_all(str):
# Insert a new tag element
result.append(
{
"name": regex_match.get_string("tag_name"),
"pos": regex_match.get_start(),
"value": regex_match.get_string("tag_digit")
}
)
# Remove the tag from the original string
var splitted_str = result[0].split(regex_match.get_string(), true, 1)
result[0] = splitted_str[0] + splitted_str[1]
return result
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment