Make WordPress Core

Ticket #30430: test.php

File test.php, 2.9 KB (added by jamesgol, 12 years ago)

Code to test efficiency of new function

Line 
1<?php
2
3
4$methods = array( 'my_data_clone', 'wrapped_test', 'unserser', 'shallowcopy');
5$count = 1000000;
6
7
8echo "Number of iterations per: $count\n";
9
10$a = (string) 'Some simple string';
11run_tests( 'string', $a );
12
13$a = (integer) 1234567;
14run_tests( 'integer', $a );
15
16$a = (float) 123456.78;
17run_tests( 'float', $a );
18
19$a = new StdClass();
20$a->test = 'the';
21$a->test2 = 'the';
22$a->test3 = 'the';
23
24$new = run_tests( 'stdclass', $a, 'unset($new->test2);' );
25
26$a = array();
27$a['test'] = 'the';
28$a['test2'] = 'the';
29$a['test3'] = 'the';
30run_tests( 'array', $a, 'unset( $new["test2"] );');
31
32
33$a = array();
34$a['test'] = new StdClass();
35$a['test']->test = 'the';
36$a['test']->test2 = 'the';
37$a['test']->test3 = 'the';
38run_tests( 'array of obj', $a, 'unset( $new["test"]->test2 );');
39
40$a = array();
41$a['test'] = array();
42$a['test']['leveltwo'] = new StdClass();
43$a['test']['leveltwo']->test = 'something';
44$a['test']['leveltwo']->test2 = 'something';
45$a['test']['leveltwo']->test3 = 'something';
46
47$a['test']['leveltwoa'] = new StdClass();
48$a['test']['leveltwoa']->test = 'something';
49$a['test']['leveltwoa']->test2 = 'something';
50$a['test']['leveltwoa']->test3 = 'something';
51run_tests( 'array of array of obj', $a, 'unset( $new["test"]["leveltwo"]->test2);' );
52
53
54function run_tests( $name, $what, $changer = null ) {
55 global $methods;
56 global $count;
57 foreach ($methods as $method) {
58 $start = microtime( true );
59 $new = run_test( $method, $what, $count);
60 $stop = microtime( true );
61
62 echo "Total ($name $method): " . number_format(($stop - $start), 5) . " sec\n";
63
64 $old_b4_json = json_encode( $what );
65 if (isset( $changer ) ) {
66 eval( $changer );
67
68 }
69 $old_after_json = json_encode( $what );
70 $new_json = json_encode( $new );
71 if ( $old_b4_json !== $old_after_json ) {
72 echo "old_b4 !== old_after ($name) ($method)\n";
73 var_dump( $old_b4_json );
74 var_dump( $old_after_json );
75 }
76 }
77}
78
79
80function run_test( $method, $what, $count ) {
81
82
83 for ($x = 0; $x < $count; $x++ ) {
84 $new = call_user_func( $method, $what );
85 }
86
87 return $new;
88}
89
90
91function shallowcopy( $what ) {
92 $new = $what;
93 return $new;
94}
95
96function unserser( $what ) {
97 return unserialize( serialize( $what ) );
98
99}
100
101// This was the my first attempt at the deep copy and it turned out to be the fastest
102function my_data_clone( $what ) {
103 if ( is_object( $what ) ) {
104 return clone $what;
105 } elseif ( is_array( $what ) ) {
106 $new = array();
107 foreach ( $what as $key => $value ) {
108 if ( is_object( $value ) ) {
109 $new[ $key ] = clone $value;
110 } elseif ( is_array( $value ) ) {
111 $new[ $key ] = my_data_clone( $value );
112 } else {
113 $new[ $key ] = $value;
114 }
115
116 }
117 return $new;
118 } else {
119 return $what;
120 }
121
122 return null;
123}
124
125// This is closer to what WP would do since the cache setter already does is_object
126function wrapped_test( $what ) {
127 if ( is_object( $what ) ) {
128 return clone $what;
129 } elseif ( is_array( $what ) ) {
130 return my_data_clone( $what );
131 }
132 return $what;
133}
134