@@ -399,6 +399,88 @@ FOSSIL_TEST_CASE(c_test_load_mindset_file_missing_model) {
399399 remove (jelly_file );
400400}
401401
402+ FOSSIL_TEST_CASE (c_test_load_mindset_multiple_models ) {
403+ const char * model_a = "model_a.fish" ;
404+ const char * model_b = "model_b.fish" ;
405+
406+ fossil_jellyfish_chain a = {0 }, b = {0 };
407+ fossil_jellyfish_init (& a );
408+ fossil_jellyfish_init (& b );
409+
410+ fossil_jellyfish_learn (& a , "red" , "color" );
411+ fossil_jellyfish_learn (& b , "triangle" , "shape" );
412+
413+ fossil_jellyfish_save (& a , model_a );
414+ fossil_jellyfish_save (& b , model_b );
415+
416+ const char * jelly_file = "complex_mindset.jellyfish" ;
417+ FILE * f = fopen (jelly_file , "w" );
418+ fprintf (f ,
419+ "{\n"
420+ " \"signature\": \"JFS1\",\n"
421+ " \"blocks\": [\n"
422+ " { \"input\": \"%s\", \"output\": \"visual\", \"timestamp\": 1 },\n"
423+ " { \"input\": \"%s\", \"output\": \"geometry\", \"timestamp\": 2 }\n"
424+ " ]\n"
425+ "}\n" , model_a , model_b );
426+ fclose (f );
427+
428+ fossil_jellyfish_mind mind = {0 };
429+ int ok = fossil_jellyfish_load_mindset_file (jelly_file , & mind );
430+
431+ ASSUME_ITS_TRUE (ok == 1 );
432+ ASSUME_ITS_EQUAL_SIZE (mind .model_count , 2 );
433+
434+ ASSUME_ITS_EQUAL_CSTR (mind .models [0 ].memory [0 ].input , "red" );
435+ ASSUME_ITS_EQUAL_CSTR (mind .models [0 ].memory [0 ].output , "color" );
436+
437+ ASSUME_ITS_EQUAL_CSTR (mind .models [1 ].memory [0 ].input , "triangle" );
438+ ASSUME_ITS_EQUAL_CSTR (mind .models [1 ].memory [0 ].output , "shape" );
439+
440+ remove (model_a );
441+ remove (model_b );
442+ remove (jelly_file );
443+ }
444+
445+ FOSSIL_TEST_CASE (c_test_load_model_with_multiple_thoughts ) {
446+ const char * model_file = "multi_thoughts.fish" ;
447+
448+ fossil_jellyfish_chain chain = {0 };
449+ fossil_jellyfish_init (& chain );
450+
451+ fossil_jellyfish_learn (& chain , "day" , "light" );
452+ fossil_jellyfish_learn (& chain , "night" , "dark" );
453+ fossil_jellyfish_learn (& chain , "moon" , "reflect" );
454+
455+ fossil_jellyfish_save (& chain , model_file );
456+
457+ const char * jelly_file = "mind_multi_thoughts.jellyfish" ;
458+ FILE * f = fopen (jelly_file , "w" );
459+ fprintf (f ,
460+ "{\n"
461+ " \"signature\": \"JFS1\",\n"
462+ " \"blocks\": [\n"
463+ " { \"input\": \"%s\", \"output\": \"cycle\", \"timestamp\": 123 }\n"
464+ " ]\n"
465+ "}\n" , model_file );
466+ fclose (f );
467+
468+ fossil_jellyfish_mind mind = {0 };
469+ int ok = fossil_jellyfish_load_mindset_file (jelly_file , & mind );
470+
471+ ASSUME_ITS_TRUE (ok == 1 );
472+ ASSUME_ITS_EQUAL_SIZE (mind .model_count , 1 );
473+
474+ // Multiple thoughts
475+ ASSUME_ITS_EQUAL_SIZE (mind .models [0 ].size , 3 );
476+ ASSUME_ITS_EQUAL_CSTR (mind .models [0 ].memory [0 ].input , "day" );
477+ ASSUME_ITS_EQUAL_CSTR (mind .models [0 ].memory [1 ].input , "night" );
478+ ASSUME_ITS_EQUAL_CSTR (mind .models [0 ].memory [2 ].input , "moon" );
479+
480+ remove (model_file );
481+ remove (jelly_file );
482+ }
483+
402484// * * * * * * * * * * * * * * * * * * * * * * * *
403485// * Fossil Logic Test Pool
404486// * * * * * * * * * * * * * * * * * * * * * * * *
@@ -424,6 +506,8 @@ FOSSIL_TEST_GROUP(c_jellyfish_tests) {
424506 FOSSIL_TEST_ADD (c_jellyfish_fixture , c_test_parse_jellyfish_file_valid );
425507 FOSSIL_TEST_ADD (c_jellyfish_fixture , c_test_load_mindset_file_valid );
426508 FOSSIL_TEST_ADD (c_jellyfish_fixture , c_test_load_mindset_file_missing_model );
509+ FOSSIL_TEST_ADD (c_jellyfish_fixture , c_test_load_mindset_multiple_models );
510+ FOSSIL_TEST_ADD (c_jellyfish_fixture , c_test_load_model_with_multiple_thoughts );
427511
428512
429513 FOSSIL_TEST_REGISTER (c_jellyfish_fixture );
0 commit comments