File size: 9,534 Bytes
c65b912
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
import asyncio
import pytest
import numpy as np
from cortex.memory.quantum_memory import QuantumMemory, QuantumMemoryCell
from cortex.memory.hierarchical import HierarchicalMemory
from cortex.memory.associative import AssociativeMemory

class TestQuantumMemory:
    """Tests pour la mémoire quantique"""
    
    @pytest.fixture
    async def quantum_memory(self):
        """Fixture pour initialiser la mémoire quantique"""
        memory = QuantumMemory(capacity=100)
        await memory.initialize()
        return memory
    
    @pytest.mark.asyncio
    async def test_memory_initialization(self, quantum_memory):
        """Test l'initialisation de la mémoire quantique"""
        assert quantum_memory is not None
        assert quantum_memory.capacity == 100
        assert len(quantum_memory.memory_cells) > 0
        assert quantum_memory.access_latency > 0
    
    @pytest.mark.asyncio
    async def test_data_integrity(self, quantum_memory):
        """Test l'intégrité des données stockées"""
        test_data = {
            "string": "Hello Quantum World",
            "number": 42,
            "list": [1, 2, 3, 4, 5],
            "dict": {"key": "value", "nested": {"a": 1, "b": 2}}
        }
        
        for key, value in test_data.items():
            address = await quantum_memory.store_quantum_data(value, f"test_{key}")
            retrieved = await quantum_memory.retrieve_quantum_data(address)
            assert retrieved == value, f"Data integrity failed for {key}"
    
    @pytest.mark.asyncio
    async def test_quantum_coherence(self, quantum_memory):
        """Test la préservation de la cohérence quantique"""
        address = await quantum_memory.store_quantum_data("coherence_test")
        cell = quantum_memory.memory_cells[address]
        
        # Vérifie la cohérence initiale
        assert cell.coherence > 0.9
        
        # Simule le temps qui passe
        await asyncio.sleep(0.1)
        await quantum_memory._maintain_coherence(address)
        
        # Vérifie que la cohérence a diminué mais pas trop
        assert 0.8 < cell.coherence < 1.0
    
    @pytest.mark.asyncio
    async def test_entanglement_persistence(self, quantum_memory):
        """Test la persistance de l'intrication"""
        addr1 = await quantum_memory.store_quantum_data("entangled_data_1")
        addr2 = await quantum_memory.store_quantum_data("entangled_data_2")
        
        # Crée l'intrication
        await quantum_memory.entangle_memory_cells(addr1, addr2)
        
        # Vérifie que l'intrication est persistée
        cell1 = quantum_memory.memory_cells[addr1]
        cell2 = quantum_memory.memory_cells[addr2]
        
        assert addr2 in cell1.entangled_with
        assert addr1 in cell2.entangled_with
    
    @pytest.mark.asyncio
    async def test_superposition_retrieval(self, quantum_memory):
        """Test la récupération depuis la superposition"""
        data_states = ["state_alpha", "state_beta", "state_gamma"]
        address = await quantum_memory.quantum_superposition_store(data_states)
        
        # Récupération sans mesure (devrait retourner toutes les données)
        retrieved = await quantum_memory.retrieve_quantum_data(address, measure=False)
        assert retrieved == data_states
        
        # Récupération avec mesure (devrait retourner un état spécifique)
        measured = await quantum_memory.retrieve_quantum_data(address, measure=True)
        assert measured in data_states
    
    @pytest.mark.asyncio
    async def test_pattern_recognition(self, quantum_memory):
        """Test la reconnaissance de pattern quantique"""
        # Stocke différents patterns
        patterns = [
            "quantum computing is amazing",
            "artificial intelligence revolution", 
            "quantum artificial intelligence",
            "machine learning with quantum"
        ]
        
        addresses = []
        for pattern in patterns:
            addr = await quantum_memory.store_quantum_data(pattern)
            addresses.append(addr)
        
        # Test la reconnaissance
        results = await quantum_memory.quantum_pattern_recognition("quantum")
        assert len(results) >= 2  # Au moins 2 patterns contiennent "quantum"
        
        results = await quantum_memory.quantum_pattern_recognition("artificial intelligence")
        assert len(results) >= 2
    
    @pytest.mark.asyncio
    async def test_memory_statistics(self, quantum_memory):
        """Test les statistiques de mémoire"""
        # Remplit partiellement la mémoire
        for i in range(25):
            await quantum_memory.store_quantum_data(f"test_data_{i}")
        
        stats = quantum_memory.get_memory_statistics()
        
        assert stats["total_capacity"] == 100
        assert stats["used_cells"] == 25
        assert stats["available_cells"] == 75
        assert 0 <= stats["memory_usage"] <= 1

