# Release notes for STACK 4.4.x

STACK version 4.4.0 was released in July 2022. This was a major rewrite of the PRT and CASText systems, with a focus on performance and limitations of the previous systems. This release has changed/tightened up some question authoring causing some problems with existing questions. For this reason we have written these dedicated release notes.

### Issue: `[[ foreach ]]`

blocks over zero length lists.

`[[ foreach ]]`

blocks over a list that happens to have length zero causes "text rendering error" if reference to the non-existent element is made, even though the loop is not run: e.g.

```
[[ foreach item="[]" ]] {@item@} [[/ foreach ]].
```

(Note without the `{@item@}`

it runs fine.)

Solution Protect loop with an `[[ if ]]`

block on the length of the list.

### Issue: Bad interaction between `ordergreat`

and `exdowncase`

This is a more serious problem, see https://github.com/maths/moodle-qtype_stack/issues/887 for updates.

One solution is to test for `exdowncase(sans)=exdowncase(tans)`

[not just `tans`

].

### Issue: Automatically calculated numerical teachers answer might now include brackets

Automatically calculated numerical teachers answer might now include brackets: ( -(3/8)), which is a problem if the input forbade brackets!, causing Question Test failure.

Solution: Don't forbid input of brackets!

### Issue: when selecting function names from a list.

When using something like

```
func:rand([sin,cos,exp,ln]);
is(equal(func,ln));
```

now returns unknown. Used to return true/false.

Solution: First generate a random integer. Set `func`

based on that, and test the value of the integer. (Not as neat!)

### Issue: MathJax

Mathjax no longer likes `\begin{pmatrix}{@xx@}\\{@yy@}\end{pmatrix}`

in castext.

Solution: make sure there is a space between `\\`

and `{@yy@}`

. (Better!) Define the vector to be a maxima object and display that instead.

### Issue: CAS text comments delineated with /* ... */ are rendered

Solution: Use `[[ comment ]] ... [ [/ comment ]]`

### Issue: Fatal error causing an exception and then displaying nothing.

Solution: "tans" PRT node entry ended with semicolon: Delete the semi-colon! We now have error trapping for this problem.

### Issue: `taylor`

now returns a maxima taylor series object

`taylor`

now returns a maxima taylor series object (as it should!) rather than a normal algebraic expression (as it did!) Solution use `expand(taylor( ... ) )`

to get a normal algebraic object.
(May then also need to set `powerdisp:true`

to get the usual ordering of terms)

This is one consequence of the single call to Maxima. Previously there was some string input/output which lost the data type information.

### Issue: rounding of numerical quantities.

The answer test `AlgEquiv`

now does not think floats are equivalent, even though they look identical when displayed in decimal.

Solution: don't use the answer test `AlgEquiv`

for floats, use a numerical answertest instead.

This is one consequence of the single call to Maxima. Previously there was some string input/output which created numerical rounding. This rounding no longer happens, causing the apparent problem. Examples are given in the documentation on numbers instead.