feat: implement Merkle-Tree Object Store, Peripheral Vision, and Immune System hooks
This commit is contained in:
82
tests/neuro-test.lisp
Normal file
82
tests/neuro-test.lisp
Normal file
@@ -0,0 +1,82 @@
|
||||
(require 'asdf)
|
||||
(ql:quickload '(:bordeaux-threads :cl-json :dexador :cl-ppcre :uiop))
|
||||
|
||||
;; Mock kernel log to prevent spamming stdout during tests
|
||||
(defpackage :org-agent (:use :cl))
|
||||
(in-package :org-agent)
|
||||
|
||||
;; We need to load the core and neuro files to test them.
|
||||
(load "projects/org-agent/src/core.lisp")
|
||||
(load "projects/org-agent/src/neuro.lisp")
|
||||
|
||||
;; Simple testing framework
|
||||
(defvar *tests-run* 0)
|
||||
(defvar *tests-passed* 0)
|
||||
|
||||
(defmacro assert-equal (expected actual &optional message)
|
||||
`(progn
|
||||
(incf *tests-run*)
|
||||
(let ((e ,expected) (a ,actual))
|
||||
(if (equal e a)
|
||||
(progn
|
||||
(incf *tests-passed*)
|
||||
(format t "PASS: ~a~%" (or ,message "Assertion passed")))
|
||||
(format t "FAIL: ~a~% Expected: ~s~% Got: ~s~%" (or ,message "Assertion failed") e a)))))
|
||||
|
||||
(defmacro assert-true (condition &optional message)
|
||||
`(progn
|
||||
(incf *tests-run*)
|
||||
(let ((c ,condition))
|
||||
(if c
|
||||
(progn
|
||||
(incf *tests-passed*)
|
||||
(format t "PASS: ~a~%" (or ,message "Assertion passed")))
|
||||
(format t "FAIL: ~a~% Condition evaluated to NIL~%" (or ,message "Assertion failed"))))))
|
||||
|
||||
(format t "--- Running Neuro Microkernel Tests ---~%")
|
||||
|
||||
;; Test 1: Graceful failure on empty registry
|
||||
(clrhash org-agent::*neuro-backends*)
|
||||
(setf org-agent::*provider-cascade* '(:nonexistent))
|
||||
|
||||
(let ((result (org-agent:ask-neuro "Test prompt")))
|
||||
(assert-true (and (stringp result) (search ":LOG" result) (search "Neural Cascade Failure" result))
|
||||
"ask-neuro should return a Neural Cascade Failure log when no backends are available."))
|
||||
|
||||
;; Test 2: Successful delegation to a mock provider
|
||||
(defvar *mock-called* nil)
|
||||
(defun mock-provider-fn (prompt system-prompt &key model)
|
||||
(declare (ignore system-prompt model))
|
||||
(setf *mock-called* t)
|
||||
(format nil "MOCK-RESPONSE: ~a" prompt))
|
||||
|
||||
(org-agent:register-neuro-backend :mock #'mock-provider-fn)
|
||||
|
||||
;; Temporarily mock the token accountant's model selector so it doesn't fail
|
||||
(defun mock-model-selector (provider context)
|
||||
(declare (ignore context))
|
||||
"mock-model-v1")
|
||||
(setf org-agent::*model-selector-fn* #'mock-model-selector)
|
||||
|
||||
;; Test with our mock provider
|
||||
(setf org-agent::*provider-cascade* '(:mock))
|
||||
(let ((result (org-agent:ask-neuro "Hello Mock")))
|
||||
(assert-equal "MOCK-RESPONSE: Hello Mock" result "ask-neuro should return the exact string from the registered provider")
|
||||
(assert-true *mock-called* "The mock provider function must be called by ask-neuro"))
|
||||
|
||||
;; Test 3: The core should NOT contain execute-openrouter-request, execute-groq-request, or execute-gemini-request
|
||||
;; This is the architectural test. These functions should be UNBOUND or not exist in the org-agent package.
|
||||
(assert-true (not (fboundp 'org-agent::execute-openrouter-request))
|
||||
"execute-openrouter-request should be removed from the core neuro.lisp")
|
||||
(assert-true (not (fboundp 'org-agent::execute-groq-request))
|
||||
"execute-groq-request should be removed from the core neuro.lisp")
|
||||
(assert-true (not (fboundp 'org-agent::execute-gemini-request))
|
||||
"execute-gemini-request should be removed from the core neuro.lisp")
|
||||
|
||||
(format t "--- Test Summary ---~%")
|
||||
(format t "Tests Run: ~a~%" *tests-run*)
|
||||
(format t "Tests Passed: ~a~%" *tests-passed*)
|
||||
|
||||
(if (= *tests-run* *tests-passed*)
|
||||
(uiop:quit 0)
|
||||
(uiop:quit 1))
|
||||
Reference in New Issue
Block a user