---
name: assert_contains_all
kind: function
lang: go
domain: core
version: "1.0.0"
purity: pure
signature: "func AssertContainsAll(haystack, needles []string) (bool, []string)"
description: "Verifica que el slice haystack contiene todos los elementos de needles. Retorna (true, nil) si todos estan presentes, o (false, missing) con los elementos faltantes."
tags: [testing, assert, slice, contains, pure]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: haystack
    desc: "slice de strings donde se busca; es el conjunto completo a inspeccionar"
  - name: needles
    desc: "slice de strings que deben estar todos presentes en haystack"
output: "(ok bool, missing []string) — ok=true y missing=nil si todos los needles estan en haystack; ok=false y missing con los elementos ausentes si falta alguno"
tested: true
tests:
  - "todos presentes retorna true y nil"
  - "un elemento faltante retorna false con el faltante"
  - "multiples faltantes retornan todos en missing"
  - "needles vacio retorna true"
  - "haystack vacio con needles no vacios retorna todos como faltantes"
  - "duplicados en haystack no afectan el resultado"
test_file_path: "functions/core/assert_contains_all_test.go"
file_path: "functions/core/assert_contains_all.go"
---

## Ejemplo

```go
ok, missing := AssertContainsAll(
    []string{"a", "b", "c", "d"},
    []string{"a", "c"},
)
// ok = true, missing = nil

ok2, missing2 := AssertContainsAll(
    []string{"a", "b"},
    []string{"a", "c", "d"},
)
// ok2 = false, missing2 = ["c", "d"]
```

## Notas

Funcion pura. Usa un mapa set para lookup O(1). El orden de los elementos en missing sigue el orden de needles. No elimina duplicados de needles.
