@@ -337,3 +337,74 @@ def test_serialize_customname_100_chars_is_valid(self):
337337 data = ItemPreviewData (defindex = 7 , customname = "x" * 100 )
338338 result = serialize (data )
339339 assert result .startswith ("00" )
340+
341+
342+ # -------------------------------------------------------------------------
343+ # CSFloat / gen.test.ts test vectors
344+ # -------------------------------------------------------------------------
345+
346+ CSFLOAT_A = "00180720DA03280638FBEE88F90340B2026BC03C96"
347+ CSFLOAT_B = "00180720C80A280638A4E1F5FB03409A0562040800104C62040801104C62040802104C62040803104C6D4F5E30"
348+ CSFLOAT_C = "A2B2A2BA69A882A28AA192AECAA2D2B700A3A5AAA2B286FA7BA0D684BE72"
349+
350+
351+ class TestCsfloatVectors :
352+ def test_vector_a_defindex (self ):
353+ assert deserialize (CSFLOAT_A ).defindex == 7
354+
355+ def test_vector_a_paintindex (self ):
356+ assert deserialize (CSFLOAT_A ).paintindex == 474
357+
358+ def test_vector_a_paintseed (self ):
359+ assert deserialize (CSFLOAT_A ).paintseed == 306
360+
361+ def test_vector_a_rarity (self ):
362+ assert deserialize (CSFLOAT_A ).rarity == 6
363+
364+ def test_vector_a_paintwear_not_none (self ):
365+ assert deserialize (CSFLOAT_A ).paintwear is not None
366+
367+ def test_vector_a_paintwear (self ):
368+ assert abs (deserialize (CSFLOAT_A ).paintwear - 0.6337 ) < 0.001
369+
370+ def test_vector_b_sticker_count (self ):
371+ assert len (deserialize (CSFLOAT_B ).stickers ) == 4
372+
373+ def test_vector_b_sticker_ids (self ):
374+ for s in deserialize (CSFLOAT_B ).stickers :
375+ assert s .sticker_id == 76
376+
377+ def test_vector_b_paintindex (self ):
378+ assert deserialize (CSFLOAT_B ).paintindex == 1352
379+
380+ def test_vector_b_paintwear (self ):
381+ assert abs (deserialize (CSFLOAT_B ).paintwear - 0.99 ) < 0.01
382+
383+ def test_vector_c_defindex (self ):
384+ assert deserialize (CSFLOAT_C ).defindex == 1355
385+
386+ def test_vector_c_quality (self ):
387+ assert deserialize (CSFLOAT_C ).quality == 12
388+
389+ def test_vector_c_keychain_count (self ):
390+ assert len (deserialize (CSFLOAT_C ).keychains ) == 1
391+
392+ def test_vector_c_keychain_highlight_reel (self ):
393+ assert deserialize (CSFLOAT_C ).keychains [0 ].highlight_reel == 345
394+
395+ def test_vector_c_no_paintwear (self ):
396+ assert deserialize (CSFLOAT_C ).paintwear is None
397+
398+
399+ class TestRoundtripNewFeatures :
400+ def test_highlight_reel_roundtrip (self ):
401+ from cs2_inspect .models import Sticker as StickerModel
402+ data = ItemPreviewData (defindex = 7 , keychains = [StickerModel (slot = 0 , sticker_id = 36 , highlight_reel = 345 )])
403+ result = deserialize (serialize (data ))
404+ assert len (result .keychains ) == 1
405+ assert result .keychains [0 ].highlight_reel == 345
406+
407+ def test_null_paintwear_roundtrip (self ):
408+ data = ItemPreviewData (defindex = 7 , paintwear = None )
409+ result = deserialize (serialize (data ))
410+ assert result .paintwear is None
0 commit comments