class TestHierarchicalMemory:
    """Tests pour la mémoire hiérarchique"""
    
    @pytest.fixture
    async def hierarchical_memory(self):
        """Fixture pour initialiser la mémoire hiérarchique"""
        memory = HierarchicalMemory()
        await memory.initialize()
        return memory
    
    @pytest.mark.asyncio
    async def test_memory_hierarchy(self, hierarchical_memory):
        """Test la hiérarchie de mémoire"""
        # Test des différents niveaux
        data_immediate = "immediate data"
        data_short = "short term data" 
        data_long = "long term data"
        
        # Stockage à différents niveaux
        await hierarchical_memory.store(data_immediate, "immediate", priority=10)
        await hierarchical_memory.store(data_short, "short_term", priority=5)
        await hierarchical_memory.store(data_long, "long_term", priority=1)
        
        # Vérification de l'accès
        immediate = await hierarchical_memory.retrieve("immediate")
        assert immediate == data_immediate
        
        # Test de la promotion dans la hiérarchie
        await hierarchical_memory.promote("long_term")
        
        stats = hierarchical_memory.get_stats()
        assert stats["total_items"] == 3

class TestAssociativeMemory:
    """Tests pour la mémoire associative"""
    
    @pytest.fixture
    async def associative_memory(self):
        """Fixture pour initialiser la mémoire associative"""
        memory = AssociativeMemory()
        await memory.initialize()
        return memory
    
    @pytest.mark.asyncio
    async def test_associative_links(self, associative_memory):
        """Test les liens associatifs"""
        # Crée des associations
        await associative_memory.create_association("quantum", "computing", strength=0.9)
        await associative_memory.create_association("quantum", "physics", strength=0.8)
        await associative_memory.create_association("ai", "machine learning", strength=0.95)
        
        # Test la récupération associative
        quantum_associations = await associative_memory.get_associations("quantum")
        assert len(quantum_associations) == 2
        assert any("computing" in assoc for assoc in quantum_associations)
        
        ai_associations = await associative_memory.get_associations("ai")
        assert len(ai_associations) == 1
    
    @pytest.mark.asyncio
    async def test_pattern_completion(self, associative_memory):
        """Test la complétion de pattern"""
        # Entraîne la mémoire avec des patterns
        patterns = [
            ("cat", "animal", "feline", "pet"),
            ("dog", "animal", "canine", "pet"), 
            ("quantum", "physics", "computing", "mechanics")
        ]
        
        for pattern in patterns:
            for i, concept in enumerate(pattern):
                if i < len(pattern) - 1:
                    await associative_memory.create_association(
                        concept, pattern[i + 1], strength=0.8
                    )
        
        # Test la complétion
        completion = await associative_memory.pattern_completion("cat", "animal")
        assert "feline" in completion or "pet" in completion

@pytest.mark.asyncio
async def test_memory_system_integration():
    """Test d'intégration du système de mémoire complet"""
    # Initialisation de toutes les mémoires
    quantum_mem = QuantumMemory(50)
    hierarchical_mem = HierarchicalMemory()
    associative_mem = AssociativeMemory()
    
    await quantum_mem.initialize()
    await hierarchical_mem.initialize()
    await associative_mem.initialize()
    
    # Workflow de test intégré
    # 1. Stockage quantique
    quantum_data = "Quantum memory test data"
    q_address = await quantum_mem.store_quantum_data(quantum_data)
    
    # 2. Stockage hiérarchique
    await hierarchical_mem.store(quantum_data, "quantum_backup", priority=7)
    
    # 3. Création d'associations
    await associative_mem.create_association("quantum", "memory", strength=0.9)
    await associative_mem.create_association("memory", "storage", strength=0.8)
    
    # Vérifications
    assert q_address is not None
    hierarchical_data = await hierarchical_mem.retrieve("quantum_backup")
    assert hierarchical_data == quantum_data
    
    associations = await associative_mem.get_associations("quantum")
    assert len(associations) > 0
    
    print("✅ Tests d'intégration mémoire réussis!")

if __name__ == "__main__":
    # Exécution des tests
    asyncio.run(test_memory_system_integration())