Testing strategy for non-contract related Daml code

I am writing tests for some Daml code I am writing that does not use the ledger at all. I’m currently writing my tests as I would for contracts, using Script. Something like this made-up example:

testDedup : Script ()
testDedup = do
  assert $ dedup [1, 2, 3] == [1, 2, 3]
  assert $ dedup [1, 2, 2] == [1, 2]
  return ()

Is there a better way for me to write tests for non-contract related code? Preferably something that will get picked up when I run daml test?

Will a test written like this have much ledger-related overhead?

Thanks!

1 Like

Using a script for this is perfectly reasonable and your best option at the moment. There shouldn’t be any relevant ledger-related overhead. daml test runs in an in-memory ledger only used for scripts & scenarios and you should only pay for operations that actually interact with that ledger, i.e., submit.

2 Likes

Just browsing and I noticed my code example could be improved with something @cocreature showed me:

import DA.Assert ((===))
import Daml.Script

testDedup : Script ()
testDedup = do
  dedup [1, 2, 3] === [1, 2, 3]
  dedup [1, 2, 2] === [1, 2]
  return ()

This version will produce more informative error messages.

1 Like