--- /dev/null
+(use-modules (system foreign))
+
+(define-module (buffer test)
+ #:use-module (system foreign)
+ #:export (get-buffer1 get-result))
+
+;; Load the shared library and initialize
+(load-extension "./liboutput.so" "perform_operations")
+
+(define lib (dynamic-link "./liboutput.so"))
+(define result-ptr (dynamic-pointer "result" lib))
+(define buffer1-ptr (dynamic-pointer "buffer1" lib))
+(define buffer2-ptr (dynamic-pointer "buffer2" lib))
+(define multiplier-ptr (dynamic-pointer "multiplier" lib))
+
+(define (get-result)
+ (pointer->bytevector result-ptr 32)) ; Assuming result is a 32-byte vector
+
+(define (get-buffer1)
+ (pointer->bytevector buffer1-ptr 32)) ; Assuming result is a 32-byte vector
+
+(define (get-buffer2)
+ (pointer->bytevector buffer2-ptr 32)) ; Assuming result is a 32-byte vector
+
+(define (get-multiplier)
+ (pointer->bytevector multiplier-ptr 32)) ; Assuming result is a 32-byte vector
+
+(define perform-operations
+ (pointer->procedure void
+ (dynamic-func "perform_operations" lib)
+ '()))
+
+
+;; Function to convert a bytevector into a list of floats
+(define (bytevector-to-floats bv)
+ (let ((floats '()))
+ (do ((i 0 (+ i 4)))
+ ((>= i (bytevector-length bv)) (reverse floats))
+ ;; Read 4 bytes from the bytevector and convert to float
+ (let* ((b0 (bytevector-u8-ref bv i))
+ (b1 (bytevector-u8-ref bv (+ i 1)))
+ (b2 (bytevector-u8-ref bv (+ i 2)))
+ (b3 (bytevector-u8-ref bv (+ i 3)))
+ ;; Combine bytes into a 32-bit float (little-endian)
+ (int32 (logior (ash b3 24)
+ (ash b2 16)
+ (ash b1 8)
+ b0))
+ (float (bitwise-float32->number int32)))
+ (set! floats (cons float floats))))))
+
+;; Usage example
+(display "buffer1 as floats: ")
+(display (bytevector-to-floats (get-buffer1)))
+(newline)
+
+(display "result as floats: ")
+(display (bytevector-to-floats (get-result)))
+(newline)