11import { mergeProps , splitProps } from "../src/index.js" ;
2+ import { $PROXY } from "../src/reactive/signal.js" ;
23import { bench , describe } from "vitest" ;
34
45const staticDesc = {
@@ -81,7 +82,26 @@ type SplitProps = (...args: any[]) => Record<string, any>[];
8182const generator = {
8283 static : ( amount : number ) => createObject ( "static" , amount , ( ) => staticDesc ) ,
8384 signal : ( amount : number ) => createObject ( "signal" , amount , ( ) => signalDesc ) ,
84- mixed : ( amount : number ) => createObject ( "mixed" , amount , v => ( v % 2 ? staticDesc : signalDesc ) )
85+ mixed : ( amount : number ) => createObject ( "mixed" , amount , v => ( v % 2 ? staticDesc : signalDesc ) ) ,
86+ store : ( amount : number ) => {
87+ const data = createObject ( "store" , amount , ( ) => staticDesc ) ;
88+ // Create a proxy that mimics store behavior with $PROXY symbol
89+ const proxy = new Proxy ( data , {
90+ get ( target , property ) {
91+ if ( property === $PROXY ) return proxy ;
92+ return target [ property ] ;
93+ } ,
94+ has ( target , property ) {
95+ if ( property === $PROXY ) return true ;
96+ return property in target ;
97+ } ,
98+ ownKeys ( target ) {
99+ return Reflect . ownKeys ( target ) ;
100+ }
101+ } ) ;
102+ Object . defineProperty ( data , $PROXY , { value : proxy , configurable : true } ) ;
103+ return proxy ;
104+ }
85105} as const ;
86106
87107const filter = new RegExp ( process . env . FILTER || ".+" ) ;
@@ -98,14 +118,16 @@ const splitPropsTests = createTest({
98118 generator,
99119 inputs : g => ( {
100120 "(5, 1)" : [ g ( 5 ) , keys ( g ( 1 ) ) ] ,
101- "(5, 1, 2)" : [ g ( 5 ) , keys ( g ( 1 ) ) , keys ( g ( 2 ) ) ] ,
121+ "(2, 15)" : [ g ( 2 ) , keys ( g ( 15 ) ) ] ,
122+ "(2, 100)" : [ g ( 2 ) , keys ( g ( 100 ) ) ] ,
102123 "(0, 15)" : [ g ( 0 ) , keys ( g ( 15 ) ) ] ,
103- "(0, 3, 2)" : [ g ( 0 ) , keys ( g ( 3 ) ) , keys ( g ( 2 ) ) ] ,
104- "(0, 100)" : [ g ( 0 ) , keys ( g ( 100 ) ) ] ,
105- "(0, 100, 3, 2)" : [ g ( 0 ) , keys ( g ( 100 ) ) , keys ( g ( 3 ) ) , keys ( g ( 2 ) ) ] ,
124+ "(25, 5)" : [ g ( 25 ) , keys ( g ( 5 ) ) ] ,
106125 "(25, 100)" : [ g ( 25 ) , keys ( g ( 100 ) ) ] ,
107126 "(50, 100)" : [ g ( 50 ) , keys ( g ( 100 ) ) ] ,
108- "(100, 25)" : [ g ( 100 ) , keys ( g ( 25 ) ) ]
127+ "(100, 25)" : [ g ( 100 ) , keys ( g ( 25 ) ) ] ,
128+ "(5, 1, 2)" : [ g ( 5 ) , keys ( g ( 1 ) ) , keys ( g ( 2 ) ) ] ,
129+ "(2, 3, 2)" : [ g ( 2 ) , keys ( g ( 3 ) ) , keys ( g ( 2 ) ) ] ,
130+ "(2, 100, 3, 2)" : [ g ( 2 ) , keys ( g ( 100 ) ) , keys ( g ( 3 ) ) , keys ( g ( 2 ) ) ]
109131 } )
110132} ) ;
111133
@@ -121,14 +143,16 @@ const mergePropsTest = createTest({
121143 generator,
122144 inputs : g => ( {
123145 "(5, 1)" : [ g ( 5 ) , g ( 1 ) ] ,
124- "(5, 1, 2)" : [ g ( 5 ) , g ( 1 ) , g ( 2 ) ] ,
146+ "(2, 15)" : [ g ( 2 ) , g ( 15 ) ] ,
147+ "(2, 100)" : [ g ( 2 ) , g ( 100 ) ] ,
125148 "(0, 15)" : [ g ( 0 ) , g ( 15 ) ] ,
126- "(0, 3, 2)" : [ g ( 0 ) , g ( 3 ) , g ( 2 ) ] ,
127- "(0, 100)" : [ g ( 0 ) , g ( 100 ) ] ,
128- "(0, 100, 3, 2)" : [ g ( 0 ) , g ( 100 ) , g ( 3 ) , g ( 2 ) ] ,
149+ "(25, 5)" : [ g ( 25 ) , g ( 5 ) ] ,
129150 "(25, 100)" : [ g ( 25 ) , g ( 100 ) ] ,
130151 "(50, 100)" : [ g ( 50 ) , g ( 100 ) ] ,
131- "(100, 25)" : [ g ( 100 ) , g ( 25 ) ]
152+ "(100, 25)" : [ g ( 100 ) , g ( 25 ) ] ,
153+ "(5, 1, 2)" : [ g ( 5 ) , g ( 1 ) , g ( 2 ) ] ,
154+ "(2, 3, 2)" : [ g ( 2 ) , g ( 3 ) , g ( 2 ) ] ,
155+ "(2, 100, 3, 2)" : [ g ( 2 ) , g ( 100 ) , g ( 3 ) , g ( 2 ) ]
132156 } )
133157} ) ;
134158
0 commit comments