Skip to content

Commit ca9496f

Browse files
authored
Use string hash for comparing strings (#4)
Use string hash for comparing strings
2 parents 297c2cb + 61c244f commit ca9496f

File tree

5 files changed

+129
-8
lines changed

5 files changed

+129
-8
lines changed

test/test-custom.4th

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
\ Copyright 2019 nomennescio
2+
3+
s" custom messages" describe#{
4+
5+
:noname ." Just passed" cr ; ^passed !
6+
:noname ." Just failed" cr ; ^different !
7+
8+
s" short strings" it#{
9+
<{ s" Hello World!" s# -> s" Hello World!" s# }>
10+
<{ s" Hello Worlds!" s# -> s" Hello Worlds!" s# }>
11+
}#
12+
s" failing compares" it#{
13+
<{ s" Hello World!" s# -> s" Hello Worlds!" s# }>
14+
<{ s" Hello Worlds!" s# -> s" Hello Worlds! " s# }>
15+
}#
16+
17+
2variable actual$
18+
2variable expected$
19+
20+
:noname ." Got '" actual$ 2@ type ." ' as expected" cr ; ^passed !
21+
:noname ." Expected '" expected$ 2@ type ." ', got '" actual$ 2@ type ." '" cr ; ^different !
22+
23+
: &actual 2dup actual$ 2! ;
24+
: &expected 2dup expected$ 2! ;
25+
26+
s" short strings" it#{
27+
<{ s" Hello World!" &actual s# -> s" Hello World!" &expected s# }>
28+
<{ s" Hello Worlds!" &actual s# -> s" Hello Worlds!" &expected s# }>
29+
}#
30+
s" failing compares" it#{
31+
<{ s" Hello World!" &actual s# -> s" Hello Worlds!" &expected s# }>
32+
<{ s" Hello Worlds!" &actual s# -> s" Hello Worlds! " &expected s# }>
33+
}#
34+
35+
}#

test/test-custom.expected

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
2+
<DESCRIBE::>custom messages
3+
4+
<IT::>short strings
5+
6+
<PASSED::>Just passed
7+
8+
<PASSED::>Just passed
9+
10+
<COMPLETEDIN::>0.139 ms
11+
12+
<IT::>failing compares
13+
14+
<FAILED::>Just failed
15+
16+
<FAILED::>Just failed
17+
18+
<COMPLETEDIN::>0.162 ms
19+
20+
<IT::>short strings
21+
22+
<PASSED::>Got 'Hello World!' as expected
23+
24+
<PASSED::>Got 'Hello Worlds!' as expected
25+
26+
<COMPLETEDIN::>0.149 ms
27+
28+
<IT::>failing compares
29+
30+
<FAILED::>Expected 'Hello Worlds!', got 'Hello World!'
31+
32+
<FAILED::>Expected 'Hello Worlds! ', got 'Hello Worlds!'
33+
34+
<COMPLETEDIN::>0.150 ms
35+
36+
<COMPLETEDIN::>1.365 ms

test/test-hash.4th

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
\ Copyright 2019 nomennescio
2+
s" string hash" describe#{
3+
s" short strings" it#{
4+
<{ s" Hello World!" s# -> s" Hello World!" s# }>
5+
<{ s" Hello Worlds!" s# -> s" Hello Worlds!" s# }>
6+
}#
7+
s" failing compares" it#{
8+
<{ s" Hello World!" s# -> s" Hello Worlds!" s# }>
9+
<{ s" Hello Worlds!" s# -> s" Hello Worlds! " s# }>
10+
}#
11+
}#

test/test-hash.expected

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
2+
<DESCRIBE::>string hash
3+
4+
<IT::>short strings
5+
6+
<PASSED::>Test Passed
7+
8+
<PASSED::>Test Passed
9+
10+
<COMPLETEDIN::>0.125 ms
11+
12+
<IT::>failing compares
13+
14+
<FAILED::>Expected 1266463317 , got 610024131
15+
16+
<FAILED::>Expected 1589968543 , got 1266463317
17+
18+
<COMPLETEDIN::>0.124 ms
19+
20+
<COMPLETEDIN::>0.292 ms

ttester-codewars.4th

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,45 @@ create EXPECTED-RESULTS 32 cells allot
1515
variable RESULTS
1616
variable DIFFERENCES
1717

18+
variable ^passed
19+
variable ^nresults
20+
variable ^different
21+
22+
: passed$ ." Test Passed" cr ;
23+
: different$ ." Expected "
24+
RESULTS @ 0 +do EXPECTED-RESULTS i cells + @ . loop
25+
." , got "
26+
RESULTS @ 0 +do ACTUAL-RESULTS i cells + @ . loop
27+
cr ;
28+
: nresults$ ." Wrong number of results, expected " depth START-DEPTH @ - .
29+
." , got " ACTUAL-DEPTH @ START-DEPTH @ - . cr ;
30+
31+
' passed$ ^passed !
32+
' nresults$ ^nresults !
33+
' different$ ^different !
34+
1835
: <{ T{ ;
1936
: }>
2037
depth ACTUAL-DEPTH @ = if
2138
depth START-DEPTH @ > if
22-
depth START-DEPTH @ - dup RESULTS ! 0 do
39+
0 DIFFERENCES !
40+
depth START-DEPTH @ - dup RESULTS ! 0 +do
2341
dup EXPECTED-RESULTS i cells + !
2442
ACTUAL-RESULTS i cells + @ <> DIFFERENCES +!
2543
loop
2644
DIFFERENCES @ if
27-
failed# ." Expected "
28-
RESULTS @ 0 do EXPECTED-RESULTS i cells + @ . loop
29-
." , got "
30-
RESULTS @ 0 do ACTUAL-RESULTS i cells + @ . loop
31-
cr
45+
failed# ^different @ execute
3246
else
33-
passed# ." Test Passed" cr
47+
passed# ^passed @ execute
3448
then
3549
then
3650
else
37-
failed# ." Wrong number of results, expected " depth START-DEPTH @ - . ." , got " ACTUAL-DEPTH @ START-DEPTH @ - . cr
51+
failed# ^nresults @ execute
3852
then
3953
EMPTY-STACK
4054
F} ;
55+
56+
3037000493 constant #m \ prime number < sqrt (2^63-1)
57+
53 constant #p \ prime number
58+
: c# { hash pow c -- hash' pow' } c pow * hash + #m mod pow #p * #m mod ; \ polynomial rolling hash function, single char
59+
: s# { c-addr u -- hash } 0 1 c-addr u 0 +do { s } s c@ c# s char+ loop 2drop ; \ string hash

0 commit comments

Comments
 (0)