]> gitweb.factorcode.org Git - factor.git/commitdiff
benchmark.struct-arrays: new benchmark to measure performance of struct-arrays, struc...
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Fri, 28 Aug 2009 10:21:54 +0000 (05:21 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Fri, 28 Aug 2009 10:21:54 +0000 (05:21 -0500)
extra/benchmark/struct-arrays/struct-arrays.factor [new file with mode: 0644]

diff --git a/extra/benchmark/struct-arrays/struct-arrays.factor b/extra/benchmark/struct-arrays/struct-arrays.factor
new file mode 100644 (file)
index 0000000..827604a
--- /dev/null
@@ -0,0 +1,52 @@
+! Copyright (C) 2009 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors classes.struct combinators.smart fry kernel
+math math.functions math.order math.parser sequences
+struct-arrays hints io ;
+IN: benchmark.struct-arrays
+
+STRUCT: point { x float } { y float } { z float } ;
+
+: xyz ( point -- x y z )
+    [ x>> ] [ y>> ] [ z>> ] tri ; inline
+
+: change-xyz ( point obj x: ( x obj -- x' ) y: ( y obj -- y' ) z: ( z obj -- z' ) -- point )
+    tri-curry [ change-x ] [ change-y ] [ change-z ] tri* ; inline
+
+: init-point ( n point -- n )
+    over >fixnum >float
+    [ sin >>x ] [ cos 3 * >>y ] [ sin sq 2 / >>z ] tri drop
+    1 + ; inline
+
+: make-points ( len -- points )
+    point <struct-array> dup 0 [ init-point ] reduce drop ; inline
+
+: point-norm ( point -- norm )
+    [ xyz [ absq ] tri@ ] sum-outputs sqrt ; inline
+
+: normalize-point ( point -- )
+    dup point-norm [ / ] [ / ] [ / ] change-xyz drop ; inline
+
+: normalize-points ( points -- )
+    [ normalize-point ] each ; inline
+
+: max-point ( point1 point2 -- point1 )
+    [ x>> max ] [ y>> max ] [ z>> max ] change-xyz ; inline
+
+: <zero-point> ( -- point )
+    0 0 0 point <struct-boa> ; inline
+
+: max-points ( points -- point )
+    <zero-point> [ max-point ] reduce ; inline
+
+: print-point ( point -- )
+    [ xyz [ number>string ] tri@ ] output>array ", " join print ; inline
+
+: struct-array-benchmark ( len -- )
+    make-points [ normalize-points ] [ max-points ] bi print-point ;
+
+HINTS: struct-array-benchmark fixnum ;
+
+: main ( -- ) 5000000 struct-array-benchmark ;
+
+MAIN: main