@@ -5,7 +5,7 @@ local evo = require 'evolved'
55
66evo .debug_mode (true )
77
8- do
8+ if os.getenv ( " LOCAL_LUA_DEBUGGER_VSCODE " ) == nil then
99 local i = evo .id ()
1010
1111 for _ = 1 , 0xFFFFE do
@@ -6156,3 +6156,166 @@ do
61566156 assert (evo .has (e3g , f3 ) and evo .get (e3g , f3 ) == 33 )
61576157 end
61586158end
6159+
6160+ do
6161+ local f1 , f2 , f3 = evo .id (3 )
6162+
6163+ evo .set (f2 , evo .UNIQUE )
6164+ evo .set (f3 , evo .UNIQUE )
6165+
6166+ do
6167+ local p = evo .spawn { [f1 ] = 11 , [f2 ] = 22 }
6168+ local e = evo .clone (p )
6169+
6170+ assert (evo .has (p , f1 ) and evo .get (p , f1 ) == 11 )
6171+ assert (evo .has (p , f2 ) and evo .get (p , f2 ) == 22 )
6172+
6173+ assert (evo .has (e , f1 ) and evo .get (e , f1 ) == 11 )
6174+ assert (not evo .has (e , f2 ) and evo .get (e , f2 ) == nil )
6175+ end
6176+
6177+ do
6178+ local p = evo .spawn { [f1 ] = 11 , [f2 ] = 22 , [f3 ] = 33 }
6179+ local e = evo .clone (p )
6180+
6181+ assert (evo .has (p , f1 ) and evo .get (p , f1 ) == 11 )
6182+ assert (evo .has (p , f2 ) and evo .get (p , f2 ) == 22 )
6183+ assert (evo .has (p , f3 ) and evo .get (p , f3 ) == 33 )
6184+
6185+ assert (evo .has (e , f1 ) and evo .get (e , f1 ) == 11 )
6186+ assert (not evo .has (e , f2 ) and evo .get (e , f2 ) == nil )
6187+ assert (not evo .has (e , f3 ) and evo .get (e , f3 ) == nil )
6188+ end
6189+
6190+ do
6191+ local p = evo .spawn { [f2 ] = 22 }
6192+ local e = evo .clone (p )
6193+
6194+ assert (not evo .has (p , f1 ) and evo .get (p , f1 ) == nil )
6195+ assert (evo .has (p , f2 ) and evo .get (p , f2 ) == 22 )
6196+ assert (not evo .has (p , f3 ) and evo .get (p , f3 ) == nil )
6197+
6198+ assert (not evo .has (e , f1 ) and evo .get (e , f1 ) == nil )
6199+ assert (not evo .has (e , f2 ) and evo .get (e , f2 ) == nil )
6200+ assert (not evo .has (e , f3 ) and evo .get (e , f3 ) == nil )
6201+ end
6202+ do
6203+ local p = evo .spawn { [f2 ] = 22 , [f3 ] = 33 }
6204+ local e = evo .clone (p )
6205+
6206+ assert (not evo .has (p , f1 ) and evo .get (p , f1 ) == nil )
6207+ assert (evo .has (p , f2 ) and evo .get (p , f2 ) == 22 )
6208+ assert (evo .has (p , f3 ) and evo .get (p , f3 ) == 33 )
6209+
6210+ assert (not evo .has (e , f1 ) and evo .get (e , f1 ) == nil )
6211+ assert (not evo .has (e , f2 ) and evo .get (e , f2 ) == nil )
6212+ assert (not evo .has (e , f3 ) and evo .get (e , f3 ) == nil )
6213+ end
6214+
6215+ do
6216+ local p = evo .spawn { [f1 ] = 11 , [f2 ] = 22 }
6217+ local e = evo .clone (p , { [f2 ] = 2 })
6218+
6219+ assert (evo .has (p , f1 ) and evo .get (p , f1 ) == 11 )
6220+ assert (evo .has (p , f2 ) and evo .get (p , f2 ) == 22 )
6221+
6222+ assert (evo .has (e , f1 ) and evo .get (e , f1 ) == 11 )
6223+ assert (evo .has (e , f2 ) and evo .get (e , f2 ) == 2 )
6224+ end
6225+
6226+ do
6227+ local p = evo .spawn { [f1 ] = 11 , [f2 ] = 22 }
6228+ local e = evo .clone (p , { [f2 ] = 2 , [f3 ] = 3 })
6229+
6230+ assert (evo .has (p , f1 ) and evo .get (p , f1 ) == 11 )
6231+ assert (evo .has (p , f2 ) and evo .get (p , f2 ) == 22 )
6232+
6233+ assert (evo .has (e , f1 ) and evo .get (e , f1 ) == 11 )
6234+ assert (evo .has (e , f2 ) and evo .get (e , f2 ) == 2 )
6235+ assert (evo .has (e , f3 ) and evo .get (e , f3 ) == 3 )
6236+ end
6237+ end
6238+
6239+ do
6240+ local f1 , f2 , f3 = evo .id (3 )
6241+
6242+ evo .set (f2 , evo .UNIQUE )
6243+
6244+ do
6245+ local p = evo .spawn { [f1 ] = 11 , [f2 ] = 22 , [f3 ] = 33 }
6246+ local e = evo .clone (p )
6247+
6248+ assert (evo .has (p , f1 ) and evo .get (p , f1 ) == 11 )
6249+ assert (evo .has (p , f2 ) and evo .get (p , f2 ) == 22 )
6250+ assert (evo .has (p , f3 ) and evo .get (p , f3 ) == 33 )
6251+
6252+ assert (evo .has (e , f1 ) and evo .get (e , f1 ) == 11 )
6253+ assert (not evo .has (e , f2 ) and evo .get (e , f2 ) == nil )
6254+ assert (evo .has (e , f3 ) and evo .get (e , f3 ) == 33 )
6255+ end
6256+ end
6257+
6258+ do
6259+ local f1 , f2 = evo .id (2 )
6260+
6261+ local p = evo .builder ():prefab ():set (f1 , 11 ):set (f2 , 22 ):spawn ()
6262+ local e = evo .clone (p )
6263+
6264+ do
6265+ local q = evo .builder ():include (f1 , f2 ):spawn ()
6266+ local iter , state = evo .execute (q )
6267+ local chunk , entity_list , entity_count = iter (state )
6268+ assert (chunk and entity_list and entity_count )
6269+ assert (chunk == evo .chunk (f1 , f2 ))
6270+ assert (entity_count == 1 and entity_list [1 ] == e )
6271+ end
6272+
6273+ do
6274+ local q = evo .builder ():exclude (f1 ):spawn ()
6275+
6276+ for c in evo .execute (q ) do
6277+ local fs , fc = c :fragments ()
6278+ for i = 1 , fc do assert (not evo .has (fs [i ], evo .EXPLICIT )) end
6279+ end
6280+ end
6281+
6282+ do
6283+ local q = evo .builder ():spawn ()
6284+
6285+ for c in evo .execute (q ) do
6286+ local fs , fc = c :fragments ()
6287+ for i = 1 , fc do assert (not evo .has (fs [i ], evo .EXPLICIT )) end
6288+ end
6289+ end
6290+ end
6291+
6292+ do
6293+ local f1 , f2 = evo .id (2 )
6294+
6295+ evo .set (f2 , evo .EXPLICIT )
6296+
6297+ local e1 = evo .builder ():set (f1 , 11 ):spawn ()
6298+ local e2 = evo .builder ():set (f1 , 11 ):set (f2 , 22 ):spawn ()
6299+
6300+ do
6301+ local q = evo .builder ():include (f1 ):spawn ()
6302+ local iter , state = evo .execute (q )
6303+ local chunk , entity_list , entity_count = iter (state )
6304+ assert (chunk and entity_list and entity_count )
6305+ assert (chunk == evo .chunk (f1 ))
6306+ assert (entity_count == 1 and entity_list [1 ] == e1 )
6307+ chunk , entity_list , entity_count = iter (state )
6308+ assert (not chunk and not entity_list and not entity_count )
6309+ end
6310+
6311+ do
6312+ local q = evo .builder ():include (f1 , f2 ):spawn ()
6313+ local iter , state = evo .execute (q )
6314+ local chunk , entity_list , entity_count = iter (state )
6315+ assert (chunk and entity_list and entity_count )
6316+ assert (chunk == evo .chunk (f1 , f2 ))
6317+ assert (entity_count == 1 and entity_list [1 ] == e2 )
6318+ chunk , entity_list , entity_count = iter (state )
6319+ assert (not chunk and not entity_list and not entity_count )
6320+ end
6321+ end
0 commit comments