about summary refs log tree commit diff stats
path: root/js/baba-yaga/scratch/baba/test_comprehensive_features.baba
diff options
context:
space:
mode:
Diffstat (limited to 'js/baba-yaga/scratch/baba/test_comprehensive_features.baba')
-rw-r--r--js/baba-yaga/scratch/baba/test_comprehensive_features.baba87
1 files changed, 87 insertions, 0 deletions
diff --git a/js/baba-yaga/scratch/baba/test_comprehensive_features.baba b/js/baba-yaga/scratch/baba/test_comprehensive_features.baba
new file mode 100644
index 0000000..7a205b1
--- /dev/null
+++ b/js/baba-yaga/scratch/baba/test_comprehensive_features.baba
@@ -0,0 +1,87 @@
+// Comprehensive test combining all new functional programming features
+
+io.out "=== Comprehensive Feature Test ===";
+
+// Example: Processing student data with advanced functional programming
+
+// Sample student data
+students : [
+  {name: "Alice", scores: [85, 92, 78, 90]},
+  {name: "Bob", scores: [75, 88, 82, 79]},
+  {name: "Charlie", scores: [95, 96, 94, 97]},
+  {name: "Diana", scores: [65, 70, 68, 72]}
+];
+
+// Calculate average score
+calculateAverage : scores ->
+  with (
+    total : reduce (acc x -> acc + x) 0 scores;
+    count : length scores;
+  ) ->
+    total / count;
+
+// Process each student using flatMap and array operations
+processStudent : student ->
+  with (
+    scores : student.scores;
+    average : calculateAverage scores;
+    cumulative : cumsum scores;
+    
+    // Use pattern guards to assign grades
+    grade : when average is
+      a if (a >= 90) then "A"
+      a if (a >= 80 and a < 90) then "B"  
+      a if (a >= 70 and a < 80) then "C"
+      a if (a >= 60 and a < 70) then "D"
+      a if (a < 60) then "F"
+      _ then "Invalid";
+    
+    // Use broadcasting to normalize scores
+    maxScore : reduce (acc x -> math.max acc x) 0 scores;
+    normalized : broadcast (score max -> score / max * 100) maxScore scores;
+  ) ->
+    {
+      name: student.name,
+      average: average,
+      grade: grade,
+      cumulative: cumulative,
+      normalized: normalized
+    };
+
+// Process all students
+processedStudents : map processStudent students;
+
+io.out "Processed Students:";
+io.out processedStudents;
+
+// Advanced analysis using array programming
+io.out "=== Advanced Analysis ===";
+
+// Extract all scores using flatMap
+allScores : flatMap (s -> s.scores) students;
+io.out "All scores:";
+io.out allScores;
+
+// Find top performers using where and at
+highScoreIndices : where (score -> score >= 90) allScores;
+highScores : at highScoreIndices allScores;
+io.out "High scores (>=90):";
+io.out highScores;
+
+// Use zipWith to compare consecutive students
+studentNames : map (s -> s.name) processedStudents;
+studentAverages : map (s -> s.average) processedStudents;
+
+// Reshape data into matrix for analysis
+scoresMatrix : reshape [4, 4] allScores;
+io.out "Scores as 4x4 matrix:";
+io.print scoresMatrix;
+
+// Combine multiple operations in a pipeline
+topStudents : filter (s -> s.average >= 85) processedStudents;
+topStudentAnalysis : sort.by topStudents (s -> s.average);
+
+io.out "Top students (avg >= 85), sorted by average:";
+io.out topStudentAnalysis;
+
+io.out "=== All comprehensive tests completed ===";