Last active
August 23, 2022 17:05
-
-
Save GiuseppeChillemi/96790bbfba304e5a9ab346b3a33a5c8d to your computer and use it in GitHub Desktop.
Testing the speed of various methods
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;Red [] | |
Rebol [] | |
find**: func [ | |
data | |
column | |
value | |
/local | |
container | |
out-data | |
column-value | |
] [ | |
container: data | |
data: next data | |
forall data [ | |
column-value: data/1/:column | |
;if all [block? column-value find column-value :value] [ | |
;using the above line, nearly doubles the speed | |
if find column-value :value [ | |
out-data: data | |
break | |
] | |
] | |
out-data | |
] | |
find**2: func [ | |
data | |
column | |
value | |
/local | |
container | |
out-data | |
column-value | |
] [ | |
container: data | |
data: next data | |
forall data [ | |
column-value: data/1/:column | |
if :value = column-value/1 [ | |
out-data: data | |
break | |
] | |
] | |
out-data | |
] | |
find**3: func [ | |
data | |
column | |
value | |
/local | |
container | |
out-data | |
column-value | |
] [ | |
container: data | |
data: next data | |
forall data [ | |
if :value = data/1/:column/1 [ | |
out-data: data | |
break | |
] | |
] | |
out-data | |
] | |
find**4: func [ | |
data | |
column | |
value | |
/local | |
container | |
out-data | |
code | |
pt | |
] [ | |
container: data | |
data: next data | |
pt: 'data/1/:put-here-the-column/1 | |
poke pt 3 column | |
; code: compose [ ;<----------------- Does not compile, requires a block instad of the word CODE | |
; if :value = (pt) [ | |
; out-data: data | |
; break | |
; ] | |
; ] | |
; forall data code | |
do compose/deep [ | |
forall data [ | |
if :value = (pt) [ | |
out-data: data | |
break | |
] | |
] | |
] | |
out-data | |
] | |
find**5: func [ | |
data | |
column | |
value | |
/local | |
container | |
out-data | |
ln | |
idx | |
] [ | |
container: next data | |
ln: length? container | |
repeat idx ln [ | |
;probe container | |
if :value = container/:idx/:column/1 [ | |
out-data: at container idx | |
break | |
] | |
] | |
out-data | |
] | |
find**6: func [ | |
data | |
column | |
value | |
/local | |
container | |
out-data | |
ln | |
idx | |
] [ | |
container: next data | |
ln: length? container | |
repeat idx ln [ | |
;probe container | |
if find container/:idx/:column :value [ | |
out-data: at container idx | |
break | |
] | |
] | |
out-data | |
] | |
recycle/off | |
table: [[a b c d e]] | |
random-string: "lak4tl24k43g3rvuj" | |
repeat idx 100000 [ | |
random-string: random "lak4tl24k43g3rvuj" | |
append/only table reduce [ | |
random-string | |
random-string | |
random-string | |
head insert copy [] idx | |
random-string | |
] | |
] | |
out-values: copy "" | |
append out-values rejoin ["Nested-find:" dt [element: first find** table 4 99999] element lf] | |
append out-values rejoin ["Double-path:" dt [element: first find**2 table 4 99999] element lf] | |
append out-values rejoin ["single-path:" dt [element: first find**3 table 4 99999] element lf] | |
append out-values rejoin ["dynamc-code:" dt [element: first find**4 table 4 99999] element lf] | |
append out-values rejoin [" repeat:" dt [element: first find**5 table 4 99999] element lf] | |
append out-values rejoin ["repeat-find:" dt [element: first find**6 table 4 99999] element lf] | |
print ["Nested-find:" dt [element: first find** table 4 99999] element] | |
print ["Double-path:" dt [element: first find**2 table 4 99999] element] | |
print ["single-path:" dt [element: first find**3 table 4 99999] element] | |
print ["dynamc-code:" dt [element: first find**4 table 4 99999] element] | |
print [" repeat:" dt [element: first find**5 table 4 99999] element] | |
print ["repeat-find:" dt [element: first find**6 table 4 99999] element] | |
;---------------------------- | |
table-flat: copy [] | |
repeat idx 100000 [ | |
append table-flat reduce [ | |
idx | |
] | |
] | |
append out-values rejoin [" Flat:" dt [element: first find table-flat 99999] element lf] | |
print [" Flat:" dt [element: first find table-flat 99999] element] | |
;---------------------------- | |
table-skip: copy [] | |
repeat idx 100000 [ | |
random-string: random "lak4tl24k43g3rvuj" | |
append table-skip reduce [ | |
random-string | |
random-string | |
random-string | |
idx | |
random-string | |
] | |
] | |
append out-values rejoin [" Skip:" dt [element: first find/skip skip table-skip 3 99999 5] element lf] | |
Print [" Skip:" dt [element: first find/skip skip table-skip 3 99999 5] element] | |
write %find-speed.txt out-values | |
halt | |
Test-Results: comment { | |
;------------- Red | |
Nested-find: 0:00:00.116017 ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u 99999 ltlk444rj3vk2ga3u | |
Double-path: 0:00:00.0960068 ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u 99999 ltlk444rj3vk2ga3u | |
single-path: 0:00:00.0720015 ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u 99999 ltlk444rj3vk2ga3u | |
dynamc-code: 0:00:00.068003 ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u 99999 ltlk444rj3vk2ga3u | |
repeat: 0:00:00.0730043 ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u 99999 ltlk444rj3vk2ga3u | |
repeat-find: 0:00:00.0960086 ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u 99999 ltlk444rj3vk2ga3u | |
Flat: 0:00:00.0029996 99999 | |
Skip: 0:00:00.0029983 99999 | |
;------------- Red Table converted to HASH! with 22-Aug-2022 Release | |
Nested-find: 0:00:00.123015 rluktv4323jklga44 u2gla4ltv4rk43jk3 l434avlr34kkugt2j 99999 ut34r34gk4kvl2lja | |
Nested+chks: 0:00:00.227018 rluktv4323jklga44 u2gla4ltv4rk43jk3 l434avlr34kkugt2j 99999 ut34r34gk4kvl2lja | |
Double-path: 0:00:00.101003 rluktv4323jklga44 u2gla4ltv4rk43jk3 l434avlr34kkugt2j 99999 ut34r34gk4kvl2lja | |
single-path: 0:00:00.0790088 rluktv4323jklga44 u2gla4ltv4rk43jk3 l434avlr34kkugt2j 99999 ut34r34gk4kvl2lja | |
dynamc-code: 0:00:00.0790054 rluktv4323jklga44 u2gla4ltv4rk43jk3 l434avlr34kkugt2j 99999 ut34r34gk4kvl2lja | |
repeat: 0:00:00.0800038 rluktv4323jklga44 u2gla4ltv4rk43jk3 l434avlr34kkugt2j 99999 ut34r34gk4kvl2lja | |
repeat-find: 0:00:00.0960044 rluktv4323jklga44 u2gla4ltv4rk43jk3 l434avlr34kkugt2j 99999 ut34r34gk4kvl2lja | |
Flat: 0:00:00 99999 | |
Skip: 0:00:00 99999 | |
;------------- Red (Compiled) | |
Nested-find:0:00:00.0510063ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u 99999 ltlk444rj3vk2ga3u | |
Double-path:0:00:00.0499998ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u 99999 ltlk444rj3vk2ga3u | |
single-path:0:00:00.0340017ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u 99999 ltlk444rj3vk2ga3u | |
dynamc-code:0:00:00.076009ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u 99999 ltlk444rj3vk2ga3u | |
repeat:0:00:00.0379977ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u 99999 ltlk444rj3vk2ga3u | |
repeat-find:0:00:00.0430056ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u ltlk444rj3vk2ga3u 99999 ltlk444rj3vk2ga3u | |
Flat:0:00:00.002999299999 | |
Skip:0:00:00.003999599999 | |
;------------- Rebol2 | |
Nested-find: 0:00:00.201 3jlu3kkg4tarvl244 3jlu3kkg4tarvl244 3jlu3kkg4tarvl244 99999 3jlu3kkg4tarvl244 | |
Double-path: 0:00:00.209 3jlu3kkg4tarvl244 3jlu3kkg4tarvl244 3jlu3kkg4tarvl244 99999 3jlu3kkg4tarvl244 | |
single-path: 0:00:00.191 3jlu3kkg4tarvl244 3jlu3kkg4tarvl244 3jlu3kkg4tarvl244 99999 3jlu3kkg4tarvl244 | |
dynamc-code: 0:00:00.185 3jlu3kkg4tarvl244 3jlu3kkg4tarvl244 3jlu3kkg4tarvl244 99999 3jlu3kkg4tarvl244 | |
repeat: 0:00:00.045 3jlu3kkg4tarvl244 3jlu3kkg4tarvl244 3jlu3kkg4tarvl244 99999 3jlu3kkg4tarvl244 | |
repeat-find: 0:00:00.052 3jlu3kkg4tarvl244 3jlu3kkg4tarvl244 3jlu3kkg4tarvl244 99999 3jlu3kkg4tarvl244 | |
Flat: 0:00:00.001 99999 | |
Skip: 0:00:00.003 99999 | |
;------------- Rebol3 | |
Nested-find: 0:00:00.053086 uarl442jkvtklg343 uarl442jkvtklg343 uarl442jkvtklg343 99999 uarl442jkvtklg343 | |
Double-path: 0:00:00.048731 uarl442jkvtklg343 uarl442jkvtklg343 uarl442jkvtklg343 99999 uarl442jkvtklg343 | |
single-path: 0:00:00.036721 uarl442jkvtklg343 uarl442jkvtklg343 uarl442jkvtklg343 99999 uarl442jkvtklg343 | |
dynamc-code: 0:00:00.036464 uarl442jkvtklg343 uarl442jkvtklg343 uarl442jkvtklg343 99999 uarl442jkvtklg343 | |
repeat: 0:00:00.037257 uarl442jkvtklg343 uarl442jkvtklg343 uarl442jkvtklg343 99999 uarl442jkvtklg343 | |
repeat-find: 0:00:00.046565 uarl442jkvtklg343 uarl442jkvtklg343 uarl442jkvtklg343 99999 uarl442jkvtklg343 | |
Flat: 0:00:00.000632 99999 | |
Skip: 0:00:00.002035 99999 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment