public void Aggregation_CheckIfChangesDynamically()
{
DataTable table = new DataTable();
table.Columns.Add("test", typeof(int));
table.Columns.Add("result_count", typeof(int), "count(test)");
table.Columns.Add("result_sum", typeof(int), "sum(test)");
table.Columns.Add("result_avg", typeof(int), "avg(test)");
table.Columns.Add("result_max", typeof(int), "max(test)");
table.Columns.Add("result_min", typeof(int), "min(test)");
table.Columns.Add("result_var", typeof(double), "var(test)");
table.Columns.Add("result_stdev", typeof(double), "stdev(test)");
// Adding the rows after all the expression columns are added
table.Rows.Add(new object[] { 0 });
Assert.Equal(1, table.Rows[0]["result_count"]);
Assert.Equal(0, table.Rows[0]["result_sum"]);
Assert.Equal(0, table.Rows[0]["result_avg"]);
Assert.Equal(0, table.Rows[0]["result_max"]);
Assert.Equal(0, table.Rows[0]["result_min"]);
Assert.Equal(DBNull.Value, table.Rows[0]["result_var"]);
Assert.Equal(DBNull.Value, table.Rows[0]["result_stdev"]);
table.Rows.Add(new object[] { 1 });
table.Rows.Add(new object[] { -2 });
// Check if the aggregate columns are updated correctly
Assert.Equal(3, table.Rows[0]["result_count"]);
Assert.Equal(-1, table.Rows[0]["result_sum"]);
Assert.Equal(0, table.Rows[0]["result_avg"]);
Assert.Equal(1, table.Rows[0]["result_max"]);
Assert.Equal(-2, table.Rows[0]["result_min"]);
Assert.Equal((7.0 / 3), table.Rows[0]["result_var"]);
Assert.Equal(Math.Sqrt(7.0 / 3), table.Rows[0]["result_stdev"]);
}