tawasuyu/llimphi
Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.
1// =============================================================================
2// llimphi-voxel :: tests/nacimiento — la escena del nacimiento (artefacto #1)
3// -----------------------------------------------------------------------------
4// Certifica el primer artefacto de la colaboración: el desierto vacío + la
5// cámara PURA que cae desde el negro entre mucha bruma. Íntegro, sin cuerpo, y
6// viaja por archivo (usa la capacidad de documento).
7// =============================================================================
8
9use llimphi_voxel::{Atmosfera, Documento, Project};
10
11#[test]
12fn el_nacimiento_es_integro_y_camara_pura() {
13 let p = Project::nacimiento();
14 assert!(p.validar_referencias().is_empty(), "el proyecto es íntegro");
15
16 // Una escena, sin cuerpo (cámara pura), con caída y atmósfera.
17 assert_eq!(p.escenas.len(), 1);
18 let esc = &p.escenas[0];
19 assert_eq!(esc.name, "el nacimiento");
20 assert!(esc.actors.is_empty(), "todavía no hay cuerpo: es la cámara la que cae");
21 assert!(esc.caida.is_some(), "tiene la caída de apertura");
22 assert!(esc.atmosfera.is_some(), "tiene atmósfera (bruma + fundido)");
23
24 // El bioma es vacío puro: sin objetos ni seres, pocas montañas, sin agua.
25 assert_eq!(p.biomas.len(), 1);
26 let b = &p.biomas[0];
27 assert!(b.objetos.is_empty() && b.seres.is_empty(), "vacío: sin vegetación ni seres");
28 assert!(b.mountains < 0.1, "no tantas montañas");
29 assert_eq!(b.water_level, 0.0, "sin agua");
30
31 // Mucha bruma, y entra desde el negro.
32 let atm = esc.atmosfera.unwrap();
33 assert!(
34 atm.bruma > Atmosfera::despejada().bruma * 5.0,
35 "mucha más bruma que el aire despejado"
36 );
37 assert!(atm.desde_negro > 0.0, "entra desde el negro");
38}
39
40#[test]
41fn el_nacimiento_viaja_por_archivo() {
42 let doc = Documento::nuevo(Project::nacimiento());
43 let texto = doc.a_ron().unwrap();
44 let recuperado = Documento::de_ron(&texto).unwrap();
45 // Sobrevive el round-trip con caída + atmósfera intactas.
46 assert_eq!(recuperado.a_ron().unwrap(), texto);
47 assert!(recuperado.proyecto.escenas[0].caida.is_some());
48 assert!(recuperado.proyecto.escenas[0].atmosfera.is_some());
49}