Documentación · Conceptos

Spells

Los tipos de defecto que lanza kalku, qué simula cada uno y qué forma toman en cada lenguaje.

Un spell (o kalkutun, el daño que obra un kalku) es un tipo de defecto. Cada wekufe es tu programa con exactamente un spell lanzado en un lugar.

El binario los documenta:

kalku info spells

Estos seis son los que lanza una corrida si no dices otra cosa, en orden de valor diagnóstico:

SpellQué haceDefecto que simulaLa pista cuando sobrevive
armBorra una cláusula de un case, un cond o una función de varias cabezasUn caso que deja de manejarseNo test fails without this clause. Assert what only it returns, in a case that takes it.
compareCorre una comparación a través de su frontera: >= a >, < a <=Un error por uno en una condiciónNo test tells this comparison apart from a shifted one. Add a case at the boundary where the two sides are equal.
connectCambia and por or, y al revésUna condición que nunca o siempre se cumpleNo test has exactly one side of this condition true. Add a case for each side on its own.
negateInvierte una condiciónUna guarda invertidaNo test tells the two branches of this condition apart. Assert what only one of them does.
literalPerturba un literal: un número, un string, un booleanoUna semilla o un caso base equivocadosNo test depends on this exact value.
callElimina una llamada, dejando su argumento o nadaUn paso que en silencio no hace nadaNo test observes what this call does. Assert what it returns or what it changes.

Las pistas salen de una plantilla fija por spell, rellenada con el site. No las genera un modelo: son deterministas y honestas sobre lo que kalku sabe de verdad.

Con spells en .kalku.toml eliges cuáles se lanzan.

Otros spells que el binario nombra

kalku info spells lista tres más, fuera del conjunto por defecto:

SpellQué hace
awaitLe quita el plazo a una espera, o la espera a una llamada
superviseCambia lo que pasa cuando un proceso muere: el reinicio, el enlace, el atrapar la salida
foreignLo que haya hecho el operador de un framework existente; el spell de un driver

await y supervise son los spells de concurrencia. El documento de diseño explica sus reglas: un cuelgue no es un kill, un kill inestable no es evidencia, y se piden por nombre.

En cada lenguaje

Los sites vienen siempre del parser propio del lenguaje, nunca de recorrer el texto. Y nunca se proponen dentro de tests, comentarios o documentación.

Elixir

SpellFormas
armBorra una cláusula de case, cond, with … else, receive o de una función de varias cláusulas
compare>=→>, <→<=, ==→!=, en expresiones y en guardas when
connectand↔or, &&↔||
negateif↔unless, c → not c en condiciones
literal0→1, n→n+1, true↔false, :ok↔:error, "" por un string no vacío
callQuita una etapa de un pipe (|> f()), f(x) → x

Rust

SpellFormas
armBorra un brazo de un match, solo cuando queda un comodín: sin él, quien rechaza el wekufe es el compilador y no un test
compare>=↔>, <↔<=, ==↔!=, en expresiones y en guardas de match
connect&&↔||, salvo en una cadena de let
negateif c → if !(c), y quitar un !
literaln→n+1 para decimales simples dentro del rango de su tipo, true↔false, un string no vacío → ""

call no se ofrece en Rust: quitar una llamada casi nunca conserva los tipos, así que propondría errores de compilación y poco más.

Python

SpellFormas
armBorra un case de un match, completo
compare>=↔>, <=↔<, ==↔!=, is↔is not, in↔not in
connectand↔or, un operador a la vez en una cadena
negatenot x pasa a x, y una condición c pasa a not (c) (if, elif, while, una expresión condicional)
literaln→n+1 para decimales simples, True↔False, un string no vacío → ""
callUna llamada que es una sentencia completa, con await o sin él, pasa a pass

Java

SpellFormas
armBorra un case de un switch, sentencia o expresión, solo mientras quede un default
compare>=↔>, <=↔<, ==↔!=
connect&&↔||
negateSe quita un !, y la condición c de un if pasa a !(c)
literaln→n+1 para literales decimales int y long dentro del rango de su tipo, true↔false, un string o bloque de texto no vacío → ""
callUna llamada que es una sentencia completa pasa a la sentencia vacía ;