File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -50,6 +50,7 @@ tslime --preset zen --palette ocean --fps 24 # slow and quiet
5050tslime --seed 42 --population 80000 # reproducible run, denser network
5151tslime --braille --palette mono # high-resolution monochrome
5252tslime --palette-cycles 3 --palette-cycle-mode mirror # banded contour coloring
53+ tslime --ascii --glyph-selection hybrid # edge-aware directional glyphs on filaments
5354tslime --export-gif demo.gif --export-frames 120 --export-fps 30
5455tslime -p > frame.txt # print a single frame and exit
5556```
Original file line number Diff line number Diff line change @@ -1959,4 +1959,53 @@ init_mode = "Random"
19591959 "palette_cycle must equal default"
19601960 ) ;
19611961 }
1962+
1963+ #[ test]
1964+ fn missing_glyph_loads_identity ( ) {
1965+ use crate :: render:: charset:: GlyphConfig ;
1966+
1967+ // Old TOML without glyph fields must deserialize and produce GlyphConfig::default().
1968+ let toml = r#"name = "old_no_glyph"
1969+ population = 1000
1970+ sensor_angle = 22.5
1971+ sensor_distance = 9.0
1972+ rotation_angle = 45.0
1973+ step_size = 1.0
1974+ decay_factor = 0.9
1975+ deposit_amount = 5.0
1976+ max_brightness = 100.0
1977+ diffusion_kernel = "Mean3x3"
1978+ diffusion_sigma = 1.0
1979+ palette = "Organic"
1980+ charset = "HalfBlock"
1981+ reverse_palette = false
1982+ invert_palette = false
1983+ warmup_frames = 0
1984+ food_persist = false
1985+ auto_reset = false
1986+ grid = false
1987+ init_mode = "Random"
1988+ "# ;
1989+ let cfg: SavedConfig =
1990+ toml:: from_str ( toml) . expect ( "old config without glyph fields must load" ) ;
1991+ assert ! (
1992+ cfg. glyph_selection. is_none( ) ,
1993+ "missing glyph_selection must deserialize as None"
1994+ ) ;
1995+ assert ! ( cfg. glyph_edge_threshold. is_none( ) ) ;
1996+
1997+ // apply_to_runtime_state must produce GlyphConfig::default() (selection = None).
1998+ let mut state = create_test_runtime_state ( ) ;
1999+ cfg. apply_to_runtime_state ( & mut state)
2000+ . expect ( "legacy config must still apply" ) ;
2001+ assert_eq ! (
2002+ state. glyph,
2003+ GlyphConfig :: default ( ) ,
2004+ "missing glyph keys must default to GlyphConfig::default()"
2005+ ) ;
2006+ assert ! (
2007+ state. glyph. selection. is_none( ) ,
2008+ "missing glyph_selection must default to None"
2009+ ) ;
2010+ }
19622011}
Original file line number Diff line number Diff line change 1+ [?2026h[H[1;1H [2;1H [3;1H [4;1H [5;1H [6;1H [38;2;28;49;24m [38;2;24;44;21m [38;2;27;48;23m [38;2;24;44;21m [38;2;24;43;21m [38;2;23;41;21m [38;2;24;43;21m [38;2;23;41;21m [39m [38;2;22;40;21m [39m [38;2;22;40;21m [39m [38;2;22;40;21m [38;2;23;41;21m [38;2;25;45;22m [38;2;23;41;21m [39m [38;2;22;40;21m [38;2;21;39;21m [38;2;22;40;21m [38;2;23;42;21m [38;2;24;43;21m [39m [38;2;23;41;21m [38;2;24;44;21m [38;2;22;40;21m [38;2;23;41;21m [38;2;23;42;21m [38;2;22;40;21m [39m [38;2;21;39;21m [38;2;24;43;21m [38;2;25;45;22m [38;2;24;43;21m [38;2;22;40;21m [38;2;21;39;21m [38;2;22;40;21m [38;2;23;41;21m [38;2;23;42;21m [38;2;22;40;21m [39m [38;2;22;40;21m [38;2;24;43;21m [38;2;23;42;21m [38;2;25;45;22m [38;2;27;48;23m [38;2;25;46;22m [38;2;24;43;21m [39m [7;1H [38;2;22;40;21m [38;2;25;46;22m [38;2;23;41;21m [38;2;28;49;24m [38;2;22;40;21m [38;2;25;45;22m [38;2;25;46;22m [38;2;26;47;22m [38;2;28;50;24m [38;2;24;43;21m [38;2;24;44;21m [38;2;25;46;22m [38;2;28;50;24m [38;2;25;46;22m [38;2;24;44;21m [38;2;27;48;23m [38;2;28;50;24m [38;2;25;45;22m [38;2;25;46;22m [38;2;22;40;21m [38;2;23;42;21m [38;2;25;46;22m [38;2;29;51;25m [38;2;23;41;21m [38;2;22;40;21m [38;2;26;47;22m [38;2;28;50;24m [38;2;24;44;21m [38;2;25;45;22m [38;2;24;44;21m [38;2;24;43;21m [38;2;22;40;21m [38;2;21;39;21m [38;2;31;54;26m [38;2;39;68;31m.[38;2;43;75;33m [38;2;24;44;21m [38;2;22;40;21m [38;2;26;47;22m [38;2;24;44;21m [38;2;22;40;21m [39m [38;2;24;43;21m [38;2;23;42;21m [38;2;23;41;21m [38;2;27;48;23m [38;2;32;55;26m [38;2;38;67;30m [38;2;31;54;26m [38;2;25;46;22m [38;2;24;43;21m [38;2;23;41;21m [38;2;23;42;21m [38;2;24;43;21m [38;2;23;41;21m [38;2;23;42;21m [39m [38;2;23;41;21m [38;2;27;48;23m [38;2;23;41;21m [38;2;24;43;21m [39m [8;1H [38;2;25;45;22m [38;2;22;40;21m [38;2;21;39;21m [38;2;23;42;21m [38;2;26;47;22m [39m [38;2;24;44;21m [39m [38;2;22;40;21m [38;2;43;76;33m.[38;2;33;57;27m [38;2;31;54;26m [38;2;33;56;27m [38;2;37;64;30m [38;2;41;73;32m [38;2;37;64;30m [38;2;37;65;30m [38;2;36;62;29m [38;2;36;63;29m [38;2;37;65;30m [38;2;40;69;31m.[38;2;39;68;31m.[38;2;32;55;26m [38;2;40;70;31m [38;2;38;67;30m [38;2;34;59;28m [38;2;36;63;29m [38;2;37;64;30m [38;2;28;50;24m [38;2;44;77;34m.[38;2;53;91;37m.[38;2;30;53;25m [38;2;28;50;24m [38;2;29;51;25m [38;2;36;62;29m.[38;2;46;82;35m.[38;2;52;89;37m.[38;2;54;91;37m.[38;2;55;93;38m.[38;2;53;90;37m.[38;2;35;60;28m.[38;2;36;63;29m [38;2;36;62;29m [38;2;35;60;28m.[38;2;53;90;37m.[38;2;37;65;30m.[38;2;35;60;28m.[38;2;31;54;26m [38;2;37;64;30m.[38;2;32;55;26m [38;2;23;42;21m [38;2;39;69;31m.[38;2;33;56;27m [38;2;32;55;26m [38;2;31;54;26m [38;2;43;75;33m.[38;2;49;86;36m.[38;2;38;67;30m.[38;2;49;85;36m.[38;2;45;80;35m.[38;2;33;56;27m [38;2;43;76;33m [38;2;42;74;33m [38;2;33;58;27m.[38;2;35;60;28m.[38;2;36;63;29m.[39m [38;2;25;46;22m [38;2;21;39;21m [38;2;23;42;21m [38;2;22;40;21m [38;2;25;46;22m [38;2;24;43;21m [38;2;26;47;22m [38;2;22;40;21m [9;1H[38;2;24;43;21m [38;2;21;39;21m [38;2;23;42;21m [39m [38;2;33;56;27m [38;2;46;81;35m.[38;2;33;58;27m.[38;2;32;55;26m [38;2;36;62;29m.[39m [38;2;36;63;29m [38;2;53;90;37m.[38;2;38;67;30m.[38;2;43;75;33m.[38;2;39;69;31m.[39m [38;2;33;57;27m [38;2;42;74;33m.[38;2;41;71;32m.[38;2;30;53;25m [38;2;25;46;22m [38;2;36;61;29m.[38;2;57;95;38m.[38;2;32;55;26m [39m [38;2;28;49;24m [38;2;58;96;39m.[38;2;61;100;39m.[38;2;60;99;39m.[38;2;59;98;39m.[38;2;59;97;39m.[38;2;38;66;30m.[39m [38;2;24;43;21m [38;2;45;80;35m.[39m [38;2;22;40;21m [38;2;36;61;29m.[38;2;42;75;33m.[38;2;43;76;33m.[38;2;22;40;21m [39m [38;2;22;40;21m [38;2;44;78;34m.[38;2;36;61;29m.[39m [38;2;25;45;22m [38;2;40;70;31m.[38;2;36;62;29m.[38;2;33;57;27m [38;2;36;62;29m [38;2;36;61;29m.[38;2;43;76;33m.[39m [38;2;23;41;21m [38;2;24;44;21m [38;2;25;46;22m [39m [38;2;24;43;21m [10;1H[38;2;22;40;21m [38;2;26;47;22m [38;2;23;42;21m [38;2;24;43;21m [38;2;24;44;21m [39m [38;2;21;39;21m [38;2;28;49;24m [39m [38;2;22;40;21m [38;2;31;54;26m [39m [38;2;28;49;24m [38;2;49;86;36m.[39m [38;2;33;57;27m [38;2;59;97;39m..[38;2;59;98;39m.[38;2;36;63;29m.[39m [38;2;22;40;21m [38;2;39;68;31m [38;2;52;89;37m.[38;2;42;74;33m.[38;2;47;82;35m.[38;2;56;94;38m.[38;2;60;99;39m.[38;2;44;79;34m.[39m [38;2;33;58;27m.[38;2;58;96;39m.[38;2;61;100;39m.[38;2;62;101;40m:[38;2;60;99;39m..[38;2;37;64;30m.[39m [38;2;25;45;22m [38;2;49;85;36m.[38;2;22;40;21m [39m [38;2;22;40;21m [38;2;35;60;28m [39m [38;2;22;40;21m [38;2;54;91;37m.[38;2;53;90;37m.[39m [38;2;30;52;25m [38;2;44;77;34m.[38;2;39;68;31m.[38;2;38;67;30m.[38;2;41;72;32m.[39m [38;2;22;40;21m [38;2;33;56;27m [39m [38;2;24;44;21m [38;2;23;41;21m [38;2;25;45;22m [38;2;22;40;21m [38;2;24;43;21m [39m [11;1H[38;2;26;47;22m [38;2;23;41;21m [39m [38;2;23;42;21m [38;2;24;44;21m [38;2;33;56;27m [38;2;30;53;25m [38;2;27;48;23m [39m [38;2;23;42;21m [39m [38;2;41;71;32m.[38;2;56;94;38m.[38;2;23;42;21m [39m [38;2;42;74;33m.[38;2;59;98;39m.[38;2;61;100;39m.[38;2;59;98;39m.[38;2;55;93;38m.[38;2;44;77;34m.[38;2;49;85;36m.[38;2;39;68;31m [38;2;28;49;24m [38;2;21;39;21m [39m [38;2;36;62;29m.[38;2;59;98;39m.[38;2;44;77;34m.[39m [38;2;40;70;31m.[38;2;59;98;39m.[38;2;60;99;39m..[38;2;59;97;39m.[38;2;58;97;39m.[38;2;29;51;25m [39m [38;2;41;71;32m.[38;2;58;96;39m.[38;2;25;45;22m [39m [38;2;29;51;25m [38;2;35;60;28m [39m [38;2;40;70;31m [38;2;21;39;21m [39m [38;2;22;40;21m [38;2;50;87;37m.[38;2;49;85;36m.[39m [38;2;24;43;21m [38;2;37;64;30m.[38;2;39;69;31m.[38;2;40;70;31m [38;2;37;65;30m.[38;2;36;61;29m.[39m [38;2;36;62;29m [38;2;28;50;24m [38;2;25;46;22m [38;2;23;42;21m [38;2;23;41;21m [38;2;30;53;25m [39m [38;2;23;41;21m [12;1H[38;2;32;55;26m [38;2;26;47;22m [38;2;25;45;22m [38;2;25;46;22m [38;2;22;40;21m [38;2;23;41;21m [38;2;25;45;22m [38;2;23;41;21m [38;2;25;45;22m [39m [38;2;25;46;22m [38;2;32;55;26m [39m [38;2;33;58;27m.[38;2;51;88;37m.[38;2;25;46;22m [39m [38;2;33;58;27m.[38;2;59;98;39m.[38;2;60;99;39m.[38;2;49;86;36m.[38;2;30;53;25m [38;2;45;80;35m.[38;2;41;73;32m.[38;2;49;86;36m..[38;2;42;74;33m.[38;2;24;43;21m [39m [38;2;23;42;21m [38;2;45;80;35m.[38;2;42;74;33m.[39m [38;2;41;71;32m.[38;2;59;97;39m.[38;2;56;94;38m.[38;2;51;88;37m.[38;2;41;73;32m.[38;2;49;86;36m.[38;2;35;60;28m.[39m [38;2;41;71;32m.[38;2;54;92;37m.[38;2;22;40;21m [39m [38;2;27;48;23m [38;2;55;93;38m.[38;2;44;79;34m.[38;2;47;83;35m.[38;2;51;88;37m.[38;2;22;40;21m [39m [38;2;41;72;32m.[38;2;38;67;30m.[39m [38;2;31;54;26m [38;2;53;91;37m.[38;2;55;93;38m.[38;2;45;80;35m.[38;2;35;60;28m.[38;2;31;54;26m [38;2;43;76;33m [38;2;21;39;21m [39m [38;2;24;44;21m [38;2;22;40;21m [38;2;23;42;21m [39m [38;2;22;40;21m [38;2;28;50;24m [38;2;25;46;22m [38;2;25;45;22m [38;2;24;43;21m [13;1H[39m [38;2;22;40;21m [38;2;23;42;21m [38;2;23;41;21m [39m [38;2;28;49;24m [38;2;22;40;21m [38;2;28;50;24m [38;2;35;60;28m.[38;2;24;43;21m [38;2;25;46;22m [38;2;53;90;37m.[38;2;28;50;24m [38;2;31;54;26m [38;2;24;43;21m [39m [38;2;44;79;34m.[38;2;59;98;39m.[38;2;60;99;39m.[38;2;53;90;37m.[38;2;30;52;25m [38;2;33;56;27m [38;2;28;49;24m [38;2;24;44;21m [38;2;22;40;21m [38;2;23;42;21m [38;2;26;47;22m [38;2;33;58;27m .[38;2;48;84;36m.[38;2;25;45;22m [39m [38;2;22;40;21m [38;2;24;44;21m [38;2;22;40;21m [39m [38;2;22;40;21m [38;2;36;61;29m.[38;2;39;68;31m.[39m [38;2;27;48;23m [38;2;50;87;37m.[39m [38;2;23;41;21m [38;2;53;90;37m.[38;2;60;99;39m.[38;2;57;95;38m.[38;2;31;54;26m [39m [38;2;23;42;21m [38;2;47;82;35m.[38;2;28;49;24m [38;2;30;53;25m [38;2;24;44;21m [39m [38;2;23;41;21m [38;2;24;43;21m [38;2;29;52;25m [38;2;33;56;27m [38;2;29;51;25m [38;2;44;77;34m.[38;2;24;44;21m [38;2;22;40;21m [39m [38;2;24;44;21m [38;2;24;43;21m [38;2;21;39;21m [39m [14;1H[38;2;24;44;21m [38;2;23;41;21m [38;2;24;44;21m [38;2;24;43;21m [38;2;22;40;21m [38;2;21;39;21m [38;2;23;42;21m [38;2;24;43;21m [38;2;24;44;21m [39m [38;2;24;44;21m [39m [38;2;39;68;31m [38;2;35;60;28m.[38;2;41;71;32m [38;2;33;56;27m [38;2;32;55;26m [38;2;41;71;32m.[38;2;36;62;29m.[38;2;37;64;30m..[38;2;35;60;28m.[38;2;32;55;26m [38;2;40;70;31m [38;2;43;76;33m [38;2;39;68;31m [38;2;42;75;33m [38;2;39;68;31m [38;2;31;54;26m [38;2;36;62;29m.[38;2;38;67;30m.[38;2;28;50;24m [38;2;29;51;25m [38;2;33;56;27m [38;2;32;55;26m [38;2;29;51;25m [38;2;33;56;27m [38;2;31;54;26m [38;2;35;60;28m.[38;2;38;66;30m.[38;2;34;59;28m.[38;2;30;53;25m [38;2;30;52;25m [38;2;34;59;28m.[38;2;41;71;32m.[38;2;32;55;26m [38;2;33;58;27m.[38;2;37;65;30m.[38;2;41;71;32m.[38;2;42;74;33m.[38;2;35;60;28m.[38;2;33;57;27m [38;2;33;56;27m [38;2;33;58;27m.[38;2;40;69;31m.[38;2;44;78;34m [38;2;41;71;32m [38;2;33;57;27m [38;2;34;59;28m.[38;2;35;60;28m.[38;2;41;71;32m [38;2;38;67;30m [38;2;41;71;32m [38;2;40;70;31m [38;2;27;48;23m [38;2;22;40;21m [38;2;28;49;24m [39m [38;2;21;39;21m [38;2;24;44;21m [38;2;24;43;21m [38;2;23;42;21m [15;1H[39m [38;2;23;41;21m [38;2;26;47;22m [38;2;28;50;24m [38;2;23;42;21m [38;2;25;45;22m [38;2;23;42;21m [38;2;24;43;21m [38;2;22;40;21m [38;2;23;42;21m [38;2;23;41;21m [38;2;26;47;22m [38;2;28;50;24m [38;2;33;57;27m [38;2;33;56;27m [38;2;26;47;22m [38;2;31;54;26m [38;2;30;53;25m [38;2;26;47;22m [38;2;25;46;22m [38;2;24;44;21m [39m [38;2;22;40;21m [39m [38;2;25;46;22m [38;2;27;48;23m [38;2;25;45;22m [38;2;25;46;22m [38;2;30;53;25m [38;2;26;47;22m [38;2;22;40;21m [38;2;33;56;27m [38;2;25;46;22m [38;2;23;41;21m [39m [38;2;21;39;21m [38;2;23;41;21m [38;2;25;46;22m [38;2;24;43;21m [39m [38;2;21;39;21m [38;2;24;44;21m [38;2;25;46;22m [38;2;27;48;23m [38;2;29;52;25m [38;2;26;47;22m [38;2;28;49;24m [38;2;38;67;30m [38;2;39;68;31m [38;2;31;54;26m [38;2;30;53;25m [38;2;30;52;25m [38;2;25;46;22m [38;2;21;39;21m [38;2;22;40;21m [39m [38;2;23;41;21m [38;2;28;49;24m [38;2;24;44;21m [38;2;28;49;24m [38;2;26;47;22m [38;2;24;44;21m [38;2;21;39;21m [39m [16;1H [38;2;23;41;21m [38;2;22;40;21m [39m [38;2;21;39;21m [38;2;22;40;21m [38;2;24;43;21m [38;2;24;44;21m [38;2;22;40;21m [38;2;25;46;22m [38;2;25;45;22m [38;2;26;47;22m [38;2;23;41;21m [38;2;24;43;21m [38;2;23;42;21m [39m [38;2;23;42;21m [38;2;24;43;21m [38;2;28;49;24m [38;2;25;46;22m [38;2;22;40;21m [38;2;24;43;21m [38;2;22;40;21m [38;2;36;61;29m [38;2;28;50;24m [38;2;23;42;21m [38;2;22;40;21m [38;2;23;41;21m [38;2;22;40;21m [39m [38;2;24;44;21m [38;2;22;40;21m [39m [38;2;21;39;21m [38;2;24;43;21m [38;2;25;45;22m [38;2;23;41;21m [38;2;21;39;21m [38;2;22;40;21m [38;2;25;45;22m [38;2;28;50;24m [38;2;23;42;21m [38;2;21;39;21m [39m [38;2;21;39;21m [38;2;24;43;21m [39m [17;1H [38;2;23;42;21m [39m [38;2;23;41;21m [39m [18;1H [19;1H [20;1H [21;1H [22;1H [23;1H [24;1H [?2026l
You can’t perform that action at this time.
0 commit comments