Switch to side-by-side view

--- a
+++ b/.github/workflows/test.yml
@@ -0,0 +1,71 @@
+name: Tests
+
+
+on:
+  push:
+    branches: [master]
+  pull_request:
+
+  workflow_dispatch:
+    inputs:
+      use-custom-anybodycon:
+          type: boolean
+          description: 'Use a custom version of AnyBody from AMS build system.'
+          default: false
+      custom-anybodycon-name:
+          description: 'Name of the custom AnyBody version to use. (E.g. path on the I:\ drive)'
+          required: false
+          default: 'AnyBody.8.0-CI-master.AnyBody.8.1.x/AnyBodyCon.exe'
+      custom-pytest-arg:
+          description: 'Specify which test to run. E.g. `Tests/test_example.any`. Default is entire test suite.'
+          required: false
+          default: ''
+
+concurrency: 
+  group: Test-${{ github.ref }}
+  cancel-in-progress: true
+
+jobs:
+  test:
+    if: ${{ !github.event.pull_request.head.repo.fork && github.repository == 'anybody/ammr' }}
+    strategy:
+      fail-fast: false
+      matrix:
+        test_group: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
+
+    env:
+      # Triggers a warning at 20 deg
+      ShortestPathMaxAngle: 0.3491 
+
+    runs-on: windows-latest
+    
+    steps:
+
+      - uses: actions/checkout@v4
+
+      - uses: prefix-dev/setup-pixi@v0.8.7
+        with:
+          environments: test
+          cache-write: ${{ github.event_name == 'push' && github.ref_name == 'master' }}
+          activate-environment: test
+        
+      - name: Patch with custom version
+        if: inputs.use-custom-anybodycon
+        uses: ./.github/actions/custom-anybodycon
+        with:
+          custom-anybodycon: ${{ inputs.custom-anybodycon-name }}
+          connection-string:  ${{ secrets.AZURE_CONN_STR }}
+          target-path: .pixi/envs/test/bin/AnyBodyCon.exe
+            
+      - name: Run AMMR tests
+        run: |
+          cd Tests
+          pytest -n auto --dist worksteal `
+          --splits 20 --group ${{ matrix.test_group }} --splitting-algorithm=least_duration `
+          --durations=10 `
+          --runslow
+          ${{ github.event.inputs.custom-pytest-arg  || '' }}
+
+        env:
+          RLM_LICENSE: ${{ secrets.LICENSE_SERVER }}
+          RLM_LICENSE_PASSWORD: ${{ secrets.LICENSE_PASSWORD }}