Skip to content

Instantly share code, notes, and snippets.

@GiuseppeChillemi
Last active August 23, 2022 17:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GiuseppeChillemi/96790bbfba304e5a9ab346b3a33a5c8d to your computer and use it in GitHub Desktop.
Save GiuseppeChillemi/96790bbfba304e5a9ab346b3a33a5c8d to your computer and use it in GitHub Desktop.
Testing the speed of various methods
;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