this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

tessera-linalg: add integration test

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

+48
+48
tessera-linalg/test/test_linalg.ml
··· 133 133 Alcotest.(check int) "k=1 pred" 0 res.predictions.(0); 134 134 Alcotest.(check (float 1e-6)) "k=1 confidence" 1.0 res.confidences.(0) 135 135 136 + (* ---- Integration test ---- *) 137 + 138 + let test_integration_pca_knn () = 139 + (* 100 pixels with 128-dim embeddings, 2 clusters *) 140 + let n = 100 in 141 + let dim = 128 in 142 + let data = create_mat ~rows:n ~cols:dim in 143 + let labels = Array.init n (fun i -> if i < 50 then 0 else 1) in 144 + (* Cluster 0: features near 0.0, Cluster 1: features near 10.0 *) 145 + for i = 0 to n - 1 do 146 + let base = if i < 50 then 0.0 else 10.0 in 147 + for j = 0 to dim - 1 do 148 + let noise = Float.of_int ((i * 7 + j * 13) mod 100) *. 0.001 in 149 + mat_set data i j (base +. noise) 150 + done 151 + done; 152 + let pca_model = pca_fit data ~n_components:3 in 153 + let reduced = pca_transform pca_model data in 154 + Alcotest.(check int) "reduced cols" 3 reduced.cols; 155 + (* Use first 80 as training, last 20 as test *) 156 + let train_rows = 80 in 157 + let test_rows = 20 in 158 + let train_mat = create_mat ~rows:train_rows ~cols:3 in 159 + let test_mat = create_mat ~rows:test_rows ~cols:3 in 160 + let train_labels = Array.init train_rows (fun i -> labels.(i)) in 161 + for i = 0 to train_rows - 1 do 162 + for j = 0 to 2 do 163 + mat_set train_mat i j (mat_get reduced i j) 164 + done 165 + done; 166 + for i = 0 to test_rows - 1 do 167 + for j = 0 to 2 do 168 + mat_set test_mat i j (mat_get reduced (train_rows + i) j) 169 + done 170 + done; 171 + let knn_model = knn_fit ~embeddings:train_mat ~labels:train_labels in 172 + let res = knn_predict knn_model ~k:5 test_mat in 173 + let expected = Array.init test_rows (fun i -> labels.(train_rows + i)) in 174 + let correct = ref 0 in 175 + for i = 0 to test_rows - 1 do 176 + if res.predictions.(i) = expected.(i) then incr correct 177 + done; 178 + let accuracy = Float.of_int !correct /. Float.of_int test_rows in 179 + Alcotest.(check bool) "accuracy >= 0.9" true (accuracy >= 0.9) 180 + 136 181 (* ---- Test runner ---- *) 137 182 138 183 let () = ··· 151 196 Alcotest.test_case "two clusters" `Quick test_knn_two_clusters; 152 197 Alcotest.test_case "distance weighting" `Quick test_knn_distance_weighting; 153 198 Alcotest.test_case "k=1 confidence" `Quick test_knn_k1_confidence; 199 + ]; 200 + "integration", [ 201 + Alcotest.test_case "pca then knn" `Quick test_integration_pca_knn; 154 202 ]; 155 203 ]