New Upstream Release - puppet-module-puppetlabs-stdlib

Ready changes

Summary

Merged new upstream version: 8.6.0 (was: 8.5.0).

Resulting package

Built on 2023-05-13T02:11 (took 7m28s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases puppet-module-puppetlabs-stdlib

Lintian Result

Diff

diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
deleted file mode 100644
index 12ed4ff1..00000000
--- a/.devcontainer/Dockerfile
+++ /dev/null
@@ -1,6 +0,0 @@
-FROM puppet/pdk:latest
-
-# [Optional] Uncomment this section to install additional packages.
-# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
-#     && apt-get -y install --no-install-recommends <your-package-list-here>
-
diff --git a/.devcontainer/README.md b/.devcontainer/README.md
deleted file mode 100644
index a7193616..00000000
--- a/.devcontainer/README.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# devcontainer
-
-
-For format details, see https://aka.ms/devcontainer.json. 
-
-For config options, see the README at:
-https://github.com/microsoft/vscode-dev-containers/tree/v0.140.1/containers/puppet
- 
-``` json
-{
-	"name": "Puppet Development Kit (Community)",
-	"dockerFile": "Dockerfile",
-
-	// Set *default* container specific settings.json values on container create.
-	"settings": {
-		"terminal.integrated.profiles.linux": {
-			"bash": {
-				"path": "bash",
-			}
-		}
-	},
-
-	// Add the IDs of extensions you want installed when the container is created.
-	"extensions": [
-		"puppet.puppet-vscode",
-		"rebornix.Ruby"
-	],
-
-	// Use 'forwardPorts' to make a list of ports inside the container available locally.
-	"forwardPorts": [],
-
-	// Use 'postCreateCommand' to run commands after the container is created.
-	"postCreateCommand": "pdk --version",
-}
-```
-
-
-
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
deleted file mode 100644
index fe7a8b12..00000000
--- a/.devcontainer/devcontainer.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-	"name": "Puppet Development Kit (Community)",
-	"dockerFile": "Dockerfile",
-
-	"settings": {
-		"terminal.integrated.profiles.linux": {
-			"bash": {
-				"path": "bash",
-			}
-		}
-	},
-
-	"extensions": [
-		"puppet.puppet-vscode",
-		"rebornix.Ruby"
-	]
-}
diff --git a/.fixtures.yml b/.fixtures.yml
deleted file mode 100644
index b25e8c45..00000000
--- a/.fixtures.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-fixtures:
-  repositories:
-    facts: 'https://github.com/puppetlabs/puppetlabs-facts.git'
-    puppet_agent: 'https://github.com/puppetlabs/puppetlabs-puppet_agent.git'
-    provision: 'https://github.com/puppetlabs/provision.git'
-  symlinks:
-    stdlib: "#{source_dir}"
-    test:   "#{source_dir}/spec/fixtures/test"
\ No newline at end of file
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 9032a014..00000000
--- a/.gitattributes
+++ /dev/null
@@ -1,5 +0,0 @@
-*.rb eol=lf
-*.erb eol=lf
-*.pp eol=lf
-*.sh eol=lf
-*.epp eol=lf
diff --git a/.github/workflows/auto_release.yml b/.github/workflows/auto_release.yml
index f4aed440..ca677186 100644
--- a/.github/workflows/auto_release.yml
+++ b/.github/workflows/auto_release.yml
@@ -3,88 +3,8 @@ name: "Auto release"
 on:
   workflow_dispatch:
 
-env:
-  HONEYCOMB_WRITEKEY: 7f3c63a70eecc61d635917de46bea4e6 
-  HONEYCOMB_DATASET: litmus tests
-  CHANGELOG_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
 jobs:
-  auto_release:
-    name: "Automatic release prep"
-    runs-on: ubuntu-20.04
-
-    steps:
-    
-    - name: "Honeycomb: Start recording"
-      uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1
-      with:
-        apikey: ${{ env.HONEYCOMB_WRITEKEY }}
-        dataset: ${{ env.HONEYCOMB_DATASET }}
-        job-status: ${{ job.status }}
-
-    - name: "Honeycomb: start first step"
-      run: |
-        echo STEP_ID="auto-release" >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-    - name: "Checkout Source"
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-      uses: actions/checkout@v2
-      with:
-        fetch-depth: 0
-        persist-credentials: false
-
-    - name: "PDK Release prep"
-      uses: docker://puppet/iac_release:ci
-      with:
-        args: 'release prep --force'
-      env:
-        CHANGELOG_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
-    - name: "Get Version"
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-      id: gv
-      run: |
-        echo "::set-output name=ver::$(jq --raw-output .version metadata.json)"
-
-    - name: "Check if a release is necessary"
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-      id: check
-      run: |
-        git diff --quiet CHANGELOG.md && echo "::set-output name=release::false" || echo "::set-output name=release::true"
-
-    - name: "Commit changes"
-      if: ${{ github.repository_owner == 'puppetlabs' && steps.check.outputs.release == 'true' }}
-      run: |
-        git config --local user.email "${{ github.repository_owner }}@users.noreply.github.com"
-        git config --local user.name "GitHub Action"
-        git add .
-        git commit -m "Release prep v${{ steps.gv.outputs.ver }}"
-
-    - name: Create Pull Request
-      id: cpr
-      uses: puppetlabs/peter-evans-create-pull-request@v3
-      if: ${{ github.repository_owner == 'puppetlabs' && steps.check.outputs.release == 'true' }}
-      with:
-        token: ${{ secrets.GITHUB_TOKEN }}
-        commit-message: "Release prep v${{ steps.gv.outputs.ver }}"
-        branch: "release-prep"
-        delete-branch: true
-        title: "Release prep v${{ steps.gv.outputs.ver }}"
-        body: |
-          Automated release-prep through [pdk-templates](https://github.com/puppetlabs/pdk-templates/blob/main/moduleroot/.github/workflows/auto_release.yml.erb) from commit ${{ github.sha }}. 
-          Please verify before merging:
-          - [ ] last [nightly](https://github.com/${{ github.repository }}/actions/workflows/nightly.yml) run is green
-          - [ ] [Changelog](https://github.com/${{ github.repository }}/blob/release-prep/CHANGELOG.md) is readable and has no unlabeled pull requests
-          - [ ] Ensure the [changelog](https://github.com/${{ github.repository }}/blob/release-prep/CHANGELOG.md) version and [metadata](https://github.com/${{ github.repository }}/blob/release-prep/metadata.json) version match
-        labels: "maintenance"
-
-    - name: PR outputs
-      if: ${{ github.repository_owner == 'puppetlabs' && steps.check.outputs.release == 'true' }}
-      run: |
-        echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
-        echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
- 
-    - name: "Honeycomb: Record finish step"
-      if: ${{ always() }}
-      run: |
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Finished auto release workflow'
+  release_prep:
+    name: "Release Prep"
+    uses: "puppetlabs/cat-github-actions/.github/workflows/module_release_prep.yml@main"
+    secrets: "inherit"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 00000000..a5738adb
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,17 @@
+name: "ci"
+
+on:
+  pull_request:
+    branches:
+      - "main"
+  workflow_dispatch:
+    
+jobs:
+  Spec:
+    uses: "puppetlabs/cat-github-actions/.github/workflows/module_ci.yml@main"
+    secrets: "inherit"
+
+  Acceptance:
+    needs: Spec
+    uses: "puppetlabs/cat-github-actions/.github/workflows/module_acceptance.yml@main"
+    secrets: "inherit"
diff --git a/.github/workflows/mend.yml b/.github/workflows/mend.yml
new file mode 100644
index 00000000..b4100a5a
--- /dev/null
+++ b/.github/workflows/mend.yml
@@ -0,0 +1,15 @@
+name: "mend"
+
+on:
+  pull_request:
+    branches:
+      - "main"
+  schedule:
+    - cron: "0 0 * * *"
+  workflow_dispatch:
+
+jobs:
+
+  mend:
+    uses: "puppetlabs/cat-github-actions/.github/workflows/mend_ruby.yml@main"
+    secrets: "inherit"
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index 42816e7d..a28cd2db 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -2,203 +2,16 @@ name: "nightly"
 
 on:
   schedule:
-    - cron: '0 0 * * *'
-
-
-env:
-  HONEYCOMB_WRITEKEY: 7f3c63a70eecc61d635917de46bea4e6
-  HONEYCOMB_DATASET: litmus tests
+    - cron: "0 0 * * *"
+  workflow_dispatch:
 
 jobs:
-  setup_matrix:
-    if: ${{ github.repository_owner == 'puppetlabs' }}
-    name: "Setup Test Matrix"
-    runs-on: ubuntu-20.04
-    outputs:
-      matrix: ${{ steps.get-matrix.outputs.matrix }}
-
-    steps:
-     
-    - name: "Honeycomb: Start recording"
-      uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1
-      with:
-        apikey: ${{ env.HONEYCOMB_WRITEKEY }}
-        dataset: ${{ env.HONEYCOMB_DATASET }}
-        job-status: ${{ job.status }}
+  Spec:
+    uses: "puppetlabs/cat-github-actions/.github/workflows/module_ci.yml@main"
+    secrets: "inherit"
 
-    - name: "Honeycomb: Start first step"
-      run: |
-        echo STEP_ID=setup-environment >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-    - name: Checkout Source
-      uses: actions/checkout@v2
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-
-    - name: Activate Ruby 2.7
-      uses: ruby/setup-ruby@v1
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-      with:
-        ruby-version: "2.7"
-        bundler-cache: true
-
-    - name: Print bundle environment
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-      run: |
-        echo ::group::bundler environment
-        buildevents cmd $TRACE_ID $STEP_ID 'bundle env' -- bundle env
-        echo ::endgroup::
-   
-    - name: "Honeycomb: Record Setup Environment time"
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-      run: |
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Environment'
-        echo STEP_ID=Setup-Acceptance-Test-Matrix >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-    - name: Setup Acceptance Test Matrix
-      id: get-matrix
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-      run: |
-        if [ '${{ github.repository_owner }}' == 'puppetlabs' ]; then
-          buildevents cmd $TRACE_ID $STEP_ID matrix_from_metadata -- bundle exec matrix_from_metadata_v2 
-        else
-          echo  "::set-output name=matrix::{}"
-        fi
-  
-    - name: "Honeycomb: Record Setup Test Matrix time"
-      if: ${{ always() }}
-      run: |
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Test Matrix'
   Acceptance:
-    name: "${{matrix.platforms.label}}, ${{matrix.collection}}"
-    needs:
-      - setup_matrix
-
-    runs-on: ubuntu-20.04
-    strategy:
-      fail-fast: false
-      matrix: ${{fromJson(needs.setup_matrix.outputs.matrix)}}
-
-    env:
-      BUILDEVENT_FILE: '../buildevents.txt'
-
-    steps:
-    - run: |
-        echo 'platform=${{ matrix.platforms.image }}' >> $BUILDEVENT_FILE
-        echo 'collection=${{ matrix.collection }}' >> $BUILDEVENT_FILE
-        echo 'label=${{ matrix.platforms.label }}' >> $BUILDEVENT_FILE
-
-
-    - name: "Honeycomb: Start recording"
-      uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1
-      with:
-        apikey: ${{ env.HONEYCOMB_WRITEKEY }}
-        dataset: ${{ env.HONEYCOMB_DATASET }}
-        job-status: ${{ job.status }}
-        matrix-key: ${{ matrix.platforms.label }}-${{ matrix.collection }}
-
-    - name: "Honeycomb: start first step"
-      run: |
-        echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-1 >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-
-    - name: Checkout Source
-      uses: actions/checkout@v2
-
-    - name: Activate Ruby 2.7
-      uses: ruby/setup-ruby@v1
-      with:
-        ruby-version: "2.7"
-        bundler-cache: true
-
-    - name: Print bundle environment
-      run: |
-        echo ::group::bundler environment
-        buildevents cmd $TRACE_ID $STEP_ID 'bundle env' -- bundle env
-        echo ::endgroup::
-
-    - name: "Honeycomb: Record Setup Environment time"
-      if: ${{ always() }}
-      run: |
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Environment'
-        echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-2 >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-
-    - name: Provision test environment
-      run: |
-        buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:provision ${{ matrix.platforms.image }}' -- bundle exec rake 'litmus:provision[${{matrix.platforms.provider}},${{ matrix.platforms.image }}]'
-        echo ::group::=== REQUEST ===
-        cat request.json || true
-        echo
-        echo ::endgroup::
-        echo ::group::=== INVENTORY ===
-        if [ -f 'spec/fixtures/litmus_inventory.yaml' ];
-        then
-          FILE='spec/fixtures/litmus_inventory.yaml'
-        elif [ -f 'inventory.yaml' ];
-        then
-          FILE='inventory.yaml'
-        fi
-        sed -e 's/password: .*/password: "[redacted]"/' < $FILE || true
-        echo ::endgroup::
-
-    - name: Install agent
-      run: |
-        buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:install_agent ${{ matrix.collection }}' -- bundle exec rake 'litmus:install_agent[${{ matrix.collection }}]'
-
-    - name: Install module
-      run: |
-        buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:install_module' -- bundle exec rake 'litmus:install_module'
-
-    - name: "Honeycomb: Record deployment times"
-      if: ${{ always() }}
-      run: |
-        echo ::group::honeycomb step
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Deploy test system'
-        echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-3 >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-        echo ::endgroup::
-
-    - name: Run acceptance tests
-      run: |
-        buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:acceptance:parallel' -- bundle exec rake 'litmus:acceptance:parallel'
-
-    - name: "Honeycomb: Record acceptance testing times"
-      if: ${{ always() }}
-      run: |
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Run acceptance tests'
-        echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-4 >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-
-    - name: Remove test environment
-      if: ${{ always() }}
-      continue-on-error: true
-      run: |
-        if [[ -f inventory.yaml || -f spec/fixtures/litmus_inventory.yaml ]]; then
-          buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:tear_down' -- bundle exec rake 'litmus:tear_down'
-          echo ::group::=== REQUEST ===
-          cat request.json || true
-          echo
-          echo ::endgroup::
-        fi
-
-    - name: "Honeycomb: Record removal times"
-      if: ${{ always() }}
-      run: |
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Remove test environment'
+    needs: Spec
+    uses: "puppetlabs/cat-github-actions/.github/workflows/module_acceptance.yml@main"
+    secrets: "inherit"
 
-  slack-workflow-status:
-    if: ${{ github.repository_owner == 'puppetlabs' }}
-    name: Post Workflow Status To Slack
-    needs:
-      - Acceptance
-    runs-on: ubuntu-20.04
-    steps:
-      - name: Slack Workflow Notification
-        uses: puppetlabs/Gamesight-slack-workflow-status@pdk-templates-v1
-        with:
-          # Required Input
-          repo_token: ${{ secrets.GITHUB_TOKEN }}
-          slack_webhook_url: ${{ secrets.SLACK_WEBHOOK }}
-          # Optional Input
-          channel: '#team-cat-bots'
-          name: 'GABot'
diff --git a/.github/workflows/pr_test.yml b/.github/workflows/pr_test.yml
deleted file mode 100644
index fd310e65..00000000
--- a/.github/workflows/pr_test.yml
+++ /dev/null
@@ -1,185 +0,0 @@
-name: "PR Testing"
-
-on: [pull_request]
-
-
-env:
- 
-  HONEYCOMB_WRITEKEY: 7f3c63a70eecc61d635917de46bea4e6
-  HONEYCOMB_DATASET: litmus tests
-
-jobs:
-  setup_matrix:
-    name: "Setup Test Matrix"
-    runs-on: ubuntu-20.04
-    outputs:
-      matrix: ${{ steps.get-matrix.outputs.matrix }}
-
-    steps:
-    
-    - name: "Honeycomb: Start recording"
-      uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1
-      with:
-        apikey: ${{ env.HONEYCOMB_WRITEKEY }}
-        dataset: ${{ env.HONEYCOMB_DATASET }}
-        job-status: ${{ job.status }}
-
-    - name: "Honeycomb: Start first step"
-      run: |
-        echo STEP_ID=setup-environment >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-    - name: Checkout Source
-      uses: actions/checkout@v2
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-
-    - name: Activate Ruby 2.7
-      uses: ruby/setup-ruby@v1
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-      with:
-        ruby-version: "2.7"
-        bundler-cache: true
-
-    - name: Print bundle environment
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-      run: |
-        echo ::group::bundler environment
-        buildevents cmd $TRACE_ID $STEP_ID 'bundle env' -- bundle env
-        echo ::endgroup::
-  
-    - name: "Honeycomb: Record Setup Environment time"
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-      run: |
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Environment'
-        echo STEP_ID=Setup-Acceptance-Test-Matrix >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-    - name: Run validation steps
-      run: |
-        bundle exec rake validate
-      if: ${{ github.repository_owner == 'puppetlabs' }}
-
-    - name: Setup Acceptance Test Matrix
-      id: get-matrix
-      run: |
-        if [ '${{ github.repository_owner }}' == 'puppetlabs' ]; then
-          buildevents cmd $TRACE_ID $STEP_ID matrix_from_metadata -- bundle exec matrix_from_metadata_v2 
-        else
-          echo  "::set-output name=matrix::{}"
-        fi
- 
-    - name: "Honeycomb: Record Setup Test Matrix time"
-      if: ${{ always() }}
-      run: |
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Test Matrix'
-  Acceptance:
-    name: "${{matrix.platforms.label}}, ${{matrix.collection}}"
-    needs:
-      - setup_matrix
-    if: ${{ needs.setup_matrix.outputs.matrix != '{}' }}
-
-    runs-on: ubuntu-20.04
-    strategy:
-      fail-fast: false
-      matrix: ${{fromJson(needs.setup_matrix.outputs.matrix)}}
-
-    env:
-      BUILDEVENT_FILE: '../buildevents.txt'
-
-    steps:
-    - run: |
-        echo 'platform=${{ matrix.platforms.image }}' >> $BUILDEVENT_FILE
-        echo 'collection=${{ matrix.collection }}' >> $BUILDEVENT_FILE
-        echo 'label=${{ matrix.platforms.label }}' >> $BUILDEVENT_FILE
- 
-    - name: "Honeycomb: Start recording"
-      uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1
-      with:
-        apikey: ${{ env.HONEYCOMB_WRITEKEY }}
-        dataset: ${{ env.HONEYCOMB_DATASET }}
-        job-status: ${{ job.status }}
-        matrix-key: ${{ matrix.platforms.label }}-${{ matrix.collection }}
-
-    - name: "Honeycomb: start first step"
-      run: |
-        echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-1 >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-    - name: Checkout Source
-      uses: actions/checkout@v2
-
-    - name: Activate Ruby 2.7
-      uses: ruby/setup-ruby@v1
-      with:
-        ruby-version: "2.7"
-        bundler-cache: true
-
-    - name: Print bundle environment
-      run: |
-        echo ::group::bundler environment
-        buildevents cmd $TRACE_ID $STEP_ID 'bundle env' -- bundle env
-        echo ::endgroup::
- 
-    - name: "Honeycomb: Record Setup Environment time"
-      if: ${{ always() }}
-      run: |
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Environment'
-        echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-2 >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-    - name: Provision test environment
-      run: |
-        buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:provision ${{ matrix.platforms.image }}' -- bundle exec rake 'litmus:provision[${{matrix.platforms.provider}},${{ matrix.platforms.image }}]'
-        echo ::group::=== REQUEST ===
-        cat request.json || true
-        echo
-        echo ::endgroup::
-        echo ::group::=== INVENTORY ===
-        if [ -f 'spec/fixtures/litmus_inventory.yaml' ];
-        then
-          FILE='spec/fixtures/litmus_inventory.yaml'
-        elif [ -f 'inventory.yaml' ];
-        then
-          FILE='inventory.yaml'
-        fi
-        sed -e 's/password: .*/password: "[redacted]"/' < $FILE || true
-        echo ::endgroup::
-
-    - name: Install agent
-      run: |
-        buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:install_agent ${{ matrix.collection }}' -- bundle exec rake 'litmus:install_agent[${{ matrix.collection }}]'
-
-    - name: Install module
-      run: |
-        buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:install_module' -- bundle exec rake 'litmus:install_module'
- 
-    - name: "Honeycomb: Record deployment times"
-      if: ${{ always() }}
-      run: |
-        echo ::group::honeycomb step
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Deploy test system'
-        echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-3 >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-        echo ::endgroup::
-    - name: Run acceptance tests
-      run: |
-        buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:acceptance:parallel' -- bundle exec rake 'litmus:acceptance:parallel'
- 
-    - name: "Honeycomb: Record acceptance testing times"
-      if: ${{ always() }}
-      run: |
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Run acceptance tests'
-        echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-4 >> $GITHUB_ENV
-        echo STEP_START=$(date +%s) >> $GITHUB_ENV
-    - name: Remove test environment
-      if: ${{ always() }}
-      continue-on-error: true
-      run: |
-        if [[ -f inventory.yaml || -f spec/fixtures/litmus_inventory.yaml ]]; then
-          buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:tear_down' -- bundle exec rake 'litmus:tear_down'
-          echo ::group::=== REQUEST ===
-          cat request.json || true
-          echo
-          echo ::endgroup::
-        fi
- 
-    - name: "Honeycomb: Record removal times"
-      if: ${{ always() }}
-      run: |
-        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Remove test environment'
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 1509f6e9..82caec76 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -4,44 +4,7 @@ on:
   workflow_dispatch:
   
 jobs:
-  create-github-release:
-    name: Deploy GitHub Release
-    runs-on: ubuntu-20.04
-    steps:
-      - name: Checkout code
-        uses: actions/checkout@v2
-        with:
-          ref: ${{ github.ref }}
-          clean: true
-          fetch-depth: 0
-      - name: Get Version
-        id: gv
-        run: |
-          echo "::set-output name=ver::$(jq --raw-output .version metadata.json)"
-      - name: Create Release
-        uses: actions/create-release@v1
-        id: create_release
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          tag_name: "v${{ steps.gv.outputs.ver }}"
-          draft: false
-          prerelease: false
-
-  deploy-forge:
-    name: Deploy to Forge
-    runs-on: ubuntu-20.04
-    steps:
-      - name: Checkout code
-        uses: actions/checkout@v2
-        with:
-          ref: ${{ github.ref }}
-          clean: true
-      - name: "PDK Build"
-        uses: docker://puppet/pdk:nightly
-        with:
-          args: 'build'
-      - name: "Push to Forge"
-        uses: docker://puppet/pdk:nightly
-        with:
-          args: 'release publish --forge-token ${{ secrets.FORGE_API_KEY }} --force'
+  release:
+    name: "Release"
+    uses: "puppetlabs/cat-github-actions/.github/workflows/module_release.yml@main"
+    secrets: "inherit"
diff --git a/.github/workflows/spec.yml b/.github/workflows/spec.yml
deleted file mode 100644
index 6c1ae10d..00000000
--- a/.github/workflows/spec.yml
+++ /dev/null
@@ -1,126 +0,0 @@
-name: "Spec Tests"
-
-on:
-  schedule:
-    - cron: '0 0 * * *'
-  workflow_dispatch:
-  pull_request:
-
-
-env:
-  HONEYCOMB_WRITEKEY: 7f3c63a70eecc61d635917de46bea4e6
-  HONEYCOMB_DATASET: litmus tests
-
-jobs:
-  setup_matrix:
-    name: "Setup Test Matrix"
-    runs-on: ubuntu-20.04
-    outputs:
-      spec_matrix: ${{ steps.get-matrix.outputs.spec_matrix }}
-
-    steps:
-    
-      - name: "Honeycomb: Start recording"
-        uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1
-        with:
-          apikey: ${{ env.HONEYCOMB_WRITEKEY }}
-          dataset: ${{ env.HONEYCOMB_DATASET }}
-          job-status: ${{ job.status }}
-
-      - name: "Honeycomb: Start first step"
-        run: |
-          echo STEP_ID=setup-environment >> $GITHUB_ENV
-          echo STEP_START=$(date +%s) >> $GITHUB_ENV
-      - name: Checkout Source
-        uses: actions/checkout@v2
-        if: ${{ github.repository_owner == 'puppetlabs' }}
-
-      - name: Activate Ruby 2.7
-        uses: ruby/setup-ruby@v1
-        if: ${{ github.repository_owner == 'puppetlabs' }}
-        with:
-          ruby-version: "2.7"
-          bundler-cache: true
-
-      - name: Print bundle environment
-        if: ${{ github.repository_owner == 'puppetlabs' }}
-        run: |
-          echo ::group::bundler environment
-          buildevents cmd $TRACE_ID $STEP_ID 'bundle env' -- bundle env
-          echo ::endgroup::
-      - name: "Honeycomb: Record Setup Environment time"
-        if: ${{ github.repository_owner == 'puppetlabs' }}
-        run: |
-          buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Environment'
-          echo STEP_ID=Setup-Acceptance-Test-Matrix >> $GITHUB_ENV
-          echo STEP_START=$(date +%s) >> $GITHUB_ENV
-      - name: Run Static & Syntax Tests
-        if: ${{ github.repository_owner == 'puppetlabs' }}
-        run: |
-          buildevents cmd $TRACE_ID $STEP_ID 'static_syntax_checks' -- bundle exec rake syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop
-
-      - name: Setup Spec Test Matrix
-        id: get-matrix
-        run: |
-          if [ '${{ github.repository_owner }}' == 'puppetlabs' ]; then
-            buildevents cmd $TRACE_ID $STEP_ID matrix_from_metadata -- bundle exec matrix_from_metadata_v2
-          else
-            echo  "::set-output name=spec_matrix::{}"
-          fi
-      - name: "Honeycomb: Record Setup Test Matrix time"
-        if: ${{ always() }}
-        run: |
-          buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Test Matrix'
-  Spec:
-    name: "Spec Tests (Puppet: ${{matrix.puppet_version}}, Ruby Ver: ${{matrix.ruby_version}})"
-    needs:
-      - setup_matrix
-    if: ${{ needs.setup_matrix.outputs.spec_matrix != '{}' }}
-
-    runs-on: ubuntu-20.04
-    strategy:
-      fail-fast: false
-      matrix: ${{fromJson(needs.setup_matrix.outputs.spec_matrix)}}
-
-    env:
-      BUILDEVENT_FILE: '../buildevents.txt'
-      PUPPET_GEM_VERSION: ${{ matrix.puppet_version }}
-      FACTER_GEM_VERSION: 'https://github.com/puppetlabs/facter#main'
-
-    steps:
-      - run: |
-          echo "SANITIZED_PUPPET_VERSION=$(echo '${{ matrix.puppet_version }}' | sed 's/~> //g')" >> $GITHUB_ENV
-
-      - run: |
-          echo 'puppet_version=${{ env.SANITIZED_PUPPET_VERSION }}' >> $BUILDEVENT_FILE
-      - name: "Honeycomb: Start first step"
-        run: |
-          echo "STEP_ID=${{ env.SANITIZED_PUPPET_VERSION }}-spec" >> $GITHUB_ENV
-          echo STEP_START=$(date +%s) >> $GITHUB_ENV
-
-      - name: "Honeycomb: Start recording"
-        uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1
-        with:
-          apikey: ${{ env.HONEYCOMB_WRITEKEY }}
-          dataset: ${{ env.HONEYCOMB_DATASET }}
-          job-status: ${{ job.status }}
-          matrix-key: ${{ env.SANITIZED_PUPPET_VERSION }}
-      - name: Checkout Source
-        uses: actions/checkout@v2
-
-      - name: "Activate Ruby ${{ matrix.ruby_version }}"
-        uses: ruby/setup-ruby@v1
-        with:
-          ruby-version: ${{matrix.ruby_version}}
-          bundler-cache: true
-
-      - name: Print bundle environment
-        run: |
-          echo ::group::bundler environment
-          buildevents cmd $TRACE_ID $STEP_ID 'bundle env' -- bundle env
-          echo ::endgroup::
-
-
-      - name: Run parallel_spec tests
-        run: |
-          buildevents cmd $TRACE_ID $STEP_ID 'rake parallel_spec Puppet ${{ matrix.puppet_version }}, Ruby ${{ matrix.ruby_version }}' -- bundle exec rake parallel_spec
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
deleted file mode 100644
index 26d7e5b1..00000000
--- a/.github/workflows/stale.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-name: Audit aging issues/PRs
-
-on:
-  schedule:
-  - cron: "30 1 * * *"
-
-jobs:
-  audit:
-    runs-on: ubuntu-latest
-    steps:
-    - uses: actions/stale@v3
-      with:
-        repo-token: ${{ secrets.GITHUB_TOKEN }}
-        days-before-issue-stale: 90
-        days-before-pr-stale: 60
-        days-before-pr-close: 7
-        stale-issue-message: |
-          Hello! 👋
-
-          This issue has been open for a while and has had no recent activity. We've labelled it with `attention-needed` so that we can get a clear view of which issues need our attention.
-
-          If you are waiting on a response from us we will try and address your comments on a future Community Day.
-
-          Alternatively, if it is no longer relevant to you please close the issue with a comment.
-        stale-issue-label: 'attention-needed'
-        stale-pr-message: |
-          Hello! 👋
-
-          This pull request has been open for a while and has had no recent activity. We've labelled it with `attention-needed` so that we can get a clear view of which PRs need our attention.
-
-          If you are waiting on a response from us we will try and address your comments on a future Community Day.
-
-          Alternatively, if it is no longer relevant to you please close the PR with a comment. 
-          
-          Please note that if a pull request receives no update for 7 after it has been labelled, it will be closed. We are always happy to re-open pull request if they have been closed in error.
-        stale-pr-label: 'attention-needed'
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 988dcbbe..00000000
--- a/.gitignore
+++ /dev/null
@@ -1,28 +0,0 @@
-.git/
-.*.sw[op]
-.metadata
-.yardoc
-.yardwarns
-*.iml
-/.bundle/
-/.idea/
-/.vagrant/
-/coverage/
-/bin/
-/doc/
-/Gemfile.local
-/Gemfile.lock
-/junit/
-/log/
-/pkg/
-/spec/fixtures/manifests/
-/spec/fixtures/modules/
-/tmp/
-/vendor/
-/convert_report.txt
-/update_report.txt
-.DS_Store
-.project
-.envrc
-/inventory.yaml
-/spec/fixtures/litmus_inventory.yaml
diff --git a/.pdkignore b/.pdkignore
deleted file mode 100644
index c538bea8..00000000
--- a/.pdkignore
+++ /dev/null
@@ -1,47 +0,0 @@
-.git/
-.*.sw[op]
-.metadata
-.yardoc
-.yardwarns
-*.iml
-/.bundle/
-/.idea/
-/.vagrant/
-/coverage/
-/bin/
-/doc/
-/Gemfile.local
-/Gemfile.lock
-/junit/
-/log/
-/pkg/
-/spec/fixtures/manifests/
-/spec/fixtures/modules/
-/tmp/
-/vendor/
-/convert_report.txt
-/update_report.txt
-.DS_Store
-.project
-.envrc
-/inventory.yaml
-/spec/fixtures/litmus_inventory.yaml
-/appveyor.yml
-/.editorconfig
-/.fixtures.yml
-/Gemfile
-/.gitattributes
-/.gitignore
-/.gitlab-ci.yml
-/.pdkignore
-/.puppet-lint.rc
-/Rakefile
-/rakelib/
-/.rspec
-/.rubocop.yml
-/.travis.yml
-/.yardopts
-/spec/
-/.vscode/
-/.sync.yml
-/.devcontainer/
diff --git a/.puppet-lint.rc b/.puppet-lint.rc
deleted file mode 100644
index cc96ece0..00000000
--- a/.puppet-lint.rc
+++ /dev/null
@@ -1 +0,0 @@
---relative
diff --git a/.rspec b/.rspec
deleted file mode 100644
index 16f9cdb0..00000000
--- a/.rspec
+++ /dev/null
@@ -1,2 +0,0 @@
---color
---format documentation
diff --git a/.rubocop.yml b/.rubocop.yml
deleted file mode 100644
index a886d8db..00000000
--- a/.rubocop.yml
+++ /dev/null
@@ -1,520 +0,0 @@
----
-require:
-- rubocop-performance
-- rubocop-rspec
-AllCops:
-  DisplayCopNames: true
-  TargetRubyVersion: '2.5'
-  Include:
-  - "**/*.rb"
-  Exclude:
-  - bin/*
-  - ".vendor/**/*"
-  - "**/Gemfile"
-  - "**/Rakefile"
-  - pkg/**/*
-  - spec/fixtures/**/*
-  - vendor/**/*
-  - "**/Puppetfile"
-  - "**/Vagrantfile"
-  - "**/Guardfile"
-inherit_from: ".rubocop_todo.yml"
-Layout/LineLength:
-  Description: People have wide screens, use them.
-  Max: 200
-RSpec/BeforeAfterAll:
-  Description: Beware of using after(:all) as it may cause state to leak between tests.
-    A necessary evil in acceptance testing.
-  Exclude:
-  - spec/acceptance/**/*.rb
-RSpec/HookArgument:
-  Description: Prefer explicit :each argument, matching existing module's style
-  EnforcedStyle: each
-RSpec/DescribeSymbol:
-  Exclude:
-  - spec/unit/facter/**/*.rb
-Style/BlockDelimiters:
-  Description: Prefer braces for chaining. Mostly an aesthetical choice. Better to
-    be consistent then.
-  EnforcedStyle: braces_for_chaining
-Style/ClassAndModuleChildren:
-  Description: Compact style reduces the required amount of indentation.
-  EnforcedStyle: compact
-Style/EmptyElse:
-  Description: Enforce against empty else clauses, but allow `nil` for clarity.
-  EnforcedStyle: empty
-Style/FormatString:
-  Description: Following the main puppet project's style, prefer the % format format.
-  EnforcedStyle: percent
-Style/FormatStringToken:
-  Description: Following the main puppet project's style, prefer the simpler template
-    tokens over annotated ones.
-  EnforcedStyle: template
-Style/Lambda:
-  Description: Prefer the keyword for easier discoverability.
-  EnforcedStyle: literal
-Style/RegexpLiteral:
-  Description: Community preference. See https://github.com/voxpupuli/modulesync_config/issues/168
-  EnforcedStyle: percent_r
-Style/TernaryParentheses:
-  Description: Checks for use of parentheses around ternary conditions. Enforce parentheses
-    on complex expressions for better readability, but seriously consider breaking
-    it up.
-  EnforcedStyle: require_parentheses_when_complex
-Style/TrailingCommaInArguments:
-  Description: Prefer always trailing comma on multiline argument lists. This makes
-    diffs, and re-ordering nicer.
-  EnforcedStyleForMultiline: comma
-Style/TrailingCommaInArrayLiteral:
-  Description: Prefer always trailing comma on multiline literals. This makes diffs,
-    and re-ordering nicer.
-  EnforcedStyleForMultiline: comma
-Style/SymbolArray:
-  Description: Using percent style obscures symbolic intent of array's contents.
-  EnforcedStyle: brackets
-RSpec/MessageSpies:
-  EnforcedStyle: receive
-Style/Documentation:
-  Exclude:
-  - lib/puppet/parser/functions/**/*
-  - spec/**/*
-Style/WordArray:
-  EnforcedStyle: brackets
-Performance/AncestorsInclude:
-  Enabled: true
-Performance/BigDecimalWithNumericArgument:
-  Enabled: true
-Performance/BlockGivenWithExplicitBlock:
-  Enabled: true
-Performance/CaseWhenSplat:
-  Enabled: true
-Performance/ConstantRegexp:
-  Enabled: true
-Performance/MethodObjectAsBlock:
-  Enabled: true
-Performance/RedundantSortBlock:
-  Enabled: true
-Performance/RedundantStringChars:
-  Enabled: true
-Performance/ReverseFirst:
-  Enabled: true
-Performance/SortReverse:
-  Enabled: true
-Performance/Squeeze:
-  Enabled: true
-Performance/StringInclude:
-  Enabled: true
-Performance/Sum:
-  Enabled: true
-Style/CollectionMethods:
-  Enabled: true
-Style/MethodCalledOnDoEndBlock:
-  Enabled: true
-Style/StringMethods:
-  Enabled: true
-Bundler/InsecureProtocolSource:
-  Enabled: false
-Gemspec/DuplicatedAssignment:
-  Enabled: false
-Gemspec/OrderedDependencies:
-  Enabled: false
-Gemspec/RequiredRubyVersion:
-  Enabled: false
-Gemspec/RubyVersionGlobalsUsage:
-  Enabled: false
-Layout/ArgumentAlignment:
-  Enabled: false
-Layout/BeginEndAlignment:
-  Enabled: false
-Layout/ClosingHeredocIndentation:
-  Enabled: false
-Layout/EmptyComment:
-  Enabled: false
-Layout/EmptyLineAfterGuardClause:
-  Enabled: false
-Layout/EmptyLinesAroundArguments:
-  Enabled: false
-Layout/EmptyLinesAroundAttributeAccessor:
-  Enabled: false
-Layout/EndOfLine:
-  Enabled: false
-Layout/FirstArgumentIndentation:
-  Enabled: false
-Layout/HashAlignment:
-  Enabled: false
-Layout/HeredocIndentation:
-  Enabled: false
-Layout/LeadingEmptyLines:
-  Enabled: false
-Layout/SpaceAroundMethodCallOperator:
-  Enabled: false
-Layout/SpaceInsideArrayLiteralBrackets:
-  Enabled: false
-Layout/SpaceInsideReferenceBrackets:
-  Enabled: false
-Lint/BigDecimalNew:
-  Enabled: false
-Lint/BooleanSymbol:
-  Enabled: false
-Lint/ConstantDefinitionInBlock:
-  Enabled: false
-Lint/DeprecatedOpenSSLConstant:
-  Enabled: false
-Lint/DisjunctiveAssignmentInConstructor:
-  Enabled: false
-Lint/DuplicateElsifCondition:
-  Enabled: false
-Lint/DuplicateRequire:
-  Enabled: false
-Lint/DuplicateRescueException:
-  Enabled: false
-Lint/EmptyConditionalBody:
-  Enabled: false
-Lint/EmptyFile:
-  Enabled: false
-Lint/ErbNewArguments:
-  Enabled: false
-Lint/FloatComparison:
-  Enabled: false
-Lint/HashCompareByIdentity:
-  Enabled: false
-Lint/IdentityComparison:
-  Enabled: false
-Lint/InterpolationCheck:
-  Enabled: false
-Lint/MissingCopEnableDirective:
-  Enabled: false
-Lint/MixedRegexpCaptureTypes:
-  Enabled: false
-Lint/NestedPercentLiteral:
-  Enabled: false
-Lint/NonDeterministicRequireOrder:
-  Enabled: false
-Lint/OrderedMagicComments:
-  Enabled: false
-Lint/OutOfRangeRegexpRef:
-  Enabled: false
-Lint/RaiseException:
-  Enabled: false
-Lint/RedundantCopEnableDirective:
-  Enabled: false
-Lint/RedundantRequireStatement:
-  Enabled: false
-Lint/RedundantSafeNavigation:
-  Enabled: false
-Lint/RedundantWithIndex:
-  Enabled: false
-Lint/RedundantWithObject:
-  Enabled: false
-Lint/RegexpAsCondition:
-  Enabled: false
-Lint/ReturnInVoidContext:
-  Enabled: false
-Lint/SafeNavigationConsistency:
-  Enabled: false
-Lint/SafeNavigationWithEmpty:
-  Enabled: false
-Lint/SelfAssignment:
-  Enabled: false
-Lint/SendWithMixinArgument:
-  Enabled: false
-Lint/ShadowedArgument:
-  Enabled: false
-Lint/StructNewOverride:
-  Enabled: false
-Lint/ToJSON:
-  Enabled: false
-Lint/TopLevelReturnWithArgument:
-  Enabled: false
-Lint/TrailingCommaInAttributeDeclaration:
-  Enabled: false
-Lint/UnreachableLoop:
-  Enabled: false
-Lint/UriEscapeUnescape:
-  Enabled: false
-Lint/UriRegexp:
-  Enabled: false
-Lint/UselessMethodDefinition:
-  Enabled: false
-Lint/UselessTimes:
-  Enabled: false
-Metrics/AbcSize:
-  Enabled: false
-Metrics/BlockLength:
-  Enabled: false
-Metrics/BlockNesting:
-  Enabled: false
-Metrics/ClassLength:
-  Enabled: false
-Metrics/CyclomaticComplexity:
-  Enabled: false
-Metrics/MethodLength:
-  Enabled: false
-Metrics/ModuleLength:
-  Enabled: false
-Metrics/ParameterLists:
-  Enabled: false
-Metrics/PerceivedComplexity:
-  Enabled: false
-Migration/DepartmentName:
-  Enabled: false
-Naming/AccessorMethodName:
-  Enabled: false
-Naming/BlockParameterName:
-  Enabled: false
-Naming/HeredocDelimiterCase:
-  Enabled: false
-Naming/HeredocDelimiterNaming:
-  Enabled: false
-Naming/MemoizedInstanceVariableName:
-  Enabled: false
-Naming/MethodParameterName:
-  Enabled: false
-Naming/RescuedExceptionsVariableName:
-  Enabled: false
-Naming/VariableNumber:
-  Enabled: false
-Performance/BindCall:
-  Enabled: false
-Performance/DeletePrefix:
-  Enabled: false
-Performance/DeleteSuffix:
-  Enabled: false
-Performance/InefficientHashSearch:
-  Enabled: false
-Performance/UnfreezeString:
-  Enabled: false
-Performance/UriDefaultParser:
-  Enabled: false
-RSpec/Be:
-  Enabled: false
-RSpec/Capybara/CurrentPathExpectation:
-  Enabled: false
-RSpec/Capybara/FeatureMethods:
-  Enabled: false
-RSpec/Capybara/VisibilityMatcher:
-  Enabled: false
-RSpec/ContextMethod:
-  Enabled: false
-RSpec/ContextWording:
-  Enabled: false
-RSpec/DescribeClass:
-  Enabled: false
-RSpec/EmptyHook:
-  Enabled: false
-RSpec/EmptyLineAfterExample:
-  Enabled: false
-RSpec/EmptyLineAfterExampleGroup:
-  Enabled: false
-RSpec/EmptyLineAfterHook:
-  Enabled: false
-RSpec/ExampleLength:
-  Enabled: false
-RSpec/ExampleWithoutDescription:
-  Enabled: false
-RSpec/ExpectChange:
-  Enabled: false
-RSpec/ExpectInHook:
-  Enabled: false
-RSpec/FactoryBot/AttributeDefinedStatically:
-  Enabled: false
-RSpec/FactoryBot/CreateList:
-  Enabled: false
-RSpec/FactoryBot/FactoryClassName:
-  Enabled: false
-RSpec/HooksBeforeExamples:
-  Enabled: false
-RSpec/ImplicitBlockExpectation:
-  Enabled: false
-RSpec/ImplicitSubject:
-  Enabled: false
-RSpec/LeakyConstantDeclaration:
-  Enabled: false
-RSpec/LetBeforeExamples:
-  Enabled: false
-RSpec/MissingExampleGroupArgument:
-  Enabled: false
-RSpec/MultipleExpectations:
-  Enabled: false
-RSpec/MultipleMemoizedHelpers:
-  Enabled: false
-RSpec/MultipleSubjects:
-  Enabled: false
-RSpec/NestedGroups:
-  Enabled: false
-RSpec/PredicateMatcher:
-  Enabled: false
-RSpec/ReceiveCounts:
-  Enabled: false
-RSpec/ReceiveNever:
-  Enabled: false
-RSpec/RepeatedExampleGroupBody:
-  Enabled: false
-RSpec/RepeatedExampleGroupDescription:
-  Enabled: false
-RSpec/RepeatedIncludeExample:
-  Enabled: false
-RSpec/ReturnFromStub:
-  Enabled: false
-RSpec/SharedExamples:
-  Enabled: false
-RSpec/StubbedMock:
-  Enabled: false
-RSpec/UnspecifiedException:
-  Enabled: false
-RSpec/VariableDefinition:
-  Enabled: false
-RSpec/VoidExpect:
-  Enabled: false
-RSpec/Yield:
-  Enabled: false
-Security/Open:
-  Enabled: false
-Style/AccessModifierDeclarations:
-  Enabled: false
-Style/AccessorGrouping:
-  Enabled: false
-Style/AsciiComments:
-  Enabled: false
-Style/BisectedAttrAccessor:
-  Enabled: false
-Style/CaseLikeIf:
-  Enabled: false
-Style/ClassEqualityComparison:
-  Enabled: false
-Style/ColonMethodDefinition:
-  Enabled: false
-Style/CombinableLoops:
-  Enabled: false
-Style/CommentedKeyword:
-  Enabled: false
-Style/Dir:
-  Enabled: false
-Style/DoubleCopDisableDirective:
-  Enabled: false
-Style/EmptyBlockParameter:
-  Enabled: false
-Style/EmptyLambdaParameter:
-  Enabled: false
-Style/Encoding:
-  Enabled: false
-Style/EvalWithLocation:
-  Enabled: false
-Style/ExpandPathArguments:
-  Enabled: false
-Style/ExplicitBlockArgument:
-  Enabled: false
-Style/ExponentialNotation:
-  Enabled: false
-Style/FloatDivision:
-  Enabled: false
-Style/FrozenStringLiteralComment:
-  Enabled: false
-Style/GlobalStdStream:
-  Enabled: false
-Style/HashAsLastArrayItem:
-  Enabled: false
-Style/HashLikeCase:
-  Enabled: false
-Style/HashTransformKeys:
-  Enabled: false
-Style/HashTransformValues:
-  Enabled: false
-Style/IfUnlessModifier:
-  Enabled: false
-Style/KeywordParametersOrder:
-  Enabled: false
-Style/MinMax:
-  Enabled: false
-Style/MixinUsage:
-  Enabled: false
-Style/MultilineWhenThen:
-  Enabled: false
-Style/NegatedUnless:
-  Enabled: false
-Style/NumericPredicate:
-  Enabled: false
-Style/OptionalBooleanParameter:
-  Enabled: false
-Style/OrAssignment:
-  Enabled: false
-Style/RandomWithOffset:
-  Enabled: false
-Style/RedundantAssignment:
-  Enabled: false
-Style/RedundantCondition:
-  Enabled: false
-Style/RedundantConditional:
-  Enabled: false
-Style/RedundantFetchBlock:
-  Enabled: false
-Style/RedundantFileExtensionInRequire:
-  Enabled: false
-Style/RedundantRegexpCharacterClass:
-  Enabled: false
-Style/RedundantRegexpEscape:
-  Enabled: false
-Style/RedundantSelfAssignment:
-  Enabled: false
-Style/RedundantSort:
-  Enabled: false
-Style/RescueStandardError:
-  Enabled: false
-Style/SingleArgumentDig:
-  Enabled: false
-Style/SlicingWithRange:
-  Enabled: false
-Style/SoleNestedConditional:
-  Enabled: false
-Style/StderrPuts:
-  Enabled: false
-Style/StringConcatenation:
-  Enabled: false
-Style/Strip:
-  Enabled: false
-Style/SymbolProc:
-  Enabled: false
-Style/TrailingBodyOnClass:
-  Enabled: false
-Style/TrailingBodyOnMethodDefinition:
-  Enabled: false
-Style/TrailingBodyOnModule:
-  Enabled: false
-Style/TrailingCommaInHashLiteral:
-  Enabled: false
-Style/TrailingMethodEndStatement:
-  Enabled: false
-Style/UnpackFirst:
-  Enabled: false
-Lint/DuplicateBranch:
-  Enabled: false
-Lint/DuplicateRegexpCharacterClassElement:
-  Enabled: false
-Lint/EmptyBlock:
-  Enabled: false
-Lint/EmptyClass:
-  Enabled: false
-Lint/NoReturnInBeginEndBlocks:
-  Enabled: false
-Lint/ToEnumArguments:
-  Enabled: false
-Lint/UnexpectedBlockArity:
-  Enabled: false
-Lint/UnmodifiedReduceAccumulator:
-  Enabled: false
-Performance/CollectionLiteralInLoop:
-  Enabled: false
-Style/ArgumentsForwarding:
-  Enabled: false
-Style/CollectionCompact:
-  Enabled: false
-Style/DocumentDynamicEvalDefinition:
-  Enabled: false
-Style/NegatedIfElseCondition:
-  Enabled: false
-Style/NilLambda:
-  Enabled: false
-Style/RedundantArgument:
-  Enabled: false
-Style/SwapValues:
-  Enabled: false
diff --git a/.sync.yml b/.sync.yml
deleted file mode 100644
index 8b32d1b3..00000000
--- a/.sync.yml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-".gitlab-ci.yml":
-  delete: true
-".rubocop.yml":
-  include_todos: true
-appveyor.yml:
-  delete: true
-Rakefile:
-  changelog_max_issues: 500
-Gemfile:
-  optional:
-    ":development":
-    - gem: github_changelog_generator
-spec/spec_helper.rb:
-  mock_with: ":rspec"
-  coverage_report: true
-.gitpod.Dockerfile:
-  unmanaged: false
-.gitpod.yml:
-  unmanaged: false
-.github/workflows/nightly.yml:
-  unmanaged: false
-.github/workflows/pr_test.yml:
-  unmanaged: false
-.github/workflows/auto_release.yml:
-  unmanaged: false
-.github/workflows/spec.yml:
-  checks: 'syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop'
-  unmanaged: false
-.github/workflows/release.yml:
-  unmanaged: false
-.travis.yml:
-  delete: true
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
deleted file mode 100644
index 2f1e4f73..00000000
--- a/.vscode/extensions.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "recommendations": [
-    "puppet.puppet-vscode",
-    "rebornix.Ruby"
-  ]
-}
diff --git a/.yardopts b/.yardopts
deleted file mode 100644
index 29c933bc..00000000
--- a/.yardopts
+++ /dev/null
@@ -1 +0,0 @@
---markup markdown
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 06ffc7f7..e7671f18 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,30 @@
 
 All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).
 
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).
+
+## [v8.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.6.0) - 2023-04-24
+
+[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.5.0...v8.6.0)
+
+### Added
+
+- Stdlib::Http::Method: Add new type for http methods [#1299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1299) ([b4ldr](https://github.com/b4ldr))
+- Add `stdlib::sha256` [#1289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1289) ([jcpunk](https://github.com/jcpunk))
+- Add `stdlib::crc32` [#1288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1288) ([jcpunk](https://github.com/jcpunk))
+- Add Stdlib::Ensure::Package type [#1281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1281) ([arjenz](https://github.com/arjenz))
+
+### Fixed
+
+- (PUP-11752) Fix fqdn_rand_string_spec.rb test [#1308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1308) ([alexjfisher](https://github.com/alexjfisher))
+- Make ensure_packages work with `ensure => present` [#1300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1300) ([alexjfisher](https://github.com/alexjfisher))
+- Safely handle a missing root user [#1295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1295) ([ekohl](https://github.com/ekohl))
+- stdlib::ensure: update function to support the generic case [#1286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1286) ([b4ldr](https://github.com/b4ldr))
+- Drop Puppet < 3.6 support in package_provider fact [#1280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1280) ([ekohl](https://github.com/ekohl))
+- Correct bcrypt salt regex [#1279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1279) ([sabo](https://github.com/sabo))
+- Determine root_home without shelling out [#1278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1278) ([ekohl](https://github.com/ekohl))
+- (CONT-173) - Updating deprecated facter instances [#1277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1277) ([jordanbreen28](https://github.com/jordanbreen28))
+
 ## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) (2022-10-13)
 
 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0)
diff --git a/CODEOWNERS b/CODEOWNERS
index a5d109e9..e68528ed 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -1,2 +1,3 @@
 # Setting ownership to the modules team
-* @puppetlabs/modules
+# include Trusted Contributors
+* @puppetlabs/modules @alexjfisher @b4ldr @bastelfreak @ekohl @smortex
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index 26dd2db9..00000000
--- a/Gemfile
+++ /dev/null
@@ -1,69 +0,0 @@
-source ENV['GEM_SOURCE'] || 'https://rubygems.org'
-
-def location_for(place_or_version, fake_version = nil)
-  git_url_regex = %r{\A(?<url>(https?|git)[:@][^#]*)(#(?<branch>.*))?}
-  file_url_regex = %r{\Afile:\/\/(?<path>.*)}
-
-  if place_or_version && (git_url = place_or_version.match(git_url_regex))
-    [fake_version, { git: git_url[:url], branch: git_url[:branch], require: false }].compact
-  elsif place_or_version && (file_url = place_or_version.match(file_url_regex))
-    ['>= 0', { path: File.expand_path(file_url[:path]), require: false }]
-  else
-    [place_or_version, { require: false }]
-  end
-end
-
-group :development do
-  gem "json", '~> 2.0',                                require: false
-  gem "voxpupuli-puppet-lint-plugins", '~> 3.0',       require: false
-  gem "facterdb", '~> 1.18',                           require: false
-  gem "metadata-json-lint", '>= 2.0.2', '< 4.0.0',     require: false
-  gem "puppetlabs_spec_helper", '>= 3.0.0', '< 5.0.0', require: false
-  gem "rspec-puppet-facts", '~> 2.0',                  require: false
-  gem "codecov", '~> 0.2',                             require: false
-  gem "dependency_checker", '~> 0.2',                  require: false
-  gem "parallel_tests", '~> 3.4',                      require: false
-  gem "pry", '~> 0.10',                                require: false
-  gem "simplecov-console", '~> 0.5',                   require: false
-  gem "puppet-debugger", '~> 1.0',                     require: false
-  gem "rubocop", '= 1.6.1',                            require: false
-  gem "rubocop-performance", '= 1.9.1',                require: false
-  gem "rubocop-rspec", '= 2.0.1',                      require: false
-  gem "rb-readline", '= 0.5.5',                        require: false, platforms: [:mswin, :mingw, :x64_mingw]
-  gem "github_changelog_generator",                    require: false
-end
-group :system_tests do
-  gem "puppet_litmus", '< 1.0.0', require: false, platforms: [:ruby]
-  gem "serverspec", '~> 2.41',    require: false
-end
-
-puppet_version = ENV['PUPPET_GEM_VERSION']
-facter_version = ENV['FACTER_GEM_VERSION']
-hiera_version = ENV['HIERA_GEM_VERSION']
-
-gems = {}
-
-gems['puppet'] = location_for(puppet_version)
-
-# If facter or hiera versions have been specified via the environment
-# variables
-
-gems['facter'] = location_for(facter_version) if facter_version
-gems['hiera'] = location_for(hiera_version) if hiera_version
-
-gems.each do |gem_name, gem_params|
-  gem gem_name, *gem_params
-end
-
-# Evaluate Gemfile.local and ~/.gemfile if they exist
-extra_gemfiles = [
-  "#{__FILE__}.local",
-  File.join(Dir.home, '.gemfile'),
-]
-
-extra_gemfiles.each do |gemfile|
-  if File.file?(gemfile) && File.readable?(gemfile)
-    eval(File.read(gemfile), binding)
-  end
-end
-# vim: syntax=ruby
diff --git a/REFERENCE.md b/REFERENCE.md
index 92111e56..c6f9b3f2 100644
--- a/REFERENCE.md
+++ b/REFERENCE.md
@@ -7,8 +7,8 @@
 ### Classes
 
 * [`stdlib`](#stdlib): This module manages stdlib.
-* [`stdlib::manage`](#stdlibmanage): A simple place to define trivial resources
-* [`stdlib::stages`](#stdlibstages): This class manages a standard set of run stages for Puppet. It is managed by
+* [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources
+* [`stdlib::stages`](#stdlib--stages): This class manages a standard set of run stages for Puppet. It is managed by
 the stdlib class, and should not be declared independently.
 
 ### Resource types
@@ -173,15 +173,17 @@ the provided regular expression.
 * [`sort`](#sort): Sorts strings and arrays lexically.
 * [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.
 * [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.
-* [`stdlib::deferrable_epp`](#stdlibdeferrable_epp): This function returns either a rendered template or a deferred function to render at runtime. If any of the values in the variables hash are 
-* [`stdlib::end_with`](#stdlibend_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.
-* [`stdlib::ensure`](#stdlibensure): function to cast ensure parameter to resource specific value
-* [`stdlib::extname`](#stdlibextname): Returns the Extension (the Portion of Filename in Path starting from the
+* [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value.
+* [`stdlib::deferrable_epp`](#stdlib--deferrable_epp): This function returns either a rendered template or a deferred function to render at runtime. If any of the values in the variables hash are 
+* [`stdlib::end_with`](#stdlib--end_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.
+* [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value
+* [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the
 last Period).
-* [`stdlib::ip_in_range`](#stdlibip_in_range): Returns true if the ipaddress is within the given CIDRs
-* [`stdlib::start_with`](#stdlibstart_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.
-* [`stdlib::str2resource`](#stdlibstr2resource): This converts a string to a puppet resource.
-* [`stdlib::xml_encode`](#stdlibxml_encode): Encode strings for XML files
+* [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs
+* [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value.
+* [`stdlib::start_with`](#stdlib--start_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.
+* [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource.
+* [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files
 * [`str2bool`](#str2bool): This converts a string to a boolean.
 * [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+
 * [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for
@@ -258,64 +260,67 @@ OpenSSL.
 
 ### Data types
 
-* [`Stdlib::Absolutepath`](#stdlibabsolutepath): A strict absolutepath type
-* [`Stdlib::Base32`](#stdlibbase32): Type to match base32 String
-* [`Stdlib::Base64`](#stdlibbase64): Type to match base64 String
-* [`Stdlib::Compat::Absolute_path`](#stdlibcompatabsolute_path): Emulate the is_absolute_path and validate_absolute_path functions
-* [`Stdlib::Compat::Array`](#stdlibcompatarray): Emulate the is_array and validate_array functions
-* [`Stdlib::Compat::Bool`](#stdlibcompatbool): Emulate the is_bool and validate_bool functions
-* [`Stdlib::Compat::Float`](#stdlibcompatfloat): Emulate the is_float function
-* [`Stdlib::Compat::Hash`](#stdlibcompathash): Emulate the is_hash and validate_hash functions
-* [`Stdlib::Compat::Integer`](#stdlibcompatinteger): Emulate the is_integer and validate_integer functions
-* [`Stdlib::Compat::Ip_address`](#stdlibcompatip_address): Validate an IP address
-* [`Stdlib::Compat::Ipv4`](#stdlibcompatipv4): Emulate the validate_ipv4_address and is_ipv4_address functions
-* [`Stdlib::Compat::Ipv6`](#stdlibcompatipv6): Validate an IPv6 address
-* [`Stdlib::Compat::Numeric`](#stdlibcompatnumeric): Emulate the is_numeric and validate_numeric functions
-* [`Stdlib::Compat::String`](#stdlibcompatstring): Emulate the is_string and validate_string functions
-* [`Stdlib::CreateResources`](#stdlibcreateresources): A type description used for the create_resources function
-* [`Stdlib::Datasize`](#stdlibdatasize): Validate the size of data
-* [`Stdlib::Email`](#stdlibemail): Validate an e-mail address
-* [`Stdlib::Ensure::File`](#stdlibensurefile): Validate the value of the ensure parameter for a file
-* [`Stdlib::Ensure::File::Directory`](#stdlibensurefiledirectory): Validate the ensure parameter of a "directory" file resource
-* [`Stdlib::Ensure::File::File`](#stdlibensurefilefile): Validate the ensure parameter of a "file" file resource
-* [`Stdlib::Ensure::File::Link`](#stdlibensurefilelink): Validate the ensure parameter of a "link" file resource
-* [`Stdlib::Ensure::Service`](#stdlibensureservice): Validate the value of the ensure parameter of a service resource
-* [`Stdlib::Filemode`](#stdlibfilemode): Validate a file mode
-* [`Stdlib::Filesource`](#stdlibfilesource): Validate the source parameter on file types
-* [`Stdlib::Fqdn`](#stdlibfqdn): Validate a Fully Qualified Domain Name
-* [`Stdlib::HTTPSUrl`](#stdlibhttpsurl): Validate a HTTPS URL
-* [`Stdlib::HTTPUrl`](#stdlibhttpurl): Validate a HTTP(S) URL
-* [`Stdlib::Host`](#stdlibhost): Validate a host (FQDN or IP address)
-* [`Stdlib::HttpStatus`](#stdlibhttpstatus): Validate a HTTP status code
-* [`Stdlib::IP::Address`](#stdlibipaddress): Validate an IP address
-* [`Stdlib::IP::Address::Nosubnet`](#stdlibipaddressnosubnet): Validate an IP address without subnet
-* [`Stdlib::IP::Address::V4`](#stdlibipaddressv4): Validate an IPv4 address
-* [`Stdlib::IP::Address::V4::CIDR`](#stdlibipaddressv4cidr): lint:ignore:140chars
-* [`Stdlib::IP::Address::V4::Nosubnet`](#stdlibipaddressv4nosubnet): lint:ignore:140chars
-* [`Stdlib::IP::Address::V6`](#stdlibipaddressv6): Validate an IPv6 address
-* [`Stdlib::IP::Address::V6::Alternative`](#stdlibipaddressv6alternative): lint:ignore:140chars
-* [`Stdlib::IP::Address::V6::CIDR`](#stdlibipaddressv6cidr): lint:ignore:140chars
-* [`Stdlib::IP::Address::V6::Compressed`](#stdlibipaddressv6compressed): Validate a compressed IPv6 address
-* [`Stdlib::IP::Address::V6::Full`](#stdlibipaddressv6full): Validate a full IPv6 address
-* [`Stdlib::IP::Address::V6::Nosubnet`](#stdlibipaddressv6nosubnet): Validate an IPv6 address without subnet
-* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#stdlibipaddressv6nosubnetalternative): lint:ignore:140chars
-* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#stdlibipaddressv6nosubnetcompressed): Validate compressed IPv6 address without subnet
-* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#stdlibipaddressv6nosubnetfull): Validate full IPv6 address without subnet
-* [`Stdlib::MAC`](#stdlibmac): A type for a MAC address
-* [`Stdlib::ObjectStore`](#stdlibobjectstore): Validate an ObjectStore
-* [`Stdlib::ObjectStore::GSUri`](#stdlibobjectstoregsuri): Validate a Google Cloud object store URI
-* [`Stdlib::ObjectStore::S3Uri`](#stdlibobjectstores3uri): Validate an Amazon Web Services S3 object store URI
-* [`Stdlib::Port`](#stdlibport): Validate a port number
-* [`Stdlib::Port::Dynamic`](#stdlibportdynamic): Validate a dynamic port number
-* [`Stdlib::Port::Ephemeral`](#stdlibportephemeral): Validate an ephemeral port number
-* [`Stdlib::Port::Privileged`](#stdlibportprivileged): Validate a priviliged port number
-* [`Stdlib::Port::Registered`](#stdlibportregistered): Validate a registered port number
-* [`Stdlib::Port::Unprivileged`](#stdlibportunprivileged): Validate an unprivileged port number
-* [`Stdlib::Port::User`](#stdlibportuser): Validate a port number usable by a user
-* [`Stdlib::Syslogfacility`](#stdlibsyslogfacility): Validate a syslog facility
-* [`Stdlib::Unixpath`](#stdlibunixpath): Validate a UNIX path
-* [`Stdlib::Windowspath`](#stdlibwindowspath): Validate a Windows path
-* [`Stdlib::Yes_no`](#stdlibyes_no): Validate a yes / no value
+* [`Stdlib::Absolutepath`](#Stdlib--Absolutepath): A strict absolutepath type
+* [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String
+* [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String
+* [`Stdlib::Compat::Absolute_path`](#Stdlib--Compat--Absolute_path): Emulate the is_absolute_path and validate_absolute_path functions
+* [`Stdlib::Compat::Array`](#Stdlib--Compat--Array): Emulate the is_array and validate_array functions
+* [`Stdlib::Compat::Bool`](#Stdlib--Compat--Bool): Emulate the is_bool and validate_bool functions
+* [`Stdlib::Compat::Float`](#Stdlib--Compat--Float): Emulate the is_float function
+* [`Stdlib::Compat::Hash`](#Stdlib--Compat--Hash): Emulate the is_hash and validate_hash functions
+* [`Stdlib::Compat::Integer`](#Stdlib--Compat--Integer): Emulate the is_integer and validate_integer functions
+* [`Stdlib::Compat::Ip_address`](#Stdlib--Compat--Ip_address): Validate an IP address
+* [`Stdlib::Compat::Ipv4`](#Stdlib--Compat--Ipv4): Emulate the validate_ipv4_address and is_ipv4_address functions
+* [`Stdlib::Compat::Ipv6`](#Stdlib--Compat--Ipv6): Validate an IPv6 address
+* [`Stdlib::Compat::Numeric`](#Stdlib--Compat--Numeric): Emulate the is_numeric and validate_numeric functions
+* [`Stdlib::Compat::String`](#Stdlib--Compat--String): Emulate the is_string and validate_string functions
+* [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function
+* [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data
+* [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address
+* [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file
+* [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a "directory" file resource
+* [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a "file" file resource
+* [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a "link" file resource
+* [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package
+* [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource
+* [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode
+* [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types
+* [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name
+* [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL
+* [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL
+* [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address)
+* [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs
+* [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110
+* [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code
+* [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address
+* [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet
+* [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address
+* [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars
+* [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars
+* [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address
+* [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars
+* [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars
+* [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address
+* [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address
+* [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet
+* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars
+* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet
+* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet
+* [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address
+* [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore
+* [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI
+* [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI
+* [`Stdlib::Port`](#Stdlib--Port): Validate a port number
+* [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number
+* [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number
+* [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number
+* [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number
+* [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number
+* [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user
+* [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility
+* [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path
+* [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path
+* [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value
 
 ## Classes
 
@@ -327,7 +332,7 @@ declared in order to use the standardized run stages.
 Declares all other classes in the stdlib module. Currently, this consists
 of stdlib::stages and stdlib::manage.
 
-### <a name="stdlibmanage"></a>`stdlib::manage`
+### <a name="stdlib--manage"></a>`stdlib::manage`
 
 Sometimes your systems require a single simple resource.
 It can feel unnecessary to create a module for a single
@@ -379,9 +384,9 @@ stdlib::manage::create_resources:
 
 The following parameters are available in the `stdlib::manage` class:
 
-* [`create_resources`](#create_resources)
+* [`create_resources`](#-stdlib--manage--create_resources)
 
-##### <a name="create_resources"></a>`create_resources`
+##### <a name="-stdlib--manage--create_resources"></a>`create_resources`
 
 Data type: `Hash[String, Hash]`
 
@@ -390,7 +395,7 @@ NOTE: functions, such as `template` or `epp`, are not evaluated.
 
 Default value: `{}`
 
-### <a name="stdlibstages"></a>`stdlib::stages`
+### <a name="stdlib--stages"></a>`stdlib::stages`
 
 Declares various run-stages for deploying infrastructure,
 language runtimes, and application layers.
@@ -460,9 +465,9 @@ class { 'mcollective': } -> class { 'ntp': }
 
 The following parameters are available in the `anchor` type.
 
-* [`name`](#name)
+* [`name`](#-anchor--name)
 
-##### <a name="name"></a>`name`
+##### <a name="-anchor--name"></a>`name`
 
 namevar
 
@@ -584,93 +589,93 @@ The line to be appended to the file or used to replace matches found by the matc
 
 The following parameters are available in the `file_line` type.
 
-* [`after`](#after)
-* [`append_on_no_match`](#append_on_no_match)
-* [`encoding`](#encoding)
-* [`match`](#match)
-* [`match_for_absence`](#match_for_absence)
-* [`multiple`](#multiple)
-* [`name`](#name)
-* [`path`](#path)
-* [`provider`](#provider)
-* [`replace`](#replace)
-* [`replace_all_matches_not_matching_line`](#replace_all_matches_not_matching_line)
+* [`after`](#-file_line--after)
+* [`append_on_no_match`](#-file_line--append_on_no_match)
+* [`encoding`](#-file_line--encoding)
+* [`match`](#-file_line--match)
+* [`match_for_absence`](#-file_line--match_for_absence)
+* [`multiple`](#-file_line--multiple)
+* [`name`](#-file_line--name)
+* [`path`](#-file_line--path)
+* [`provider`](#-file_line--provider)
+* [`replace`](#-file_line--replace)
+* [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line)
 
-##### <a name="after"></a>`after`
+##### <a name="-file_line--after"></a>`after`
 
 An optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)
 This is also takes a regex.
 
-##### <a name="append_on_no_match"></a>`append_on_no_match`
+##### <a name="-file_line--append_on_no_match"></a>`append_on_no_match`
 
-Valid values: ``true``, ``false``
+Valid values: `true`, `false`
 
 If true, append line if match is not found. If false, do not append line if a match is not found
 
-Default value: ``true``
+Default value: `true`
 
-##### <a name="encoding"></a>`encoding`
+##### <a name="-file_line--encoding"></a>`encoding`
 
 For files that are not UTF-8 encoded, specify encoding such as iso-8859-1
 
 Default value: `UTF-8`
 
-##### <a name="match"></a>`match`
+##### <a name="-file_line--match"></a>`match`
 
 An optional ruby regular expression to run against existing lines in the file.
 If a match is found, we replace that line rather than adding a new line.
 A regex comparison is performed against the line value and if it does not
 match an exception will be raised.
 
-##### <a name="match_for_absence"></a>`match_for_absence`
+##### <a name="-file_line--match_for_absence"></a>`match_for_absence`
 
-Valid values: ``true``, ``false``
+Valid values: `true`, `false`
 
 An optional value to determine if match should be applied when ensure => absent.
 If set to true and match is set, the line that matches match will be deleted.
 If set to false (the default), match is ignored when ensure => absent.
 When `ensure => present`, match_for_absence is ignored.
 
-Default value: ``false``
+Default value: `false`
 
-##### <a name="multiple"></a>`multiple`
+##### <a name="-file_line--multiple"></a>`multiple`
 
-Valid values: ``true``, ``false``
+Valid values: `true`, `false`
 
 An optional value to determine if match can change multiple lines.
 If set to false, an exception will be raised if more than one line matches
 
-##### <a name="name"></a>`name`
+##### <a name="-file_line--name"></a>`name`
 
 namevar
 
 An arbitrary name used as the identity of the resource.
 
-##### <a name="path"></a>`path`
+##### <a name="-file_line--path"></a>`path`
 
 The file Puppet will ensure contains the line specified by the line parameter.
 
-##### <a name="provider"></a>`provider`
+##### <a name="-file_line--provider"></a>`provider`
 
 The specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually
 discover the appropriate provider for your platform.
 
-##### <a name="replace"></a>`replace`
+##### <a name="-file_line--replace"></a>`replace`
 
-Valid values: ``true``, ``false``
+Valid values: `true`, `false`
 
 If true, replace line that matches. If false, do not write line if a match is found
 
-Default value: ``true``
+Default value: `true`
 
-##### <a name="replace_all_matches_not_matching_line"></a>`replace_all_matches_not_matching_line`
+##### <a name="-file_line--replace_all_matches_not_matching_line"></a>`replace_all_matches_not_matching_line`
 
-Valid values: ``true``, ``false``
+Valid values: `true`, `false`
 
 Configures the behavior of replacing all lines in a file which match the `match` parameter regular expression,
 regardless of whether the specified line is already present in the file.
 
-Default value: ``false``
+Default value: `false`
 
 ## Functions
 
@@ -4190,7 +4195,9 @@ hash types are:
 |bcrypt-x |2x    |bug compatible       |
 |bcrypt-y |2y    |historic alias for 2b|
 
-The third argument to this function is the salt to use.
+The third argument to this function is the salt to use. For bcrypt-type hashes,
+the first two characters of the salt represent a strength parameter, with a value
+between 4 and 31 inclusive.
 
 > *Note:*: this uses the Puppet Server's implementation of crypt(3). If your
   environment contains several different operating systems, ensure that they
@@ -4215,7 +4222,9 @@ hash types are:
 |bcrypt-x |2x    |bug compatible       |
 |bcrypt-y |2y    |historic alias for 2b|
 
-The third argument to this function is the salt to use.
+The third argument to this function is the salt to use. For bcrypt-type hashes,
+the first two characters of the salt represent a strength parameter, with a value
+between 4 and 31 inclusive.
 
 > *Note:*: this uses the Puppet Server's implementation of crypt(3). If your
   environment contains several different operating systems, ensure that they
@@ -4662,7 +4671,67 @@ The squeeze function.
 
 Returns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.
 
-### <a name="stdlibdeferrable_epp"></a>`stdlib::deferrable_epp`
+### <a name="stdlib--crc32"></a>`stdlib::crc32`
+
+Type: Ruby 4.x API
+
+Run a CRC32 calculation against a given value.
+
+#### Examples
+
+##### Check a simple string value
+
+```puppet
+stdlib::crc32('my string') == '18fbd270'
+```
+
+##### Check a Sensitive datatype
+
+```puppet
+stdlib::crc32(sensitive('my string')) == '18fbd270'
+```
+
+##### Check a number
+
+```puppet
+stdlib::crc32(100.0) == 'a3fd429a'
+stdlib::crc32(100.00000) == 'a3fd429a'
+```
+
+#### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`
+
+Run a CRC32 calculation against a given value.
+
+Returns: `String` String
+
+##### Examples
+
+###### Check a simple string value
+
+```puppet
+stdlib::crc32('my string') == '18fbd270'
+```
+
+###### Check a Sensitive datatype
+
+```puppet
+stdlib::crc32(sensitive('my string')) == '18fbd270'
+```
+
+###### Check a number
+
+```puppet
+stdlib::crc32(100.0) == 'a3fd429a'
+stdlib::crc32(100.00000) == 'a3fd429a'
+```
+
+##### `my_data`
+
+Data type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`
+
+The ScalarData to evaluate
+
+### <a name="stdlib--deferrable_epp"></a>`stdlib::deferrable_epp`
 
 Type: Puppet Language
 
@@ -4696,7 +4765,7 @@ Data type: `Hash`
 
 
 
-### <a name="stdlibend_with"></a>`stdlib::end_with`
+### <a name="stdlib--end_with"></a>`stdlib::end_with`
 
 Type: Ruby 4.x API
 
@@ -4740,13 +4809,13 @@ Data type: `Variant[String[1],Array[String[1], 1]]`
 
 The suffixes to check
 
-### <a name="stdlibensure"></a>`stdlib::ensure`
+### <a name="stdlib--ensure"></a>`stdlib::ensure`
 
 Type: Puppet Language
 
 function to cast ensure parameter to resource specific value
 
-#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Enum['directory', 'link', 'mounted', 'service', 'file', 'package'] $resource)`
+#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)`
 
 The stdlib::ensure function.
 
@@ -4760,11 +4829,11 @@ Data type: `Variant[Boolean, Enum['present', 'absent']]`
 
 ##### `resource`
 
-Data type: `Enum['directory', 'link', 'mounted', 'service', 'file', 'package']`
+Data type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]`
 
 
 
-### <a name="stdlibextname"></a>`stdlib::extname`
+### <a name="stdlib--extname"></a>`stdlib::extname`
 
 Type: Ruby 4.x API
 
@@ -4812,7 +4881,7 @@ Data type: `String`
 
 The Filename
 
-### <a name="stdlibip_in_range"></a>`stdlib::ip_in_range`
+### <a name="stdlib--ip_in_range"></a>`stdlib::ip_in_range`
 
 Type: Ruby 4.x API
 
@@ -4853,7 +4922,67 @@ Data type: `Variant[String, Array]`
 One CIDR or an array of CIDRs
 defining the range(s) to check against
 
-### <a name="stdlibstart_with"></a>`stdlib::start_with`
+### <a name="stdlib--sha256"></a>`stdlib::sha256`
+
+Type: Ruby 4.x API
+
+Run a SHA256 calculation against a given value.
+
+#### Examples
+
+##### Check a simple string value
+
+```puppet
+stdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'
+```
+
+##### Check a Sensitive datatype
+
+```puppet
+stdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'
+```
+
+##### Check a number
+
+```puppet
+stdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'
+stdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'
+```
+
+#### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)`
+
+Run a SHA256 calculation against a given value.
+
+Returns: `String` String
+
+##### Examples
+
+###### Check a simple string value
+
+```puppet
+stdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'
+```
+
+###### Check a Sensitive datatype
+
+```puppet
+stdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'
+```
+
+###### Check a number
+
+```puppet
+stdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'
+stdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'
+```
+
+##### `my_data`
+
+Data type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]`
+
+The ScalarData to evaluate
+
+### <a name="stdlib--start_with"></a>`stdlib::start_with`
 
 Type: Ruby 4.x API
 
@@ -4897,7 +5026,7 @@ Data type: `Variant[String[1],Array[String[1], 1]]`
 
 The prefixes to check.
 
-### <a name="stdlibstr2resource"></a>`stdlib::str2resource`
+### <a name="stdlib--str2resource"></a>`stdlib::str2resource`
 
 Type: Ruby 4.x API
 
@@ -4947,7 +5076,7 @@ Data type: `String`
 
 The string to lookup as a resource
 
-### <a name="stdlibxml_encode"></a>`stdlib::xml_encode`
+### <a name="stdlib--xml_encode"></a>`stdlib::xml_encode`
 
 Type: Ruby 4.x API
 
@@ -5408,7 +5537,10 @@ value `true` or `false`
 
 ##### `opts`
 
-Data type: `Optional[Struct[{
+Data type:
+
+```puppet
+Optional[Struct[{
 indent       => Optional[String],
 space        => Optional[String],
 space_before => Optional[String],
@@ -5416,7 +5548,8 @@ object_nl    => Optional[String],
 array_nl     => Optional[String],
 allow_nan    => Optional[Boolean],
 max_nesting  => Optional[Integer[-1,default]],
-}]]`
+}]]
+```
 
 hash-map of settings passed to JSON.pretty_generate, see
 https://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.
@@ -7403,70 +7536,46 @@ Would result in: ["1", "4"], ["2", "5"], ["3", "6"]
 
 ## Data types
 
-### <a name="stdlibabsolutepath"></a>`Stdlib::Absolutepath`
+### <a name="Stdlib--Absolutepath"></a>`Stdlib::Absolutepath`
 
 A strict absolutepath type
 
-Alias of
+Alias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]`
 
-```puppet
-Variant[Stdlib::Windowspath, Stdlib::Unixpath]
-```
-
-### <a name="stdlibbase32"></a>`Stdlib::Base32`
+### <a name="Stdlib--Base32"></a>`Stdlib::Base32`
 
 Type to match base32 String
 
-Alias of
-
-```puppet
-Pattern[/\A[a-z2-7]+={,6}\z/, /\A[A-Z2-7]+={,6}\z/]
-```
+Alias of `Pattern[/\A[a-z2-7]+={,6}\z/, /\A[A-Z2-7]+={,6}\z/]`
 
-### <a name="stdlibbase64"></a>`Stdlib::Base64`
+### <a name="Stdlib--Base64"></a>`Stdlib::Base64`
 
 Type to match base64 String
 
-Alias of
-
-```puppet
-Pattern[/\A[a-zA-Z0-9\/\+]+={,2}\z/]
-```
+Alias of `Pattern[/\A[a-zA-Z0-9\/\+]+={,2}\z/]`
 
-### <a name="stdlibcompatabsolute_path"></a>`Stdlib::Compat::Absolute_path`
+### <a name="Stdlib--Compat--Absolute_path"></a>`Stdlib::Compat::Absolute_path`
 
 The first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?
 slash = '[\\\\/]'
 name = '[^\\\\/]+'
 %r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\?#{slash}#{name}))!i,
 
-Alias of
-
-```puppet
-Variant[Pattern[/^(([a-zA-Z]:[\\\/])|([\\\/][\\\/][^\\\/]+[\\\/][^\\\/]+)|([\\\/][\\\/]\?[\\\/][^\\\/]+))/], Pattern[/^\//]]
-```
+Alias of `Variant[Pattern[/^(([a-zA-Z]:[\\\/])|([\\\/][\\\/][^\\\/]+[\\\/][^\\\/]+)|([\\\/][\\\/]\?[\\\/][^\\\/]+))/], Pattern[/^\//]]`
 
-### <a name="stdlibcompatarray"></a>`Stdlib::Compat::Array`
+### <a name="Stdlib--Compat--Array"></a>`Stdlib::Compat::Array`
 
 Emulate the is_array and validate_array functions
 
-Alias of
-
-```puppet
-Array[Any]
-```
+Alias of `Array[Any]`
 
-### <a name="stdlibcompatbool"></a>`Stdlib::Compat::Bool`
+### <a name="Stdlib--Compat--Bool"></a>`Stdlib::Compat::Bool`
 
 Emulate the is_bool and validate_bool functions
 
-Alias of
+Alias of `Boolean`
 
-```puppet
-Boolean
-```
-
-### <a name="stdlibcompatfloat"></a>`Stdlib::Compat::Float`
+### <a name="Stdlib--Compat--Float"></a>`Stdlib::Compat::Float`
 
 The regex is what's currently used in is_float
 To keep your development moving forward, you can also add a deprecation warning using the Integer type:
@@ -7486,23 +7595,15 @@ class example(Stdlib::Compat::Float $value) {
 
 This allows you to find all places where a consumers of your code call it with unexpected values.
 
-Alias of
-
-```puppet
-Variant[Float, Pattern[/^-?(?:(?:[1-9]\d*)|0)(?:\.\d+)(?:[eE]-?\d+)?$/]]
-```
+Alias of `Variant[Float, Pattern[/^-?(?:(?:[1-9]\d*)|0)(?:\.\d+)(?:[eE]-?\d+)?$/]]`
 
-### <a name="stdlibcompathash"></a>`Stdlib::Compat::Hash`
+### <a name="Stdlib--Compat--Hash"></a>`Stdlib::Compat::Hash`
 
 Emulate the is_hash and validate_hash functions
 
-Alias of
+Alias of `Hash[Any, Any]`
 
-```puppet
-Hash[Any, Any]
-```
-
-### <a name="stdlibcompatinteger"></a>`Stdlib::Compat::Integer`
+### <a name="Stdlib--Compat--Integer"></a>`Stdlib::Compat::Integer`
 
 The regex is what's currently used in is_integer
 validate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.
@@ -7526,43 +7627,27 @@ class example(Stdlib::Compat::Integer $value) {
 
 This allows you to find all places where a consumers of your code call it with unexpected values.
 
-Alias of
+Alias of `Variant[Integer, Pattern[/^-?(?:(?:[1-9]\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\d*)|0)$/]]]]`
 
-```puppet
-Variant[Integer, Pattern[/^-?(?:(?:[1-9]\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\d*)|0)$/]]]]
-```
-
-### <a name="stdlibcompatip_address"></a>`Stdlib::Compat::Ip_address`
+### <a name="Stdlib--Compat--Ip_address"></a>`Stdlib::Compat::Ip_address`
 
 Validate an IP address
 
-Alias of
-
-```puppet
-Variant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]
-```
+Alias of `Variant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]`
 
-### <a name="stdlibcompatipv4"></a>`Stdlib::Compat::Ipv4`
+### <a name="Stdlib--Compat--Ipv4"></a>`Stdlib::Compat::Ipv4`
 
 Emulate the validate_ipv4_address and is_ipv4_address functions
 
-Alias of
-
-```puppet
-Pattern[/^((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d)))(\/((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))|[0-9]+))?$/]
-```
+Alias of `Pattern[/^((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d)))(\/((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))|[0-9]+))?$/]`
 
-### <a name="stdlibcompatipv6"></a>`Stdlib::Compat::Ipv6`
+### <a name="Stdlib--Compat--Ipv6"></a>`Stdlib::Compat::Ipv6`
 
 Validate an IPv6 address
 
-Alias of
+Alias of `Pattern[/\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/]`
 
-```puppet
-Pattern[/\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/]
-```
-
-### <a name="stdlibcompatnumeric"></a>`Stdlib::Compat::Numeric`
+### <a name="Stdlib--Compat--Numeric"></a>`Stdlib::Compat::Numeric`
 
 The regex is what's currently used in is_numeric
 validate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.
@@ -7586,23 +7671,15 @@ class example(Stdlib::Compat::Numeric $value) {
 
 This allows you to find all places where a consumers of your code call it with unexpected values.
 
-Alias of
-
-```puppet
-Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\d*)|0)(?:\.\d+)?(?:[eE]-?\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\d*)|0)(?:\.\d+)?(?:[eE]-?\d+)?$/]]]]
-```
+Alias of `Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\d*)|0)(?:\.\d+)?(?:[eE]-?\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\d*)|0)(?:\.\d+)?(?:[eE]-?\d+)?$/]]]]`
 
-### <a name="stdlibcompatstring"></a>`Stdlib::Compat::String`
+### <a name="Stdlib--Compat--String"></a>`Stdlib::Compat::String`
 
 Emulate the is_string and validate_string functions
 
-Alias of
-
-```puppet
-Optional[String]
-```
+Alias of `Optional[String]`
 
-### <a name="stdlibcreateresources"></a>`Stdlib::CreateResources`
+### <a name="Stdlib--CreateResources"></a>`Stdlib::CreateResources`
 
 A type description used for the create_resources function
 
@@ -7626,95 +7703,65 @@ class myclass (
 }
 ```
 
-Alias of
+Alias of `Hash[String[1], Hash[String[1], Any]]`
 
-```puppet
-Hash[String[1], Hash[String[1], Any]]
-```
-
-### <a name="stdlibdatasize"></a>`Stdlib::Datasize`
+### <a name="Stdlib--Datasize"></a>`Stdlib::Datasize`
 
 Validate the size of data
 
-Alias of
-
-```puppet
-Pattern[/^\d+(?i:[kmgt]b?|b)$/]
-```
+Alias of `Pattern[/^\d+(?i:[kmgt]b?|b)$/]`
 
-### <a name="stdlibemail"></a>`Stdlib::Email`
+### <a name="Stdlib--Email"></a>`Stdlib::Email`
 
 https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
 lint:ignore:140chars
 
-Alias of
+Alias of `Pattern[/\A[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\z/]`
 
-```puppet
-Pattern[/\A[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\z/]
-```
-
-### <a name="stdlibensurefile"></a>`Stdlib::Ensure::File`
+### <a name="Stdlib--Ensure--File"></a>`Stdlib::Ensure::File`
 
 Validate the value of the ensure parameter for a file
 
-Alias of
+Alias of `Enum['present', 'file', 'directory', 'link', 'absent']`
 
-```puppet
-Enum['present', 'file', 'directory', 'link', 'absent']
-```
-
-### <a name="stdlibensurefiledirectory"></a>`Stdlib::Ensure::File::Directory`
+### <a name="Stdlib--Ensure--File--Directory"></a>`Stdlib::Ensure::File::Directory`
 
 Validate the ensure parameter of a "directory" file resource
 
-Alias of
+Alias of `Enum['directory', 'absent']`
 
-```puppet
-Enum['directory', 'absent']
-```
-
-### <a name="stdlibensurefilefile"></a>`Stdlib::Ensure::File::File`
+### <a name="Stdlib--Ensure--File--File"></a>`Stdlib::Ensure::File::File`
 
 Validate the ensure parameter of a "file" file resource
 
-Alias of
+Alias of `Enum['file', 'absent']`
 
-```puppet
-Enum['file', 'absent']
-```
-
-### <a name="stdlibensurefilelink"></a>`Stdlib::Ensure::File::Link`
+### <a name="Stdlib--Ensure--File--Link"></a>`Stdlib::Ensure::File::Link`
 
 Validate the ensure parameter of a "link" file resource
 
-Alias of
+Alias of `Enum['link', 'absent']`
 
-```puppet
-Enum['link', 'absent']
-```
+### <a name="Stdlib--Ensure--Package"></a>`Stdlib::Ensure::Package`
 
-### <a name="stdlibensureservice"></a>`Stdlib::Ensure::Service`
+Validate the value of the ensure parameter for a package
 
-Validate the value of the ensure parameter of a service resource
+Alias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]`
 
-Alias of
+### <a name="Stdlib--Ensure--Service"></a>`Stdlib::Ensure::Service`
 
-```puppet
-Enum['stopped', 'running']
-```
+Validate the value of the ensure parameter of a service resource
 
-### <a name="stdlibfilemode"></a>`Stdlib::Filemode`
+Alias of `Enum['stopped', 'running']`
+
+### <a name="Stdlib--Filemode"></a>`Stdlib::Filemode`
 
 See `man chmod.1` for the regular expression for symbolic mode
 lint:ignore:140chars
 
-Alias of
-
-```puppet
-Pattern[/\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\z/]
-```
+Alias of `Pattern[/\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\z/]`
 
-### <a name="stdlibfilesource"></a>`Stdlib::Filesource`
+### <a name="Stdlib--Filesource"></a>`Stdlib::Filesource`
 
 Validate the source parameter on file types
 
@@ -7727,343 +7774,228 @@ Variant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[
   ]]
 ```
 
-### <a name="stdlibfqdn"></a>`Stdlib::Fqdn`
+### <a name="Stdlib--Fqdn"></a>`Stdlib::Fqdn`
 
 Validate a Fully Qualified Domain Name
 
-Alias of
+Alias of `Pattern[/\A(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])\z/]`
 
-```puppet
-Pattern[/\A(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])\z/]
-```
-
-### <a name="stdlibhttpsurl"></a>`Stdlib::HTTPSUrl`
+### <a name="Stdlib--HTTPSUrl"></a>`Stdlib::HTTPSUrl`
 
 Validate a HTTPS URL
 
-Alias of
+Alias of `Pattern[/(?i:\Ahttps:\/\/.*\z)/]`
 
-```puppet
-Pattern[/(?i:\Ahttps:\/\/.*\z)/]
-```
-
-### <a name="stdlibhttpurl"></a>`Stdlib::HTTPUrl`
+### <a name="Stdlib--HTTPUrl"></a>`Stdlib::HTTPUrl`
 
 Validate a HTTP(S) URL
 
-Alias of
-
-```puppet
-Pattern[/(?i:\Ahttps?:\/\/.*\z)/]
-```
+Alias of `Pattern[/(?i:\Ahttps?:\/\/.*\z)/]`
 
-### <a name="stdlibhost"></a>`Stdlib::Host`
+### <a name="Stdlib--Host"></a>`Stdlib::Host`
 
 Validate a host (FQDN or IP address)
 
-Alias of
+Alias of `Variant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]`
 
-```puppet
-Variant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]
-```
+### <a name="Stdlib--Http--Method"></a>`Stdlib::Http::Method`
 
-### <a name="stdlibhttpstatus"></a>`Stdlib::HttpStatus`
+Valid HTTP method verbs
 
-Validate a HTTP status code
+* **See also**
+  * https://www.iana.org/assignments/http-methods/http-methods.xhtml
 
-Alias of
+Alias of `Enum['ACL', 'BASELINE-CONTROL', 'BIND', 'CHECKIN', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'HEAD', 'LABEL', 'LINK', 'LOCK', 'MERGE', 'MKACTIVITY', 'MKCALENDAR', 'MKCOL', 'MKREDIRECTREF', 'MKWORKSPACE', 'MOVE', 'OPTIONS', 'ORDERPATCH', 'PATCH', 'POST', 'PRI', 'PROPFIND', 'PROPPATCH', 'PUT', 'REBIND', 'REPORT', 'SEARCH', 'TRACE', 'UNBIND', 'UNCHECKOUT', 'UNLINK', 'UNLOCK', 'UPDATE', 'UPDATEREDIRECTREF', 'VERSION-CONTROL']`
 
-```puppet
-Integer[100, 599]
-```
+### <a name="Stdlib--Http--Status"></a>`Stdlib::Http::Status`
 
-### <a name="stdlibipaddress"></a>`Stdlib::IP::Address`
+A valid HTTP status code per RFC9110
 
-Validate an IP address
+* **See also**
+  * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes
 
-Alias of
+Alias of `Integer[100, 599]`
 
-```puppet
-Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]
-```
+### <a name="Stdlib--HttpStatus"></a>`Stdlib::HttpStatus`
 
-### <a name="stdlibipaddressnosubnet"></a>`Stdlib::IP::Address::Nosubnet`
+Validate a HTTP status code
 
-Validate an IP address without subnet
+* **See also**
+  * Stdlib::Http::Status
 
-Alias of
+Alias of `Stdlib::Http::Status`
 
-```puppet
-Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]
-```
+### <a name="Stdlib--IP--Address"></a>`Stdlib::IP::Address`
 
-### <a name="stdlibipaddressv4"></a>`Stdlib::IP::Address::V4`
+Validate an IP address
 
-Validate an IPv4 address
+Alias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]`
 
-Alias of
+### <a name="Stdlib--IP--Address--Nosubnet"></a>`Stdlib::IP::Address::Nosubnet`
 
-```puppet
-Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]
-```
+Validate an IP address without subnet
 
-### <a name="stdlibipaddressv4cidr"></a>`Stdlib::IP::Address::V4::CIDR`
+Alias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]`
 
-lint:ignore:140chars
+### <a name="Stdlib--IP--Address--V4"></a>`Stdlib::IP::Address::V4`
 
-Alias of
+Validate an IPv4 address
 
-```puppet
-Pattern[/\A([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\/([0-9]|[12][0-9]|3[0-2])\z/]
-```
+Alias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]`
 
-### <a name="stdlibipaddressv4nosubnet"></a>`Stdlib::IP::Address::V4::Nosubnet`
+### <a name="Stdlib--IP--Address--V4--CIDR"></a>`Stdlib::IP::Address::V4::CIDR`
 
 lint:ignore:140chars
 
-Alias of
+Alias of `Pattern[/\A([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\/([0-9]|[12][0-9]|3[0-2])\z/]`
 
-```puppet
-Pattern[/\A([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/]
-```
+### <a name="Stdlib--IP--Address--V4--Nosubnet"></a>`Stdlib::IP::Address::V4::Nosubnet`
 
-### <a name="stdlibipaddressv6"></a>`Stdlib::IP::Address::V6`
+lint:ignore:140chars
 
-Validate an IPv6 address
+Alias of `Pattern[/\A([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/]`
 
-Alias of
+### <a name="Stdlib--IP--Address--V6"></a>`Stdlib::IP::Address::V6`
 
-```puppet
-Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]
-```
+Validate an IPv6 address
 
-### <a name="stdlibipaddressv6alternative"></a>`Stdlib::IP::Address::V6::Alternative`
+Alias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]`
 
-lint:ignore:140chars
+### <a name="Stdlib--IP--Address--V6--Alternative"></a>`Stdlib::IP::Address::V6::Alternative`
 
-Alias of
+lint:ignore:140chars
 
-```puppet
-Pattern[/\A([[:xdigit:]]{1,4}:){6}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){4}(:[[:xdigit:]]{1,4}){0,1}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){3}(:[[:xdigit:]]{1,4}){0,2}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){2}(:[[:xdigit:]]{1,4}){0,3}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){1}(:[[:xdigit:]]{1,4}){0,4}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A:(:[[:xdigit:]]{1,4}){0,5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]
-```
+Alias of `Pattern[/\A([[:xdigit:]]{1,4}:){6}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){4}(:[[:xdigit:]]{1,4}){0,1}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){3}(:[[:xdigit:]]{1,4}){0,2}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){2}(:[[:xdigit:]]{1,4}){0,3}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){1}(:[[:xdigit:]]{1,4}){0,4}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A:(:[[:xdigit:]]{1,4}){0,5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]`
 
-### <a name="stdlibipaddressv6cidr"></a>`Stdlib::IP::Address::V6::CIDR`
+### <a name="Stdlib--IP--Address--V6--CIDR"></a>`Stdlib::IP::Address::V6::CIDR`
 
 lint:ignore:140chars
 
-Alias of
+Alias of `Pattern[/\A((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])?\z/]`
 
-```puppet
-Pattern[/\A((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])?\z/]
-```
-
-### <a name="stdlibipaddressv6compressed"></a>`Stdlib::IP::Address::V6::Compressed`
+### <a name="Stdlib--IP--Address--V6--Compressed"></a>`Stdlib::IP::Address::V6::Compressed`
 
 Validate a compressed IPv6 address
 
-Alias of
+Alias of `Pattern[/\A:(:|(:[[:xdigit:]]{1,4}){1,7})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){1}(:|(:[[:xdigit:]]{1,4}){1,6})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){2}(:|(:[[:xdigit:]]{1,4}){1,5})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){3}(:|(:[[:xdigit:]]{1,4}){1,4})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){4}(:|(:[[:xdigit:]]{1,4}){1,3})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){5}(:|(:[[:xdigit:]]{1,4}){1,2})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){6}(:|(:[[:xdigit:]]{1,4}){1,1})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){7}:(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]`
 
-```puppet
-Pattern[/\A:(:|(:[[:xdigit:]]{1,4}){1,7})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){1}(:|(:[[:xdigit:]]{1,4}){1,6})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){2}(:|(:[[:xdigit:]]{1,4}){1,5})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){3}(:|(:[[:xdigit:]]{1,4}){1,4})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){4}(:|(:[[:xdigit:]]{1,4}){1,3})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){5}(:|(:[[:xdigit:]]{1,4}){1,2})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){6}(:|(:[[:xdigit:]]{1,4}){1,1})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){7}:(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]
-```
-
-### <a name="stdlibipaddressv6full"></a>`Stdlib::IP::Address::V6::Full`
+### <a name="Stdlib--IP--Address--V6--Full"></a>`Stdlib::IP::Address::V6::Full`
 
 Validate a full IPv6 address
 
-Alias of
-
-```puppet
-Pattern[/\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]
-```
+Alias of `Pattern[/\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]`
 
-### <a name="stdlibipaddressv6nosubnet"></a>`Stdlib::IP::Address::V6::Nosubnet`
+### <a name="Stdlib--IP--Address--V6--Nosubnet"></a>`Stdlib::IP::Address::V6::Nosubnet`
 
 Validate an IPv6 address without subnet
 
-Alias of
-
-```puppet
-Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]
-```
+Alias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]`
 
-### <a name="stdlibipaddressv6nosubnetalternative"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`
+### <a name="Stdlib--IP--Address--V6--Nosubnet--Alternative"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`
 
 lint:ignore:140chars
 
-Alias of
-
-```puppet
-Pattern[/\A([[:xdigit:]]{1,4}:){6}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){4}(:[[:xdigit:]]{1,4}){0,1}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){3}(:[[:xdigit:]]{1,4}){0,2}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){2}(:[[:xdigit:]]{1,4}){0,3}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){1}(:[[:xdigit:]]{1,4}){0,4}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A:(:[[:xdigit:]]{1,4}){0,5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/]
-```
+Alias of `Pattern[/\A([[:xdigit:]]{1,4}:){6}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){4}(:[[:xdigit:]]{1,4}){0,1}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){3}(:[[:xdigit:]]{1,4}){0,2}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){2}(:[[:xdigit:]]{1,4}){0,3}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){1}(:[[:xdigit:]]{1,4}){0,4}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A:(:[[:xdigit:]]{1,4}){0,5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/]`
 
-### <a name="stdlibipaddressv6nosubnetcompressed"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`
+### <a name="Stdlib--IP--Address--V6--Nosubnet--Compressed"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`
 
 Validate compressed IPv6 address without subnet
 
-Alias of
+Alias of `Pattern[/\A:(:|(:[[:xdigit:]]{1,4}){1,7})\z/, /\A([[:xdigit:]]{1,4}:){1}(:|(:[[:xdigit:]]{1,4}){1,6})\z/, /\A([[:xdigit:]]{1,4}:){2}(:|(:[[:xdigit:]]{1,4}){1,5})\z/, /\A([[:xdigit:]]{1,4}:){3}(:|(:[[:xdigit:]]{1,4}){1,4})\z/, /\A([[:xdigit:]]{1,4}:){4}(:|(:[[:xdigit:]]{1,4}){1,3})\z/, /\A([[:xdigit:]]{1,4}:){5}(:|(:[[:xdigit:]]{1,4}){1,2})\z/, /\A([[:xdigit:]]{1,4}:){6}(:|(:[[:xdigit:]]{1,4}){1,1})\z/, /\A([[:xdigit:]]{1,4}:){7}:\z/]`
 
-```puppet
-Pattern[/\A:(:|(:[[:xdigit:]]{1,4}){1,7})\z/, /\A([[:xdigit:]]{1,4}:){1}(:|(:[[:xdigit:]]{1,4}){1,6})\z/, /\A([[:xdigit:]]{1,4}:){2}(:|(:[[:xdigit:]]{1,4}){1,5})\z/, /\A([[:xdigit:]]{1,4}:){3}(:|(:[[:xdigit:]]{1,4}){1,4})\z/, /\A([[:xdigit:]]{1,4}:){4}(:|(:[[:xdigit:]]{1,4}){1,3})\z/, /\A([[:xdigit:]]{1,4}:){5}(:|(:[[:xdigit:]]{1,4}){1,2})\z/, /\A([[:xdigit:]]{1,4}:){6}(:|(:[[:xdigit:]]{1,4}){1,1})\z/, /\A([[:xdigit:]]{1,4}:){7}:\z/]
-```
-
-### <a name="stdlibipaddressv6nosubnetfull"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`
+### <a name="Stdlib--IP--Address--V6--Nosubnet--Full"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`
 
 Validate full IPv6 address without subnet
 
-Alias of
-
-```puppet
-Pattern[/\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\z/]
-```
+Alias of `Pattern[/\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\z/]`
 
-### <a name="stdlibmac"></a>`Stdlib::MAC`
+### <a name="Stdlib--MAC"></a>`Stdlib::MAC`
 
 A type for a MAC address
 
-Alias of
+Alias of `Pattern[/\A([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})\z/, /\A([0-9A-Fa-f]{2}[:-]){19}([0-9A-Fa-f]{2})\z/]`
 
-```puppet
-Pattern[/\A([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})\z/, /\A([0-9A-Fa-f]{2}[:-]){19}([0-9A-Fa-f]{2})\z/]
-```
-
-### <a name="stdlibobjectstore"></a>`Stdlib::ObjectStore`
+### <a name="Stdlib--ObjectStore"></a>`Stdlib::ObjectStore`
 
 Validate an ObjectStore
 
-Alias of
-
-```puppet
-Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]
-```
+Alias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]`
 
-### <a name="stdlibobjectstoregsuri"></a>`Stdlib::ObjectStore::GSUri`
+### <a name="Stdlib--ObjectStore--GSUri"></a>`Stdlib::ObjectStore::GSUri`
 
 Validate a Google Cloud object store URI
 
-Alias of
-
-```puppet
-Pattern[/\Ags:\/\/.*\z/]
-```
+Alias of `Pattern[/\Ags:\/\/.*\z/]`
 
-### <a name="stdlibobjectstores3uri"></a>`Stdlib::ObjectStore::S3Uri`
+### <a name="Stdlib--ObjectStore--S3Uri"></a>`Stdlib::ObjectStore::S3Uri`
 
 Validate an Amazon Web Services S3 object store URI
 
-Alias of
+Alias of `Pattern[/\As3:\/\/.*\z/]`
 
-```puppet
-Pattern[/\As3:\/\/.*\z/]
-```
-
-### <a name="stdlibport"></a>`Stdlib::Port`
+### <a name="Stdlib--Port"></a>`Stdlib::Port`
 
 Validate a port number
 
-Alias of
+Alias of `Integer[0, 65535]`
 
-```puppet
-Integer[0, 65535]
-```
-
-### <a name="stdlibportdynamic"></a>`Stdlib::Port::Dynamic`
+### <a name="Stdlib--Port--Dynamic"></a>`Stdlib::Port::Dynamic`
 
 Validate a dynamic port number
 
-Alias of
-
-```puppet
-Integer[49152, 65535]
-```
+Alias of `Integer[49152, 65535]`
 
-### <a name="stdlibportephemeral"></a>`Stdlib::Port::Ephemeral`
+### <a name="Stdlib--Port--Ephemeral"></a>`Stdlib::Port::Ephemeral`
 
 Validate an ephemeral port number
 
-Alias of
-
-```puppet
-Stdlib::Port::Dynamic
-```
+Alias of `Stdlib::Port::Dynamic`
 
-### <a name="stdlibportprivileged"></a>`Stdlib::Port::Privileged`
+### <a name="Stdlib--Port--Privileged"></a>`Stdlib::Port::Privileged`
 
 Validate a priviliged port number
 
-Alias of
-
-```puppet
-Integer[1, 1023]
-```
+Alias of `Integer[1, 1023]`
 
-### <a name="stdlibportregistered"></a>`Stdlib::Port::Registered`
+### <a name="Stdlib--Port--Registered"></a>`Stdlib::Port::Registered`
 
 Validate a registered port number
 
-Alias of
-
-```puppet
-Stdlib::Port::User
-```
+Alias of `Stdlib::Port::User`
 
-### <a name="stdlibportunprivileged"></a>`Stdlib::Port::Unprivileged`
+### <a name="Stdlib--Port--Unprivileged"></a>`Stdlib::Port::Unprivileged`
 
 Validate an unprivileged port number
 
-Alias of
+Alias of `Integer[1024, 65535]`
 
-```puppet
-Integer[1024, 65535]
-```
-
-### <a name="stdlibportuser"></a>`Stdlib::Port::User`
+### <a name="Stdlib--Port--User"></a>`Stdlib::Port::User`
 
 Validate a port number usable by a user
 
-Alias of
+Alias of `Integer[1024, 49151]`
 
-```puppet
-Integer[1024, 49151]
-```
-
-### <a name="stdlibsyslogfacility"></a>`Stdlib::Syslogfacility`
+### <a name="Stdlib--Syslogfacility"></a>`Stdlib::Syslogfacility`
 
 Validate a syslog facility
 
-Alias of
-
-```puppet
-Enum['kern', 'user', 'mail', 'daemon', 'auth', 'syslog', 'lpr', 'news', 'uucp', 'cron', 'authpriv', 'ftp', 'ntp', 'security', 'console', 'solaris-cron', 'local0', 'local1', 'local2', 'local3', 'local4', 'local5', 'local6', 'local7']
-```
+Alias of `Enum['kern', 'user', 'mail', 'daemon', 'auth', 'syslog', 'lpr', 'news', 'uucp', 'cron', 'authpriv', 'ftp', 'ntp', 'security', 'console', 'solaris-cron', 'local0', 'local1', 'local2', 'local3', 'local4', 'local5', 'local6', 'local7']`
 
-### <a name="stdlibunixpath"></a>`Stdlib::Unixpath`
+### <a name="Stdlib--Unixpath"></a>`Stdlib::Unixpath`
 
 this regex rejects any path component that does not start with "/" or is NUL
 
-Alias of
+Alias of `Pattern[/\A\/([^\n\/\0]+\/*)*\z/]`
 
-```puppet
-Pattern[/\A\/([^\n\/\0]+\/*)*\z/]
-```
-
-### <a name="stdlibwindowspath"></a>`Stdlib::Windowspath`
+### <a name="Stdlib--Windowspath"></a>`Stdlib::Windowspath`
 
 Validate a Windows path
 
-Alias of
-
-```puppet
-Pattern[/\A(([a-zA-Z]:[\\\/])|([\\\/][\\\/][^\\\/]+[\\\/][^\\\/]+)|([\\\/][\\\/]\?[\\\/][^\\\/]+)).*\z/]
-```
+Alias of `Pattern[/\A(([a-zA-Z]:[\\\/])|([\\\/][\\\/][^\\\/]+[\\\/][^\\\/]+)|([\\\/][\\\/]\?[\\\/][^\\\/]+)).*\z/]`
 
-### <a name="stdlibyes_no"></a>`Stdlib::Yes_no`
+### <a name="Stdlib--Yes_no"></a>`Stdlib::Yes_no`
 
 Validate a yes / no value
 
-Alias of
-
-```puppet
-Pattern[/\A(?i:(yes|no))\z/]
-```
+Alias of `Pattern[/\A(?i:(yes|no))\z/]`
 
diff --git a/Rakefile b/Rakefile
deleted file mode 100644
index 6c56b665..00000000
--- a/Rakefile
+++ /dev/null
@@ -1,90 +0,0 @@
-# frozen_string_literal: true
-
-require 'bundler'
-require 'puppet_litmus/rake_tasks' if Bundler.rubygems.find_name('puppet_litmus').any?
-require 'puppetlabs_spec_helper/rake_tasks'
-require 'puppet-syntax/tasks/puppet-syntax'
-require 'puppet_blacksmith/rake_tasks' if Bundler.rubygems.find_name('puppet-blacksmith').any?
-require 'github_changelog_generator/task' if Bundler.rubygems.find_name('github_changelog_generator').any?
-require 'puppet-strings/tasks' if Bundler.rubygems.find_name('puppet-strings').any?
-
-def changelog_user
-  return unless Rake.application.top_level_tasks.include? "changelog"
-  returnVal = nil || JSON.load(File.read('metadata.json'))['author']
-  raise "unable to find the changelog_user in .sync.yml, or the author in metadata.json" if returnVal.nil?
-  puts "GitHubChangelogGenerator user:#{returnVal}"
-  returnVal
-end
-
-def changelog_project
-  return unless Rake.application.top_level_tasks.include? "changelog"
-
-  returnVal = nil
-  returnVal ||= begin
-    metadata_source = JSON.load(File.read('metadata.json'))['source']
-    metadata_source_match = metadata_source && metadata_source.match(%r{.*\/([^\/]*?)(?:\.git)?\Z})
-
-    metadata_source_match && metadata_source_match[1]
-  end
-
-  raise "unable to find the changelog_project in .sync.yml or calculate it from the source in metadata.json" if returnVal.nil?
-
-  puts "GitHubChangelogGenerator project:#{returnVal}"
-  returnVal
-end
-
-def changelog_future_release
-  return unless Rake.application.top_level_tasks.include? "changelog"
-  returnVal = "v%s" % JSON.load(File.read('metadata.json'))['version']
-  raise "unable to find the future_release (version) in metadata.json" if returnVal.nil?
-  puts "GitHubChangelogGenerator future_release:#{returnVal}"
-  returnVal
-end
-
-PuppetLint.configuration.send('disable_relative')
-
-
-if Bundler.rubygems.find_name('github_changelog_generator').any?
-  GitHubChangelogGenerator::RakeTask.new :changelog do |config|
-    raise "Set CHANGELOG_GITHUB_TOKEN environment variable eg 'export CHANGELOG_GITHUB_TOKEN=valid_token_here'" if Rake.application.top_level_tasks.include? "changelog" and ENV['CHANGELOG_GITHUB_TOKEN'].nil?
-    config.user = "#{changelog_user}"
-    config.project = "#{changelog_project}"
-    config.max_issues = 500
-    config.future_release = "#{changelog_future_release}"
-    config.exclude_labels = ['maintenance']
-    config.header = "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org)."
-    config.add_pr_wo_labels = true
-    config.issues = false
-    config.merge_prefix = "### UNCATEGORIZED PRS; LABEL THEM ON GITHUB"
-    config.configure_sections = {
-      "Changed" => {
-        "prefix" => "### Changed",
-        "labels" => ["backwards-incompatible"],
-      },
-      "Added" => {
-        "prefix" => "### Added",
-        "labels" => ["enhancement", "feature"],
-      },
-      "Fixed" => {
-        "prefix" => "### Fixed",
-        "labels" => ["bug", "documentation", "bugfix"],
-      },
-    }
-  end
-else
-  desc 'Generate a Changelog from GitHub'
-  task :changelog do
-    raise <<EOM
-The changelog tasks depends on recent features of the github_changelog_generator gem.
-Please manually add it to your .sync.yml for now, and run `pdk update`:
----
-Gemfile:
-  optional:
-    ':development':
-      - gem: 'github_changelog_generator'
-        version: '~> 1.15'
-        condition: "Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.3.0')"
-EOM
-  end
-end
-
diff --git a/debian/changelog b/debian/changelog
index 2c278c60..06bc1eee 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+puppet-module-puppetlabs-stdlib (8.6.0-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sat, 13 May 2023 02:05:39 -0000
+
 puppet-module-puppetlabs-stdlib (8.5.0-1) unstable; urgency=medium
 
   * New upstream release
diff --git a/functions/ensure.pp b/functions/ensure.pp
index b4ea17b2..9b63d44e 100644
--- a/functions/ensure.pp
+++ b/functions/ensure.pp
@@ -3,7 +3,7 @@
 # @return [String]
 function stdlib::ensure(
   Variant[Boolean, Enum['present', 'absent']] $ensure,
-  Enum['directory', 'link', 'mounted', 'service', 'file', 'package'] $resource,
+  Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef,
 ) >> String {
   $_ensure = $ensure ? {
     Boolean => $ensure.bool2str('present', 'absent'),
@@ -22,6 +22,7 @@ function stdlib::ensure(
         default   => 'stopped',
       }
     }
+    undef: { $_ensure }
     default: {
       $_ensure ? {
         'present' => $resource,
diff --git a/lib/facter/package_provider.rb b/lib/facter/package_provider.rb
index 02a1724c..c5c1ef85 100644
--- a/lib/facter/package_provider.rb
+++ b/lib/facter/package_provider.rb
@@ -16,10 +16,6 @@ require 'puppet/type/package'
 Facter.add(:package_provider) do
   # Instantiates a dummy package resource and return the provider
   setcode do
-    if defined? Gem && Gem::Version.new(Facter.value(:puppetversion).split(' ')[0]) >= Gem::Version.new('3.6')
-      Puppet::Type.type(:package).newpackage(name: 'dummy', allow_virtual: 'true')[:provider].to_s
-    else
-      Puppet::Type.type(:package).newpackage(name: 'dummy')[:provider].to_s
-    end
+    Puppet::Type.type(:package).newpackage(name: 'dummy', allow_virtual: 'true')[:provider].to_s
   end
 end
diff --git a/lib/facter/root_home.rb b/lib/facter/root_home.rb
index 257a1821..c44d64a7 100644
--- a/lib/facter/root_home.rb
+++ b/lib/facter/root_home.rb
@@ -1,49 +1,11 @@
 # frozen_string_literal: true
 
-# root_home.rb
-module Facter::Util::RootHome
-  # @summary
-  #   A facter fact to determine the root home directory.
-  #   This varies on PE supported platforms and may be
-  #   reconfigured by the end user.
-  class << self
-    # determines the root home directory
-    def returnt_root_home
-      root_ent = Facter::Util::Resolution.exec('getent passwd root')
-      # The home directory is the sixth element in the passwd entry
-      # If the platform doesn't have getent, root_ent will be nil and we should
-      # return it straight away.
-      root_ent && root_ent.split(':')[5]
-    end
-  end
-end
-
-Facter.add(:root_home) do
-  setcode { Facter::Util::RootHome.returnt_root_home }
-end
-
-Facter.add(:root_home) do
-  confine kernel: :darwin
-  setcode do
-    str = Facter::Util::Resolution.exec('dscacheutil -q user -a name root')
-    hash = {}
-    str.split("\n").each do |pair|
-      key, value = pair.split(%r{:})
-      hash[key] = value
-    end
-    hash['dir'].strip
-  end
-end
-
 Facter.add(:root_home) do
-  confine kernel: :aix
-  root_home = nil
   setcode do
-    str = Facter::Util::Resolution.exec('lsuser -c -a home root')
-    str&.split("\n")&.each do |line|
-      next if %r{^#}.match?(line)
-      root_home = line.split(%r{:})[1]
-    end
-    root_home
+    require 'etc'
+  rescue LoadError
+  # Unavailable on platforms like Windows
+  else
+    Etc.getpwnam('root')&.dir
   end
 end
diff --git a/lib/puppet/functions/ensure_packages.rb b/lib/puppet/functions/ensure_packages.rb
index 5cfbd5a3..321667c6 100644
--- a/lib/puppet/functions/ensure_packages.rb
+++ b/lib/puppet/functions/ensure_packages.rb
@@ -6,34 +6,56 @@
 # third argument to the ensure_resource() function.
 Puppet::Functions.create_function(:ensure_packages, Puppet::Functions::InternalFunction) do
   # @param packages
-  #   The packages to ensure are installed. If it's a Hash it will be passed to `ensure_resource`
+  #   The packages to ensure are installed.
   # @param default_attributes
   #   Default attributes to be passed to the `ensure_resource()` function
   # @return [Undef] Returns nothing.
   dispatch :ensure_packages do
     scope_param
-    param 'Variant[String[1], Array[String[1]], Hash[String[1], Any]]', :packages
+    param 'Variant[String[1], Array[String[1]]]', :packages
     optional_param 'Hash', :default_attributes
     return_type 'Undef'
   end
 
-  def ensure_packages(scope, packages, default_attributes = nil)
-    if default_attributes
+  # @param packages
+  #   The packages to ensure are installed. The keys are packages and values are the attributes specific to that package.
+  # @param default_attributes
+  #   Default attributes. Package specific attributes from the `packages` parameter will take precedence.
+  # @return [Undef] Returns nothing.
+  dispatch :ensure_packages_hash do
+    scope_param
+    param 'Hash[String[1], Any]', :packages
+    optional_param 'Hash', :default_attributes
+    return_type 'Undef'
+  end
+
+  def ensure_packages(scope, packages, default_attributes = {})
+    Array(packages).each do |package_name|
       defaults = { 'ensure' => 'installed' }.merge(default_attributes)
-      if defaults['ensure'] == 'present'
-        defaults['ensure'] = 'installed'
-      end
-    else
-      defaults = { 'ensure' => 'installed' }
+
+      # `present` and `installed` are aliases for the `ensure` attribute. If `ensure` is set to either of these values replace
+      # with `installed` by default but `present` if this package is already in the catalog with `ensure => present`
+      defaults['ensure'] = default_ensure(package_name) if ['present', 'installed'].include?(defaults['ensure'])
+
+      scope.call_function('ensure_resource', ['package', package_name, defaults])
     end
+    nil
+  end
 
-    if packages.is_a?(Hash)
-      scope.call_function('ensure_resources', ['package', packages.dup, defaults])
-    else
-      Array(packages).each do |package_name|
-        scope.call_function('ensure_resource', ['package', package_name, defaults])
-      end
+  def ensure_packages_hash(scope, packages, default_attributes = {})
+    packages.each do |package, attributes|
+      ensure_packages(scope, package, default_attributes.merge(attributes))
     end
     nil
   end
+
+  private
+
+  def default_ensure(package_name)
+    if call_function('defined_with_params', "Package[#{package_name}]", { 'ensure' => 'present' })
+      'present'
+    else
+      'installed'
+    end
+  end
 end
diff --git a/lib/puppet/functions/stdlib/crc32.rb b/lib/puppet/functions/stdlib/crc32.rb
new file mode 100644
index 00000000..36b2a6ca
--- /dev/null
+++ b/lib/puppet/functions/stdlib/crc32.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require 'zlib'
+# @note
+#   The CRC32 algorithm can easily generate collisions,
+#   but may be useful for generating sharding, describing
+#   secrets, or seeding nonce values.
+#
+# @summary
+#   Run a CRC32 calculation against a given value.
+Puppet::Functions.create_function(:'stdlib::crc32') do
+  # @param my_data The ScalarData to evaluate
+  # @example Check a simple string value
+  #   stdlib::crc32('my string') == '18fbd270'
+  # @example Check a Sensitive datatype
+  #   stdlib::crc32(sensitive('my string')) == '18fbd270'
+  # @example Check a number
+  #   stdlib::crc32(100.0) == 'a3fd429a'
+  #   stdlib::crc32(100.00000) == 'a3fd429a'
+  # @return String
+  dispatch :crc32 do
+    param 'Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]', :my_data
+    return_type 'String'
+  end
+
+  def crc32(my_data)
+    Zlib.crc32(my_data.unwrap.to_s).to_s(16).downcase
+  rescue
+    Zlib.crc32(my_data.to_s).to_s(16).downcase
+  end
+end
diff --git a/lib/puppet/functions/stdlib/sha256.rb b/lib/puppet/functions/stdlib/sha256.rb
new file mode 100644
index 00000000..4b9b6c24
--- /dev/null
+++ b/lib/puppet/functions/stdlib/sha256.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+require 'digest'
+# @summary
+#   Run a SHA256 calculation against a given value.
+Puppet::Functions.create_function(:'stdlib::sha256') do
+  # @param my_data The ScalarData to evaluate
+  # @example Check a simple string value
+  #   stdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'
+  # @example Check a Sensitive datatype
+  #   stdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5'
+  # @example Check a number
+  #   stdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'
+  #   stdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0'
+  # @return String
+  dispatch :sha256 do
+    param 'Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]', :my_data
+    return_type 'String'
+  end
+
+  def sha256(my_data)
+    Digest::SHA256.hexdigest(my_data.unwrap.to_s)
+  rescue
+    Digest::SHA256.hexdigest(my_data.to_s)
+  end
+end
diff --git a/lib/puppet/parser/functions/pw_hash.rb b/lib/puppet/parser/functions/pw_hash.rb
index 67346efe..a99a3ea2 100644
--- a/lib/puppet/parser/functions/pw_hash.rb
+++ b/lib/puppet/parser/functions/pw_hash.rb
@@ -25,7 +25,9 @@ Puppet::Parser::Functions.newfunction(:pw_hash, type: :rvalue, arity: 3, doc: <<
   |bcrypt-x |2x    |bug compatible       |
   |bcrypt-y |2y    |historic alias for 2b|
 
-  The third argument to this function is the salt to use.
+  The third argument to this function is the salt to use. For bcrypt-type hashes,
+  the first two characters of the salt represent a strength parameter, with a value
+  between 4 and 31 inclusive.
 
   @return [String]
     Provides a crypt hash usable on most POSIX systems.
@@ -48,10 +50,10 @@ Puppet::Parser::Functions.newfunction(:pw_hash, type: :rvalue, arity: 3, doc: <<
     'md5'       => { prefix: '1' },
     'sha-256'   => { prefix: '5' },
     'sha-512'   => { prefix: '6' },
-    'bcrypt'    => { prefix: '2b', salt: %r{^[0-9]{2}\$[./A-Za-z0-9]{22}} },
-    'bcrypt-a'  => { prefix: '2a', salt: %r{^[0-9]{2}\$[./A-Za-z0-9]{22}} },
-    'bcrypt-x'  => { prefix: '2x', salt: %r{^[0-9]{2}\$[./A-Za-z0-9]{22}} },
-    'bcrypt-y'  => { prefix: '2y', salt: %r{^[0-9]{2}\$[./A-Za-z0-9]{22}} },
+    'bcrypt'    => { prefix: '2b', salt: %r{^(0[4-9]|[12][0-9]|3[01])\$[./A-Za-z0-9]{22}} },
+    'bcrypt-a'  => { prefix: '2a', salt: %r{^(0[4-9]|[12][0-9]|3[01])\$[./A-Za-z0-9]{22}} },
+    'bcrypt-x'  => { prefix: '2x', salt: %r{^(0[4-9]|[12][0-9]|3[01])\$[./A-Za-z0-9]{22}} },
+    'bcrypt-y'  => { prefix: '2y', salt: %r{^(0[4-9]|[12][0-9]|3[01])\$[./A-Za-z0-9]{22}} },
   }
 
   raise ArgumentError, 'pw_hash(): first argument must be a string' unless args[0].is_a?(String) || args[0].nil?
diff --git a/metadata.json b/metadata.json
index 98f6317e..7f56f78c 100644
--- a/metadata.json
+++ b/metadata.json
@@ -1,6 +1,6 @@
 {
   "name": "puppetlabs-stdlib",
-  "version": "8.5.0",
+  "version": "8.6.0",
   "author": "puppetlabs",
   "summary": "Standard library of resources for Puppet modules.",
   "license": "Apache-2.0",
@@ -106,5 +106,5 @@
   "description": "Standard Library for Puppet Modules",
   "pdk-version": "2.5.0",
   "template-url": "https://github.com/puppetlabs/pdk-templates#main",
-  "template-ref": "tags/2.6.0-0-gd0490b9"
+  "template-ref": "2.7.1-0-g9a16c87"
 }
diff --git a/spec/acceptance/anchor_spec.rb b/spec/acceptance/anchor_spec.rb
deleted file mode 100644
index 9136b662..00000000
--- a/spec/acceptance/anchor_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper_acceptance'
-
-describe 'anchor type' do
-  let(:pp) do
-    <<-MANIFEST
-      class anchored {
-        anchor { 'anchored::begin': }
-        ~> anchor { 'anchored::end': }
-      }
-
-      class anchorrefresh {
-        notify { 'first': }
-        ~> class { 'anchored': }
-        ~> anchor { 'final': }
-      }
-
-      include anchorrefresh
-    MANIFEST
-  end
-
-  it 'applies manifest, anchors resources in correct order' do
-    apply_manifest(pp) do |r|
-      expect(r.stdout).to match(%r{Anchor\[final\]: Triggered 'refresh'})
-    end
-  end
-end
diff --git a/spec/acceptance/file_line_spec.rb b/spec/acceptance/file_line_spec.rb
deleted file mode 100644
index 6971c2ef..00000000
--- a/spec/acceptance/file_line_spec.rb
+++ /dev/null
@@ -1,154 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper_acceptance'
-
-describe 'file_line type' do
-  let(:test_file) { (os[:family] == 'windows') ? 'C:\test\file_line_test.txt' : '/tmp/test/testfile_line_test.txt' }
-
-  before(:all) do
-    apply_manifest(<<-MANIFEST)
-      case($facts['os']['family']) {
-        windows: { file { 'C:\\test': ensure => directory } }
-        default: { file { '/tmp/test': ensure => directory } }
-      }
-    MANIFEST
-  end
-
-  before(:each) do
-    pp_test_file = <<-MANIFEST
-      file { '#{test_file}':
-        ensure  => present,
-        content => 'a wild test file has appeared!',
-      }
-      file { '#{test_file}.does_not_exist':
-        ensure => absent,
-      }
-    MANIFEST
-    apply_manifest(pp_test_file)
-  end
-
-  context 'ensure line' do
-    let(:pp) do
-      <<-MANIFEST
-        file_line { 'test_ensure':
-          path => '#{test_file}',
-          line => 'test file uses attack!',
-        }
-      MANIFEST
-    end
-
-    it 'applies manifest, adds line' do
-      idempotent_apply(pp)
-      expect(file(test_file)).to be_file
-      expect(file(test_file).content).to match(%r{test file uses attack!})
-    end
-  end
-
-  context 'matches and replaces line' do
-    let(:pp) do
-      <<-MANIFEST
-        file_line { 'test_match':
-          path  => '#{test_file}',
-          line  => 'a tame test file has appeared!',
-          match => '^a wild',
-        }
-      MANIFEST
-    end
-
-    it 'applies manifest, replaces line' do
-      idempotent_apply(pp)
-      expect(file(test_file)).to be_file
-      expect(file(test_file).content).to match(%r{a tame test file has appeared!})
-    end
-  end
-
-  context 'remove line' do
-    context 'using match' do
-      let(:pp) do
-        <<-MANIFEST
-          file_line { 'test_absent_match':
-            ensure            => absent,
-            path              => '#{test_file}',
-            match             => '^a wild',
-            match_for_absence => true,
-          }
-        MANIFEST
-      end
-
-      it 'applies manifest, removes line' do
-        idempotent_apply(pp)
-        expect(file(test_file)).to be_file
-        expect(file(test_file).content).to be_empty
-      end
-    end
-
-    context 'using line' do
-      let(:pp) do
-        <<-MANIFEST
-          file_line { 'test_absent_line':
-            ensure => absent,
-            path   => '#{test_file}',
-            line   => 'a wild test file has appeared!',
-          }
-        MANIFEST
-      end
-
-      it 'applies manifest, removes line' do
-        idempotent_apply(pp)
-        expect(file(test_file)).to be_file
-        expect(file(test_file).content).to be_empty
-      end
-    end
-  end
-
-  context 'when file does not exist' do
-    context 'with ensure => present' do
-      let(:pp) do
-        <<~MANIFEST
-          file_line { 'test_absent_file':
-            ensure => present,
-            path   => '#{test_file}.does_not_exist',
-            line   => 'this file does not exist',
-          }
-        MANIFEST
-      end
-
-      it 'fails to apply manifest' do
-        apply_manifest(pp, expect_failures: true)
-      end
-    end
-
-    context 'with ensure => present and noop => true' do
-      let(:pp) do
-        <<~MANIFEST
-          file_line { 'test_absent_file':
-            ensure => present,
-            path   => '#{test_file}.does_not_exist',
-            line   => 'this file does not exist',
-            noop   => true,
-          }
-        MANIFEST
-      end
-
-      it 'would apply manifest' do
-        apply_manifest(pp, catch_failures: true)
-      end
-    end
-
-    context 'with ensure => present, in noop mode' do
-      let(:pp) do
-        <<~MANIFEST
-          file_line { 'test_absent_file':
-            ensure => present,
-            path   => '#{test_file}.does_not_exist',
-            line   => 'this file does not exist',
-          }
-        MANIFEST
-      end
-
-      it 'would apply manifest' do
-        apply_manifest(pp, catch_failures: true, noop: true)
-      end
-    end
-  end
-end
diff --git a/spec/classes/manage_spec.rb b/spec/classes/manage_spec.rb
deleted file mode 100644
index af41354f..00000000
--- a/spec/classes/manage_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'stdlib::manage' do
-  on_supported_os.each do |os, os_facts|
-    context "on #{os}" do
-      let(:facts) { os_facts }
-
-      it { is_expected.to compile }
-    end
-  end
-
-  describe 'with resources to create' do
-    let :pre_condition do
-      <<-PRECOND
-        file { '/etc/motd.d' : }
-        service { 'sshd' : }
-      PRECOND
-    end
-    let :params do
-      {
-        'create_resources' => {
-          'file' => {
-            '/etc/motd.d/hello' => {
-              'content' => 'I say Hi',
-              'notify' => 'Service[sshd]',
-            }
-          },
-          'package' => {
-            'example' => {
-              'ensure' => 'installed',
-              'subscribe' => ['Service[sshd]', 'File[/etc/motd.d]'],
-            }
-          }
-        }
-      }
-    end
-
-    it { is_expected.to compile }
-    it { is_expected.to contain_file('/etc/motd.d/hello').with_content('I say Hi').with_notify('Service[sshd]') }
-    it { is_expected.to contain_package('example').with_ensure('installed').that_subscribes_to(['Service[sshd]', 'File[/etc/motd.d]']) }
-  end
-end
diff --git a/spec/default_facts.yml b/spec/default_facts.yml
deleted file mode 100644
index f777abfc..00000000
--- a/spec/default_facts.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-# Use default_module_facts.yml for module specific facts.
-#
-# Facts specified here will override the values provided by rspec-puppet-facts.
----
-ipaddress: "172.16.254.254"
-ipaddress6: "FE80:0000:0000:0000:AAAA:AAAA:AAAA"
-is_pe: false
-macaddress: "AA:AA:AA:AA:AA:AA"
diff --git a/spec/fixtures/dscacheutil/root b/spec/fixtures/dscacheutil/root
deleted file mode 100644
index 1e34519b..00000000
--- a/spec/fixtures/dscacheutil/root
+++ /dev/null
@@ -1,8 +0,0 @@
-name: root
-password: *
-uid: 0
-gid: 0
-dir: /var/root
-shell: /bin/bash
-gecos: rawr Root
-
diff --git a/spec/fixtures/lsuser/root b/spec/fixtures/lsuser/root
deleted file mode 100644
index afd59ca4..00000000
--- a/spec/fixtures/lsuser/root
+++ /dev/null
@@ -1,2 +0,0 @@
-#name:home
-root:/root
diff --git a/spec/fixtures/test/manifests/base32.pp b/spec/fixtures/test/manifests/base32.pp
deleted file mode 100644
index 3c01b73b..00000000
--- a/spec/fixtures/test/manifests/base32.pp
+++ /dev/null
@@ -1,6 +0,0 @@
-# Class to test the Stdlib::Base32 type alias
-class test::base32 (
-  Stdlib::Base32 $value,
-) {
-  notice('Success')
-}
diff --git a/spec/fixtures/test/manifests/base64.pp b/spec/fixtures/test/manifests/base64.pp
deleted file mode 100644
index 1870c822..00000000
--- a/spec/fixtures/test/manifests/base64.pp
+++ /dev/null
@@ -1,6 +0,0 @@
-# Class to test the Stdlib::Base64 type alias
-class test::base64 (
-  Stdlib::Base64 $value,
-) {
-  notice('Success')
-}
diff --git a/spec/fixtures/test/manifests/deftype.pp b/spec/fixtures/test/manifests/deftype.pp
deleted file mode 100644
index dd58aab8..00000000
--- a/spec/fixtures/test/manifests/deftype.pp
+++ /dev/null
@@ -1,4 +0,0 @@
-# Class to test deftype
-define test::deftype ( $param = 'foo' ) {
-  notify { "deftype: ${title}": }
-}
diff --git a/spec/fixtures/test/manifests/ensure_resources.pp b/spec/fixtures/test/manifests/ensure_resources.pp
deleted file mode 100644
index 60e7a40d..00000000
--- a/spec/fixtures/test/manifests/ensure_resources.pp
+++ /dev/null
@@ -1,4 +0,0 @@
-# A helper class to test the ensure_resources function
-class test::ensure_resources ( $resource_type, $title_hash, $attributes_hash ) {
-  ensure_resources($resource_type, $title_hash, $attributes_hash)
-}
diff --git a/spec/functions/abs_spec.rb b/spec/functions/abs_spec.rb
deleted file mode 100644
index 00448640..00000000
--- a/spec/functions/abs_spec.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-if Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0
-  describe 'abs' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params(-34).and_return(34) }
-    it { is_expected.to run.with_params('-34').and_return(34) }
-    it { is_expected.to run.with_params(34).and_return(34) }
-    it { is_expected.to run.with_params('34').and_return(34) }
-    it { is_expected.to run.with_params(-34.5).and_return(34.5) }
-    it { is_expected.to run.with_params('-34.5').and_return(34.5) }
-    it { is_expected.to run.with_params(34.5).and_return(34.5) }
-    it { is_expected.to run.with_params('34.5').and_return(34.5) }
-  end
-end
diff --git a/spec/functions/any2array_spec.rb b/spec/functions/any2array_spec.rb
deleted file mode 100644
index 7ddf67b4..00000000
--- a/spec/functions/any2array_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'any2array' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_return([]) }
-  it { is_expected.to run.with_params('').and_return([]) }
-  it { is_expected.to run.with_params(true).and_return([true]) }
-  it { is_expected.to run.with_params('one').and_return(['one']) }
-  it { is_expected.to run.with_params('one', 'two').and_return(['one', 'two']) }
-  it { is_expected.to run.with_params([]).and_return([]) }
-  it { is_expected.to run.with_params(['one']).and_return(['one']) }
-  it { is_expected.to run.with_params(['one', 'two']).and_return(['one', 'two']) }
-  it { is_expected.to run.with_params({}).and_return([]) }
-  it { is_expected.to run.with_params('key' => 'value').and_return(['key', 'value']) }
-
-  it { is_expected.to run.with_params('‰').and_return(['‰']) }
-  it { is_expected.to run.with_params('竹').and_return(['竹']) }
-  it { is_expected.to run.with_params('Ü').and_return(['Ü']) }
-  it { is_expected.to run.with_params('∇').and_return(['∇']) }
-  it { is_expected.to run.with_params('€', '万', 'Ö', '♥', '割').and_return(['€', '万', 'Ö', '♥', '割']) }
-end
diff --git a/spec/functions/any2bool_spec.rb b/spec/functions/any2bool_spec.rb
deleted file mode 100644
index ff06a689..00000000
--- a/spec/functions/any2bool_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'any2bool' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-  it { is_expected.to run.with_params(true).and_return(true) }
-  it { is_expected.to run.with_params(false).and_return(false) }
-
-  it { is_expected.to run.with_params('1.5').and_return(true) }
-
-  describe 'when testing stringy values that mean "true"' do
-    ['TRUE', '1', 't', 'y', 'true', 'yes'].each do |value|
-      it { is_expected.to run.with_params(value).and_return(true) }
-    end
-  end
-
-  describe 'when testing stringy values that mean "false"' do
-    ['FALSE', '', '0', 'f', 'n', 'false', 'no', 'undef', 'undefined', nil, :undef].each do |value|
-      it { is_expected.to run.with_params(value).and_return(false) }
-    end
-  end
-
-  describe 'when testing numeric values that mean "true"' do
-    [1, '1', 1.5, '1.5'].each do |value|
-      it { is_expected.to run.with_params(value).and_return(true) }
-    end
-  end
-
-  describe 'when testing numeric that mean "false"' do
-    [-1, '-1', -1.5, '-1.5', '0', 0].each do |value|
-      it { is_expected.to run.with_params(value).and_return(false) }
-    end
-  end
-
-  describe 'everything else returns true' do
-    [[], {}, ['1'], [1], { one: 1 }].each do |value|
-      it { is_expected.to run.with_params(value).and_return(true) }
-    end
-  end
-end
diff --git a/spec/functions/assert_private_spec.rb b/spec/functions/assert_private_spec.rb
deleted file mode 100644
index cb1e896b..00000000
--- a/spec/functions/assert_private_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'assert_private' do
-  context 'when called from inside module' do
-    it 'does not fail' do
-      expect(scope).to receive(:lookupvar).with('module_name').and_return('foo')
-      expect(scope).to receive(:lookupvar).with('caller_module_name').and_return('foo')
-
-      is_expected.to run.with_params
-    end
-  end
-
-  context 'when called from private class' do
-    it 'fails with a class error message' do
-      expect(scope).to receive(:lookupvar).with('module_name').and_return('foo')
-      expect(scope).to receive(:lookupvar).with('caller_module_name').and_return('bar')
-      expect(scope.source).to receive(:name).and_return('foo::baz')
-      expect(scope.source).to receive(:type).and_return('hostclass')
-
-      is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Class foo::baz is private})
-    end
-
-    it 'fails with an explicit failure message' do
-      is_expected.to run.with_params('failure message!').and_raise_error(Puppet::ParseError, %r{failure message!})
-    end
-  end
-
-  context 'when called from private definition' do
-    it 'fails with a class error message' do
-      expect(scope).to receive(:lookupvar).with('module_name').and_return('foo')
-      expect(scope).to receive(:lookupvar).with('caller_module_name').and_return('bar')
-      expect(scope.source).to receive(:name).and_return('foo::baz')
-      expect(scope.source).to receive(:type).and_return('definition')
-
-      is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Definition foo::baz is private})
-    end
-  end
-end
diff --git a/spec/functions/base64_spec.rb b/spec/functions/base64_spec.rb
deleted file mode 100644
index 3a108119..00000000
--- a/spec/functions/base64_spec.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'base64' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{first argument must be one of}) }
-  it { is_expected.to run.with_params('encode', ['two']).and_raise_error(Puppet::ParseError, %r{second argument must be a string}) }
-  it { is_expected.to run.with_params('encode', 2).and_raise_error(Puppet::ParseError, %r{second argument must be a string}) }
-  it { is_expected.to run.with_params('encode', 'thestring', 'three').and_raise_error(Puppet::ParseError, %r{third argument must be one of}) }
-  it { is_expected.to run.with_params('decode', "dGhlc3RyaW5n\n", 'strict').and_raise_error(ArgumentError) }
-
-  it { is_expected.to run.with_params('encode', 'thestring').and_return("dGhlc3RyaW5n\n") }
-  it { is_expected.to run.with_params('decode', 'dGhlc3RyaW5n').and_return('thestring') }
-  it { is_expected.to run.with_params('decode', "dGhlc3RyaW5n\n").and_return('thestring') }
-
-  it { is_expected.to run.with_params('encode', 'thestring', 'default').and_return("dGhlc3RyaW5n\n") }
-  it { is_expected.to run.with_params('decode', 'dGhlc3RyaW5n', 'default').and_return('thestring') }
-  it { is_expected.to run.with_params('decode', "dGhlc3RyaW5n\n", 'default').and_return('thestring') }
-
-  it { is_expected.to run.with_params('encode', 'thestring', 'strict').and_return('dGhlc3RyaW5n') }
-  it { is_expected.to run.with_params('decode', 'dGhlc3RyaW5n', 'strict').and_return('thestring') }
-
-  it {
-    is_expected.to run.with_params('encode', 'a very long string that will cause the base64 encoder to produce output with multiple lines')
-                      .and_return("YSB2ZXJ5IGxvbmcgc3RyaW5nIHRoYXQgd2lsbCBjYXVzZSB0aGUgYmFzZTY0\nIGVuY29kZXIgdG8gcHJvZHVjZSBvdXRwdXQgd2l0aCBtdWx0aXBsZSBsaW5l\ncw==\n")
-  }
-  it {
-    is_expected.to run.with_params('decode', "YSB2ZXJ5IGxvbmcgc3RyaW5nIHRoYXQgd2lsbCBjYXVzZSB0aGUgYmFzZTY0\nIGVuY29kZXIgdG8gcHJvZHVjZSBvdXRwdXQgd2l0aCBtdWx0aXBsZSBsaW5l\ncw==\n")
-                      .and_return('a very long string that will cause the base64 encoder to produce output with multiple lines')
-  }
-  it {
-    is_expected.to run.with_params('decode', 'YSB2ZXJ5IGxvbmcgc3RyaW5nIHRoYXQgd2lsbCBjYXVzZSB0aGUgYmFzZTY0IGVuY29kZXIgdG8gcHJvZHVjZSBvdXRwdXQgd2l0aCBtdWx0aXBsZSBsaW5lcw==')
-                      .and_return('a very long string that will cause the base64 encoder to produce output with multiple lines')
-  }
-  it {
-    is_expected.to run.with_params('encode', 'a very long string that will cause the base64 encoder to produce output with multiple lines', 'strict')
-                      .and_return('YSB2ZXJ5IGxvbmcgc3RyaW5nIHRoYXQgd2lsbCBjYXVzZSB0aGUgYmFzZTY0IGVuY29kZXIgdG8gcHJvZHVjZSBvdXRwdXQgd2l0aCBtdWx0aXBsZSBsaW5lcw==')
-  }
-  it {
-    is_expected.to run.with_params('decode', 'YSB2ZXJ5IGxvbmcgc3RyaW5nIHRoYXQgd2lsbCBjYXVzZSB0aGUgYmFzZTY0IGVuY29kZXIgdG8gcHJvZHVjZSBvdXRwdXQgd2l0aCBtdWx0aXBsZSBsaW5lcw==', 'strict')
-                      .and_return('a very long string that will cause the base64 encoder to produce output with multiple lines')
-  }
-  it {
-    is_expected.to run.with_params('encode', 'https://www.google.com.tw/?gws_rd=ssl#q=hello+world', 'urlsafe')
-                      .and_return('aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS50dy8_Z3dzX3JkPXNzbCNxPWhlbGxvK3dvcmxk')
-  }
-  it {
-    is_expected.to run.with_params('decode', 'aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS50dy8_Z3dzX3JkPXNzbCNxPWhlbGxvK3dvcmxk', 'urlsafe')
-                      .and_return('https://www.google.com.tw/?gws_rd=ssl#q=hello+world')
-  }
-  it {
-    is_expected.to run.with_params('encode', 'https://github.com/puppetlabs/puppetlabs-stdlib/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aopen+Add', 'urlsafe')
-                      .and_return('aHR0cHM6Ly9naXRodWIuY29tL3B1cHBldGxhYnMvcHVwcGV0bGFicy1zdGRsaWIvcHVsbHM_dXRmOD0lRTIlOUMlOTMmcT1pcyUzQXByK2lzJTNBb3BlbitBZGQ=')
-  }
-  it {
-    is_expected.to run.with_params('decode', 'aHR0cHM6Ly9naXRodWIuY29tL3B1cHBldGxhYnMvcHVwcGV0bGFicy1zdGRsaWIvcHVsbHM_dXRmOD0lRTIlOUMlOTMmcT1pcyUzQXByK2lzJTNBb3BlbitBZGQ=', 'urlsafe')
-                      .and_return('https://github.com/puppetlabs/puppetlabs-stdlib/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aopen+Add')
-  }
-end
diff --git a/spec/functions/basename_spec.rb b/spec/functions/basename_spec.rb
deleted file mode 100644
index 3f520602..00000000
--- a/spec/functions/basename_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'basename' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{No arguments given}) }
-  it { is_expected.to run.with_params('one', 'two', 'three').and_raise_error(Puppet::ParseError, %r{Too many arguments given}) }
-  it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{Requires string as first argument}) }
-  it { is_expected.to run.with_params('/path/to/a/file.ext', []).and_raise_error(Puppet::ParseError, %r{Requires string as second argument}) }
-  it { is_expected.to run.with_params('/path/to/a/file.ext').and_return('file.ext') }
-  it { is_expected.to run.with_params('relative_path/to/a/file.ext').and_return('file.ext') }
-  it { is_expected.to run.with_params('/path/to/a/file.ext', '.ext').and_return('file') }
-  it { is_expected.to run.with_params('relative_path/to/a/file.ext', '.ext').and_return('file') }
-  it { is_expected.to run.with_params('scheme:///path/to/a/file.ext').and_return('file.ext') }
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params('scheme:///√ạĺűē/竹.ext').and_return('竹.ext') }
-    it { is_expected.to run.with_params('ҝẽγ:/√ạĺűē/竹.ㄘ', '.ㄘ').and_return('竹') }
-  end
-end
diff --git a/spec/functions/batch_escape_spec.rb b/spec/functions/batch_escape_spec.rb
deleted file mode 100644
index 9feca261..00000000
--- a/spec/functions/batch_escape_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'batch_escape' do
-  it { is_expected.not_to eq(nil) }
-
-  describe 'signature validation' do
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{'batch_escape' expects 1 argument, got none}) }
-    it { is_expected.to run.with_params('foo', 'bar').and_raise_error(ArgumentError, %r{'batch_escape' expects 1 argument, got 2}) }
-  end
-
-  describe 'stringification' do
-    it { is_expected.to run.with_params(10).and_return('"10"') }
-    it { is_expected.to run.with_params(false).and_return('"false"') }
-  end
-
-  describe 'escaping' do
-    it { is_expected.to run.with_params('foo').and_return('"foo"') }
-    it { is_expected.to run.with_params('foo bar').and_return('"foo bar"') }
-    it {
-      is_expected.to run.with_params('~`!@#$%^&*()_-=[]\{}|;\':",./<>?')
-                        .and_return('"~`!@#\\$%^&*()_-=[]\\\{}|;\':"",./<>?"')
-    }
-  end
-end
diff --git a/spec/functions/bool2num_spec.rb b/spec/functions/bool2num_spec.rb
deleted file mode 100644
index 63a664b6..00000000
--- a/spec/functions/bool2num_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'bool2num' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError) }
-
-  [true, 'true', 't', '1', 'y', 'yes', AlsoString.new('true')].each do |truthy|
-    it { is_expected.to run.with_params(truthy).and_return(1) }
-  end
-
-  [false, 'false', 'f', '0', 'n', 'no', AlsoString.new('false')].each do |falsey|
-    it { is_expected.to run.with_params(falsey).and_return(0) }
-  end
-
-  [[], 10, 'invalid', 1.0].each do |falsey|
-    it { is_expected.to run.with_params(falsey).and_raise_error(Puppet::ParseError) }
-  end
-end
diff --git a/spec/functions/bool2str_spec.rb b/spec/functions/bool2str_spec.rb
deleted file mode 100644
index 013d5514..00000000
--- a/spec/functions/bool2str_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'bool2str' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError) }
-  ['true', 'false', nil, :undef, ''].each do |invalid|
-    it { is_expected.to run.with_params(invalid).and_raise_error(Puppet::ParseError) }
-  end
-  it { is_expected.to run.with_params(true, 'yes', 'no', 'maybe').and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params(true, 'maybe').and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params(true, 0, 1).and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params(true).and_return('true') }
-  it { is_expected.to run.with_params(false).and_return('false') }
-  it { is_expected.to run.with_params(true, 'yes', 'no').and_return('yes') }
-  it { is_expected.to run.with_params(false, 'yes', 'no').and_return('no') }
-end
diff --git a/spec/functions/camelcase_spec.rb b/spec/functions/camelcase_spec.rb
deleted file mode 100644
index aa78fcbd..00000000
--- a/spec/functions/camelcase_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'camelcase', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params(100).and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params('abc').and_return('Abc') }
-  it { is_expected.to run.with_params('aa_bb_cc').and_return('AaBbCc') }
-  it { is_expected.to run.with_params('_aa__bb__cc_').and_return('AaBbCc') }
-  it { is_expected.to run.with_params('100').and_return('100') }
-  it { is_expected.to run.with_params('1_00').and_return('100') }
-  it { is_expected.to run.with_params('_').and_return('') }
-  it { is_expected.to run.with_params('').and_return('') }
-  it { is_expected.to run.with_params([]).and_return([]) }
-  it { is_expected.to run.with_params(['abc', 'aa_bb_cc']).and_return(['Abc', 'AaBbCc']) }
-  it { is_expected.to run.with_params(['abc', 1, 'aa_bb_cc']).and_return(['Abc', 1, 'AaBbCc']) }
-end
diff --git a/spec/functions/capitalize_spec.rb b/spec/functions/capitalize_spec.rb
deleted file mode 100644
index f67c8bef..00000000
--- a/spec/functions/capitalize_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'capitalize', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params(100).and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params('one').and_return('One') }
-  it { is_expected.to run.with_params('one two').and_return('One two') }
-  it { is_expected.to run.with_params('ONE TWO').and_return('One two') }
-
-  it { is_expected.to run.with_params(AlsoString.new('one')).and_return('One') }
-  it { is_expected.to run.with_params([]).and_return([]) }
-  it { is_expected.to run.with_params(['one', 'two']).and_return(['One', 'Two']) }
-  it { is_expected.to run.with_params(['one', 1, 'two']).and_return(['One', 1, 'Two']) }
-end
diff --git a/spec/functions/ceiling_spec.rb b/spec/functions/ceiling_spec.rb
deleted file mode 100644
index 5e5f34c9..00000000
--- a/spec/functions/ceiling_spec.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'ceiling', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params('foo').and_raise_error(Puppet::ParseError, %r{Wrong argument type given}) }
-  it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{Wrong argument type given}) }
-  it { is_expected.to run.with_params(34).and_return(34) }
-  it { is_expected.to run.with_params(-34).and_return(-34) }
-  it { is_expected.to run.with_params(33.1).and_return(34) }
-  it { is_expected.to run.with_params(-33.1).and_return(-33) }
-  it { is_expected.to run.with_params('33.1').and_return(34) }
-end
diff --git a/spec/functions/chomp_spec.rb b/spec/functions/chomp_spec.rb
deleted file mode 100644
index 68b7cd3d..00000000
--- a/spec/functions/chomp_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'chomp', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments given}) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires either array or string}) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params('a', 'b').and_raise_error(Puppet::ParseError)
-  }
-  it { is_expected.to run.with_params('one').and_return('one') }
-  it { is_expected.to run.with_params("one\n").and_return('one') }
-  it { is_expected.to run.with_params("one\n\n").and_return("one\n") }
-  it { is_expected.to run.with_params(["one\n", 'two', "three\n"]).and_return(['one', 'two', 'three']) }
-
-  it { is_expected.to run.with_params(AlsoString.new('one')).and_return('one') }
-  it { is_expected.to run.with_params(AlsoString.new("one\n")).and_return('one') }
-  it { is_expected.to run.with_params(AlsoString.new("one\n\n")).and_return("one\n") }
-  it { is_expected.to run.with_params([AlsoString.new("one\n"), AlsoString.new('two'), "three\n"]).and_return(['one', 'two', 'three']) }
-
-  it { is_expected.to run.with_params([1, 2, 3]).and_return([1, 2, 3]) }
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params("ůťƒ8\n\n").and_return("ůťƒ8\n") }
-    it { is_expected.to run.with_params("ネット\n\n").and_return("ネット\n") }
-  end
-end
diff --git a/spec/functions/chop_spec.rb b/spec/functions/chop_spec.rb
deleted file mode 100644
index 2cbccd14..00000000
--- a/spec/functions/chop_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'chop', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires either an array or string}) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params('a', 'b').and_raise_error(Puppet::ParseError)
-  }
-  it { is_expected.to run.with_params('one').and_return('on') }
-  it { is_expected.to run.with_params("one\n").and_return('one') }
-  it { is_expected.to run.with_params("one\n\n").and_return("one\n") }
-  it { is_expected.to run.with_params(["one\n", 'two', "three\n"]).and_return(['one', 'tw', 'three']) }
-
-  it { is_expected.to run.with_params(AlsoString.new('one')).and_return('on') }
-  it { is_expected.to run.with_params(AlsoString.new("one\n")).and_return('one') }
-  it { is_expected.to run.with_params(AlsoString.new("one\n\n")).and_return("one\n") }
-  it { is_expected.to run.with_params([AlsoString.new("one\n"), AlsoString.new('two'), "three\n"]).and_return(['one', 'tw', 'three']) }
-
-  it { is_expected.to run.with_params([1, 2, 3]).and_return([1, 2, 3]) }
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params("ůťƒ8\n\n").and_return("ůťƒ8\n") }
-    it { is_expected.to run.with_params("ネット\n\n").and_return("ネット\n") }
-  end
-end
diff --git a/spec/functions/clamp_spec.rb b/spec/functions/clamp_spec.rb
deleted file mode 100644
index 37b4935c..00000000
--- a/spec/functions/clamp_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'clamp' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params(12, 88, 71, 190).and_raise_error(Puppet::ParseError, %r{Wrong number of arguments, need three to clamp}) }
-  it { is_expected.to run.with_params('12string', 88, 15).and_raise_error(Puppet::ParseError, %r{Required explicit numeric}) }
-  it { is_expected.to run.with_params(1, 2, 'a' => 55).and_raise_error(Puppet::ParseError, %r{The Hash type is not allowed}) }
-
-  it { is_expected.to run.with_params('24', [575, 187]).and_return(187) }
-  it { is_expected.to run.with_params([4, 3, '99']).and_return(4) }
-  it { is_expected.to run.with_params(16, 750, 88).and_return(88) }
-  it { is_expected.to run.with_params([3, 873], 73).and_return(73) }
-  it { is_expected.to run.with_params([4], 8, 75).and_return(8) }
-  it { is_expected.to run.with_params([6], [31], 9911).and_return(31) }
-end
diff --git a/spec/functions/concat_spec.rb b/spec/functions/concat_spec.rb
deleted file mode 100644
index d0893e99..00000000
--- a/spec/functions/concat_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'concat' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params([1]).and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params(1, [2]).and_raise_error(Puppet::ParseError, %r{Requires array}) }
-  it { is_expected.to run.with_params([1], [2], [3]).and_return([1, 2, 3]) }
-  it { is_expected.to run.with_params(['1', '2', '3'], ['4', '5', '6']).and_return(['1', '2', '3', '4', '5', '6']) }
-  it { is_expected.to run.with_params(['1', '2', '3'], '4').and_return(['1', '2', '3', '4']) }
-  it { is_expected.to run.with_params(['1', '2', '3'], [['4', '5'], '6']).and_return(['1', '2', '3', ['4', '5'], '6']) }
-  it { is_expected.to run.with_params(['1', '2'], ['3', '4'], ['5', '6']).and_return(['1', '2', '3', '4', '5', '6']) }
-  it { is_expected.to run.with_params(['1', '2'], '3', '4', ['5', '6']).and_return(['1', '2', '3', '4', '5', '6']) }
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params([{ 'a' => 'b' }], 'c' => 'd', 'e' => 'f').and_return([{ 'a' => 'b' }, { 'c' => 'd', 'e' => 'f' }]) }
-    it { is_expected.to run.with_params(['ấ', 'β', '©'], ['đ', 'ể', '文字列']).and_return(['ấ', 'β', '©', 'đ', 'ể', '文字列']) }
-  end
-
-  arguments = [['1', '2', '3'], ['4', '5', '6']]
-  originals = [arguments[0].dup, arguments[1].dup]
-  it 'leaves the original array intact' do
-    _result = subject.execute(arguments[0], arguments[1])
-    arguments.each_with_index do |argument, index|
-      expect(argument).to eq(originals[index])
-    end
-  end
-end
diff --git a/spec/functions/convert_base_spec.rb b/spec/functions/convert_base_spec.rb
deleted file mode 100644
index a2de736c..00000000
--- a/spec/functions/convert_base_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'convert_base' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError) }
-  it { is_expected.to run.with_params('asdf').and_raise_error(ArgumentError) }
-  it { is_expected.to run.with_params('asdf', 'moo', 'cow').and_raise_error(ArgumentError) }
-  it { is_expected.to run.with_params(['1'], '2').and_raise_error(Puppet::ParseError, %r{argument must be either a string or an integer}) }
-  it { is_expected.to run.with_params('1', ['2']).and_raise_error(Puppet::ParseError, %r{argument must be either a string or an integer}) }
-  it { is_expected.to run.with_params('1', 1).and_raise_error(Puppet::ParseError, %r{base must be at least 2 and must not be greater than 36}) }
-  it { is_expected.to run.with_params('1', 37).and_raise_error(Puppet::ParseError, %r{base must be at least 2 and must not be greater than 36}) }
-
-  it 'raises a ParseError if argument 1 is a string that does not correspond to an integer in base 10' do
-    is_expected.to run.with_params('ten', 6).and_raise_error(Puppet::ParseError, %r{argument must be an integer or a string corresponding to an integer in base 10})
-  end
-
-  it 'raises a ParseError if argument 2 is a string and does not correspond to an integer in base 10' do
-    is_expected.to run.with_params(100, 'hex').and_raise_error(Puppet::ParseError, %r{argument must be an integer or a string corresponding to an integer in base 10})
-  end
-
-  it { is_expected.to run.with_params('11', '16').and_return('b') }
-  it { is_expected.to run.with_params('35', '36').and_return('z') }
-  it { is_expected.to run.with_params(5, 2).and_return('101') }
-end
diff --git a/spec/functions/count_spec.rb b/spec/functions/count_spec.rb
deleted file mode 100644
index 564974a2..00000000
--- a/spec/functions/count_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'count' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError) }
-  it { is_expected.to run.with_params('one').and_raise_error(ArgumentError) }
-  it { is_expected.to run.with_params('one', 'two').and_return(1) }
-  it {
-    pending('should actually be like this, and not like above')
-    is_expected.to run.with_params('one', 'two').and_raise_error(ArgumentError)
-  }
-  it { is_expected.to run.with_params('one', 'two', 'three').and_raise_error(ArgumentError) }
-  it { is_expected.to run.with_params(['one', 'two', 'three']).and_return(3) }
-  it { is_expected.to run.with_params(['one', 'two', 'two'], 'two').and_return(2) }
-  it { is_expected.to run.with_params(['one', nil, 'two']).and_return(2) }
-  it { is_expected.to run.with_params(['one', '', 'two']).and_return(2) }
-  it { is_expected.to run.with_params(['one', :undef, 'two']).and_return(2) }
-
-  it { is_expected.to run.with_params(['ổņ℮', 'ŧщộ', 'three']).and_return(3) }
-  it { is_expected.to run.with_params(['ổņ℮', 'ŧщộ', 'ŧщộ'], 'ŧщộ').and_return(2) }
-  it { is_expected.to run.with_params(['ổņ℮', nil, 'ŧщộ']).and_return(2) }
-  it { is_expected.to run.with_params(['ổņ℮', :undef, 'ŧщộ']).and_return(2) }
-end
diff --git a/spec/functions/deep_merge_spec.rb b/spec/functions/deep_merge_spec.rb
deleted file mode 100644
index bd40d672..00000000
--- a/spec/functions/deep_merge_spec.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'deep_merge' do
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('key' => 'value').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params({}, '2').and_raise_error(Puppet::ParseError, %r{unexpected argument type String}) }
-  it { is_expected.to run.with_params({}, 2).and_raise_error(Puppet::ParseError, %r{unexpected argument}) }
-  it { is_expected.to run.with_params({}, '').and_return({}) }
-  it { is_expected.to run.with_params({}, {}).and_return({}) }
-  it { is_expected.to run.with_params({}, {}, {}).and_return({}) }
-  it { is_expected.to run.with_params({}, {}, {}, {}).and_return({}) }
-  it { is_expected.to run.with_params({ 'key' => 'value' }, '').and_return('key' => 'value') }
-  it { is_expected.to run.with_params({ 'key1' => 'value1' }, 'key2' => 'value2').and_return('key1' => 'value1', 'key2' => 'value2') }
-
-  describe 'when arguments have key collisions' do
-    it 'prefers values from the last hash' do
-      is_expected.to run \
-        .with_params({ 'key1' => 'value1', 'key2' => 'value2' }, 'key2' => 'replacement_value', 'key3' => 'value3') \
-        .and_return('key1' => 'value1', 'key2' => 'replacement_value', 'key3' => 'value3')
-    end
-    it {
-      is_expected.to run \
-        .with_params({ 'key1' => 'value1' }, { 'key1' => 'value2' }, 'key1' => 'value3') \
-        .and_return('key1' => 'value3')
-    }
-  end
-
-  describe 'when arguments have subhashes' do
-    it {
-      is_expected.to run \
-        .with_params({ 'key1' => 'value1' }, 'key2' => 'value2', 'key3' => { 'subkey1' => 'value4' }) \
-        .and_return('key1' => 'value1', 'key2' => 'value2', 'key3' => { 'subkey1' => 'value4' })
-    }
-    it {
-      is_expected.to run \
-        .with_params({ 'key1' => { 'subkey1' => 'value1' } }, 'key1' => { 'subkey2' => 'value2' }) \
-        .and_return('key1' => { 'subkey1' => 'value1', 'subkey2' => 'value2' })
-    }
-    it {
-      is_expected.to run \
-        .with_params({ 'key1' => { 'subkey1' => { 'subsubkey1' => 'value1' } } }, 'key1' => { 'subkey1' => { 'subsubkey1' => 'value2' } }) \
-        .and_return('key1' => { 'subkey1' => { 'subsubkey1' => 'value2' } })
-    }
-  end
-
-  arguments = { 'key1' => 'value1' }, { 'key2' => 'value2' }
-  originals = [arguments[0].dup, arguments[1].dup]
-  it 'does not change the original hashes' do
-    subject.execute(arguments[0], arguments[1])
-    arguments.each_with_index do |argument, index|
-      expect(argument).to eq(originals[index])
-    end
-  end
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params({ 'ĸέỹ1' => 'ϋǻļủë1' }, 'この文字列' => '万').and_return('ĸέỹ1' => 'ϋǻļủë1', 'この文字列' => '万') }
-  end
-end
diff --git a/spec/functions/defined_with_params_spec.rb b/spec/functions/defined_with_params_spec.rb
deleted file mode 100644
index e372cd31..00000000
--- a/spec/functions/defined_with_params_spec.rb
+++ /dev/null
@@ -1,131 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'defined_with_params' do
-  describe 'when no resource is specified' do
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError) }
-  end
-  describe 'when compared against a resource with no attributes' do
-    let :pre_condition do
-      'user { "dan": }'
-    end
-
-    it { is_expected.to run.with_params('User[dan]', {}).and_return(true) }
-    it { is_expected.to run.with_params('User[bob]', {}).and_return(false) }
-    it { is_expected.to run.with_params('User[dan]', 'foo' => 'bar').and_return(false) }
-
-    context 'with UTF8 and double byte characters' do
-      it { is_expected.to run.with_params('User[ĵĭмოү]', {}).and_return(false) }
-      it { is_expected.to run.with_params('User[ポーラ]', {}).and_return(false) }
-    end
-  end
-
-  describe 'when compared against a resource with attributes' do
-    let :pre_condition do
-      'user { "dan": ensure => present, shell => "/bin/csh", managehome => false}'
-    end
-
-    it { is_expected.to run.with_params('User[dan]', {}).and_return(true) }
-    it { is_expected.to run.with_params('User[dan]', '').and_return(true) }
-    it { is_expected.to run.with_params('User[dan]', 'ensure' => 'present').and_return(true) }
-    it { is_expected.to run.with_params('User[dan]', 'ensure' => 'present', 'managehome' => false).and_return(true) }
-    it { is_expected.to run.with_params('User[dan]', 'ensure' => 'absent', 'managehome' => false).and_return(false) }
-  end
-
-  describe 'when passing undef values' do
-    let :pre_condition do
-      'file { "/tmp/a": ensure => present }'
-    end
-    let(:is_puppet_6_or_greater) { Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') >= 0 }
-    let(:undef_value) { is_puppet_6_or_greater ? nil : :undef } # even if :undef would work on 6.0.1, :undef should not be used
-
-    it { is_expected.to run.with_params('File[/tmp/a]', {}).and_return(true) }
-    it { is_expected.to run.with_params('File[/tmp/a]', 'ensure' => 'present', 'owner' => undef_value).and_return(true) }
-  end
-
-  describe 'when the reference is a' do
-    let :pre_condition do
-      'user { "dan": }'
-    end
-
-    context 'with reference' do
-      it { is_expected.to run.with_params(Puppet::Resource.new('User[dan]'), {}).and_return(true) }
-    end
-    if Puppet::Util::Package.versioncmp(Puppet.version, '4.6.0') >= 0
-      context 'with array' do
-        it 'fails' do
-          expect {
-            subject.execute(['User[dan]'], {})
-          }.to raise_error(ArgumentError, %r{not understood: 'Array'})
-        end
-      end
-    end
-  end
-
-  describe 'when passed a defined type' do
-    let :pre_condition do
-      <<-PRECOND
-        define test::deftype(
-          Optional $port = undef
-        ) { }
-
-        test::deftype { "foo": }
-        test::deftype { "baz": port => 100 }
-        test::deftype { "adv": port => 200 }
-        test::deftype { "adv2": port => 200 }
-
-        # Unsure how to stub this out below properly
-        if defined_with_params(Test::Deftype, { 'port' => 200 }) {
-          notify { 'Duplicate found somewhere': }
-        }
-        if defined_with_params(Test::Deftype, { 'port' => 'nope' }) {
-          notify { 'Should not find me': }
-        }
-      PRECOND
-    end
-
-    it { is_expected.to run.with_params('Test::Deftype[foo]', {}).and_return(true) }
-    it { is_expected.to run.with_params('Test::Deftype[bar]', {}).and_return(false) }
-    it { is_expected.to run.with_params(Puppet::Resource.new('Test::Deftype[foo]'), {}).and_return(true) }
-    it {
-      is_expected.to run.with_params(Puppet::Resource.new('Test::Deftype[bar]'), {}).and_return(false)
-
-      expect(catalogue.resource('Notify[Duplicate found somewhere]')).not_to be_nil
-      expect(catalogue.resource('Notify[Should not find me]')).to be_nil
-    }
-  end
-
-  describe 'when called from within a defined type looking for a defined type of the same type' do
-    let :pre_condition do
-      <<-PRECOND
-        define test::deftype(
-          Optional $port = undef
-        ) {
-          if defined_with_params(Test::Deftype, { 'port' => $port }) {
-            fail('Ruh Roh Shaggy')
-          }
-        }
-
-        test::deftype { 'foo': }
-        test::deftype { 'bar': port => 200 }
-      PRECOND
-    end
-
-    # Testing to make sure that the internal logic handles this case via the pre_condition
-    it { is_expected.to run.with_params('NoOp[noop]', {}).and_return(false) }
-  end
-
-  describe 'when passed a class' do
-    let :pre_condition do
-      'class test () { } class { "test": }'
-    end
-
-    it { is_expected.to run.with_params('Class[test]', {}).and_return(true) }
-    it { is_expected.to run.with_params('Class["bar"]', {}).and_return(false) }
-    it { is_expected.to run.with_params('Class[bar]', {}).and_return(false) }
-    it { is_expected.to run.with_params(Puppet::Resource.new('class', 'test'), {}).and_return(true) }
-    it { is_expected.to run.with_params(Puppet::Resource.new('Class["bar"]'), {}).and_return(false) }
-    it { is_expected.to run.with_params(Puppet::Resource.new('Class[bar]'), {}).and_return(false) }
-  end
-end
diff --git a/spec/functions/delete_at_spec.rb b/spec/functions/delete_at_spec.rb
deleted file mode 100644
index 7bc71404..00000000
--- a/spec/functions/delete_at_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'delete_at' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params('one', 1).and_raise_error(Puppet::ParseError, %r{Requires array}) }
-  it { is_expected.to run.with_params(1, 1).and_raise_error(Puppet::ParseError, %r{Requires array}) }
-  it { is_expected.to run.with_params(['one'], 'two').and_raise_error(Puppet::ParseError, %r{You must provide non-negative numeric}) }
-  it {
-    pending('Current implementation ignores parameters after the first two.')
-    is_expected.to run.with_params(['one'], 0, 1).and_raise_error(Puppet::ParseError)
-  }
-
-  describe 'argument validation' do
-    it { is_expected.to run.with_params([0, 1, 2], 3).and_raise_error(Puppet::ParseError, %r{Given index exceeds size of array}) }
-  end
-
-  it { is_expected.to run.with_params([0, 1, 2], 1).and_return([0, 2]) }
-  it { is_expected.to run.with_params([0, 1, 2], -1).and_return([0, 1]) }
-  it { is_expected.to run.with_params([0, 1, 2], -4).and_return([0, 1, 2]) }
-  it { is_expected.to run.with_params(['ƒờở', 'βāř', 'ьầż'], 1).and_return(['ƒờở', 'ьầż']) }
-
-  it 'leaves the original array intact' do
-    argument = [1, 2, 3]
-    original = argument.dup
-    _result = subject.execute(argument, 2)
-    expect(argument).to eq(original)
-  end
-end
diff --git a/spec/functions/delete_regex_spec.rb b/spec/functions/delete_regex_spec.rb
deleted file mode 100644
index ab9516f1..00000000
--- a/spec/functions/delete_regex_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'delete_regex' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params([], 'two') }
-  it { is_expected.to run.with_params({}, 'two') }
-  it { is_expected.to run.with_params([], 'two', 'three').and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params(1, 'two').and_raise_error(TypeError, %r{First argument must be an Array, Hash, or String}) }
-
-  describe 'deleting from an array' do
-    it { is_expected.to run.with_params([], '').and_return([]) }
-    it { is_expected.to run.with_params([], 'two').and_return([]) }
-    it { is_expected.to run.with_params(['two'], 'two').and_return([]) }
-    it { is_expected.to run.with_params(['two', 'two'], 'two').and_return([]) }
-    it { is_expected.to run.with_params(['one', 'two', 'three'], '^t.*').and_return(['one']) }
-    it { is_expected.to run.with_params(['ab', 'b', 'c', 'b'], 'b').and_return(['ab', 'c']) }
-    it { is_expected.to run.with_params(['one', 'two', 'three'], 'four').and_return(['one', 'two', 'three']) }
-    it { is_expected.to run.with_params(['one', 'two', 'three'], 'e').and_return(['one', 'two', 'three']) }
-    it { is_expected.to run.with_params(['one', 'two', 'three'], 'two').and_return(['one', 'three']) }
-    it { is_expected.to run.with_params(['two', 'one', 'two', 'three', 'two'], 'two').and_return(['one', 'three']) }
-    it { is_expected.to run.with_params(['abracadabra'], 'abr').and_return(['abracadabra']) }
-    it { is_expected.to run.with_params(['abracadabra'], '^.*jimbob.*$').and_return(['abracadabra']) }
-  end
-
-  describe 'deleting from an array' do
-    it { is_expected.to run.with_params({}, '').and_return({}) }
-    it { is_expected.to run.with_params({}, 'key').and_return({}) }
-    it { is_expected.to run.with_params({ 'key' => 'value' }, 'key').and_return({}) }
-    it {
-      is_expected.to run \
-        .with_params({ 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }, 'key2') \
-        .and_return('key1' => 'value1', 'key3' => 'value3')
-    }
-    it {
-      is_expected.to run \
-        .with_params({ 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }, ['key1', 'key2']) \
-        .and_return('key3' => 'value3')
-    }
-  end
-
-  it 'leaves the original array intact' do
-    argument1 = ['one', 'two', 'three']
-    original1 = argument1.dup
-    subject.execute(argument1, 'two')
-    expect(argument1).to eq(original1)
-  end
-  it 'leaves the original hash intact' do
-    argument1 = { 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }
-    original1 = argument1.dup
-    subject.execute(argument1, 'key2')
-    expect(argument1).to eq(original1)
-  end
-end
diff --git a/spec/functions/delete_spec.rb b/spec/functions/delete_spec.rb
deleted file mode 100644
index 5fe78251..00000000
--- a/spec/functions/delete_spec.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'delete' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params([], 'two') }
-  it { is_expected.to run.with_params([], 'two', 'three').and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params(1, 'two').and_raise_error(TypeError, %r{First argument must be an Array, String, or Hash}) }
-
-  describe 'deleting from an array' do
-    it { is_expected.to run.with_params([], '').and_return([]) }
-    it { is_expected.to run.with_params([], 'two').and_return([]) }
-    it { is_expected.to run.with_params(['two'], 'two').and_return([]) }
-    it { is_expected.to run.with_params(['two', 'two'], 'two').and_return([]) }
-    it { is_expected.to run.with_params(['ab', 'b', 'c', 'b'], 'b').and_return(['ab', 'c']) }
-    it { is_expected.to run.with_params(['one', 'two', 'three'], 'four').and_return(['one', 'two', 'three']) }
-    it { is_expected.to run.with_params(['one', 'two', 'three'], 'e').and_return(['one', 'two', 'three']) }
-    it { is_expected.to run.with_params(['one', 'two', 'three'], 'two').and_return(['one', 'three']) }
-    it { is_expected.to run.with_params(['two', 'one', 'two', 'three', 'two'], 'two').and_return(['one', 'three']) }
-    it { is_expected.to run.with_params(['one', 'two', 'three', 'two'], ['one', 'two']).and_return(['three']) }
-    it { is_expected.to run.with_params(['ồאּẻ', 'ŧẅơ', 'ŧңŗё℮', 'ŧẅơ'], ['ồאּẻ', 'ŧẅơ']).and_return(['ŧңŗё℮']) }
-  end
-
-  describe 'deleting from a string' do
-    it { is_expected.to run.with_params('', '').and_return('') }
-    it { is_expected.to run.with_params('bar', '').and_return('bar') }
-    it { is_expected.to run.with_params('', 'bar').and_return('') }
-    it { is_expected.to run.with_params('bar', 'bar').and_return('') }
-    it { is_expected.to run.with_params('barbar', 'bar').and_return('') }
-    it { is_expected.to run.with_params('barfoobar', 'bar').and_return('foo') }
-    it { is_expected.to run.with_params('foobarbabarz', 'bar').and_return('foobaz') }
-    it { is_expected.to run.with_params('foobarbabarz', ['foo', 'bar']).and_return('baz') }
-    it { is_expected.to run.with_params('ƒōōβậяβậβậяź', ['ƒōō', 'βậя']).and_return('βậź') }
-
-    it { is_expected.to run.with_params('barfoobar', ['barbar', 'foo']).and_return('barbar') }
-    it { is_expected.to run.with_params('barfoobar', ['foo', 'barbar']).and_return('') }
-  end
-
-  describe 'deleting from an array' do
-    it { is_expected.to run.with_params({}, '').and_return({}) }
-    it { is_expected.to run.with_params({}, 'key').and_return({}) }
-    it { is_expected.to run.with_params({ 'key' => 'value' }, 'key').and_return({}) }
-    it {
-      is_expected.to run \
-        .with_params({ 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }, 'key2') \
-        .and_return('key1' => 'value1', 'key3' => 'value3')
-    }
-    it {
-      is_expected.to run \
-        .with_params({ 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }, ['key1', 'key2']) \
-        .and_return('key3' => 'value3')
-    }
-    it {
-      is_expected.to run \
-        .with_params({ 'ĸəұ1' => 'νãŀủĕ1', 'ĸəұ2' => 'νãŀủĕ2', 'ĸəұ3' => 'νãŀủĕ3' }, ['ĸəұ1', 'ĸəұ2']) \
-        .and_return('ĸəұ3' => 'νãŀủĕ3')
-    }
-  end
-
-  it 'leaves the original array intact' do
-    argument1 = ['one', 'two', 'three']
-    original1 = argument1.dup
-    _result = subject.execute(argument1, 'two')
-    expect(argument1).to eq(original1)
-  end
-  it 'leaves the original string intact' do
-    argument1 = 'onetwothree'
-    original1 = argument1.dup
-    _result = subject.execute(argument1, 'two')
-    expect(argument1).to eq(original1)
-  end
-  it 'leaves the original hash intact' do
-    argument1 = { 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }
-    original1 = argument1.dup
-    _result = subject.execute(argument1, 'key2')
-    expect(argument1).to eq(original1)
-  end
-end
diff --git a/spec/functions/delete_undef_values_spec.rb b/spec/functions/delete_undef_values_spec.rb
deleted file mode 100644
index 068217f6..00000000
--- a/spec/functions/delete_undef_values_spec.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'delete_undef_values' do
-  let(:is_puppet_6) { Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') == 0 }
-
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{expected an array or hash}) }
-  it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{expected an array or hash}) }
-  it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{expected an array or hash}) }
-
-  describe 'when deleting from an array' do
-    # Behavior is different in Puppet 6.0.0, and fixed in PUP-9180 in Puppet 6.0.1
-    [:undef, '', nil].each do |undef_value|
-      describe "when undef is represented by #{undef_value.inspect}" do
-        before(:each) do
-          pending("review behaviour when being passed undef as #{undef_value.inspect}") if undef_value == ''
-          pending("review behaviour when being passed undef as #{undef_value.inspect}") if undef_value == :undef && is_puppet_6
-        end
-        it { is_expected.to run.with_params([undef_value]).and_return([]) }
-        it { is_expected.to run.with_params(['one', undef_value, 'two', 'three']).and_return(['one', 'two', 'three']) }
-        it { is_expected.to run.with_params(['ớņέ', undef_value, 'ŧשּׁō', 'ŧħґëə']).and_return(['ớņέ', 'ŧשּׁō', 'ŧħґëə']) }
-      end
-
-      it 'leaves the original argument intact' do
-        argument = ['one', undef_value, 'two']
-        original = argument.dup
-        _result = subject.execute(argument, 2)
-        expect(argument).to eq(original)
-      end
-    end
-
-    it { is_expected.to run.with_params(['undef']).and_return(['undef']) }
-  end
-
-  describe 'when deleting from a hash' do
-    [:undef, '', nil].each do |undef_value|
-      describe "when undef is represented by #{undef_value.inspect}" do
-        before(:each) do
-          pending("review behaviour when being passed undef as #{undef_value.inspect}") if undef_value == ''
-          pending("review behaviour when being passed undef as #{undef_value.inspect}") if undef_value == :undef && is_puppet_6
-        end
-        it { is_expected.to run.with_params('key' => undef_value).and_return({}) }
-        it {
-          is_expected.to run \
-            .with_params('key1' => 'value1', 'undef_key' => undef_value, 'key2' => 'value2') \
-            .and_return('key1' => 'value1', 'key2' => 'value2')
-        }
-      end
-
-      it 'leaves the original argument intact' do
-        argument = { 'key1' => 'value1', 'key2' => undef_value }
-        original = argument.dup
-        _result = subject.execute(argument, 2)
-        expect(argument).to eq(original)
-      end
-    end
-
-    it { is_expected.to run.with_params('key' => 'undef').and_return('key' => 'undef') }
-  end
-end
diff --git a/spec/functions/delete_values_spec.rb b/spec/functions/delete_values_spec.rb
deleted file mode 100644
index 4a488934..00000000
--- a/spec/functions/delete_values_spec.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'delete_values' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params('one', 'two', 'three').and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  describe 'when the first argument is not a hash' do
-    it { is_expected.to run.with_params(1, 'two').and_raise_error(TypeError, %r{First argument must be a Hash}) }
-    it { is_expected.to run.with_params('one', 'two').and_raise_error(TypeError, %r{First argument must be a Hash}) }
-    it { is_expected.to run.with_params([], 'two').and_raise_error(TypeError, %r{First argument must be a Hash}) }
-  end
-
-  describe 'when deleting from a hash' do
-    it { is_expected.to run.with_params({}, 'value').and_return({}) }
-    it {
-      is_expected.to run \
-        .with_params({ 'key1' => 'value1' }, 'non-existing value') \
-        .and_return('key1' => 'value1')
-    }
-    it {
-      is_expected.to run \
-        .with_params({ 'ҝếỵ1 ' => 'νâĺūẹ1', 'ҝếỵ2' => 'value to delete' }, 'value to delete') \
-        .and_return('ҝếỵ1 ' => 'νâĺūẹ1')
-    }
-    it {
-      is_expected.to run \
-        .with_params({ 'key1' => 'value1', 'key2' => 'νǎŀữ℮ ťớ đêłểťė' }, 'νǎŀữ℮ ťớ đêłểťė') \
-        .and_return('key1' => 'value1')
-    }
-    it {
-      is_expected.to run \
-        .with_params({ 'key1' => 'value1', 'key2' => 'value to delete', 'key3' => 'value to delete' }, 'value to delete') \
-        .and_return('key1' => 'value1')
-    }
-  end
-
-  it 'leaves the original argument intact' do
-    argument = { 'key1' => 'value1', 'key2' => 'value2' }
-    original = argument.dup
-    _result = subject.execute(argument, 'value2')
-    expect(argument).to eq(original)
-  end
-end
diff --git a/spec/functions/deprecation_spec.rb b/spec/functions/deprecation_spec.rb
deleted file mode 100644
index d03b5e2d..00000000
--- a/spec/functions/deprecation_spec.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-if Puppet::Util::Package.versioncmp(Puppet.version, '4.5.0') >= 0
-  describe 'deprecation' do
-    before(:each) do
-      # this is to reset the strict variable to default
-      Puppet.settings[:strict] = :warning
-    end
-
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError) }
-
-    it 'displays a single warning' do
-      if Puppet::Util::Package.versioncmp(Puppet.version, '5.0.0') >= 0 && Puppet::Util::Package.versioncmp(Puppet.version, '5.5.7') < 0
-        expect(Puppet).to receive(:deprecation_warning).with('heelo at :', 'key')
-        expect(Puppet).to receive(:deprecation_warning).with("Modifying 'autosign' as a setting is deprecated.")
-      else
-        expect(Puppet).to receive(:warning).with(include('heelo')).once
-      end
-      is_expected.to run.with_params('key', 'heelo')
-    end
-
-    it 'displays a single warning, despite multiple calls' do
-      if Puppet::Util::Package.versioncmp(Puppet.version, '5.0.0') >= 0 && Puppet::Util::Package.versioncmp(Puppet.version, '5.5.7') < 0
-        expect(Puppet).to receive(:deprecation_warning).with('heelo at :', 'key').twice
-        expect(Puppet).to receive(:deprecation_warning).with("Modifying 'autosign' as a setting is deprecated.")
-      else
-        expect(Puppet).to receive(:warning).with(include('heelo')).once
-      end
-      (0..1).each do |_i|
-        is_expected.to run.with_params('key', 'heelo')
-      end
-    end
-
-    it 'fails twice with message, with multiple calls. when strict= :error' do
-      Puppet.settings[:strict] = :error
-      expect(Puppet).to receive(:warning).with(include('heelo')).never
-      (0..1).each do |_i|
-        is_expected.to run.with_params('key', 'heelo').and_raise_error(RuntimeError, %r{deprecation. key. heelo})
-      end
-    end
-
-    it 'displays nothing, despite multiple calls. strict= :off' do
-      Puppet.settings[:strict] = :off
-      expect(Puppet).to receive(:warning).with(include('heelo')).never
-      (0..1).each do |_i|
-        is_expected.to run.with_params('key', 'heelo')
-      end
-    end
-
-    after(:each) do
-      # this is to reset the strict variable to default
-      Puppet.settings[:strict] = :warning
-    end
-  end
-elsif Puppet.version.to_f < 4.0
-  # Puppet version < 4 will use these tests.
-  describe 'deprecation' do
-    after(:each) do
-      ENV.delete('STDLIB_LOG_DEPRECATIONS')
-    end
-    before(:each) do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-    end
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-    it 'displays a single warning' do
-      expect(scope).to receive(:warning).with(include('heelo'))
-      is_expected.to run.with_params('key', 'heelo')
-    end
-  end
-end
diff --git a/spec/functions/difference_spec.rb b/spec/functions/difference_spec.rb
deleted file mode 100644
index 292023c1..00000000
--- a/spec/functions/difference_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'difference' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{Requires 2 arrays}) }
-  it { is_expected.to run.with_params('one', []).and_raise_error(Puppet::ParseError, %r{Requires 2 arrays}) }
-  it { is_expected.to run.with_params({}, {}).and_raise_error(Puppet::ParseError, %r{Requires 2 arrays}) }
-
-  it { is_expected.to run.with_params([], []).and_return([]) }
-  it { is_expected.to run.with_params([], ['one']).and_return([]) }
-  it { is_expected.to run.with_params(['one'], ['one']).and_return([]) }
-  it { is_expected.to run.with_params(['ớņέ'], ['']).and_return(['ớņέ']) }
-  it { is_expected.to run.with_params(['one'], []).and_return(['one']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], ['two', 'three']).and_return(['one']) }
-  it { is_expected.to run.with_params(['ớņέ', 'ŧשּׁō', 'ŧħґëə', 2], ['ŧשּׁō', 'ŧħґëə']).and_return(['ớņέ', 2]) }
-  it { is_expected.to run.with_params(['one', 'two', 'two', 'three'], ['two', 'three']).and_return(['one']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], ['two', 'two', 'three']).and_return(['one']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], ['two', 'three', 'four']).and_return(['one']) }
-  it 'does not confuse types' do is_expected.to run.with_params(['1', '2', '3'], [1, 2]).and_return(['1', '2', '3']) end
-end
diff --git a/spec/functions/dig44_spec.rb b/spec/functions/dig44_spec.rb
deleted file mode 100644
index 576935f3..00000000
--- a/spec/functions/dig44_spec.rb
+++ /dev/null
@@ -1,134 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'dig44' do
-  let(:undef_value) do
-    (Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0) ? :undef : nil
-  end
-
-  let(:data) do
-    {
-      'a' => {
-        'g' => '2',
-        'e' => [
-          'f0',
-          'f1',
-          {
-            'x' => {
-              'y' => 'z',
-            },
-          },
-          'f3',
-        ],
-      },
-      'b' => true,
-      'c' => false,
-      'd' => '1',
-      'e' => undef_value,
-      'f' => nil,
-    }
-  end
-
-  let(:utf8_data) do
-    {
-      'ẵ' => {
-        'в' => [
-          '©',
-          'ĝ',
-          'に',
-        ],
-      },
-    }
-  end
-
-  context 'with single values' do
-    it 'exists' do
-      is_expected.not_to be_nil
-    end
-
-    it 'requires two arguments' do
-      is_expected.to run.with_params.and_raise_error(ArgumentError, %r{Wrong number of arguments})
-    end
-
-    it 'fails if the data is not a structure' do
-      is_expected.to run.with_params('test', []).and_raise_error(Puppet::Error, %r{first argument must be a hash or an array})
-    end
-
-    it 'fails if the path is not an array' do
-      is_expected.to run.with_params({}, '').and_raise_error(Puppet::Error, %r{second argument must be an array})
-    end
-
-    it 'returns the value if the value is string' do
-      is_expected.to run.with_params(data, ['d'], 'default').and_return('1')
-    end
-
-    it 'returns true if the value is true' do
-      is_expected.to run.with_params(data, ['b'], 'default').and_return(true)
-    end
-
-    it 'returns false if the value is false' do
-      is_expected.to run.with_params(data, ['c'], 'default').and_return(false)
-    end
-
-    it 'returns the default if the value is nil' do
-      is_expected.to run.with_params(data, ['f'], 'default').and_return('default')
-    end
-
-    it 'returns the default if the value is :undef (same as nil)' do
-      is_expected.to run.with_params(data, ['e'], 'default').and_return('default')
-    end
-
-    it 'returns the default if the path is not found' do
-      is_expected.to run.with_params(data, ['missing'], 'default').and_return('default')
-    end
-  end
-
-  context 'with structured values' do
-    it 'is able to extract a deeply nested hash value' do
-      is_expected.to run.with_params(data, ['a', 'g'], 'default').and_return('2')
-    end
-
-    it 'returns the default value if the path is too long' do
-      is_expected.to run.with_params(data, ['a', 'g', 'c', 'd'], 'default').and_return('default')
-    end
-
-    it 'supports an array index (number) in the path' do
-      is_expected.to run.with_params(data, ['a', 'e', 1], 'default').and_return('f1')
-    end
-
-    it 'supports an array index (string) in the path' do
-      is_expected.to run.with_params(data, ['a', 'e', '1'], 'default').and_return('f1')
-    end
-
-    it 'returns the default value if an array index is not a number' do
-      is_expected.to run.with_params(data, ['a', 'b', 'c'], 'default').and_return('default')
-    end
-
-    it 'returns the default value if and index is out of array length' do
-      is_expected.to run.with_params(data, ['a', 'e', '5'], 'default').and_return('default')
-    end
-
-    it 'is able to path though both arrays and hashes' do
-      is_expected.to run.with_params(data, ['a', 'e', '2', 'x', 'y'], 'default').and_return('z')
-    end
-
-    it 'returns "nil" if value is not found and no default value is provided' do
-      is_expected.to run.with_params(data, ['a', '1']).and_return(nil)
-    end
-  end
-
-  context 'with internationalization (i18N) values' do
-    it 'is able to return a unicode character' do
-      is_expected.to run.with_params(utf8_data, ['ẵ', 'в', 0]).and_return('©')
-    end
-
-    it 'is able to return a utf8 character' do
-      is_expected.to run.with_params(utf8_data, ['ẵ', 'в', 1]).and_return('ĝ')
-    end
-
-    it 'is able to return a double byte character' do
-      is_expected.to run.with_params(utf8_data, ['ẵ', 'в', 2]).and_return('に')
-    end
-  end
-end
diff --git a/spec/functions/dig_spec.rb b/spec/functions/dig_spec.rb
deleted file mode 100644
index a11ab7ec..00000000
--- a/spec/functions/dig_spec.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'dig' do
-  it 'exists' do
-    expect(Puppet::Parser::Functions.function('dig')).to eq('function_dig')
-  end
-
-  it 'gives a deprecation warning when called' do
-    expect(scope).to receive(:warning).with('dig() DEPRECATED: This function has been replaced in Puppet 4.5.0, please use dig44() for backwards compatibility or use the new version.')
-    scope.function_dig([{}, []])
-  end
-end
diff --git a/spec/functions/dirname_spec.rb b/spec/functions/dirname_spec.rb
deleted file mode 100644
index a801f1c1..00000000
--- a/spec/functions/dirname_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'dirname' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{No arguments given}) }
-  it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{Too many arguments given}) }
-  it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{Requires string as argument}) }
-  it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{Requires string as argument}) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires string as argument}) }
-  it { is_expected.to run.with_params('').and_raise_error(Puppet::ParseError, %r{Requires a non-empty string as argument}) }
-  it { is_expected.to run.with_params(:undef).and_raise_error(Puppet::ParseError, %r{string as argument}) }
-  it { is_expected.to run.with_params(nil).and_raise_error(Puppet::ParseError, %r{string as argument}) }
-  it { is_expected.to run.with_params('/path/to/a/file.ext').and_return('/path/to/a') }
-  it { is_expected.to run.with_params('relative_path/to/a/file.ext').and_return('relative_path/to/a') }
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params('scheme:///√ạĺűē/竹.ext').and_return('scheme:///√ạĺűē') }
-    it { is_expected.to run.with_params('ҝẽγ:/√ạĺűē/竹.ㄘ').and_return('ҝẽγ:/√ạĺűē') }
-  end
-end
diff --git a/spec/functions/dos2unix_spec.rb b/spec/functions/dos2unix_spec.rb
deleted file mode 100644
index d86d93ba..00000000
--- a/spec/functions/dos2unix_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'dos2unix' do
-  context 'when checking parameter validity' do
-    it { is_expected.not_to eq(nil) }
-    it do
-      is_expected.to run.with_params.and_raise_error(ArgumentError, %r{Wrong number of arguments})
-    end
-    it do
-      is_expected.to run.with_params('one', 'two').and_raise_error(ArgumentError, %r{Wrong number of arguments})
-    end
-    it do
-      is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{Requires string as argument})
-    end
-    it do
-      is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{Requires string as argument})
-    end
-    it do
-      is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires string as argument})
-    end
-  end
-
-  context 'when converting from dos to unix format' do
-    sample_text    = "Hello\r\nWorld\r\n"
-    desired_output = "Hello\nWorld\n"
-
-    it 'outputs unix format' do
-      is_expected.to run.with_params(sample_text).and_return(desired_output)
-    end
-  end
-
-  context 'with internationalization (i18N) values' do
-    sample_text_utf8    = "Ħ℮ļłǿ\r\nשׁөŕłđ\r\n"
-    desired_output_utf8 = "Ħ℮ļłǿ\nשׁөŕłđ\n"
-
-    sample_text_doublebyte    = "こんにちは\r\n世界\r\n"
-    desired_output_doublebyte = "こんにちは\n世界\n"
-
-    it 'outputs uft8 string' do
-      is_expected.to run.with_params(sample_text_utf8).and_return(desired_output_utf8)
-    end
-
-    it 'outputs double byte string' do
-      is_expected.to run.with_params(sample_text_doublebyte).and_return(desired_output_doublebyte)
-    end
-  end
-end
diff --git a/spec/functions/downcase_spec.rb b/spec/functions/downcase_spec.rb
deleted file mode 100644
index 07c6374c..00000000
--- a/spec/functions/downcase_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'downcase', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params(100).and_raise_error(Puppet::ParseError, %r{Requires either array or string}) }
-  it { is_expected.to run.with_params('abc').and_return('abc') }
-  it { is_expected.to run.with_params('Abc').and_return('abc') }
-  it { is_expected.to run.with_params('ABC').and_return('abc') }
-
-  it { is_expected.to run.with_params(AlsoString.new('ABC')).and_return('abc') }
-  it { is_expected.to run.with_params([]).and_return([]) }
-  it { is_expected.to run.with_params(['ONE', 'TWO']).and_return(['one', 'two']) }
-  it { is_expected.to run.with_params(['One', 1, 'Two']).and_return(['one', 1, 'two']) }
-end
diff --git a/spec/functions/empty_spec.rb b/spec/functions/empty_spec.rb
deleted file mode 100644
index 5b0ba29c..00000000
--- a/spec/functions/empty_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'empty', if: Puppet::Util::Package.versioncmp(Puppet.version, '5.5.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError)
-  }
-  it { is_expected.to run.with_params(false).and_raise_error(Puppet::ParseError, %r{Requires either array, hash, string or integer}) }
-  it { is_expected.to run.with_params(0).and_return(false) }
-  it { is_expected.to run.with_params('').and_return(true) }
-  it { is_expected.to run.with_params('one').and_return(false) }
-
-  it { is_expected.to run.with_params(AlsoString.new('')).and_return(true) }
-  it { is_expected.to run.with_params(AlsoString.new('one')).and_return(false) }
-
-  it { is_expected.to run.with_params([]).and_return(true) }
-  it { is_expected.to run.with_params(['one']).and_return(false) }
-
-  it { is_expected.to run.with_params({}).and_return(true) }
-  it { is_expected.to run.with_params('key' => 'value').and_return(false) }
-end
diff --git a/spec/functions/end_with_spec.rb b/spec/functions/end_with_spec.rb
deleted file mode 100644
index 19c4ed68..00000000
--- a/spec/functions/end_with_spec.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'stdlib::end_with' do
-  it { is_expected.to run.with_params('', 'bar').and_return(false) }
-  it { is_expected.to run.with_params('foobar', 'bar').and_return(true) }
-  it { is_expected.to run.with_params('foobar', 'foo').and_return(false) }
-  it { is_expected.to run.with_params('foobar', ['foo', 'baz']).and_return(false) }
-  it do
-    is_expected.to run.with_params('foobar', '').and_raise_error(
-      ArgumentError, %r{'stdlib::end_with' parameter 'suffixes' expects a value of type String\[1\] or Array\[String\[1\], 1\]}
-    )
-  end
-end
diff --git a/spec/functions/ensure_packages_spec.rb b/spec/functions/ensure_packages_spec.rb
deleted file mode 100644
index 346e1368..00000000
--- a/spec/functions/ensure_packages_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'ensure_packages' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params('packagename') }
-  it { is_expected.to run.with_params(['packagename1', 'packagename2']) }
-
-  context 'when given a catalog with "package { puppet: ensure => absent }"' do
-    let(:pre_condition) { 'package { puppet: ensure => absent }' }
-
-    describe 'after running ensure_package("facter")' do
-      before(:each) { subject.execute('facter') }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_package('puppet').with_ensure('absent') }
-      it { expect(-> { catalogue }).to contain_package('facter').with_ensure('installed') }
-    end
-
-    describe 'after running ensure_package("facter", { "provider" => "gem" })' do
-      before(:each) { subject.execute('facter', 'provider' => 'gem') }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_package('puppet').with_ensure('absent').without_provider }
-      it { expect(-> { catalogue }).to contain_package('facter').with_ensure('installed').with_provider('gem') }
-    end
-  end
-
-  context 'when given hash of packages' do
-    before(:each) do
-      subject.execute({ 'foo' => { 'provider' => 'rpm' }, 'bar' => { 'provider' => 'gem' } }, 'ensure' => 'present')
-      subject.execute('パッケージ' => { 'ensure' => 'absent' })
-      subject.execute('ρǻ¢κầģẻ' => { 'ensure' => 'absent' })
-    end
-
-    # this lambda is required due to strangeness within rspec-puppet's expectation handling
-    it { expect(-> { catalogue }).to contain_package('foo').with('provider' => 'rpm', 'ensure' => 'installed') }
-    it { expect(-> { catalogue }).to contain_package('bar').with('provider' => 'gem', 'ensure' => 'installed') }
-
-    context 'with UTF8 and double byte characters' do
-      it { expect(-> { catalogue }).to contain_package('パッケージ').with('ensure' => 'absent') }
-      it { expect(-> { catalogue }).to contain_package('ρǻ¢κầģẻ').with('ensure' => 'absent') }
-    end
-  end
-
-  context 'when given a catalog with "package { puppet: ensure => installed }"' do
-    let(:pre_condition) { 'package { puppet: ensure => installed }' }
-
-    describe 'after running ensure_package("puppet", { "ensure" => "present" })' do
-      before(:each) { subject.execute('puppet', 'ensure' => 'present') }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_package('puppet').with_ensure('installed') }
-    end
-  end
-end
diff --git a/spec/functions/ensure_resource_spec.rb b/spec/functions/ensure_resource_spec.rb
deleted file mode 100644
index b7266f75..00000000
--- a/spec/functions/ensure_resource_spec.rb
+++ /dev/null
@@ -1,151 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'ensure_resource' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{Must specify a type}) }
-  it { is_expected.to run.with_params('type').and_raise_error(ArgumentError, %r{Must specify a title}) }
-  if Puppet::Util::Package.versioncmp(Puppet.version, '4.6.0') >= 0
-    it { is_expected.to run.with_params('type', 'title', {}, 'extras').and_raise_error(ArgumentError) }
-  else
-    it { is_expected.to run.with_params('type', 'title', {}, 'extras').and_raise_error(Puppet::ParseError) }
-  end
-
-  it {
-    pending('should not accept numbers as arguments')
-    is_expected.to run.with_params(1, 2, 3).and_raise_error(Puppet::ParseError)
-  }
-
-  context 'when given an empty catalog' do
-    describe 'after running ensure_resource("user", "username1", {})' do
-      before(:each) { subject.execute('User', 'username1', {}) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_user('username1').without_ensure }
-    end
-
-    describe 'after running ensure_resource("user", "username1", { gid => undef })' do
-      before(:each) { subject.execute('User', 'username1', 'gid' => undef_value) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_user('username1').without_ensure }
-      it { expect(-> { catalogue }).to contain_user('username1').without_gid }
-    end
-
-    describe 'after running ensure_resource("user", "username1", { ensure => present, gid => undef })' do
-      before(:each) { subject.execute('User', 'username1', 'ensure' => 'present', 'gid' => undef_value) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_user('username1').with_ensure('present') }
-      it { expect(-> { catalogue }).to contain_user('username1').without_gid }
-    end
-
-    describe 'after running ensure_resource("test::deftype", "foo", {})' do
-      let(:pre_condition) { 'define test::deftype { }' }
-
-      before(:each) { subject.execute('test::deftype', 'foo', {}) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_test__deftype('foo').without_ensure }
-    end
-  end
-
-  context 'when given a catalog with UTF8 chars' do
-    describe 'after running ensure_resource("user", "Şắოрŀễ Ţëם", {})' do
-      before(:each) { subject.execute('User', 'Şắოрŀễ Ţëם', {}) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_user('Şắოрŀễ Ţëם').without_ensure }
-    end
-
-    describe 'after running ensure_resource("user", "Şắოрŀễ Ţëם", { gid => undef })' do
-      before(:each) { subject.execute('User', 'Şắოрŀễ Ţëם', 'gid' => undef_value) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_user('Şắოрŀễ Ţëם').without_ensure }
-      it { expect(-> { catalogue }).to contain_user('Şắოрŀễ Ţëם').without_gid }
-    end
-
-    describe 'after running ensure_resource("user", "Şắოрŀễ Ţëם", { ensure => present, gid => undef })' do
-      before(:each) { subject.execute('User', 'Şắოрŀễ Ţëם', 'ensure' => 'present', 'gid' => undef_value) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_user('Şắოрŀễ Ţëם').with_ensure('present') }
-      it { expect(-> { catalogue }).to contain_user('Şắოрŀễ Ţëם').without_gid }
-    end
-  end
-
-  context 'when given a catalog with "user { username1: ensure => present }"' do
-    let(:pre_condition) { 'user { username1: ensure => present }' }
-
-    describe 'after running ensure_resource("user", "username1", {})' do
-      before(:each) { subject.execute('User', 'username1', {}) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_user('username1').with_ensure('present') }
-    end
-
-    describe 'after running ensure_resource("user", "username2", {})' do
-      before(:each) { subject.execute('User', 'username2', {}) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_user('username1').with_ensure('present') }
-      it { expect(-> { catalogue }).to contain_user('username2').without_ensure }
-    end
-
-    describe 'after running ensure_resource("user", "username1", { gid => undef })' do
-      before(:each) { subject.execute('User', 'username1', 'gid' => undef_value) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_user('username1').with_ensure('present') }
-    end
-
-    describe 'after running ensure_resource("user", ["username1", "username2"], {})' do
-      before(:each) { subject.execute('User', ['username1', 'username2'], {}) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_user('username1').with_ensure('present') }
-      it { expect(-> { catalogue }).to contain_user('username2').without_ensure }
-    end
-
-    describe 'when providing already set params' do
-      let(:params) { { 'ensure' => 'present' } }
-
-      before(:each) { subject.execute('User', ['username2', 'username3'], params) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_user('username1').with(params) }
-      it { expect(-> { catalogue }).to contain_user('username2').with(params) }
-    end
-
-    context 'when trying to add params' do
-      it {
-        is_expected.to run \
-          .with_params('User', 'username1', 'ensure' => 'present', 'shell' => true) \
-          .and_raise_error(Puppet::Resource::Catalog::DuplicateResourceError, %r{User\[username1\] is already declared})
-      }
-    end
-  end
-
-  context 'when given a catalog with "test::deftype { foo: }"' do
-    let(:pre_condition) { 'define test::deftype { } test::deftype { "foo": }' }
-
-    describe 'after running ensure_resource("test::deftype", "foo", {})' do
-      before(:each) { subject.execute('test::deftype', 'foo', {}) }
-
-      # this lambda is required due to strangeness within rspec-puppet's expectation handling
-      it { expect(-> { catalogue }).to contain_test__deftype('foo').without_ensure }
-    end
-  end
-
-  if Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0
-    def undef_value
-      :undef
-    end
-  else
-    def undef_value
-      nil
-    end
-  end
-end
diff --git a/spec/functions/ensure_resources_spec.rb b/spec/functions/ensure_resources_spec.rb
deleted file mode 100644
index 55dac3d6..00000000
--- a/spec/functions/ensure_resources_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'ensure_resources' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{Must specify a type}) }
-  it { is_expected.to run.with_params('type').and_raise_error(ArgumentError, %r{Must specify a title}) }
-
-  describe 'given a title hash of multiple resources' do
-    before(:each) do
-      subject.execute('user', { 'dan' => { 'gid' => 'mygroup', 'uid' => '600' }, 'alex' => { 'gid' => 'mygroup', 'uid' => '700' } }, 'ensure' => 'present')
-    end
-
-    # this lambda is required due to strangeness within rspec-puppet's expectation handling
-    it { expect(-> { catalogue }).to contain_user('dan').with_ensure('present') }
-    it { expect(-> { catalogue }).to contain_user('alex').with_ensure('present') }
-    it { expect(-> { catalogue }).to contain_user('dan').with('gid' => 'mygroup', 'uid' => '600') }
-    it { expect(-> { catalogue }).to contain_user('alex').with('gid' => 'mygroup', 'uid' => '700') }
-  end
-
-  describe 'given a title hash of a single resource' do
-    before(:each) { subject.execute('user', { 'dan' => { 'gid' => 'mygroup', 'uid' => '600' } }, 'ensure' => 'present') }
-
-    # this lambda is required due to strangeness within rspec-puppet's expectation handling
-    it { expect(-> { catalogue }).to contain_user('dan').with_ensure('present') }
-    it { expect(-> { catalogue }).to contain_user('dan').with('gid' => 'mygroup', 'uid' => '600') }
-  end
-end
diff --git a/spec/functions/extname_spec.rb b/spec/functions/extname_spec.rb
deleted file mode 100644
index 4808e11b..00000000
--- a/spec/functions/extname_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'stdlib::extname' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{'stdlib::extname' expects 1 argument, got none}) }
-  it { is_expected.to run.with_params('one', 'two').and_raise_error(ArgumentError, %r{'stdlib::extname' expects 1 argument, got 2}) }
-  it { is_expected.to run.with_params([]).and_raise_error(ArgumentError, %r{'stdlib::extname' parameter 'filename' expects a String value, got Array}) }
-  it { is_expected.to run.with_params('test.rb').and_return('.rb') }
-  it { is_expected.to run.with_params('a/b/d/test.rb').and_return('.rb') }
-  it { is_expected.to run.with_params('test').and_return('') }
-  it { is_expected.to run.with_params('.profile').and_return('') }
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params('file_√ạĺűē/竹.rb').and_return('.rb') }
-  end
-end
diff --git a/spec/functions/flatten_spec.rb b/spec/functions/flatten_spec.rb
deleted file mode 100644
index 365535ba..00000000
--- a/spec/functions/flatten_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'flatten', if: Puppet::Util::Package.versioncmp(Puppet.version, '5.5.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params([], []).and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires array}) }
-  it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{Requires array}) }
-
-  it { is_expected.to run.with_params([]).and_return([]) }
-  it { is_expected.to run.with_params(['one']).and_return(['one']) }
-  it { is_expected.to run.with_params([['one']]).and_return(['one']) }
-  it { is_expected.to run.with_params(['a', 'b', 'c', 'd', 'e', 'f', 'g']).and_return(['a', 'b', 'c', 'd', 'e', 'f', 'g']) }
-  it { is_expected.to run.with_params([['a', 'b', ['c', ['d', 'e'], 'f', 'g']]]).and_return(['a', 'b', 'c', 'd', 'e', 'f', 'g']) }
-  it { is_expected.to run.with_params(['ã', 'β', ['ĉ', ['đ', 'ẽ', 'ƒ', 'ġ']]]).and_return(['ã', 'β', 'ĉ', 'đ', 'ẽ', 'ƒ', 'ġ']) }
-end
diff --git a/spec/functions/floor_spec.rb b/spec/functions/floor_spec.rb
deleted file mode 100644
index fe45142f..00000000
--- a/spec/functions/floor_spec.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'floor', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments}) }
-  it { is_expected.to run.with_params('foo').and_raise_error(Puppet::ParseError, %r{Wrong argument type}) }
-  it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{Wrong argument type}) }
-
-  it { is_expected.to run.with_params(34).and_return(34) }
-  it { is_expected.to run.with_params(-34).and_return(-34) }
-  it { is_expected.to run.with_params(33.1).and_return(33) }
-  it { is_expected.to run.with_params(-33.1).and_return(-34) }
-end
diff --git a/spec/functions/fqdn_rand_string_spec.rb b/spec/functions/fqdn_rand_string_spec.rb
deleted file mode 100644
index 1102b87f..00000000
--- a/spec/functions/fqdn_rand_string_spec.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'fqdn_rand_string' do
-  let(:default_charset) { %r{\A[a-zA-Z0-9]{100}\z} }
-
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(0).and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params(1.5).and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params(-10).and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params('-10').and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params('string').and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params([]).and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params({}).and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params(1, 1).and_raise_error(ArgumentError, %r{second argument must be undef or a string}) }
-  it { is_expected.to run.with_params(1, []).and_raise_error(ArgumentError, %r{second argument must be undef or a string}) }
-  it { is_expected.to run.with_params(1, {}).and_raise_error(ArgumentError, %r{second argument must be undef or a string}) }
-  it { is_expected.to run.with_params(100).and_return(default_charset) }
-  it { is_expected.to run.with_params('100').and_return(default_charset) }
-  it { is_expected.to run.with_params(100, nil).and_return(default_charset) }
-  it { is_expected.to run.with_params(100, '').and_return(default_charset) }
-  it { is_expected.to run.with_params(100, 'a').and_return(%r{\Aa{100}\z}) }
-  it { is_expected.to run.with_params(100, 'ab').and_return(%r{\A[ab]{100}\z}) }
-  it { is_expected.to run.with_params(100, 'ãβ').and_return(%r{\A[ãβ]{100}\z}) }
-
-  it "provides the same 'random' value on subsequent calls for the same host" do
-    expect(fqdn_rand_string(10)).to eql(fqdn_rand_string(10))
-  end
-
-  it 'considers the same host and same extra arguments to have the same random sequence' do
-    first_random = fqdn_rand_string(10, extra_identifier: [1, 'same', 'host'])
-    second_random = fqdn_rand_string(10, extra_identifier: [1, 'same', 'host'])
-
-    expect(first_random).to eql(second_random)
-  end
-
-  it 'allows extra arguments to control the random value on a single host' do
-    first_random = fqdn_rand_string(10, extra_identifier: [1, 'different', 'host'])
-    second_different_random = fqdn_rand_string(10, extra_identifier: [2, 'different', 'host'])
-
-    expect(first_random).not_to eql(second_different_random)
-  end
-
-  it 'returns different strings for different hosts' do
-    val1 = fqdn_rand_string(10, host: 'first.host.com')
-    val2 = fqdn_rand_string(10, host: 'second.host.com')
-
-    expect(val1).not_to eql(val2)
-  end
-
-  def fqdn_rand_string(max, args = {})
-    host = args[:host] || '127.0.0.1'
-    charset = args[:charset]
-    extra = args[:extra_identifier] || []
-
-    # workaround not being able to use let(:facts) because some tests need
-    # multiple different hostnames in one context
-    allow(scope).to receive(:lookupvar).with('::fqdn', {}).and_return(host)
-
-    function_args = [max]
-    if args.key?(:charset) || !extra.empty?
-      function_args << charset
-    end
-    function_args += extra
-    scope.function_fqdn_rand_string(function_args)
-  end
-end
diff --git a/spec/functions/fqdn_rotate_spec.rb b/spec/functions/fqdn_rotate_spec.rb
deleted file mode 100644
index 8c68c375..00000000
--- a/spec/functions/fqdn_rotate_spec.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'fqdn_rotate' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(0).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work with}) }
-  it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work with}) }
-  it { is_expected.to run.with_params('').and_return('') }
-  it { is_expected.to run.with_params('a').and_return('a') }
-  it { is_expected.to run.with_params('ã').and_return('ã') }
-
-  it { is_expected.to run.with_params([]).and_return([]) }
-  it { is_expected.to run.with_params(['a']).and_return(['a']) }
-
-  it 'rotates a string and the result should be the same size' do
-    expect(fqdn_rotate('asdf').size).to eq(4)
-  end
-
-  it 'rotates a string to give the same results for one host' do
-    val1 = fqdn_rotate('abcdefg', host: 'one')
-    val2 = fqdn_rotate('abcdefg', host: 'one')
-    expect(val1).to eq(val2)
-  end
-
-  it 'allows extra arguments to control the random rotation on a single host' do
-    val1 = fqdn_rotate('abcdefg', extra_identifier: [1, 'different', 'host'])
-    val2 = fqdn_rotate('abcdefg', extra_identifier: [2, 'different', 'host'])
-    expect(val1).not_to eq(val2)
-  end
-
-  it 'considers the same host and same extra arguments to have the same random rotation' do
-    val1 = fqdn_rotate('abcdefg', extra_identifier: [1, 'same', 'host'])
-    val2 = fqdn_rotate('abcdefg', extra_identifier: [1, 'same', 'host'])
-    expect(val1).to eq(val2)
-  end
-
-  it 'rotates a string to give different values on different hosts' do
-    val1 = fqdn_rotate('abcdefg', host: 'one')
-    val2 = fqdn_rotate('abcdefg', host: 'two')
-    expect(val1).not_to eq(val2)
-  end
-
-  it 'accepts objects which extend String' do
-    result = fqdn_rotate(AlsoString.new('asdf'))
-    expect(result).to eq('dfas')
-  end
-
-  it 'uses the Puppet::Util.deterministic_rand function' do
-    skip 'Puppet::Util#deterministic_rand not available' unless Puppet::Util.respond_to?(:deterministic_rand)
-
-    expect(Puppet::Util).to receive(:deterministic_rand).with(44_489_829_212_339_698_569_024_999_901_561_968_770, 4)
-    fqdn_rotate('asdf')
-  end
-
-  it 'does not leave the global seed in a deterministic state' do
-    fqdn_rotate('asdf')
-    rand1 = rand
-    fqdn_rotate('asdf')
-    rand2 = rand
-    expect(rand1).not_to eql(rand2)
-  end
-
-  def fqdn_rotate(value, args = {})
-    host = args[:host] || '127.0.0.1'
-    extra = args[:extra_identifier] || []
-
-    # workaround not being able to use let(:facts) because some tests need
-    # multiple different hostnames in one context
-    allow(scope).to receive(:lookupvar).with('::fqdn').and_return(host)
-
-    function_args = [value] + extra
-    scope.function_fqdn_rotate(function_args)
-  end
-end
diff --git a/spec/functions/fqdn_uuid_spec.rb b/spec/functions/fqdn_uuid_spec.rb
deleted file mode 100644
index a15751f6..00000000
--- a/spec/functions/fqdn_uuid_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'fqdn_uuid' do
-  context 'with invalid parameters' do
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{No arguments given}) }
-    it { is_expected.to run.with_params('puppetlabs.com', 'google.com').and_raise_error(ArgumentError, %r{Too many arguments given}) }
-    it { is_expected.to run.with_params({}).and_raise_error(TypeError, %r{no implicit conversion of Hash}) }
-    it { is_expected.to run.with_params(0).and_raise_error(TypeError, %r{no implicit conversion of Integer}) }
-  end
-
-  context 'with given string' do
-    it { is_expected.to run.with_params('puppetlabs.com').and_return('9c70320f-6815-5fc5-ab0f-debe68bf764c') }
-    it { is_expected.to run.with_params('google.com').and_return('64ee70a4-8cc1-5d25-abf2-dea6c79a09c8') }
-    it { is_expected.to run.with_params('0').and_return('6af613b6-569c-5c22-9c37-2ed93f31d3af') }
-  end
-end
diff --git a/spec/functions/get_module_path_spec.rb b/spec/functions/get_module_path_spec.rb
deleted file mode 100644
index 1d6d3be1..00000000
--- a/spec/functions/get_module_path_spec.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'get_module_path' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments, expects one}) }
-  it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{Wrong number of arguments, expects one}) }
-  it { is_expected.to run.with_params('one', 'two', 'three').and_raise_error(Puppet::ParseError, %r{Wrong number of arguments, expects one}) }
-  it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{Could not find module}) }
-
-  # class Stubmodule
-  class StubModule
-    attr_reader :path
-    def initialize(path)
-      @path = path
-    end
-  end
-
-  describe 'when locating a module' do
-    let(:modulepath) { '/tmp/does_not_exist' }
-    let(:path_of_module_foo) { StubModule.new('/tmp/does_not_exist/foo') }
-
-    before(:each) do
-      Puppet[:modulepath] = modulepath
-    end
-
-    context 'when in the default environment' do
-      before(:each) do
-        allow(Puppet::Module).to receive(:find).with('foo', 'rp_env').and_return(path_of_module_foo)
-      end
-      it 'runs against foo' do
-        is_expected.to run.with_params('foo').and_return(path_of_module_foo.path)
-      end
-
-      it 'when the modulepath is a list' do
-        Puppet[:modulepath] = modulepath + 'tmp/something_else'
-
-        is_expected.to run.with_params('foo').and_return(path_of_module_foo.path)
-      end
-    end
-
-    context 'when in a non-default default environment' do
-      let(:environment) { 'test' }
-
-      before(:each) do
-        allow(Puppet::Module).to receive(:find).with('foo', 'test').and_return(path_of_module_foo)
-      end
-      it 'runs against foo' do
-        is_expected.to run.with_params('foo').and_return(path_of_module_foo.path)
-      end
-
-      it 'when the modulepath is a list' do
-        Puppet[:modulepath] = modulepath + 'tmp/something_else'
-        is_expected.to run.with_params('foo').and_return(path_of_module_foo.path)
-      end
-    end
-  end
-end
diff --git a/spec/functions/getparam_spec.rb b/spec/functions/getparam_spec.rb
deleted file mode 100644
index d79493b1..00000000
--- a/spec/functions/getparam_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'getparam' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{Must specify a reference}) }
-  it { is_expected.to run.with_params('User[one]').and_raise_error(ArgumentError, %r{Must specify name of a parameter}) }
-  it { is_expected.to run.with_params('User[one]', 2).and_raise_error(ArgumentError, %r{Must specify name of a parameter}) }
-  it { is_expected.to run.with_params('User[one]', []).and_raise_error(ArgumentError, %r{Must specify name of a parameter}) }
-  it { is_expected.to run.with_params('User[one]', {}).and_raise_error(ArgumentError, %r{Must specify name of a parameter}) }
-
-  describe 'when compared against a user resource with no params' do
-    let(:pre_condition) { 'user { "one": }' }
-
-    it { is_expected.to run.with_params('User[one]', 'ensure').and_return('') }
-    it { is_expected.to run.with_params('User[two]', 'ensure').and_return('') }
-    it { is_expected.to run.with_params('User[one]', 'shell').and_return('') }
-  end
-
-  describe 'when compared against a user resource with params' do
-    let(:pre_condition) { 'user { "one": ensure => present, shell => "/bin/sh", managehome => false, }' }
-
-    it { is_expected.to run.with_params('User[one]', 'ensure').and_return('present') }
-    it { is_expected.to run.with_params('User[two]', 'ensure').and_return('') }
-    it { is_expected.to run.with_params('User[one]', 'shell').and_return('/bin/sh') }
-    it { is_expected.to run.with_params('User[one]', 'managehome').and_return(false) }
-  end
-
-  describe 'when compared against a user resource with UTF8 and double byte params' do
-    let(:pre_condition) { 'user { ["三", "ƒốưř"]: ensure => present }' }
-
-    it { is_expected.to run.with_params('User[三]', 'ensure').and_return('present') }
-    it { is_expected.to run.with_params('User[ƒốưř]', 'ensure').and_return('present') }
-  end
-end
diff --git a/spec/functions/getvar_spec.rb b/spec/functions/getvar_spec.rb
deleted file mode 100644
index 94af5187..00000000
--- a/spec/functions/getvar_spec.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'getvar' do
-  it { is_expected.not_to eq(nil) }
-
-  describe 'before Puppet 6.0.0', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  end
-
-  describe 'from Puppet 6.0.0', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') >= 0 do
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{expects between 1 and 2 arguments, got none}i) }
-    it { is_expected.to run.with_params('one', 'two').and_return('two') }
-    it { is_expected.to run.with_params('one', 'two', 'three').and_raise_error(ArgumentError, %r{expects between 1 and 2 arguments, got 3}i) }
-  end
-
-  it { is_expected.to run.with_params('::foo').and_return(nil) }
-
-  context 'with given variables in namespaces' do
-    let(:pre_condition) do
-      <<-PUPPETCODE
-      class site::data { $foo = 'baz' }
-      include site::data
-      PUPPETCODE
-    end
-
-    it { is_expected.to run.with_params('site::data::foo').and_return('baz') }
-    it { is_expected.to run.with_params('::site::data::foo').and_return('baz') }
-    it { is_expected.to run.with_params('::site::data::bar').and_return(nil) }
-  end
-
-  context 'with given variables in namespaces' do
-    let(:pre_condition) do
-      <<-PUPPETCODE
-      class site::info { $lock = 'ŧҺîš íš ắ śţřĭŋĝ' }
-      class site::new { $item = '万Ü€‰' }
-      include site::info
-      include site::new
-      PUPPETCODE
-    end
-
-    it { is_expected.to run.with_params('site::info::lock').and_return('ŧҺîš íš ắ śţřĭŋĝ') }
-    it { is_expected.to run.with_params('::site::new::item').and_return('万Ü€‰') }
-  end
-end
diff --git a/spec/functions/glob_spec.rb b/spec/functions/glob_spec.rb
deleted file mode 100644
index 141ee772..00000000
--- a/spec/functions/glob_spec.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'glob' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params('').and_return([]) }
-  it { is_expected.to run.with_params(['']).and_return([]) }
-  it { is_expected.to run.with_params(['', '']).and_return([]) }
-  it { is_expected.to run.with_params(['/etc/xyzxyzxyz', '/etcxyzxyzxyz']).and_return([]) }
-end
diff --git a/spec/functions/grep_spec.rb b/spec/functions/grep_spec.rb
deleted file mode 100644
index b428d2da..00000000
--- a/spec/functions/grep_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'grep' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('grep does not actually check this, and raises NoMethodError instead')
-    is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{first argument not an array})
-  }
-  it {
-    pending('grep does not actually check this, and raises NoMethodError instead')
-    is_expected.to run.with_params(1, 'two').and_raise_error(Puppet::ParseError, %r{first argument not an array})
-  }
-  it { is_expected.to run.with_params('one', 'two', 'three').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params([], 'two').and_return([]) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], 'two').and_return(['two']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], 't(wo|hree)').and_return(['two', 'three']) }
-  it { is_expected.to run.with_params(['ờאּê', 'ţשּׂỡ', 'ţһŗəè'], 'ţ(שּׂỡ|һŗəè)').and_return(['ţשּׂỡ', 'ţһŗəè']) }
-end
diff --git a/spec/functions/has_interface_with_spec.rb b/spec/functions/has_interface_with_spec.rb
deleted file mode 100644
index d55f58ea..00000000
--- a/spec/functions/has_interface_with_spec.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'has_interface_with' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('one', 'two', 'three').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-  # We need to mock out the Facts so we can specify how we expect this function
-  # to behave on different platforms.
-  context 'when on Mac OS X Systems' do
-    let(:facts) { { interfaces: 'lo0,gif0,stf0,en1,p2p0,fw0,en0,vmnet1,vmnet8,utun0' } }
-
-    it { is_expected.to run.with_params('lo0').and_return(true) }
-    it { is_expected.to run.with_params('lo').and_return(false) }
-  end
-
-  context 'when on Linux Systems' do
-    let(:facts) do
-      {
-        interfaces: 'eth0,lo',
-        ipaddress: '10.0.0.1',
-        ipaddress_lo: '127.0.0.1',
-        ipaddress_eth0: '10.0.0.1',
-        muppet: 'kermit',
-        muppet_lo: 'mspiggy',
-        muppet_eth0: 'kermit',
-      }
-    end
-
-    it { is_expected.to run.with_params('lo').and_return(true) }
-    it { is_expected.to run.with_params('lo0').and_return(false) }
-    it { is_expected.to run.with_params('ipaddress', '127.0.0.1').and_return(true) }
-    it { is_expected.to run.with_params('ipaddress', '10.0.0.1').and_return(true) }
-    it { is_expected.to run.with_params('ipaddress', '8.8.8.8').and_return(false) }
-    it { is_expected.to run.with_params('muppet', 'kermit').and_return(true) }
-    it { is_expected.to run.with_params('muppet', 'mspiggy').and_return(true) }
-    it { is_expected.to run.with_params('muppet', 'bigbird').and_return(false) }
-  end
-end
diff --git a/spec/functions/has_ip_address_spec.rb b/spec/functions/has_ip_address_spec.rb
deleted file mode 100644
index a30a5a5a..00000000
--- a/spec/functions/has_ip_address_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'has_ip_address' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-  context 'when on Linux Systems' do
-    let(:facts) do
-      {
-        interfaces: 'eth0,lo',
-        ipaddress: '10.0.0.1',
-        ipaddress_lo: '127.0.0.1',
-        ipaddress_eth0: '10.0.0.1',
-      }
-    end
-
-    it { is_expected.to run.with_params('127.0.0.1').and_return(true) }
-    it { is_expected.to run.with_params('10.0.0.1').and_return(true) }
-    it { is_expected.to run.with_params('8.8.8.8').and_return(false) }
-    it { is_expected.to run.with_params('invalid').and_return(false) }
-  end
-end
diff --git a/spec/functions/has_ip_network_spec.rb b/spec/functions/has_ip_network_spec.rb
deleted file mode 100644
index 3366757a..00000000
--- a/spec/functions/has_ip_network_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'has_ip_network' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-  context 'when on Linux Systems' do
-    let(:facts) do
-      {
-        interfaces: 'eth0,lo',
-        network_lo: '127.0.0.0',
-        network_eth0: '10.0.0.0',
-      }
-    end
-
-    it { is_expected.to run.with_params('127.0.0.0').and_return(true) }
-    it { is_expected.to run.with_params('10.0.0.0').and_return(true) }
-    it { is_expected.to run.with_params('8.8.8.0').and_return(false) }
-    it { is_expected.to run.with_params('invalid').and_return(false) }
-  end
-end
diff --git a/spec/functions/has_key_spec.rb b/spec/functions/has_key_spec.rb
deleted file mode 100644
index 88235617..00000000
--- a/spec/functions/has_key_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'has_key' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('one', 'two', 'three').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{expects the first argument to be a hash}) }
-  it { is_expected.to run.with_params(1, 'two').and_raise_error(Puppet::ParseError, %r{expects the first argument to be a hash}) }
-  it { is_expected.to run.with_params([], 'two').and_raise_error(Puppet::ParseError, %r{expects the first argument to be a hash}) }
-
-  it { is_expected.to run.with_params({ 'key' => 'value' }, 'key').and_return(true) }
-  it { is_expected.to run.with_params({}, 'key').and_return(false) }
-  it { is_expected.to run.with_params({ 'key' => 'value' }, 'not a key').and_return(false) }
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params({ 'κéỳ ' => '٧ậļųể' }, 'κéỳ ').and_return(true) }
-    it { is_expected.to run.with_params({ 'キー' => '٧ậļųể' }, 'キー').and_return(true) }
-  end
-end
diff --git a/spec/functions/hash_spec.rb b/spec/functions/hash_spec.rb
deleted file mode 100644
index 1d678f9a..00000000
--- a/spec/functions/hash_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'hash' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params([], 'two').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params(['one']).and_raise_error(Puppet::ParseError, %r{Unable to compute}) }
-  it { is_expected.to run.with_params([]).and_return({}) }
-  it { is_expected.to run.with_params(['key1', 'value1']).and_return('key1' => 'value1') }
-  it { is_expected.to run.with_params(['κ℮ұ1', '√āĺűẻ1']).and_return('κ℮ұ1' => '√āĺűẻ1') }
-  it { is_expected.to run.with_params(['key1', 'value1', 'key2', 'value2']).and_return('key1' => 'value1', 'key2' => 'value2') }
-end
diff --git a/spec/functions/intersection_spec.rb b/spec/functions/intersection_spec.rb
deleted file mode 100644
index 2be738f7..00000000
--- a/spec/functions/intersection_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'intersection' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params('one', 'two', 'three').and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params('one', []).and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params([], 'two').and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params({}, {}).and_raise_error(Puppet::ParseError) }
-  it { is_expected.to run.with_params([], []).and_return([]) }
-  it { is_expected.to run.with_params([], ['one']).and_return([]) }
-  it { is_expected.to run.with_params(['one'], []).and_return([]) }
-  it { is_expected.to run.with_params(['one'], ['one']).and_return(['one']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], ['two', 'three']).and_return(['two', 'three']) }
-  it { is_expected.to run.with_params(['ōŋể', 'ŧשợ', 'ţђŕẽё'], ['ŧשợ', 'ţђŕẽё']).and_return(['ŧשợ', 'ţђŕẽё']) }
-  it { is_expected.to run.with_params(['one', 'two', 'two', 'three'], ['two', 'three']).and_return(['two', 'three']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], ['two', 'two', 'three']).and_return(['two', 'three']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], ['two', 'three', 'four']).and_return(['two', 'three']) }
-  it 'does not confuse types' do is_expected.to run.with_params(['1', '2', '3'], [1, 2]).and_return([]) end
-end
diff --git a/spec/functions/ip_in_range_spec.rb b/spec/functions/ip_in_range_spec.rb
deleted file mode 100644
index 78130de9..00000000
--- a/spec/functions/ip_in_range_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'stdlib::ip_in_range' do
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{'stdlib::ip_in_range' expects 2 arguments, got none}) }
-    it { is_expected.to run.with_params('one', 'two', '3').and_raise_error(ArgumentError, %r{'stdlib::ip_in_range' expects 2 arguments, got 3}) }
-    it { is_expected.to run.with_params([], []).and_raise_error(ArgumentError, %r{'stdlib::ip_in_range' parameter 'ipaddress' expects a String value, got Array}) }
-    it { is_expected.to run.with_params('1.1.1.1', 7).and_raise_error(ArgumentError, %r{'stdlib::ip_in_range' parameter 'range' expects a value of type String or Array, got Integer}) }
-  end
-
-  describe 'basic validation inputs' do
-    it { is_expected.to run.with_params('192.168.100.12', '192.168.100.0/24').and_return(true) }
-    it { is_expected.to run.with_params('192.168.100.12', ['10.10.10.10/24', '192.168.100.0/24']).and_return(true) }
-    it { is_expected.to run.with_params('10.10.10.10', '192.168.100.0/24').and_return(false) }
-  end
-end
diff --git a/spec/functions/is_a_spec.rb b/spec/functions/is_a_spec.rb
deleted file mode 100644
index fd510b27..00000000
--- a/spec/functions/is_a_spec.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-if ENV['FUTURE_PARSER'] == 'yes'
-  describe 'type_of' do
-    pending 'teach rspec-puppet to load future-only functions under 3.7.5' do
-      it { is_expected.not_to eq(nil) }
-    end
-  end
-end
-
-if Puppet.version.to_f >= 4.0
-  describe 'is_a' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError) }
-    it { is_expected.to run.with_params('', '').and_raise_error(ArgumentError) }
-
-    it 'succeeds when comparing a string and a string' do
-      is_expected.to run.with_params('hello world', String).and_return(true)
-    end
-
-    it 'fails when comparing an integer and a string' do
-      is_expected.to run.with_params(5, String).and_return(false)
-    end
-
-    it 'suceeds when comparing an UTF8 and double byte characters' do
-      comparison_array = ['このテキスト', 'ŧћịś ŧêχŧ']
-      comparison_array.each do |comparison_value|
-        is_expected.to run.with_params(comparison_value, String).and_return(true)
-      end
-    end
-  end
-end
diff --git a/spec/functions/is_array_spec.rb b/spec/functions/is_array_spec.rb
deleted file mode 100644
index 63561600..00000000
--- a/spec/functions/is_array_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_array' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params([], []).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params([]).and_return(true) }
-  it { is_expected.to run.with_params(['one']).and_return(true) }
-  it { is_expected.to run.with_params([1]).and_return(true) }
-  it { is_expected.to run.with_params([{}]).and_return(true) }
-  it { is_expected.to run.with_params([[]]).and_return(true) }
-  it { is_expected.to run.with_params('').and_return(false) }
-  it { is_expected.to run.with_params('one').and_return(false) }
-  it { is_expected.to run.with_params(1).and_return(false) }
-  it { is_expected.to run.with_params({}).and_return(false) }
-  context 'with deprecation warning' do
-    after(:each) do
-      ENV.delete('STDLIB_LOG_DEPRECATIONS')
-    end
-    # Checking for deprecation warning, which should only be provoked when the env variable for it is set.
-    it 'displays a single deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-      expect(scope).to receive(:warning).with(include('This method is deprecated'))
-      is_expected.to run.with_params(['1.2.3.4']).and_return(true)
-    end
-    it 'displays no warning for deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'false'
-      expect(scope).to receive(:warning).with(include('This method is deprecated')).never
-      is_expected.to run.with_params(['1.2.3.4']).and_return(true)
-    end
-  end
-end
diff --git a/spec/functions/is_bool_spec.rb b/spec/functions/is_bool_spec.rb
deleted file mode 100644
index 7c5eddac..00000000
--- a/spec/functions/is_bool_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_bool' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(true, false).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(true).and_return(true) }
-  it { is_expected.to run.with_params(false).and_return(true) }
-  it { is_expected.to run.with_params([1]).and_return(false) }
-  it { is_expected.to run.with_params([{}]).and_return(false) }
-  it { is_expected.to run.with_params([[]]).and_return(false) }
-  it { is_expected.to run.with_params([true]).and_return(false) }
-  it { is_expected.to run.with_params('true').and_return(false) }
-  it { is_expected.to run.with_params('false').and_return(false) }
-  context 'with deprecation warning' do
-    after(:each) do
-      ENV.delete('STDLIB_LOG_DEPRECATIONS')
-    end
-    # Checking for deprecation warning, which should only be provoked when the env variable for it is set.
-    it 'displays a single deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-      expect(scope).to receive(:warning).with(include('This method is deprecated'))
-      is_expected.to run.with_params(true).and_return(true)
-    end
-    it 'displays no warning for deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'false'
-      expect(scope).to receive(:warning).with(include('This method is deprecated')).never
-      is_expected.to run.with_params(false).and_return(true)
-    end
-  end
-end
diff --git a/spec/functions/is_domain_name_spec.rb b/spec/functions/is_domain_name_spec.rb
deleted file mode 100644
index a0221408..00000000
--- a/spec/functions/is_domain_name_spec.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_domain_name' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(1).and_return(false) }
-  it { is_expected.to run.with_params([]).and_return(false) }
-  it { is_expected.to run.with_params({}).and_return(false) }
-  it { is_expected.to run.with_params('').and_return(false) }
-  it { is_expected.to run.with_params('.').and_return(true) }
-  it { is_expected.to run.with_params('com').and_return(true) }
-  it { is_expected.to run.with_params('com.').and_return(true) }
-  it { is_expected.to run.with_params('x.com').and_return(true) }
-  it { is_expected.to run.with_params('x.com.').and_return(true) }
-  it { is_expected.to run.with_params('foo.example.com').and_return(true) }
-  it { is_expected.to run.with_params('foo.example.com.').and_return(true) }
-  it { is_expected.to run.with_params('2foo.example.com').and_return(true) }
-  it { is_expected.to run.with_params('2foo.example.com.').and_return(true) }
-  it { is_expected.to run.with_params('www.2foo.example.com').and_return(true) }
-  it { is_expected.to run.with_params('www.2foo.example.com.').and_return(true) }
-  it { is_expected.to run.with_params(true).and_return(false) }
-
-  describe 'inputs with spaces' do
-    it { is_expected.to run.with_params('invalid domain').and_return(false) }
-  end
-
-  describe 'inputs with hyphens' do
-    it { is_expected.to run.with_params('foo-bar.example.com').and_return(true) }
-    it { is_expected.to run.with_params('foo-bar.example.com.').and_return(true) }
-    it { is_expected.to run.with_params('www.foo-bar.example.com').and_return(true) }
-    it { is_expected.to run.with_params('www.foo-bar.example.com.').and_return(true) }
-    it { is_expected.to run.with_params('-foo.example.com').and_return(false) }
-    it { is_expected.to run.with_params('-foo.example.com.').and_return(false) }
-  end
-
-  # Values obtained from Facter values will be frozen strings
-  # in newer versions of Facter:
-  it { is_expected.to run.with_params('www.example.com').and_return(true) }
-
-  describe 'top level domain must be alphabetic if there are multiple labels' do
-    it { is_expected.to run.with_params('2com').and_return(true) }
-    it { is_expected.to run.with_params('www.example.2com').and_return(false) }
-  end
-
-  describe 'IP addresses are not domain names' do
-    it { is_expected.to run.with_params('192.168.1.1').and_return(false) }
-  end
-end
diff --git a/spec/functions/is_email_address_spec.rb b/spec/functions/is_email_address_spec.rb
deleted file mode 100644
index c2aeaf3d..00000000
--- a/spec/functions/is_email_address_spec.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_email_address' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params([], []).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('bob@gmail.com').and_return(true) }
-  it { is_expected.to run.with_params('alice+puppetlabs.com@gmail.com').and_return(true) }
-  it { is_expected.to run.with_params('peter.parker@gmail.com').and_return(true) }
-  it { is_expected.to run.with_params('1.2.3@domain').and_return(false) }
-  it { is_expected.to run.with_params('1.2.3.4.5@').and_return(false) }
-  it { is_expected.to run.with_params({}).and_return(false) }
-  it { is_expected.to run.with_params([]).and_return(false) }
-end
diff --git a/spec/functions/is_float_spec.rb b/spec/functions/is_float_spec.rb
deleted file mode 100644
index e80dc4ce..00000000
--- a/spec/functions/is_float_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_float' do
-  it { is_expected.not_to eq(nil) }
-
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(0.1, 0.2).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('0.1').and_return(true) }
-  it { is_expected.to run.with_params('1.0').and_return(true) }
-  it { is_expected.to run.with_params('1').and_return(false) }
-  it { is_expected.to run.with_params('one').and_return(false) }
-  it { is_expected.to run.with_params('one 1.0').and_return(false) }
-  it { is_expected.to run.with_params('1.0 one').and_return(false) }
-  it { is_expected.to run.with_params(0.1).and_return(true) }
-  it { is_expected.to run.with_params(1.0).and_return(true) }
-  it { is_expected.to run.with_params(1).and_return(false) }
-  it { is_expected.to run.with_params({}).and_return(false) }
-  it { is_expected.to run.with_params([]).and_return(false) }
-
-  context 'with deprecation warning' do
-    after(:each) do
-      ENV.delete('STDLIB_LOG_DEPRECATIONS')
-    end
-    # Checking for deprecation warning, which should only be provoked when the env variable for it is set.
-    it 'displays a single deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-      expect(scope).to receive(:warning).with(include('This method is deprecated'))
-      is_expected.to run.with_params(2.2).and_return(true)
-    end
-    it 'displays no warning for deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'false'
-      expect(scope).to receive(:warning).with(include('This method is deprecated')).never
-      is_expected.to run.with_params(1.0).and_return(true)
-    end
-  end
-end
diff --git a/spec/functions/is_function_available_spec.rb b/spec/functions/is_function_available_spec.rb
deleted file mode 100644
index 3b396542..00000000
--- a/spec/functions/is_function_available_spec.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_function_available' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('include').and_return(true) }
-  it { is_expected.to run.with_params('no_such_function').and_return(false) }
-  it { is_expected.to run.with_params([]).and_return(false) }
-  it { is_expected.to run.with_params({}).and_return(false) }
-  it { is_expected.to run.with_params(1).and_return(false) }
-end
diff --git a/spec/functions/is_hash_spec.rb b/spec/functions/is_hash_spec.rb
deleted file mode 100644
index 126535db..00000000
--- a/spec/functions/is_hash_spec.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_hash' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params({}, {}).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('').and_return(false) }
-  it { is_expected.to run.with_params({}).and_return(true) }
-  it { is_expected.to run.with_params([]).and_return(false) }
-  it { is_expected.to run.with_params(1).and_return(false) }
-  it { is_expected.to run.with_params([{ 'aaa' => 'bbb' }]).and_return(false) }
-end
diff --git a/spec/functions/is_integer_spec.rb b/spec/functions/is_integer_spec.rb
deleted file mode 100644
index 1de12c9c..00000000
--- a/spec/functions/is_integer_spec.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_integer' do
-  it { is_expected.not_to eq(nil) }
-
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(1, 2).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-  it { is_expected.to run.with_params(3).and_return(true) }
-  it { is_expected.to run.with_params('3').and_return(true) }
-  it { is_expected.to run.with_params(-3).and_return(true) }
-  it { is_expected.to run.with_params('-3').and_return(true) }
-  it { is_expected.to run.with_params("123\nfoo").and_return(true) }
-  it { is_expected.to run.with_params("foo\n123").and_return(true) }
-
-  it { is_expected.to run.with_params(3.7).and_return(false) }
-  it { is_expected.to run.with_params('3.7').and_return(false) }
-  it { is_expected.to run.with_params(-3.7).and_return(false) }
-  it { is_expected.to run.with_params('-3.7').and_return(false) }
-
-  it { is_expected.to run.with_params('one').and_return(false) }
-  it { is_expected.to run.with_params([]).and_return(false) }
-  it { is_expected.to run.with_params([1]).and_return(false) }
-  it { is_expected.to run.with_params({}).and_return(false) }
-  it { is_expected.to run.with_params(true).and_return(false) }
-  it { is_expected.to run.with_params(false).and_return(false) }
-  it { is_expected.to run.with_params('0001234').and_return(false) }
-  it { is_expected.to run.with_params("foo\nbar").and_return(false) }
-
-  context 'with deprecation warning' do
-    after(:each) do
-      ENV.delete('STDLIB_LOG_DEPRECATIONS')
-    end
-    # Checking for deprecation warning, which should only be provoked when the env variable for it is set.
-    it 'displays a single deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-      expect(scope).to receive(:warning).with(include('This method is deprecated'))
-      is_expected.to run.with_params(50).and_return(true)
-    end
-    it 'displays no warning for deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'false'
-      expect(scope).to receive(:warning).with(include('This method is deprecated')).never
-      is_expected.to run.with_params(50).and_return(true)
-    end
-  end
-end
diff --git a/spec/functions/is_ip_address_spec.rb b/spec/functions/is_ip_address_spec.rb
deleted file mode 100644
index 208d6459..00000000
--- a/spec/functions/is_ip_address_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_ip_address' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params([], []).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('1.2.3.4').and_return(true) }
-  it { is_expected.to run.with_params('1.2.3.255').and_return(true) }
-  it { is_expected.to run.with_params('1.2.3.256').and_return(false) }
-  it { is_expected.to run.with_params('1.2.3').and_return(false) }
-  it { is_expected.to run.with_params('1.2.3.4.5').and_return(false) }
-  it { is_expected.to run.with_params('fe00::1').and_return(true) }
-  it { is_expected.to run.with_params('fe80:0000:cd12:d123:e2f8:47ff:fe09:dd74').and_return(true) }
-  it { is_expected.to run.with_params('FE80:0000:CD12:D123:E2F8:47FF:FE09:DD74').and_return(true) }
-  it { is_expected.to run.with_params('fe80:0000:cd12:d123:e2f8:47ff:fe09:zzzz').and_return(false) }
-  it { is_expected.to run.with_params('fe80:0000:cd12:d123:e2f8:47ff:fe09').and_return(false) }
-  it { is_expected.to run.with_params('fe80:0000:cd12:d123:e2f8:47ff:fe09:dd74:dd74').and_return(false) }
-  it { is_expected.to run.with_params('').and_return(false) }
-  it { is_expected.to run.with_params('one').and_return(false) }
-  it { is_expected.to run.with_params(1).and_return(false) }
-  it { is_expected.to run.with_params({}).and_return(false) }
-  it { is_expected.to run.with_params([]).and_return(false) }
-  it { is_expected.to run.with_params('thisstring').and_return(false) }
-end
diff --git a/spec/functions/is_ipv4_address_spec.rb b/spec/functions/is_ipv4_address_spec.rb
deleted file mode 100644
index 42986836..00000000
--- a/spec/functions/is_ipv4_address_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_ipv4_address' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-  SharedData::IPV4_PATTERNS.each do |value|
-    it { is_expected.to run.with_params(value).and_return(true) }
-  end
-
-  SharedData::IPV4_NEGATIVE_PATTERNS.each do |value|
-    it { is_expected.to run.with_params(value).and_return(false) }
-  end
-
-  context 'Checking for deprecation warning', if: Puppet.version.to_f < 4.0 do
-    after(:each) do
-      ENV.delete('STDLIB_LOG_DEPRECATIONS')
-    end
-    # Checking for deprecation warning, which should only be provoked when the env variable for it is set.
-    it 'displays a single deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-      expect(scope).to receive(:warning).with(include('This method is deprecated'))
-      is_expected.to run.with_params(SharedData::IPV4_PATTERNS.first).and_return(true)
-    end
-    it 'displays no warning for deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'false'
-      expect(scope).to receive(:warning).with(include('This method is deprecated')).never
-      is_expected.to run.with_params(SharedData::IPV4_PATTERNS.first).and_return(true)
-    end
-  end
-end
diff --git a/spec/functions/is_ipv6_address_spec.rb b/spec/functions/is_ipv6_address_spec.rb
deleted file mode 100644
index 39171336..00000000
--- a/spec/functions/is_ipv6_address_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_ipv6_address' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('2001:0db8:85a3:0000:0000:8a2e:0370:7334').and_return(true) }
-  it { is_expected.to run.with_params('85a3:0000:0000:8a2e:0370:7334:100.100.100.100').and_return(true) }
-  it { is_expected.to run.with_params('1.2.3').and_return(false) }
-  it { is_expected.to run.with_params('1.2.3.4.5').and_return(false) }
-  it { is_expected.to run.with_params('').and_return(false) }
-  it { is_expected.to run.with_params('one').and_return(false) }
-  it { is_expected.to run.with_params('2001:0db8:85a3:0000:0000:8a2e:0370:7334:ggg').and_return(false) }
-
-  context 'Checking for deprecation warning', if: Puppet.version.to_f < 4.0 do
-    after(:each) do
-      ENV.delete('STDLIB_LOG_DEPRECATIONS')
-    end
-    # Checking for deprecation warning, which should only be provoked when the env variable for it is set.
-    it 'displays a single deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-      expect(scope).to receive(:warning).with(include('This method is deprecated'))
-      is_expected.to run.with_params('2001:0db8:85a3:0000:0000:8a2e:0370:7334').and_return(true)
-    end
-    it 'displays no warning for deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'false'
-      expect(scope).to receive(:warning).with(include('This method is deprecated')).never
-      is_expected.to run.with_params('2001:0db8:85a3:0000:0000:8a2e:0370:7334').and_return(true)
-    end
-  end
-end
diff --git a/spec/functions/is_mac_address_spec.rb b/spec/functions/is_mac_address_spec.rb
deleted file mode 100644
index 3312bb39..00000000
--- a/spec/functions/is_mac_address_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_mac_address' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params([], []).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('00:a0:1f:12:7f:a0').and_return(true) }
-  it { is_expected.to run.with_params('00:A0:1F:12:7F:A0').and_return(true) }
-  it { is_expected.to run.with_params('80:00:02:09:fe:80:00:00:00:00:00:00:00:24:65:ff:ff:91:a3:12').and_return(true) }
-  it { is_expected.to run.with_params('00:00:00:00:00:0g').and_return(false) }
-  it { is_expected.to run.with_params('').and_return(false) }
-  it { is_expected.to run.with_params('one').and_return(false) }
-
-  context 'with  UTF8 and double byte characters' do
-    it { is_expected.to run.with_params('ƒốưř').and_return(false) }
-    it { is_expected.to run.with_params('三+').and_return(false) }
-  end
-
-  it {
-    pending 'should properly typecheck its arguments'
-    is_expected.to run.with_params(1).and_return(false)
-  }
-  it {
-    pending 'should properly typecheck its arguments'
-    is_expected.to run.with_params({}).and_return(false)
-  }
-  it {
-    pending 'should properly typecheck its arguments'
-    is_expected.to run.with_params([]).and_return(false)
-  }
-end
diff --git a/spec/functions/is_numeric_spec.rb b/spec/functions/is_numeric_spec.rb
deleted file mode 100644
index 9c9d9dbf..00000000
--- a/spec/functions/is_numeric_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_numeric' do
-  it { is_expected.not_to eq(nil) }
-
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(1, 2).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-  it { is_expected.to run.with_params(3).and_return(true) }
-  it { is_expected.to run.with_params('3').and_return(true) }
-  it { is_expected.to run.with_params(-3).and_return(true) }
-  it { is_expected.to run.with_params('-3').and_return(true) }
-
-  it { is_expected.to run.with_params(3.7).and_return(true) }
-  it { is_expected.to run.with_params('3.7').and_return(true) }
-  it { is_expected.to run.with_params(-3.7).and_return(true) }
-  it { is_expected.to run.with_params('-3.7').and_return(true) }
-
-  it { is_expected.to run.with_params('-342.2315e-12').and_return(true) }
-
-  it { is_expected.to run.with_params('one').and_return(false) }
-  it { is_expected.to run.with_params([]).and_return(false) }
-  it { is_expected.to run.with_params([1]).and_return(false) }
-  it { is_expected.to run.with_params({}).and_return(false) }
-  it { is_expected.to run.with_params(true).and_return(false) }
-  it { is_expected.to run.with_params(false).and_return(false) }
-  it { is_expected.to run.with_params('0001234').and_return(false) }
-  it { is_expected.to run.with_params(' - 1234').and_return(false) }
-  it { is_expected.to run.with_params(['aaa.com', 'bbb', 'ccc']).and_return(false) }
-
-  context 'with deprecation warning' do
-    after(:each) do
-      ENV.delete('STDLIB_LOG_DEPRECATIONS')
-    end
-    # Checking for deprecation warning, which should only be provoked when the env variable for it is set.
-    it 'displays a single deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-      expect(scope).to receive(:warning).with(include('This method is deprecated'))
-      is_expected.to run.with_params(7).and_return(true)
-    end
-    it 'displays no warning for deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'false'
-      expect(scope).to receive(:warning).with(include('This method is deprecated')).never
-      is_expected.to run.with_params(7).and_return(true)
-    end
-  end
-end
diff --git a/spec/functions/is_string_spec.rb b/spec/functions/is_string_spec.rb
deleted file mode 100644
index 9a221501..00000000
--- a/spec/functions/is_string_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_string' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params('', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-
-  it { is_expected.to run.with_params(3).and_return(false) }
-  it { is_expected.to run.with_params('3').and_return(false) }
-  it { is_expected.to run.with_params(-3).and_return(false) }
-  it { is_expected.to run.with_params('-3').and_return(false) }
-
-  it { is_expected.to run.with_params(3.7).and_return(false) }
-  it { is_expected.to run.with_params('3.7').and_return(false) }
-  it { is_expected.to run.with_params(-3.7).and_return(false) }
-  it { is_expected.to run.with_params('-3.7').and_return(false) }
-
-  it { is_expected.to run.with_params(:undef).and_return(false) }
-  it { is_expected.to run.with_params([]).and_return(false) }
-  it { is_expected.to run.with_params([1]).and_return(false) }
-  it { is_expected.to run.with_params({}).and_return(false) }
-  it { is_expected.to run.with_params(true).and_return(false) }
-  it { is_expected.to run.with_params(false).and_return(false) }
-  it { is_expected.to run.with_params('one').and_return(true) }
-  it { is_expected.to run.with_params('0001234').and_return(true) }
-  it { is_expected.to run.with_params('aaa' => 'www.com').and_return(false) }
-
-  context 'with  deprecation warning' do
-    after(:each) do
-      ENV.delete('STDLIB_LOG_DEPRECATIONS')
-    end
-    # Checking for deprecation warning, which should only be provoked when the env variable for it is set.
-    it 'displays a single deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-      expect(scope).to receive(:warning).with(include('This method is deprecated'))
-      is_expected.to run.with_params('sponge').and_return(true)
-    end
-    it 'displays no warning for deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'false'
-      expect(scope).to receive(:warning).with(include('This method is deprecated')).never
-      is_expected.to run.with_params('bob').and_return(true)
-    end
-  end
-end
diff --git a/spec/functions/join_keys_to_values_spec.rb b/spec/functions/join_keys_to_values_spec.rb
deleted file mode 100644
index 5d9942e0..00000000
--- a/spec/functions/join_keys_to_values_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'join_keys_to_values' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Takes exactly two arguments}) }
-  it { is_expected.to run.with_params({}, '', '').and_raise_error(Puppet::ParseError, %r{Takes exactly two arguments}) }
-  it { is_expected.to run.with_params('one', '').and_raise_error(TypeError, %r{The first argument must be a hash}) }
-  it { is_expected.to run.with_params({}, 2).and_raise_error(TypeError, %r{The second argument must be a string}) }
-
-  it { is_expected.to run.with_params({}, '').and_return([]) }
-  it { is_expected.to run.with_params({}, ':').and_return([]) }
-  it { is_expected.to run.with_params({ 'key' => 'value' }, '').and_return(['keyvalue']) }
-  it { is_expected.to run.with_params({ 'key' => 'value' }, ':').and_return(['key:value']) }
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params({ 'ҝẽγ' => '√ạĺűē' }, ':').and_return(['ҝẽγ:√ạĺűē']) }
-    it { is_expected.to run.with_params({ 'ҝẽγ' => '√ạĺűē' }, '万').and_return(['ҝẽγ万√ạĺűē']) }
-  end
-
-  if Puppet::Util::Package.versioncmp(Puppet.version, '5.5.7') == 0
-    it { is_expected.to run.with_params({ 'key' => '' }, ':').and_return(['key:']) }
-  else
-    it { is_expected.to run.with_params({ 'key' => nil }, ':').and_return(['key:']) }
-  end
-
-  it 'runs join_keys_to_values(<hash with multiple keys>, ":") and return the proper array' do
-    is_expected.to run.with_params({ 'key1' => 'value1', 'key2' => 'value2' }, ':').and_return(['key1:value1', 'key2:value2'])
-  end
-
-  it 'runs join_keys_to_values(<hash with array value>, " ") and return the proper array' do
-    expected_result = ['key1 value1', 'key2 value2', 'key2 value3']
-    is_expected.to run.with_params({ 'key1' => 'value1', 'key2' => ['value2', 'value3'] }, ' ').and_return(expected_result)
-  end
-end
diff --git a/spec/functions/join_spec.rb b/spec/functions/join_spec.rb
deleted file mode 100644
index 2175248a..00000000
--- a/spec/functions/join_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'join', if: Puppet::Util::Package.versioncmp(Puppet.version, '5.5.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the second.')
-    is_expected.to run.with_params([], '', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{Requires array to work with}) }
-  it { is_expected.to run.with_params([], 2).and_raise_error(Puppet::ParseError, %r{Requires string to work with}) }
-
-  it { is_expected.to run.with_params([]).and_return('') }
-  it { is_expected.to run.with_params([], ':').and_return('') }
-  it { is_expected.to run.with_params(['one']).and_return('one') }
-  it { is_expected.to run.with_params(['one'], ':').and_return('one') }
-  it { is_expected.to run.with_params(['one', 'two', 'three']).and_return('onetwothree') }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], ':').and_return('one:two:three') }
-  it { is_expected.to run.with_params(['ōŋể', 'ŧשợ', 'ţђŕẽё'], ':').and_return('ōŋể:ŧשợ:ţђŕẽё') }
-end
diff --git a/spec/functions/keys_spec.rb b/spec/functions/keys_spec.rb
deleted file mode 100644
index befc834c..00000000
--- a/spec/functions/keys_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'keys', if: Puppet::Util::Package.versioncmp(Puppet.version, '5.5.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params({}, {}).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params('').and_raise_error(Puppet::ParseError, %r{Requires hash to work with}) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires hash to work with}) }
-  it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{Requires hash to work with}) }
-  it { is_expected.to run.with_params({}).and_return([]) }
-  it { is_expected.to run.with_params('key' => 'value').and_return(['key']) }
-  it 'returns the array of keys' do
-    result = subject.call([{ 'key1' => 'value1', 'key2' => 'value2' }])
-    expect(result).to match_array(['key1', 'key2'])
-  end
-
-  it 'runs with UTF8 and double byte characters' do
-    result = subject.call([{ 'ҝểү' => '√ẳŀμệ', 'キー' => '値' }])
-    expect(result).to match_array(['ҝểү', 'キー'])
-  end
-end
diff --git a/spec/functions/length_spec.rb b/spec/functions/length_spec.rb
deleted file mode 100644
index 183a31c4..00000000
--- a/spec/functions/length_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'length', if: Puppet::Util::Package.versioncmp(Puppet.version, '5.5.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{'length' expects 1 argument, got none}) }
-  it { is_expected.to run.with_params([], 'extra').and_raise_error(ArgumentError, %r{'length' expects 1 argument, got 2}) }
-  it { is_expected.to run.with_params(1).and_raise_error(ArgumentError, %r{expects a value of type String, Array, or Hash, got Integer}) }
-  it { is_expected.to run.with_params(true).and_raise_error(ArgumentError, %r{expects a value of type String, Array, or Hash, got Boolean}) }
-  it { is_expected.to run.with_params('1').and_return(1) }
-  it { is_expected.to run.with_params('1.0').and_return(3) }
-  it { is_expected.to run.with_params([]).and_return(0) }
-  it { is_expected.to run.with_params(['a']).and_return(1) }
-  it { is_expected.to run.with_params(['one', 'two', 'three']).and_return(3) }
-  it { is_expected.to run.with_params(['one', 'two', 'three', 'four']).and_return(4) }
-
-  it { is_expected.to run.with_params({}).and_return(0) }
-  it { is_expected.to run.with_params('1' => '2').and_return(1) }
-  it { is_expected.to run.with_params('1' => '2', '4' => '4').and_return(2) }
-  it { is_expected.to run.with_params('€' => '@', '竹' => 'ǿňè').and_return(2) }
-
-  it { is_expected.to run.with_params('').and_return(0) }
-  it { is_expected.to run.with_params('a').and_return(1) }
-  it { is_expected.to run.with_params('abc').and_return(3) }
-  it { is_expected.to run.with_params('abcd').and_return(4) }
-  it { is_expected.to run.with_params('万').and_return(1) }
-  it { is_expected.to run.with_params('āβćđ').and_return(4) }
-
-  context 'when using a class extending String' do
-    it { is_expected.to run.with_params(AlsoString.new('asdfghjkl')).and_return(9) }
-  end
-end
diff --git a/spec/functions/load_module_metadata_spec.rb b/spec/functions/load_module_metadata_spec.rb
deleted file mode 100644
index caca5e75..00000000
--- a/spec/functions/load_module_metadata_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'load_module_metadata' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('one', 'two', 'three').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-  describe 'when calling with valid arguments' do
-    before :each do
-      # In Puppet 7, there are two prior calls to File.read prior to the responses we want to mock
-      allow(File).to receive(:read).with(anything, anything).and_call_original
-      allow(File).to receive(:read).with(%r{\/(stdlib|test)\/metadata.json}, encoding: 'utf-8').and_return('{"name": "puppetlabs-stdlib"}')
-      allow(File).to receive(:read).with(%r{\/(stdlib|test)\/metadata.json}).and_return('{"name": "puppetlabs-stdlib"}')
-      # Additional modules used by litmus which are identified while running these dues to being in fixtures
-      allow(File).to receive(:read).with(%r{\/(provision|puppet_agent|facts)\/metadata.json}, encoding: 'utf-8')
-    end
-
-    context 'when calling with valid utf8 and double byte character arguments' do
-      before :each do
-        allow(File).to receive(:read).with(%r{\/(stdlib|test)\/metadata.json}, encoding: 'utf-8').and_return('{"ĭďèʼnţĩƒіểя": "ċơņťęאּť ỡƒ ţħíš -
-この文字"}')
-        allow(File).to receive(:read).with(%r{\/(stdlib|test)\/metadata.json}).and_return('{"ĭďèʼnţĩƒіểя": "ċơņťęאּť ỡƒ ţħíš -
-この文字"}')
-      end
-
-      let(:prefix) { 'C:' if Puppet::Util::Platform.windows? }
-
-      it 'jsons parse the file' do
-        allow(scope).to receive(:function_get_module_path).with(['science']).and_return("#{prefix}/path/to/module/")
-        allow(File).to receive(:exists?).with("#{prefix}/path/to/module/metadata.json").and_return(true)
-        allow(File).to receive(:read).with("#{prefix}/path/to/module/metadata.json").and_return('{"name": "spencer-science"}')
-
-        result = subject.execute('science')
-        expect(result['name']).to eq('spencer-science')
-      end
-
-      it 'fails by default if there is no metadata.json' do
-        allow(scope).to receive(:function_get_module_path).with(['science']).and_return("#{prefix}/path/to/module/")
-        allow(File).to receive(:exists?).with("#{prefix}/path/to/module/metadata.json").and_return(false)
-        expect { subject.call(['science']) }.to raise_error(Puppet::ParseError)
-      end
-
-      it 'returns nil if user allows empty metadata.json' do
-        allow(scope).to receive(:function_get_module_path).with(['science']).and_return("#{prefix}/path/to/module/")
-        allow(File).to receive(:exists?).with("#{prefix}/path/to/module/metadata.json").and_return(false)
-        result = subject.execute('science', true)
-        expect(result).to eq({})
-      end
-    end
-  end
-end
diff --git a/spec/functions/loadjson_spec.rb b/spec/functions/loadjson_spec.rb
deleted file mode 100644
index fbfee51d..00000000
--- a/spec/functions/loadjson_spec.rb
+++ /dev/null
@@ -1,145 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'loadjson' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
-
-  describe 'when calling with valid arguments' do
-    before :each do
-      # In Puppet 7, there are two prior calls to File.read prior to the responses we want to mock
-      allow(File).to receive(:read).with(anything, anything).and_call_original
-      allow(File).to receive(:read).with(%r{\/(stdlib|test)\/metadata.json}, encoding: 'utf-8').and_return('{"name": "puppetlabs-stdlib"}')
-      allow(File).to receive(:read).with(%r{\/(stdlib|test)\/metadata.json}).and_return('{"name": "puppetlabs-stdlib"}')
-      # Additional modules used by litmus which are identified while running these dues to being in fixtures
-      allow(File).to receive(:read).with(%r{\/(provision|puppet_agent|facts)\/metadata.json}, encoding: 'utf-8')
-    end
-
-    context 'when a non-existing file is specified' do
-      let(:filename) do
-        if Puppet::Util::Platform.windows?
-          'C:/tmp/doesnotexist'
-        else
-          '/tmp/doesnotexist'
-        end
-      end
-
-      before(:each) do
-        allow(File).to receive(:exists?).with(filename).and_return(false).once
-        allow(PSON).to receive(:load).never
-      end
-      it { is_expected.to run.with_params(filename, 'default' => 'value').and_return('default' => 'value') }
-      it { is_expected.to run.with_params(filename, 'đẽƒằưļŧ' => '٧ẵłựέ').and_return('đẽƒằưļŧ' => '٧ẵłựέ') }
-      it { is_expected.to run.with_params(filename, 'デフォルト' => '値').and_return('デフォルト' => '値') }
-    end
-
-    context 'when an existing file is specified' do
-      let(:filename) do
-        if Puppet::Util::Platform.windows?
-          'C:/tmp/doesexist'
-        else
-          '/tmp/doesexist'
-        end
-      end
-      let(:data) { { 'key' => 'value', 'ķęŷ' => 'νậŀųề', 'キー' => '値' } }
-      let(:json) { '{"key":"value", {"ķęŷ":"νậŀųề" }, {"キー":"値" }' }
-
-      before(:each) do
-        allow(File).to receive(:exists?).with(filename).and_return(true).once
-        allow(File).to receive(:read).with(filename).and_return(json).once
-        allow(File).to receive(:read).with(filename).and_return(json).once
-        allow(PSON).to receive(:load).with(json).and_return(data).once
-      end
-      it { is_expected.to run.with_params(filename).and_return(data) }
-    end
-
-    context 'when the file could not be parsed' do
-      let(:filename) do
-        if Puppet::Util::Platform.windows?
-          'C:/tmp/doesexist'
-        else
-          '/tmp/doesexist'
-        end
-      end
-      let(:json) { '{"key":"value"}' }
-
-      before(:each) do
-        allow(File).to receive(:exists?).with(filename).and_return(true).once
-        allow(File).to receive(:read).with(filename).and_return(json).once
-        allow(PSON).to receive(:load).with(json).once.and_raise StandardError, 'Something terrible have happened!'
-      end
-      it { is_expected.to run.with_params(filename, 'default' => 'value').and_return('default' => 'value') }
-    end
-
-    context 'when an existing URL is specified' do
-      let(:filename) do
-        'https://example.local/myhash.json'
-      end
-      let(:data) { { 'key' => 'value', 'ķęŷ' => 'νậŀųề', 'キー' => '値' } }
-      let(:json) { '{"key":"value", {"ķęŷ":"νậŀųề" }, {"キー":"値" }' }
-
-      it {
-        expect(OpenURI).to receive(:open_uri).with(filename, {}).and_return(json)
-        expect(PSON).to receive(:load).with(json).and_return(data).once
-        is_expected.to run.with_params(filename).and_return(data)
-      }
-    end
-
-    context 'when an existing URL (with username and password) is specified' do
-      let(:filename) do
-        'https://user1:pass1@example.local/myhash.json'
-      end
-      let(:url_no_auth) { 'https://example.local/myhash.json' }
-      let(:basic_auth) { { http_basic_authentication: ['user1', 'pass1'] } }
-      let(:data) { { 'key' => 'value', 'ķęŷ' => 'νậŀųề', 'キー' => '値' } }
-      let(:json) { '{"key":"value", {"ķęŷ":"νậŀųề" }, {"キー":"値" }' }
-
-      it {
-        expect(OpenURI).to receive(:open_uri).with(url_no_auth, basic_auth).and_return(json)
-        expect(PSON).to receive(:load).with(json).and_return(data).once
-        is_expected.to run.with_params(filename).and_return(data)
-      }
-    end
-
-    context 'when an existing URL (with username) is specified' do
-      let(:filename) do
-        'https://user1@example.local/myhash.json'
-      end
-      let(:url_no_auth) { 'https://example.local/myhash.json' }
-      let(:basic_auth) { { http_basic_authentication: ['user1', ''] } }
-      let(:data) { { 'key' => 'value', 'ķęŷ' => 'νậŀųề', 'キー' => '値' } }
-      let(:json) { '{"key":"value", {"ķęŷ":"νậŀųề" }, {"キー":"値" }' }
-
-      it {
-        expect(OpenURI).to receive(:open_uri).with(url_no_auth, basic_auth).and_return(json)
-        expect(PSON).to receive(:load).with(json).and_return(data).once
-        is_expected.to run.with_params(filename).and_return(data)
-      }
-    end
-
-    context 'when the URL output could not be parsed, with default specified' do
-      let(:filename) do
-        'https://example.local/myhash.json'
-      end
-      let(:json) { ',;{"key":"value"}' }
-
-      it {
-        expect(OpenURI).to receive(:open_uri).with(filename, {}).and_return(json)
-        expect(PSON).to receive(:load).with(json).once.and_raise StandardError, 'Something terrible have happened!'
-        is_expected.to run.with_params(filename, 'default' => 'value').and_return('default' => 'value')
-      }
-    end
-
-    context 'when the URL does not exist, with default specified' do
-      let(:filename) do
-        'https://example.local/myhash.json'
-      end
-
-      it {
-        expect(OpenURI).to receive(:open_uri).with(filename, {}).and_raise OpenURI::HTTPError, '404 File not Found'
-        is_expected.to run.with_params(filename, 'default' => 'value').and_return('default' => 'value')
-      }
-    end
-  end
-end
diff --git a/spec/functions/loadyaml_spec.rb b/spec/functions/loadyaml_spec.rb
deleted file mode 100644
index 4de82ec3..00000000
--- a/spec/functions/loadyaml_spec.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'loadyaml' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
-
-  context 'when a non-existing file is specified' do
-    let(:filename) { '/tmp/doesnotexist' }
-
-    it "'default' => 'value'" do
-      expect(File).to receive(:exists?).with(filename).and_return(false).once
-      expect(YAML).to receive(:load_file).never
-      is_expected.to run.with_params(filename, 'default' => 'value').and_return('default' => 'value')
-    end
-  end
-
-  context 'when an existing file is specified' do
-    let(:filename) { '/tmp/doesexist' }
-    let(:data) { { 'key' => 'value', 'ķęŷ' => 'νậŀųề', 'キー' => '値' } }
-
-    it "returns 'key' => 'value', 'ķęŷ' => 'νậŀųề', 'キー' => '値'" do
-      expect(File).to receive(:exists?).with(filename).and_return(true).once
-      expect(YAML).to receive(:load_file).with(filename).and_return(data).once
-      is_expected.to run.with_params(filename).and_return(data)
-    end
-  end
-
-  context 'when the file could not be parsed' do
-    let(:filename) { '/tmp/doesexist' }
-
-    it 'filename /tmp/doesexist' do
-      expect(File).to receive(:exists?).with(filename).and_return(true).once
-      allow(YAML).to receive(:load_file).with(filename).once.and_raise(StandardError, 'Something terrible have happened!')
-      is_expected.to run.with_params(filename, 'default' => 'value').and_return('default' => 'value')
-    end
-  end
-
-  context 'when an existing URL is specified' do
-    let(:filename) { 'https://example.local/myhash.yaml' }
-    let(:basic_auth) { { http_basic_authentication: ['', ''] } }
-    let(:yaml) { 'Dummy YAML' }
-    let(:data) { { 'key' => 'value', 'ķęŷ' => 'νậŀųề', 'キー' => '値' } }
-
-    it {
-      expect(OpenURI).to receive(:open_uri).with(filename, basic_auth).and_return(yaml)
-      expect(YAML).to receive(:safe_load).with(yaml).and_return(data).once
-      is_expected.to run.with_params(filename).and_return(data)
-    }
-  end
-
-  context 'when an existing URL (with username and password) is specified' do
-    let(:filename) { 'https://user1:pass1@example.local/myhash.yaml' }
-    let(:url_no_auth) { 'https://example.local/myhash.yaml' }
-    let(:basic_auth) { { http_basic_authentication: ['user1', 'pass1'] } }
-    let(:yaml) { 'Dummy YAML' }
-    let(:data) { { 'key' => 'value', 'ķęŷ' => 'νậŀųề', 'キー' => '値' } }
-
-    it {
-      expect(OpenURI).to receive(:open_uri).with(url_no_auth, basic_auth).and_return(yaml)
-      expect(YAML).to receive(:safe_load).with(yaml).and_return(data).once
-      is_expected.to run.with_params(filename).and_return(data)
-    }
-  end
-
-  context 'when an existing URL (with username) is specified' do
-    let(:filename) { 'https://user1@example.local/myhash.yaml' }
-    let(:url_no_auth) { 'https://example.local/myhash.yaml' }
-    let(:basic_auth) { { http_basic_authentication: ['user1', ''] } }
-    let(:yaml) { 'Dummy YAML' }
-    let(:data) { { 'key' => 'value', 'ķęŷ' => 'νậŀųề', 'キー' => '値' } }
-
-    it {
-      expect(OpenURI).to receive(:open_uri).with(url_no_auth, basic_auth).and_return(yaml)
-      expect(YAML).to receive(:safe_load).with(yaml).and_return(data).once
-      is_expected.to run.with_params(filename).and_return(data)
-    }
-  end
-
-  context 'when an existing URL could not be parsed, with default specified' do
-    let(:filename) { 'https://example.local/myhash.yaml' }
-    let(:basic_auth) { { http_basic_authentication: ['', ''] } }
-    let(:yaml) { 'Dummy YAML' }
-
-    it {
-      expect(OpenURI).to receive(:open_uri).with(filename, basic_auth).and_return(yaml)
-      expect(YAML).to receive(:safe_load).with(yaml).and_raise StandardError, 'Cannot parse data'
-      is_expected.to run.with_params(filename, 'default' => 'value').and_return('default' => 'value')
-    }
-  end
-
-  context 'when a URL does not exist, with default specified' do
-    let(:filename) { 'https://example.local/myhash.yaml' }
-    let(:basic_auth) { { http_basic_authentication: ['', ''] } }
-    let(:yaml) { 'Dummy YAML' }
-
-    it {
-      expect(OpenURI).to receive(:open_uri).with(filename, basic_auth).and_raise OpenURI::HTTPError, '404 File not Found'
-      is_expected.to run.with_params(filename, 'default' => 'value').and_return('default' => 'value')
-    }
-  end
-end
diff --git a/spec/functions/lstrip_spec.rb b/spec/functions/lstrip_spec.rb
deleted file mode 100644
index ee822232..00000000
--- a/spec/functions/lstrip_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'lstrip', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params('', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work with}) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work with}) }
-  it { is_expected.to run.with_params('').and_return('') }
-  it { is_expected.to run.with_params(' ').and_return('') }
-  it { is_expected.to run.with_params('     ').and_return('') }
-  it { is_expected.to run.with_params("\t").and_return('') }
-  it { is_expected.to run.with_params("\t ").and_return('') }
-  it { is_expected.to run.with_params('one').and_return('one') }
-  it { is_expected.to run.with_params(' one').and_return('one') }
-  it { is_expected.to run.with_params('     one').and_return('one') }
-  it { is_expected.to run.with_params("\tone").and_return('one') }
-  it { is_expected.to run.with_params("\t one").and_return('one') }
-  it { is_expected.to run.with_params('one ').and_return('one ') }
-  it { is_expected.to run.with_params(' one ').and_return('one ') }
-  it { is_expected.to run.with_params('     one ').and_return('one ') }
-  it { is_expected.to run.with_params('     ǿňè ').and_return('ǿňè ') }
-  it { is_expected.to run.with_params("\tone ").and_return('one ') }
-  it { is_expected.to run.with_params("\t one ").and_return('one ') }
-  it { is_expected.to run.with_params("one \t").and_return("one \t") }
-  it { is_expected.to run.with_params(" one \t").and_return("one \t") }
-  it { is_expected.to run.with_params("     one \t").and_return("one \t") }
-  it { is_expected.to run.with_params("\tone \t").and_return("one \t") }
-  it { is_expected.to run.with_params("\t one \t").and_return("one \t") }
-  it { is_expected.to run.with_params(' o n e ').and_return('o n e ') }
-  it { is_expected.to run.with_params(AlsoString.new(' one ')).and_return('one ') }
-end
diff --git a/spec/functions/max_spec.rb b/spec/functions/max_spec.rb
deleted file mode 100644
index b3868d79..00000000
--- a/spec/functions/max_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'max', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(1).and_return(1) }
-  it { is_expected.to run.with_params(1, 2).and_return(2) }
-  it { is_expected.to run.with_params(1, 2, 3).and_return(3) }
-  it { is_expected.to run.with_params(3, 2, 1).and_return(3) }
-  it { is_expected.to run.with_params('one').and_return('one') }
-  it { is_expected.to run.with_params('one', 'two').and_return('two') }
-  it { is_expected.to run.with_params('one', 'two', 'three').and_return('two') }
-  it { is_expected.to run.with_params('three', 'two', 'one').and_return('two') }
-
-  describe 'implementation artifacts' do
-    it { is_expected.to run.with_params(1, 'one').and_return('one') }
-    it { is_expected.to run.with_params('1', 'one').and_return('one') }
-    it { is_expected.to run.with_params('1.3e1', '1.4e0').and_return('1.4e0') }
-    it { is_expected.to run.with_params(1.3e1, 1.4e0).and_return(1.3e1) }
-  end
-end
diff --git a/spec/functions/member_spec.rb b/spec/functions/member_spec.rb
deleted file mode 100644
index f4a5bc21..00000000
--- a/spec/functions/member_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'member' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params([], [], []).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params([], '').and_return(false) }
-  it { is_expected.to run.with_params([], ['']).and_return(false) }
-  it { is_expected.to run.with_params([''], '').and_return(true) }
-  it { is_expected.to run.with_params([''], ['']).and_return(true) }
-  it { is_expected.to run.with_params([], 'one').and_return(false) }
-  it { is_expected.to run.with_params([], ['one']).and_return(false) }
-  it { is_expected.to run.with_params(['one'], 'one').and_return(true) }
-  it { is_expected.to run.with_params(['one'], ['one']).and_return(true) }
-  it { is_expected.to run.with_params(['one', 'two', 'three', 'four'], ['four', 'two']).and_return(true) }
-  it { is_expected.to run.with_params([1, 2, 3, 4], [4, 2]).and_return(true) }
-  it { is_expected.to run.with_params([1, 'a', 'b', 4], [4, 'b']).and_return(true) }
-  it { is_expected.to run.with_params(['ọאּẹ', 'ŧẅồ', 'ţҺŗęē', 'ƒơџŕ'], ['ƒơџŕ', 'ŧẅồ']).and_return(true) }
-  it { is_expected.to run.with_params(['one', 'two', 'three', 'four'], ['four', 'five']).and_return(false) }
-  it { is_expected.to run.with_params(['ọאּẹ', 'ŧẅồ', 'ţҺŗęē', 'ƒơџŕ'], ['ƒơџŕ', 'ƒί√ə']).and_return(false) }
-end
diff --git a/spec/functions/merge_spec.rb b/spec/functions/merge_spec.rb
deleted file mode 100644
index 2a5747fc..00000000
--- a/spec/functions/merge_spec.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'merge' do
-  it { is_expected.not_to eq(nil) }
-  it {
-    is_expected.to run \
-      .with_params({}, 'two') \
-      .and_raise_error(
-        ArgumentError, \
-        Regexp.new(Regexp.escape("rejected: parameter 'args' expects a value of type Undef, Hash[Scalar, Any], or String[0, 0], got String")),
-      )
-  }
-  it {
-    is_expected.to run \
-      .with_params({}, 1) \
-      .and_raise_error(ArgumentError, %r{parameter 'args' expects a value of type Undef, Hash, or String, got Integer})
-  }
-  it {
-    is_expected.to run \
-      .with_params({ 'one' => 1, 'three' => { 'four' => 4 } }, 'two' => 'dos', 'three' => { 'five' => 5 }) \
-      .and_return('one' => 1, 'three' => { 'five' => 5 }, 'two' => 'dos')
-  }
-
-  it { is_expected.to run.with_params.and_return({}) }
-  it { is_expected.to run.with_params({}).and_return({}) }
-  it { is_expected.to run.with_params({}, {}).and_return({}) }
-  it { is_expected.to run.with_params({}, {}, {}).and_return({}) }
-
-  describe 'should accept empty strings as puppet undef' do
-    it { is_expected.to run.with_params({}, '').and_return({}) }
-  end
-
-  it { is_expected.to run.with_params({ 'key' => 'value' }, {}).and_return('key' => 'value') }
-  it { is_expected.to run.with_params({}, 'key' => 'value').and_return('key' => 'value') }
-  it { is_expected.to run.with_params({ 'key' => 'value1' }, 'key' => 'value2').and_return('key' => 'value2') }
-  it {
-    is_expected.to run \
-      .with_params({ 'key1' => 'value1' }, { 'key2' => 'value2' }, 'key3' => 'value3') \
-      .and_return('key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3')
-  }
-  describe 'should accept iterable and merge produced hashes' do
-    it {
-      is_expected.to run \
-        .with_params([1, 2, 3]) \
-        .with_lambda { |_hsh, val| { val => val } } \
-        .and_return(1 => 1, 2 => 2, 3 => 3)
-    }
-    it {
-      is_expected.to run \
-        .with_params([1, 2, 3]) \
-        .with_lambda { |_hsh, val| { val => val } unless val == 2 } \
-        .and_return(1 => 1, 3 => 3)
-    }
-    it {
-      is_expected.to run \
-        .with_params([1, 2, 3]) \
-        # rubocop:disable Style/Semicolon
-        .with_lambda { |_hsh, val| raise StopIteration if val == 3; { val => val } } \
-        .and_return(1 => 1, 2 => 2)
-    }
-    it {
-      is_expected.to run \
-        .with_params(['a', 'b', 'b', 'c', 'b']) \
-        .with_lambda { |hsh, val| { val => (hsh[val] || 0) + 1 } } \
-        .and_return('a' => 1, 'b' => 3, 'c' => 1)
-    }
-    it {
-      is_expected.to run \
-        .with_params(['a', 'b', 'c']) \
-        .with_lambda { |_hsh, idx, val| { idx => val } } \
-        .and_return(0 => 'a', 1 => 'b', 2 => 'c')
-    }
-    it {
-      is_expected.to run \
-        .with_params('a' => 'A', 'b' => 'B', 'c' => 'C') \
-        .with_lambda { |_hsh, key, val| { key => "#{key}#{val}" } } \
-        .and_return('a' => 'aA', 'b' => 'bB', 'c' => 'cC')
-    }
-  end
-end
diff --git a/spec/functions/min_spec.rb b/spec/functions/min_spec.rb
deleted file mode 100644
index 4b730127..00000000
--- a/spec/functions/min_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'min', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(1).and_return(1) }
-  it { is_expected.to run.with_params(1, 2).and_return(1) }
-  it { is_expected.to run.with_params(1, 2, 3).and_return(1) }
-  it { is_expected.to run.with_params(3, 2, 1).and_return(1) }
-  it { is_expected.to run.with_params(12, 8).and_return(8) }
-  it { is_expected.to run.with_params('one').and_return('one') }
-  it { is_expected.to run.with_params('one', 'two').and_return('one') }
-  it { is_expected.to run.with_params('one', 'two', 'three').and_return('one') }
-  it { is_expected.to run.with_params('three', 'two', 'one').and_return('one') }
-  it { is_expected.to run.with_params('the', 'public', 'art', 'galleries').and_return('art') }
-
-  describe 'implementation artifacts' do
-    it { is_expected.to run.with_params(1, 'one').and_return(1) }
-    it { is_expected.to run.with_params('1', 'one').and_return('1') }
-    it { is_expected.to run.with_params('1.3e1', '1.4e0').and_return('1.3e1') }
-    it { is_expected.to run.with_params(1.3e1, 1.4e0).and_return(1.4e0) }
-  end
-end
diff --git a/spec/functions/num2bool_spec.rb b/spec/functions/num2bool_spec.rb
deleted file mode 100644
index bedfb64a..00000000
--- a/spec/functions/num2bool_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'num2bool' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(1, 2).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('abc').and_raise_error(Puppet::ParseError, %r{does not look like a number}) }
-  it { is_expected.to run.with_params(1).and_return(true) }
-  it { is_expected.to run.with_params('1').and_return(true) }
-  it { is_expected.to run.with_params(1.5).and_return(true) }
-  it { is_expected.to run.with_params('1.5').and_return(true) }
-  it { is_expected.to run.with_params(-1).and_return(false) }
-  it { is_expected.to run.with_params('-1').and_return(false) }
-  it { is_expected.to run.with_params(-1.5).and_return(false) }
-  it { is_expected.to run.with_params('-1.5').and_return(false) }
-  it { is_expected.to run.with_params(0).and_return(false) }
-  it { is_expected.to run.with_params('0').and_return(false) }
-  it { is_expected.to run.with_params([]).and_return(false) }
-  it { is_expected.to run.with_params('[]').and_raise_error(Puppet::ParseError, %r{does not look like a number}) }
-  it { is_expected.to run.with_params({}).and_return(false) }
-  it { is_expected.to run.with_params('{}').and_raise_error(Puppet::ParseError, %r{does not look like a number}) }
-  it { is_expected.to run.with_params(['-50', '1']).and_return(false) }
-end
diff --git a/spec/functions/os_version_gte_spec.rb b/spec/functions/os_version_gte_spec.rb
deleted file mode 100644
index aec49827..00000000
--- a/spec/functions/os_version_gte_spec.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'os_version_gte' do
-  context 'on Debian 9' do
-    let(:facts) do
-      {
-        operatingsystem: 'Debian',
-        operatingsystemmajrelease: '9',
-      }
-    end
-
-    it { is_expected.to run.with_params('Debian', '10').and_return(false) }
-    it { is_expected.to run.with_params('Debian', '9').and_return(true) }
-    it { is_expected.to run.with_params('Debian', '8').and_return(true) }
-    it { is_expected.to run.with_params('Debian', '8.0').and_return(true) }
-    it { is_expected.to run.with_params('Ubuntu', '16.04').and_return(false) }
-    it { is_expected.to run.with_params('Fedora', '29').and_return(false) }
-  end
-
-  context 'on Ubuntu 16.04' do
-    let(:facts) do
-      {
-        operatingsystem: 'Ubuntu',
-        operatingsystemmajrelease: '16.04',
-      }
-    end
-
-    it { is_expected.to run.with_params('Debian', '9').and_return(false) }
-    it { is_expected.to run.with_params('Ubuntu', '16').and_return(true) }
-    it { is_expected.to run.with_params('Ubuntu', '14.04').and_return(true) }
-    it { is_expected.to run.with_params('Ubuntu', '16.04').and_return(true) }
-    it { is_expected.to run.with_params('Ubuntu', '18.04').and_return(false) }
-    it { is_expected.to run.with_params('Ubuntu', '20.04').and_return(false) }
-    it { is_expected.to run.with_params('Fedora', '29').and_return(false) }
-  end
-
-  context 'with invalid params' do
-    let(:facts) do
-      {
-        operatingsystem: 'Ubuntu',
-        operatingsystemmajrelease: '16.04',
-      }
-    end
-
-    it { is_expected.to run.with_params('123', 'abc').and_return(false) }
-    it { is_expected.to run.with_params([], 123).and_raise_error(ArgumentError) }
-  end
-end
diff --git a/spec/functions/parsehocon_spec.rb b/spec/functions/parsehocon_spec.rb
deleted file mode 100644
index 623a7da5..00000000
--- a/spec/functions/parsehocon_spec.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'parsehocon' do
-  it { is_expected.to run.with_params('').and_return({}) }
-  it { is_expected.to run.with_params('valid hocon: string').and_return('valid hocon' => 'string') }
-  it { is_expected.to run.with_params('invalid').and_raise_error(Hocon::ConfigError::ConfigParseError) }
-  it { is_expected.to run.with_params('invalid', 'default').and_return('default') }
-end
diff --git a/spec/functions/parsejson_spec.rb b/spec/functions/parsejson_spec.rb
deleted file mode 100644
index 991d52e6..00000000
--- a/spec/functions/parsejson_spec.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'parsejson' do
-  it 'exists' do
-    is_expected.not_to eq(nil)
-  end
-
-  it 'raises an error if called without any arguments' do
-    is_expected.to run.with_params
-                      .and_raise_error(%r{wrong number of arguments}i)
-  end
-
-  context 'with correct JSON data' do
-    it 'is able to parse JSON this is a null' do
-      is_expected.to run.with_params('null').and_return(nil)
-    end
-
-    it 'is able to parse JSON that is a string' do
-      is_expected.to run.with_params('"a string"').and_return('a string')
-    end
-
-    it 'is able to parse JSON data with a Hash' do
-      is_expected.to run.with_params('{"a":"1","b":"2"}')
-                        .and_return('a' => '1', 'b' => '2')
-    end
-
-    it 'is able to parse JSON data with an Array' do
-      is_expected.to run.with_params('["a","b","c"]')
-                        .and_return(['a', 'b', 'c'])
-    end
-
-    it 'is able to parse empty JSON values' do
-      actual_array = ['[]', '{}']
-      expected = [[], {}]
-      actual_array.each_with_index do |actual, index|
-        is_expected.to run.with_params(actual).and_return(expected[index])
-      end
-    end
-
-    it 'is able to parse JSON data with a mixed structure' do
-      is_expected.to run.with_params('{"a":"1","b":2,"c":{"d":[true,false]}}')
-                        .and_return('a' => '1', 'b' => 2, 'c' => { 'd' => [true, false] })
-    end
-
-    it 'is able to parse JSON data with a UTF8 and double byte characters' do
-      is_expected.to run.with_params('{"×":"これ","ý":"記号","です":{"©":["Á","ß"]}}')
-                        .and_return('×' => 'これ', 'ý' => '記号', 'です' => { '©' => ['Á', 'ß'] })
-    end
-
-    it 'does not return the default value if the data was parsed correctly' do
-      is_expected.to run.with_params('{"a":"1"}', 'default_value')
-                        .and_return('a' => '1')
-    end
-  end
-
-  context 'with incorrect JSON data' do
-    it 'raises an error with invalid JSON and no default' do
-      is_expected.to run.with_params('error')
-                        .and_raise_error(Puppet::Util::Json::ParseError)
-    end
-
-    it 'supports a structure for a default value' do
-      is_expected.to run.with_params('', 'a' => '1')
-                        .and_return('a' => '1')
-    end
-
-    [1, 1.2, nil, true, false, [], {}, :yaml].each do |value|
-      it "returns the default value for an incorrect #{value.inspect} (#{value.class}) parameter" do
-        is_expected.to run.with_params(value, 'default_value')
-                          .and_return('default_value')
-      end
-    end
-  end
-end
diff --git a/spec/functions/parsepson_spec.rb b/spec/functions/parsepson_spec.rb
deleted file mode 100644
index 4be97a2a..00000000
--- a/spec/functions/parsepson_spec.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'parsepson' do
-  it 'exists' do
-    is_expected.not_to eq(nil)
-  end
-
-  it 'raises an error if called without any arguments' do
-    is_expected.to run.with_params
-                      .and_raise_error(%r{'parsepson' expects between 1 and 2 arguments, got none}i)
-  end
-
-  context 'with correct PSON data' do
-    it 'is able to parse PSON data with a Hash' do
-      is_expected.to run.with_params('{"a":"1","b":"2"}')
-                        .and_return('a' => '1', 'b' => '2')
-    end
-
-    it 'is able to parse PSON data with an Array' do
-      is_expected.to run.with_params('["a","b","c"]')
-                        .and_return(['a', 'b', 'c'])
-    end
-
-    it 'is able to parse empty PSON values' do
-      actual_array = ['[]', '{}']
-      expected = [[], {}]
-      actual_array.each_with_index do |actual, index|
-        is_expected.to run.with_params(actual).and_return(expected[index])
-      end
-    end
-
-    it 'is able to parse PSON data with a mixed structure' do
-      is_expected.to run.with_params('{"a":"1","b":2,"c":{"d":[true,false]}}')
-                        .and_return('a' => '1', 'b' => 2, 'c' => { 'd' => [true, false] })
-    end
-
-    it 'is able to parse PSON data with a UTF8 and double byte characters' do
-      is_expected.to run.with_params('{"×":"これ","ý":"記号","です":{"©":["Á","ß"]}}')
-                        .and_return('×' => 'これ', 'ý' => '記号', 'です' => { '©' => ['Á', 'ß'] })
-    end
-
-    it 'does not return the default value if the data was parsed correctly' do
-      is_expected.to run.with_params('{"a":"1"}', 'default_value')
-                        .and_return('a' => '1')
-    end
-  end
-
-  context 'with incorrect PSON data' do
-    it 'raises an error with invalid PSON and no default' do
-      is_expected.to run.with_params('invalid')
-                        .and_raise_error(PSON::ParserError)
-    end
-
-    it 'returns the default value for an invalid PSON and a given default' do
-      is_expected.to run.with_params('invalid', 'default_value')
-                        .and_return('default_value')
-    end
-
-    it 'supports a structure for a default value' do
-      is_expected.to run.with_params('invalid', 'a' => '1')
-                        .and_return('a' => '1')
-    end
-  end
-end
diff --git a/spec/functions/parseyaml_spec.rb b/spec/functions/parseyaml_spec.rb
deleted file mode 100644
index f4ce4199..00000000
--- a/spec/functions/parseyaml_spec.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'parseyaml' do
-  it 'exists' do
-    is_expected.not_to eq(nil)
-  end
-
-  it 'raises an error if called without any arguments' do
-    is_expected.to run.with_params
-                      .and_raise_error(%r{wrong number of arguments}i)
-  end
-
-  context 'with correct YAML data' do
-    it 'is able to parse a YAML data with a String' do
-      actual_array = ['--- just a string', 'just a string']
-      actual_array.each do |actual|
-        is_expected.to run.with_params(actual).and_return('just a string')
-      end
-    end
-
-    it 'is able to parse YAML data with a Hash' do
-      is_expected.to run.with_params("---\na: '1'\nb: '2'\n")
-                        .and_return('a' => '1', 'b' => '2')
-    end
-
-    it 'is able to parse YAML data with an Array' do
-      is_expected.to run.with_params("---\n- a\n- b\n- c\n")
-                        .and_return(['a', 'b', 'c'])
-    end
-
-    it 'is able to parse YAML data with a mixed structure' do
-      is_expected.to run.with_params("---\na: '1'\nb: 2\nc:\n  d:\n  - :a\n  - true\n  - false\n")
-                        .and_return('a' => '1', 'b' => 2, 'c' => { 'd' => [:a, true, false] })
-    end
-
-    it 'is able to parse YAML data with a UTF8 and double byte characters' do
-      is_expected.to run.with_params("---\na: ×\nこれ: 記号\nです:\n  ©:\n  - Á\n  - ß\n")
-                        .and_return('a' => '×', 'これ' => '記号', 'です' => { '©' => ['Á', 'ß'] })
-    end
-
-    it 'does not return the default value if the data was parsed correctly' do
-      is_expected.to run.with_params("---\na: '1'\n", 'default_value')
-                        .and_return('a' => '1')
-    end
-  end
-
-  it 'raises an error with invalid YAML and no default' do
-    is_expected.to run.with_params('["one"')
-                      .and_raise_error(Psych::SyntaxError)
-  end
-
-  context 'with incorrect YAML data' do
-    it 'supports a structure for a default value' do
-      is_expected.to run.with_params('', 'a' => '1')
-                        .and_return('a' => '1')
-    end
-
-    [1, 1.2, nil, true, false, [], {}, :yaml].each do |value|
-      it "returns the default value for an incorrect #{value.inspect} (#{value.class}) parameter" do
-        is_expected.to run.with_params(value, 'default_value')
-                          .and_return('default_value')
-      end
-    end
-
-    context 'when running on modern rubies' do
-      ['---', '...', '*8', ''].each do |value|
-        it "returns the default value for an incorrect #{value.inspect} string parameter" do
-          is_expected.to run.with_params(value, 'default_value')
-                            .and_return('default_value')
-        end
-      end
-    end
-  end
-end
diff --git a/spec/functions/pick_default_spec.rb b/spec/functions/pick_default_spec.rb
deleted file mode 100644
index 6e32c401..00000000
--- a/spec/functions/pick_default_spec.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'pick_default' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(RuntimeError, %r{Must receive at least one argument}) }
-
-  it { is_expected.to run.with_params('one', 'two').and_return('one') }
-  it { is_expected.to run.with_params('ớņệ', 'ťωơ').and_return('ớņệ') }
-  it { is_expected.to run.with_params('', 'two').and_return('two') }
-  it { is_expected.to run.with_params(:undef, 'two').and_return('two') }
-  it { is_expected.to run.with_params(:undefined, 'two').and_return('two') }
-  it { is_expected.to run.with_params(nil, 'two').and_return('two') }
-
-  ['', :undef, :undefined, nil, {}, [], 1, 'default'].each do |value|
-    describe "when providing #{value.inspect} as default" do
-      it { is_expected.to run.with_params('one', value).and_return('one') }
-      it { is_expected.to run.with_params('ớņệ', value).and_return('ớņệ') }
-      it { is_expected.to run.with_params([], value).and_return([]) }
-      it { is_expected.to run.with_params({}, value).and_return({}) }
-      it { is_expected.to run.with_params(value, value).and_return(mapped_value(value)) }
-      it { is_expected.to run.with_params(:undef, value).and_return(mapped_value(value)) }
-      it { is_expected.to run.with_params(:undefined, value).and_return(mapped_value(value)) }
-      it { is_expected.to run.with_params(nil, value).and_return(mapped_value(value)) }
-    end
-  end
-
-  if Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 ||
-     Puppet::Util::Package.versioncmp(Puppet.version, '5.5.7') == 0
-    def mapped_value(v)
-      v
-    end
-  else
-    def mapped_value(v)
-      # Puppet 6.0.0 will always map arguments the same way as the Puppet Language
-      # even if function is called from Ruby via call_function
-      # The 3x function API expects nil and :undef to be represented as empty string
-      (v.nil? || v == :undef) ? '' : v
-    end
-  end
-end
diff --git a/spec/functions/pick_spec.rb b/spec/functions/pick_spec.rb
deleted file mode 100644
index 741e0b79..00000000
--- a/spec/functions/pick_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'pick' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{must receive at least one non empty value}) }
-  it { is_expected.to run.with_params('', nil, :undef, :undefined).and_raise_error(Puppet::ParseError, %r{must receive at least one non empty value}) }
-  it { is_expected.to run.with_params('one', 'two').and_return('one') }
-  it { is_expected.to run.with_params('', 'two').and_return('two') }
-  it { is_expected.to run.with_params(:undef, 'two').and_return('two') }
-  it { is_expected.to run.with_params(:undefined, 'two').and_return('two') }
-  it { is_expected.to run.with_params(nil, 'two').and_return('two') }
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params(nil, 'このテキスト').and_return('このテキスト') }
-    it { is_expected.to run.with_params('', 'ŝẳмрłề џţƒ8 ţẽם', 'このテキスト').and_return('ŝẳмрłề џţƒ8 ţẽם') }
-  end
-end
diff --git a/spec/functions/powershell_escape_spec.rb b/spec/functions/powershell_escape_spec.rb
deleted file mode 100644
index 20c77288..00000000
--- a/spec/functions/powershell_escape_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'powershell_escape' do
-  it { is_expected.not_to eq(nil) }
-
-  describe 'signature validation' do
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{'powershell_escape' expects 1 argument, got none}) }
-    it { is_expected.to run.with_params('foo', 'bar').and_raise_error(ArgumentError, %r{'powershell_escape' expects 1 argument, got 2}) }
-  end
-
-  describe 'stringification' do
-    it { is_expected.to run.with_params(10).and_return('10') }
-    it { is_expected.to run.with_params(false).and_return('false') }
-  end
-
-  describe 'escaping' do
-    it { is_expected.to run.with_params('foo').and_return('foo') }
-    it { is_expected.to run.with_params('foo bar').and_return('foo` bar') }
-    it {
-      is_expected.to run.with_params('~`!@#$%^&*()_-=[]\{}|;\':",./<>?')
-                        .and_return('~``!@#`$%^&*()_-=[]\{}`|;`\':\\`",./<>?')
-    }
-  end
-end
diff --git a/spec/functions/prefix_spec.rb b/spec/functions/prefix_spec.rb
deleted file mode 100644
index 7353857d..00000000
--- a/spec/functions/prefix_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'prefix' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the second.')
-    is_expected.to run.with_params([], 'a', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params('', '').and_raise_error(Puppet::ParseError, %r{expected first argument to be an Array or a Hash}) }
-  it { is_expected.to run.with_params([], 2).and_raise_error(Puppet::ParseError, %r{expected second argument to be a String}) }
-  it { is_expected.to run.with_params([]).and_return([]) }
-  it { is_expected.to run.with_params(['one', 2]).and_return(['one', '2']) }
-  it { is_expected.to run.with_params(['ớņệ', 2]).and_return(['ớņệ', '2']) }
-  it { is_expected.to run.with_params([], '').and_return([]) }
-  it { is_expected.to run.with_params([''], '').and_return(['']) }
-  it { is_expected.to run.with_params(['one'], 'pre').and_return(['preone']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], 'pre').and_return(['preone', 'pretwo', 'prethree']) }
-  it { is_expected.to run.with_params({}).and_return({}) }
-  it { is_expected.to run.with_params('key1' => 'value1', 2 => 3).and_return('key1' => 'value1', '2' => 3) }
-  it { is_expected.to run.with_params({}, '').and_return({}) }
-  it { is_expected.to run.with_params({ 'key' => 'value' }, '').and_return('key' => 'value') }
-  it { is_expected.to run.with_params({ 'key' => 'value' }, 'pre').and_return('prekey' => 'value') }
-  it {
-    is_expected.to run \
-      .with_params({ 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }, 'pre') \
-      .and_return('prekey1' => 'value1', 'prekey2' => 'value2', 'prekey3' => 'value3')
-  }
-end
diff --git a/spec/functions/private_spec.rb b/spec/functions/private_spec.rb
deleted file mode 100644
index e0f26670..00000000
--- a/spec/functions/private_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'private' do
-  it 'issues a warning' do
-    expect(scope).to receive(:warning).with("private() DEPRECATED: This function will cease to function on Puppet 4; please use assert_private() before upgrading to puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.") # rubocop:disable Layout/LineLength : unable to cut line to required length
-    begin
-      subject.execute
-    rescue
-      # ignore this
-    end
-  end
-
-  context 'when called from inside module' do
-    it 'does not fail' do
-      expect(scope).to receive(:lookupvar).with('module_name').and_return('foo')
-      expect(scope).to receive(:lookupvar).with('caller_module_name').and_return('foo')
-      expect {
-        subject.execute
-      }.not_to raise_error
-    end
-  end
-
-  context 'with an explicit failure message' do
-    it 'prints the failure message on error' do
-      expect(scope).to receive(:lookupvar).with('module_name').and_return('foo')
-      expect(scope).to receive(:lookupvar).with('caller_module_name').and_return('bar')
-      expect {
-        subject.execute('failure message!')
-      }.to raise_error(Puppet::ParseError, %r{failure message!})
-    end
-  end
-
-  context 'when called from private class' do
-    it 'fails with a class error message' do
-      expect(scope).to receive(:lookupvar).with('module_name').and_return('foo')
-      expect(scope).to receive(:lookupvar).with('caller_module_name').and_return('bar')
-      expect(scope.source).to receive(:name).and_return('foo::baz')
-      expect(scope.source).to receive(:type).and_return('hostclass')
-      expect { subject.execute }.to raise_error(Puppet::ParseError, %r{Class foo::baz is private})
-    end
-  end
-
-  context 'when called from private definition' do
-    it 'fails with a class error message' do
-      expect(scope).to receive(:lookupvar).with('module_name').and_return('foo')
-      expect(scope).to receive(:lookupvar).with('caller_module_name').and_return('bar')
-      expect(scope.source).to receive(:name).and_return('foo::baz')
-      expect(scope.source).to receive(:type).and_return('definition')
-      expect { subject.execute }.to raise_error(Puppet::ParseError, %r{Definition foo::baz is private})
-    end
-  end
-end
diff --git a/spec/functions/pw_hash_spec.rb b/spec/functions/pw_hash_spec.rb
deleted file mode 100644
index f7a827d7..00000000
--- a/spec/functions/pw_hash_spec.rb
+++ /dev/null
@@ -1,101 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'pw_hash' do
-  it { is_expected.not_to eq(nil) }
-
-  context 'when there are less than 3 arguments' do
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('password').and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('password', 'sha-256').and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
-  end
-
-  context 'when there are more than 3 arguments' do
-    it { is_expected.to run.with_params('password', 'sha-256', 'salt', 'extra').and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('password', 'sha-256', 'salt', 'extra', 'extra').and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
-  end
-
-  context 'when the first argument is not a string' do
-    it { is_expected.to run.with_params([], 'sha-256', 'salt').and_raise_error(ArgumentError, %r{first argument must be a string}) }
-    it { is_expected.to run.with_params({}, 'sha-256', 'salt').and_raise_error(ArgumentError, %r{first argument must be a string}) }
-    it { is_expected.to run.with_params(1, 'sha-256', 'salt').and_raise_error(ArgumentError, %r{first argument must be a string}) }
-    it { is_expected.to run.with_params(true, 'sha-256', 'salt').and_raise_error(ArgumentError, %r{first argument must be a string}) }
-  end
-
-  context 'when the first argument is undefined' do
-    it { is_expected.to run.with_params('', 'sha-256', 'salt').and_return(nil) }
-    it { is_expected.to run.with_params(nil, 'sha-256', 'salt').and_return(nil) }
-  end
-
-  context 'when the second argument is not a string' do
-    it { is_expected.to run.with_params('password', [], 'salt').and_raise_error(ArgumentError, %r{second argument must be a string}) }
-    it { is_expected.to run.with_params('password', {}, 'salt').and_raise_error(ArgumentError, %r{second argument must be a string}) }
-    it { is_expected.to run.with_params('password', 1, 'salt').and_raise_error(ArgumentError, %r{second argument must be a string}) }
-    it { is_expected.to run.with_params('password', true, 'salt').and_raise_error(ArgumentError, %r{second argument must be a string}) }
-  end
-
-  context 'when the second argument is not one of the supported hashing algorithms' do
-    it { is_expected.to run.with_params('password', 'no such algo', 'salt').and_raise_error(ArgumentError, %r{is not a valid hash type}) }
-  end
-
-  context 'when the third argument is not a string' do
-    it { is_expected.to run.with_params('password', 'sha-256', []).and_raise_error(ArgumentError, %r{third argument must be a string}) }
-    it { is_expected.to run.with_params('password', 'sha-256', {}).and_raise_error(ArgumentError, %r{third argument must be a string}) }
-    it { is_expected.to run.with_params('password', 'sha-256', 1).and_raise_error(ArgumentError, %r{third argument must be a string}) }
-    it { is_expected.to run.with_params('password', 'sha-256', true).and_raise_error(ArgumentError, %r{third argument must be a string}) }
-  end
-
-  context 'when the third argument is empty' do
-    it { is_expected.to run.with_params('password', 'sha-512', '').and_raise_error(ArgumentError, %r{third argument must not be empty}) }
-  end
-
-  context 'when the third argument contains invalid characters' do
-    it { is_expected.to run.with_params('password', 'sha-512', 'one%').and_raise_error(ArgumentError, %r{characters in salt must be in the set}) }
-    it { is_expected.to run.with_params('password', 'bcrypt', '1234').and_raise_error(ArgumentError, %r{characters in salt must match}) }
-    it { is_expected.to run.with_params('password', 'bcrypt-a', '1234').and_raise_error(ArgumentError, %r{characters in salt must match}) }
-    it { is_expected.to run.with_params('password', 'bcrypt-x', '1234').and_raise_error(ArgumentError, %r{characters in salt must match}) }
-    it { is_expected.to run.with_params('password', 'bcrypt-y', '1234').and_raise_error(ArgumentError, %r{characters in salt must match}) }
-  end
-
-  context 'when running on a platform with a weak String#crypt implementation' do
-    before(:each) { allow_any_instance_of(String).to receive(:crypt).with('$1$1').and_return('a bad hash') } # rubocop:disable RSpec/AnyInstance : Unable to find a viable replacement
-
-    it { is_expected.to run.with_params('password', 'sha-512', 'salt').and_raise_error(Puppet::ParseError, %r{system does not support enhanced salts}) }
-  end
-
-  begin
-    require 'etc'
-    if Etc.confstr(Etc::CS_GNU_LIBC_VERSION) =~ %r{(\d+\.\d+)} && Puppet::Util::Package.versioncmp(Regexp.last_match(1), '2.28') >= 0
-      context 'when running on platform with bcrypt' do
-        it { is_expected.to run.with_params('password', 'bcrypt', '05$salt.salt.salt.salt.sa').and_return('$2b$05$salt.salt.salt.salt.sO5QUgeeLRANZyvfNiKJW5amLo3cVD8nW') }
-        it { is_expected.to run.with_params('password', 'bcrypt-a', '05$salt.salt.salt.salt.sa').and_return('$2a$05$salt.salt.salt.salt.sO5QUgeeLRANZyvfNiKJW5amLo3cVD8nW') }
-        it { is_expected.to run.with_params('password', 'bcrypt-x', '05$salt.salt.salt.salt.sa').and_return('$2x$05$salt.salt.salt.salt.sO5QUgeeLRANZyvfNiKJW5amLo3cVD8nW') }
-        it { is_expected.to run.with_params('password', 'bcrypt-y', '05$salt.salt.salt.salt.sa').and_return('$2y$05$salt.salt.salt.salt.sO5QUgeeLRANZyvfNiKJW5amLo3cVD8nW') }
-      end
-    else
-      pending('Only testing bcrypt results on glibc 2.28 and later')
-    end
-  rescue NameError
-    pending('Only testing bcrypt results on glibc')
-  end
-
-  if RUBY_PLATFORM == 'java' || 'test'.crypt('$1$1') == '$1$1$Bp8CU9Oujr9SSEw53WV6G.'
-    describe 'on systems with enhanced salts support' do
-      it { is_expected.to run.with_params('password', 'md5', 'salt').and_return('$1$salt$qJH7.N4xYta3aEG/dfqo/0') }
-      it { is_expected.to run.with_params('password', 'sha-256', 'salt').and_return('$5$salt$Gcm6FsVtF/Qa77ZKD.iwsJlCVPY0XSMgLJL0Hnww/c1') }
-      it { is_expected.to run.with_params('password', 'sha-512', 'salt').and_return('$6$salt$IxDD3jeSOb5eB1CX5LBsqZFVkJdido3OUILO5Ifz5iwMuTS4XMS130MTSuDDl3aCI6WouIL9AjRbLCelDCy.g.') }
-    end
-
-    if Puppet::Util::Package.versioncmp(Puppet.version, '4.7.0') >= 0
-      describe 'when arguments are sensitive' do
-        it { is_expected.to run.with_params(Puppet::Pops::Types::PSensitiveType::Sensitive.new('password'), 'md5', 'salt').and_return('$1$salt$qJH7.N4xYta3aEG/dfqo/0') }
-        it {
-          is_expected.to run.with_params(Puppet::Pops::Types::PSensitiveType::Sensitive.new('password'), 'md5', Puppet::Pops::Types::PSensitiveType::Sensitive.new('salt'))
-                            .and_return('$1$salt$qJH7.N4xYta3aEG/dfqo/0')
-        }
-        it { is_expected.to run.with_params('password', 'md5', Puppet::Pops::Types::PSensitiveType::Sensitive.new('salt')).and_return('$1$salt$qJH7.N4xYta3aEG/dfqo/0') }
-      end
-    end
-  end
-end
diff --git a/spec/functions/range_spec.rb b/spec/functions/range_spec.rb
deleted file mode 100644
index f6d9a2f6..00000000
--- a/spec/functions/range_spec.rb
+++ /dev/null
@@ -1,159 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'range' do
-  it { is_expected.not_to eq(nil) }
-
-  describe 'signature validation in puppet3', unless: RSpec.configuration.puppet_future do
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it {
-      pending('Current implementation ignores parameters after the third.')
-      is_expected.to run.with_params(1, 2, 3, 4).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-    }
-    it { is_expected.to run.with_params('1..2..3').and_raise_error(Puppet::ParseError, %r{Unable to compute range}i) }
-    it { is_expected.to run.with_params('').and_raise_error(Puppet::ParseError, %r{Unknown range format}i) }
-  end
-
-  describe 'signature validation in puppet4', if: RSpec.configuration.puppet_future do
-    it {
-      pending 'the puppet 4 implementation'
-      is_expected.to run.with_params.and_raise_error(ArgumentError)
-    }
-    it {
-      pending 'the puppet 4 implementation'
-      is_expected.to run.with_params('').and_raise_error(ArgumentError)
-    }
-    it {
-      pending 'the puppet 4 implementation'
-      is_expected.to run.with_params({}).and_raise_error(ArgumentError)
-    }
-    it {
-      pending 'the puppet 4 implementation'
-      is_expected.to run.with_params([]).and_raise_error(ArgumentError)
-    }
-    it {
-      pending 'the puppet 4 implementation'
-      is_expected.to run.with_params(true).and_raise_error(ArgumentError)
-    }
-    it {
-      is_expected.to run.with_params(1, 2, 'foo').and_raise_error(ArgumentError)
-    }
-    it {
-      pending 'the puppet 4 implementation'
-      is_expected.to run.with_params(1, 2, []).and_raise_error(ArgumentError)
-    }
-    it {
-      pending 'the puppet 4 implementation'
-      is_expected.to run.with_params(1, 2, {}).and_raise_error(ArgumentError)
-    }
-    it {
-      pending 'the puppet 4 implementation'
-      is_expected.to run.with_params(1, 2, true).and_raise_error(ArgumentError)
-    }
-    it {
-      pending 'the puppet 4 implementation'
-      is_expected.to run.with_params(1, 2, 3, 4).and_raise_error(ArgumentError)
-    }
-    it {
-      pending 'the puppet 4 implementation'
-      is_expected.to run.with_params('1..2..3').and_raise_error(ArgumentError)
-    }
-  end
-
-  context 'with characters as bounds' do
-    it { is_expected.to run.with_params('d', 'a').and_return([]) }
-    it { is_expected.to run.with_params('a', 'a').and_return(['a']) }
-    it { is_expected.to run.with_params('a', 'b').and_return(['a', 'b']) }
-    it { is_expected.to run.with_params('a', 'd').and_return(['a', 'b', 'c', 'd']) }
-    it { is_expected.to run.with_params('a', 'd', 1).and_return(['a', 'b', 'c', 'd']) }
-    it { is_expected.to run.with_params('a', 'd', '1').and_return(['a', 'b', 'c', 'd']) }
-    it { is_expected.to run.with_params('a', 'd', 2).and_return(['a', 'c']) }
-    it { is_expected.to run.with_params('a', 'd', -2).and_return(['a', 'c']) }
-    it { is_expected.to run.with_params('a', 'd', 3).and_return(['a', 'd']) }
-    it { is_expected.to run.with_params('a', 'd', 4).and_return(['a']) }
-  end
-
-  context 'with strings as bounds' do
-    it { is_expected.to run.with_params('onea', 'oned').and_return(['onea', 'oneb', 'onec', 'oned']) }
-    it { is_expected.to run.with_params('two', 'one').and_return([]) }
-    it { is_expected.to run.with_params('true', 'false').and_return([]) }
-    it { is_expected.to run.with_params('false', 'true').and_return(['false']) }
-  end
-
-  context 'with integers as bounds' do
-    it { is_expected.to run.with_params(4, 1).and_return([]) }
-    it { is_expected.to run.with_params(1, 1).and_return([1]) }
-    it { is_expected.to run.with_params(1, 2).and_return([1, 2]) }
-    it { is_expected.to run.with_params(1, 4).and_return([1, 2, 3, 4]) }
-    it { is_expected.to run.with_params(1, 4, 1).and_return([1, 2, 3, 4]) }
-    it { is_expected.to run.with_params(1, 4, '1').and_return([1, 2, 3, 4]) }
-    it { is_expected.to run.with_params(1, 4, 2).and_return([1, 3]) }
-    it { is_expected.to run.with_params(1, 4, -2).and_return([1, 3]) }
-    it { is_expected.to run.with_params(1, 4, 3).and_return([1, 4]) }
-    it { is_expected.to run.with_params(1, 4, 4).and_return([1]) }
-  end
-
-  context 'with integers as strings as bounds' do
-    it { is_expected.to run.with_params('4', '1').and_return([]) }
-    it { is_expected.to run.with_params('1', '1').and_return([1]) }
-    it { is_expected.to run.with_params('1', '2').and_return([1, 2]) }
-    it { is_expected.to run.with_params('1', '4').and_return([1, 2, 3, 4]) }
-    it { is_expected.to run.with_params('1', '4', 1).and_return([1, 2, 3, 4]) }
-    it { is_expected.to run.with_params('1', '4', '1').and_return([1, 2, 3, 4]) }
-    it { is_expected.to run.with_params('1', '4', 2).and_return([1, 3]) }
-    it { is_expected.to run.with_params('1', '4', -2).and_return([1, 3]) }
-    it { is_expected.to run.with_params('1', '4', 3).and_return([1, 4]) }
-    it { is_expected.to run.with_params('1', '4', 4).and_return([1]) }
-  end
-
-  context 'with prefixed numbers as strings as bounds' do
-    it { is_expected.to run.with_params('host01', 'host04').and_return(['host01', 'host02', 'host03', 'host04']) }
-    it { is_expected.to run.with_params('01', '04').and_return([1, 2, 3, 4]) }
-  end
-
-  context 'with prefixed numbers as utf8 strings as bounds' do
-    it { is_expected.to run.with_params('ħөŝŧ01', 'ħөŝŧ04').and_return(['ħөŝŧ01', 'ħөŝŧ02', 'ħөŝŧ03', 'ħөŝŧ04']) }
-  end
-
-  context 'with prefixed numbers as double byte character strings as bounds' do
-    it { is_expected.to run.with_params('ホスト01', 'ホスト04').and_return(['ホスト01', 'ホスト02', 'ホスト03', 'ホスト04']) }
-  end
-
-  context 'with dash-range syntax' do
-    it { is_expected.to run.with_params('4-1').and_return([]) }
-    it { is_expected.to run.with_params('1-1').and_return([1]) }
-    it { is_expected.to run.with_params('1-2').and_return([1, 2]) }
-    it { is_expected.to run.with_params('1-4').and_return([1, 2, 3, 4]) }
-  end
-
-  context 'with two-dot-range syntax' do
-    it { is_expected.to run.with_params('4..1').and_return([]) }
-    it { is_expected.to run.with_params('1..1').and_return([1]) }
-    it { is_expected.to run.with_params('1..2').and_return([1, 2]) }
-    it { is_expected.to run.with_params('1..4').and_return([1, 2, 3, 4]) }
-  end
-
-  context 'with three-dot-range syntax' do
-    it { is_expected.to run.with_params('4...1').and_return([]) }
-    it { is_expected.to run.with_params('1...1').and_return([]) }
-    it { is_expected.to run.with_params('1...2').and_return([1]) }
-    it { is_expected.to run.with_params('1...3').and_return([1, 2]) }
-    it { is_expected.to run.with_params('1...5').and_return([1, 2, 3, 4]) }
-  end
-
-  describe 'when passing mixed arguments as bounds' do
-    it {
-      pending('these bounds should not be allowed as ruby will OOM hard. e.g. `(\'host0\'..\'hosta\').to_a` has 3239930 elements on ruby 1.9, adding more \'0\'s and \'a\'s increases that exponentially') # rubocop:disable Layout/LineLength : unable to cut line to required length
-      is_expected.to run.with_params('0', 'a').and_raise_error(Puppet::ParseError, %r{cannot interpolate between numeric and non-numeric bounds})
-    }
-    it {
-      pending('these bounds should not be allowed as ruby will OOM hard. e.g. `(\'host0\'..\'hosta\').to_a` has 3239930 elements on ruby 1.9, adding more \'0\'s and \'a\'s increases that exponentially') # rubocop:disable Layout/LineLength : unable to cut line to required length
-      is_expected.to run.with_params(0, 'a').and_raise_error(Puppet::ParseError, %r{cannot interpolate between numeric and non-numeric bounds})
-    }
-    it {
-      pending('these bounds should not be allowed as ruby will OOM hard. e.g. `(\'host0\'..\'hosta\').to_a` has 3239930 elements on ruby 1.9, adding more \'0\'s and \'a\'s increases that exponentially') # rubocop:disable Layout/LineLength : unable to cut line to required length
-      is_expected.to run.with_params('h0', 'ha').and_raise_error(Puppet::ParseError, %r{cannot interpolate between numeric and non-numeric bounds})
-    }
-  end
-end
diff --git a/spec/functions/regexpescape_spec.rb b/spec/functions/regexpescape_spec.rb
deleted file mode 100644
index b8d66cff..00000000
--- a/spec/functions/regexpescape_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'regexpescape' do
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it {
-      pending('Current implementation ignores parameters after the first.')
-      is_expected.to run.with_params('', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-    }
-    it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-    it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-    it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-  end
-
-  describe 'handling normal strings' do
-    it 'calls ruby\'s Regexp.escape function' do
-      expect(Regexp).to receive(:escape).with('regexp_string').and_return('escaped_regexp_string').once
-      is_expected.to run.with_params('regexp_string').and_return('escaped_regexp_string')
-    end
-  end
-
-  describe 'handling classes derived from String' do
-    it 'calls ruby\'s Regexp.escape function' do
-      regexp_string = AlsoString.new('regexp_string')
-      expect(Regexp).to receive(:escape).with(regexp_string).and_return('escaped_regexp_string').once
-      is_expected.to run.with_params(regexp_string).and_return('escaped_regexp_string')
-    end
-  end
-
-  describe 'strings in arrays handling' do
-    it { is_expected.to run.with_params([]).and_return([]) }
-    it { is_expected.to run.with_params(['one*', 'two']).and_return(['one\*', 'two']) }
-    it { is_expected.to run.with_params(['one*', 1, true, {}, 'two']).and_return(['one\*', 1, true, {}, 'two']) }
-
-    context 'with UTF8 and double byte characters' do
-      it { is_expected.to run.with_params(['ŏʼnε*']).and_return(['ŏʼnε\*']) }
-      it { is_expected.to run.with_params(['インターネット*']).and_return(['インターネット\*']) }
-    end
-  end
-end
diff --git a/spec/functions/reject_spec.rb b/spec/functions/reject_spec.rb
deleted file mode 100644
index efc3b693..00000000
--- a/spec/functions/reject_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'reject' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params([], 'pattern', 'extra').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-  it {
-    pending('reject does not actually check this, and raises NoMethodError instead')
-    is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{first argument not an array})
-  }
-  it {
-    pending('reject does not actually check this, and raises NoMethodError instead')
-    is_expected.to run.with_params(1, 'two').and_raise_error(Puppet::ParseError, %r{first argument not an array})
-  }
-  it { is_expected.to run.with_params([], 'two').and_return([]) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], 'two').and_return(['one', 'three']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], 't(wo|hree)').and_return(['one']) }
-  it { is_expected.to run.with_params(['όʼnệ', 'ţщồ', 'ţңяέέ'], 'ţ(щồ|ңяέέ)').and_return(['όʼnệ']) }
-end
diff --git a/spec/functions/reverse_spec.rb b/spec/functions/reverse_spec.rb
deleted file mode 100644
index cad7086d..00000000
--- a/spec/functions/reverse_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'reverse' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params([], 'extra').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-  it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-  it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-  it { is_expected.to run.with_params([]).and_return([]) }
-  it { is_expected.to run.with_params(['a']).and_return(['a']) }
-  it { is_expected.to run.with_params(['one']).and_return(['one']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three']).and_return(['three', 'two', 'one']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three', 'four']).and_return(['four', 'three', 'two', 'one']) }
-  it { is_expected.to run.with_params(['ổňë', 'ťŵọ', 'ŧңяəė', 'ƒŏůŗ']).and_return(['ƒŏůŗ', 'ŧңяəė', 'ťŵọ', 'ổňë']) }
-
-  it { is_expected.to run.with_params('').and_return('') }
-  it { is_expected.to run.with_params('a').and_return('a') }
-  it { is_expected.to run.with_params('abc').and_return('cba') }
-  it { is_expected.to run.with_params('abcd').and_return('dcba') }
-  it { is_expected.to run.with_params('āβćđ').and_return('đćβā') }
-
-  context 'when using a class extending String' do
-    it 'calls its reverse method' do
-      value = AlsoString.new('asdfghjkl')
-      expect_any_instance_of(AlsoString).to receive(:reverse).and_return('foo') # rubocop:disable RSpec/AnyInstance
-      expect(subject).to run.with_params(value).and_return('foo')
-    end
-  end
-end
diff --git a/spec/functions/round_spec.rb b/spec/functions/round_spec.rb
deleted file mode 100644
index 7b3baf1b..00000000
--- a/spec/functions/round_spec.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'round', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params(34.3).and_return(34) }
-  it { is_expected.to run.with_params(-34.3).and_return(-34) }
-  it { is_expected.to run.with_params(34.5).and_return(35) }
-  it { is_expected.to run.with_params(-34.5).and_return(-35) }
-  it { is_expected.to run.with_params(34.7).and_return(35) }
-  it { is_expected.to run.with_params(-34.7).and_return(-35) }
-  it { is_expected.to run.with_params('test').and_raise_error Puppet::ParseError }
-  it { is_expected.to run.with_params('test', 'best').and_raise_error Puppet::ParseError }
-  it { is_expected.to run.with_params(3, 4).and_raise_error Puppet::ParseError }
-end
diff --git a/spec/functions/rstrip_spec.rb b/spec/functions/rstrip_spec.rb
deleted file mode 100644
index 251fb667..00000000
--- a/spec/functions/rstrip_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'rstrip', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params('', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work with}) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work with}) }
-  it { is_expected.to run.with_params('').and_return('') }
-  it { is_expected.to run.with_params(' ').and_return('') }
-  it { is_expected.to run.with_params('     ').and_return('') }
-  it { is_expected.to run.with_params("\t").and_return('') }
-  it { is_expected.to run.with_params("\t ").and_return('') }
-  it { is_expected.to run.with_params('one').and_return('one') }
-  it { is_expected.to run.with_params(' one').and_return(' one') }
-  it { is_expected.to run.with_params('     one').and_return('     one') }
-  it { is_expected.to run.with_params("\tone").and_return("\tone") }
-  it { is_expected.to run.with_params("\t one").and_return("\t one") }
-  it { is_expected.to run.with_params('one ').and_return('one') }
-  it { is_expected.to run.with_params(' one ').and_return(' one') }
-  it { is_expected.to run.with_params('     one ').and_return('     one') }
-  it { is_expected.to run.with_params(' ǿňè    ').and_return(' ǿňè') }
-  it { is_expected.to run.with_params("\tone ").and_return("\tone") }
-  it { is_expected.to run.with_params("\t one ").and_return("\t one") }
-  it { is_expected.to run.with_params("one\t").and_return('one') }
-  it { is_expected.to run.with_params(" one\t").and_return(' one') }
-  it { is_expected.to run.with_params("     one\t").and_return('     one') }
-  it { is_expected.to run.with_params("\tone\t").and_return("\tone") }
-  it { is_expected.to run.with_params("\t one\t").and_return("\t one") }
-  it { is_expected.to run.with_params(' o n e ').and_return(' o n e') }
-  it { is_expected.to run.with_params(AlsoString.new(' one ')).and_return(' one') }
-end
diff --git a/spec/functions/seeded_rand_spec.rb b/spec/functions/seeded_rand_spec.rb
deleted file mode 100644
index 9ee3b867..00000000
--- a/spec/functions/seeded_rand_spec.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'seeded_rand' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(1).and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(0, '').and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params(1.5, '').and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params(-10, '').and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params('-10', '').and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params('string', '').and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params([], '').and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params({}, '').and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
-  it { is_expected.to run.with_params(1, 1).and_raise_error(ArgumentError, %r{second argument must be a string}) }
-  it { is_expected.to run.with_params(1, []).and_raise_error(ArgumentError, %r{second argument must be a string}) }
-  it { is_expected.to run.with_params(1, {}).and_raise_error(ArgumentError, %r{second argument must be a string}) }
-
-  it 'provides a random number strictly less than the given max' do
-    expect(seeded_rand(3, 'seed')).to satisfy { |n| n.to_i < 3 } # rubocop:disable Lint/AmbiguousBlockAssociation : Cannot parenthesize without break code or violating other Rubocop rules
-  end
-
-  it 'provides a random number greater or equal to zero' do
-    expect(seeded_rand(3, 'seed')).to satisfy { |n| n.to_i >= 0 } # rubocop:disable Lint/AmbiguousBlockAssociation : Cannot parenthesize without break code or violating other Rubocop rules
-  end
-
-  it "provides the same 'random' value on subsequent calls for the same host" do
-    expect(seeded_rand(10, 'seed')).to eql(seeded_rand(10, 'seed'))
-  end
-
-  it 'allows seed to control the random value on a single host' do
-    first_random = seeded_rand(1000, 'seed1')
-    second_different_random = seeded_rand(1000, 'seed2')
-
-    expect(first_random).not_to eql(second_different_random)
-  end
-
-  it 'does not return different values for different hosts' do
-    val1 = seeded_rand(1000, 'foo', host: 'first.host.com')
-    val2 = seeded_rand(1000, 'foo', host: 'second.host.com')
-
-    expect(val1).to eql(val2)
-  end
-
-  def seeded_rand(max, seed, args = {})
-    host = args[:host] || '127.0.0.1'
-
-    # workaround not being able to use let(:facts) because some tests need
-    # multiple different hostnames in one context
-    allow(scope).to receive(:lookupvar).with('::fqdn', {}).and_return(host)
-
-    scope.function_seeded_rand([max, seed])
-  end
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params(1000, 'ǿňè') }
-    it { is_expected.to run.with_params(1000, '文字列') }
-  end
-end
diff --git a/spec/functions/seeded_rand_string_spec.rb b/spec/functions/seeded_rand_string_spec.rb
deleted file mode 100644
index 66a5a16b..00000000
--- a/spec/functions/seeded_rand_string_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'seeded_rand_string' do
-  it { is_expected.not_to be(nil) }
-
-  # Test for erroneous params
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{expects between.+got none}i) }
-  it { is_expected.to run.with_params(1).and_raise_error(ArgumentError, %r{expects between.+got 1}i) }
-  it { is_expected.to run.with_params('1', 'hello').and_raise_error(ArgumentError, %r{parameter 'length' expects an Integer value}i) }
-  it { is_expected.to run.with_params(1, 1).and_raise_error(ArgumentError, %r{parameter 'seed' expects a String value}i) }
-  it { is_expected.to run.with_params(1, 'hello', 1).and_raise_error(ArgumentError, %r{parameter 'charset' expects a.+String}i) }
-
-  # Test regular run
-  it { is_expected.to run.with_params(100, 'hello') }
-
-  # Test custom charsets
-  it { is_expected.to run.with_params(100, 'hello', 'abcd').and_return(%r{[a-d]{100}}) }
-  it { is_expected.to run.with_params(100, 'hello', 'abcdefgh').and_return(%r{[a-h]{100}}) }
-  it { is_expected.to run.with_params(100, 'hello', 'ab,|').and_return(%r{[ab,|]{100}}) }
-
-  # Test behavior
-  it 'generates the same string with the same seed' do
-    rand_str_one = call_function(:seeded_rand_string, 300, 'my_seed')
-    rand_str_two = call_function(:seeded_rand_string, 300, 'my_seed')
-
-    expect(rand_str_one).to eq(rand_str_two)
-  end
-  it 'generates different strings if seeded differently' do
-    rand_str_one = call_function(:seeded_rand_string, 300, 'my_seed_one')
-    rand_str_two = call_function(:seeded_rand_string, 300, 'my_seed_two')
-
-    expect(rand_str_one).not_to eq(rand_str_two)
-  end
-end
diff --git a/spec/functions/shell_escape_spec.rb b/spec/functions/shell_escape_spec.rb
deleted file mode 100644
index 2d4c0c09..00000000
--- a/spec/functions/shell_escape_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'shell_escape' do
-  it { is_expected.not_to eq(nil) }
-
-  describe 'signature validation' do
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{'shell_escape' expects 1 argument, got none}) }
-    it { is_expected.to run.with_params('foo', 'bar').and_raise_error(ArgumentError, %r{'shell_escape' expects 1 argument, got 2}) }
-  end
-
-  describe 'stringification' do
-    it { is_expected.to run.with_params(10).and_return('10') }
-    it { is_expected.to run.with_params(false).and_return('false') }
-  end
-
-  describe 'escaping' do
-    it { is_expected.to run.with_params('foo').and_return('foo') }
-    it { is_expected.to run.with_params('foo bar').and_return('foo\ bar') }
-    it {
-      is_expected.to run.with_params('~`!@#$%^&*()_-=[]\{}|;\':",./<>?')
-                        .and_return('\~\`\!@\#\$\%\^\&\*\(\)_-\=\[\]\\\\\{\}\|\;\\\':\",./\<\>\?')
-    }
-  end
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params('スペー スを含むテ  キスト').and_return('\\ス\\ペ\\ー\\ \\ス\\を\\含\\む\\テ\\ \\ \\キ\\ス\\ト') }
-    it { is_expected.to run.with_params('μťƒ 8  ŧĕχť').and_return('\\μ\\ť\\ƒ\\ 8\\ \\ \\ŧ\\ĕ\\χ\\ť') }
-  end
-end
diff --git a/spec/functions/shell_join_spec.rb b/spec/functions/shell_join_spec.rb
deleted file mode 100644
index f29bf53c..00000000
--- a/spec/functions/shell_join_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'shell_join' do
-  it { is_expected.not_to eq(nil) }
-
-  describe 'signature validation' do
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params(['foo'], ['bar']).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('foo').and_raise_error(Puppet::ParseError, %r{is not an Array}i) }
-  end
-
-  describe 'shell argument joining' do
-    it { is_expected.to run.with_params(['foo']).and_return('foo') }
-    it { is_expected.to run.with_params(['foo', 'bar']).and_return('foo bar') }
-    it { is_expected.to run.with_params(['foo', 'bar baz']).and_return('foo bar\ baz') }
-    it {
-      is_expected.to run.with_params(['~`!@#$', '%^&*()_-=', '[]\{}|;\':"', ',./<>?'])
-                        .and_return('\~\`\!@\#\$ \%\^\&\*\(\)_-\= \[\]\\\\\{\}\|\;\\\':\" ,./\<\>\?')
-    }
-
-    context 'with UTF8 and double byte characters' do
-      it { is_expected.to run.with_params(['μťƒ', '8', 'ŧĕχť']).and_return('\\μ\\ť\\ƒ 8 \\ŧ\\ĕ\\χ\\ť') }
-      it { is_expected.to run.with_params(['スペー', 'スを含むテ', ' キスト']).and_return('\\ス\\ペ\\ー \\ス\\を\\含\\む\\テ \\ \\キ\\ス\\ト') }
-    end
-  end
-
-  describe 'stringification' do
-    it { is_expected.to run.with_params([10, false, 'foo']).and_return('10 false foo') }
-  end
-end
diff --git a/spec/functions/shell_split_spec.rb b/spec/functions/shell_split_spec.rb
deleted file mode 100644
index 82d41f13..00000000
--- a/spec/functions/shell_split_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'shell_split' do
-  it { is_expected.not_to eq(nil) }
-
-  describe 'signature validation' do
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('foo', 'bar').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  end
-
-  describe 'stringification' do
-    it { is_expected.to run.with_params(10).and_return(['10']) }
-    it { is_expected.to run.with_params(false).and_return(['false']) }
-  end
-
-  describe 'shell line spliting' do
-    it { is_expected.to run.with_params('foo').and_return(['foo']) }
-    it { is_expected.to run.with_params('foo bar').and_return(['foo', 'bar']) }
-    it {
-      is_expected.to run.with_params('\~\`\!@\#\$\%\^\&\*\(\)_\+-\=\[\]\\\\\{\}\|\;\\\':\",./\<\>\?')
-                        .and_return(['~`!@#$%^&*()_+-=[]\{}|;\':",./<>?'])
-    }
-    it {
-      is_expected.to run.with_params('\~\`\!@\#\$ \%\^\&\*\(\)_\+-\= \[\]\\\\\{\}\|\;\\\':\" ,./\<\>\?')
-                        .and_return(['~`!@#$', '%^&*()_+-=', '[]\{}|;\':"', ',./<>?'])
-    }
-
-    context 'with UTF8 and double byte characters' do
-      it { is_expected.to run.with_params('\\μ\\ť\\ƒ 8 \\ŧ\\ĕ\\χ\\ť').and_return(['μťƒ', '8', 'ŧĕχť']) }
-      it { is_expected.to run.with_params('\\ス\\ペ\\ー \\ス\\を\\含\\む\\テ \\ \\キ\\ス\\ト').and_return(['スペー', 'スを含むテ', ' キスト']) }
-    end
-  end
-end
diff --git a/spec/functions/shuffle_spec.rb b/spec/functions/shuffle_spec.rb
deleted file mode 100644
index 0e4b1e57..00000000
--- a/spec/functions/shuffle_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'shuffle' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params([], 'extra').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-  it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-  it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-
-  context 'when running with a specific seed' do
-    # make tests deterministic
-    before(:each) { srand(2) }
-
-    it { is_expected.to run.with_params([]).and_return([]) }
-    it { is_expected.to run.with_params(['a']).and_return(['a']) }
-    it { is_expected.to run.with_params(['one']).and_return(['one']) }
-    it { is_expected.to run.with_params(['one', 'two', 'three']).and_return(['two', 'one', 'three']) }
-    it { is_expected.to run.with_params(['one', 'two', 'three', 'four']).and_return(['four', 'three', 'two', 'one']) }
-
-    it { is_expected.to run.with_params('').and_return('') }
-    it { is_expected.to run.with_params('a').and_return('a') }
-    it { is_expected.to run.with_params('abc').and_return('bac') }
-    it { is_expected.to run.with_params('abcd').and_return('dcba') }
-
-    context 'with UTF8 and double byte characters' do
-      it { is_expected.to run.with_params('ůţƒ8 ŧέχŧ şŧґíńģ').and_return('ģńş ůχţέƒŧí8ґŧŧ ') }
-      it { is_expected.to run.with_params('日本語の文字列').and_return('字本日語文列の') }
-    end
-
-    context 'when using a class extending String' do
-      it { is_expected.to run.with_params(AlsoString.new('asdfghjkl')).and_return('lkhdsfajg') }
-    end
-  end
-end
diff --git a/spec/functions/size_spec.rb b/spec/functions/size_spec.rb
deleted file mode 100644
index 386f9124..00000000
--- a/spec/functions/size_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'size', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params([], 'extra').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Unknown type given}) }
-  it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{Unknown type given}) }
-  it { is_expected.to run.with_params('1').and_raise_error(Puppet::ParseError, %r{Requires either string, array or hash to work}) }
-  it { is_expected.to run.with_params('1.0').and_raise_error(Puppet::ParseError, %r{Requires either string, array or hash to work}) }
-  it { is_expected.to run.with_params([]).and_return(0) }
-  it { is_expected.to run.with_params(['a']).and_return(1) }
-  it { is_expected.to run.with_params(['one', 'two', 'three']).and_return(3) }
-  it { is_expected.to run.with_params(['one', 'two', 'three', 'four']).and_return(4) }
-
-  it { is_expected.to run.with_params({}).and_return(0) }
-  it { is_expected.to run.with_params('1' => '2').and_return(1) }
-  it { is_expected.to run.with_params('1' => '2', '4' => '4').and_return(2) }
-  it { is_expected.to run.with_params('€' => '@', '竹' => 'ǿňè').and_return(2) }
-
-  it { is_expected.to run.with_params('').and_return(0) }
-  it { is_expected.to run.with_params('a').and_return(1) }
-  it { is_expected.to run.with_params('abc').and_return(3) }
-  it { is_expected.to run.with_params('abcd').and_return(4) }
-  it { is_expected.to run.with_params('万').and_return(1) }
-  it { is_expected.to run.with_params('āβćđ').and_return(4) }
-
-  context 'when using a class extending String', unless: Puppet::Util::Package.versioncmp(Puppet.version, '5.5.7') == 0 do
-    it 'calls its size method' do
-      value = AlsoString.new('asdfghjkl')
-      expect(value).to receive(:size).and_return('foo')
-      expect(subject).to run.with_params(value).and_return('foo')
-    end
-  end
-end
diff --git a/spec/functions/sort_spec.rb b/spec/functions/sort_spec.rb
deleted file mode 100644
index 3387e750..00000000
--- a/spec/functions/sort_spec.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'sort', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params([], 'extra').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it {
-      pending('stricter input checking')
-      is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{requires string or array})
-    }
-    it {
-      pending('stricter input checking')
-      is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{requires string or array})
-    }
-    it {
-      pending('stricter input checking')
-      is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{requires string or array})
-    }
-  end
-
-  context 'when called with an array' do
-    it { is_expected.to run.with_params([]).and_return([]) }
-    it { is_expected.to run.with_params(['a']).and_return(['a']) }
-    it { is_expected.to run.with_params(['c', 'b', 'a']).and_return(['a', 'b', 'c']) }
-  end
-
-  context 'when called with a string' do
-    it { is_expected.to run.with_params('').and_return('') }
-    it { is_expected.to run.with_params('a').and_return('a') }
-    it { is_expected.to run.with_params('cbda').and_return('abcd') }
-  end
-
-  context 'when called with a number' do
-    it { is_expected.to run.with_params('9478').and_return('4789') }
-  end
-end
diff --git a/spec/functions/sprintf_hash_spec.rb b/spec/functions/sprintf_hash_spec.rb
deleted file mode 100644
index 4e72d3da..00000000
--- a/spec/functions/sprintf_hash_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'sprintf_hash' do
-  it 'exists' do
-    is_expected.not_to eq(nil)
-  end
-
-  context 'with param count' do
-    it 'fails with no arguments' do
-      is_expected.to run.with_params.and_raise_error(ArgumentError, %r{expects 2 arguments}i)
-    end
-    it 'fails with 1 argument' do
-      is_expected.to run.with_params('').and_raise_error(ArgumentError, %r{expects 2 arguments}i)
-    end
-    it 'fails with too many arguments' do
-      is_expected.to run.with_params('', '', '').and_raise_error(ArgumentError, %r{expects 2 arguments}i)
-    end
-  end
-
-  context 'with param type' do
-    it 'fails with wrong format type' do
-      is_expected.to run.with_params(false, {}).and_raise_error(ArgumentError, %r{parameter 'format' expects a String value}i)
-    end
-    it 'fails with wrong arguments type' do
-      is_expected.to run.with_params('', false).and_raise_error(ArgumentError, %r{parameter 'arguments' expects a Hash value}i)
-    end
-  end
-
-  it 'prints formats with name placeholders' do
-    is_expected.to run.with_params('string %<foo>s and integer %<bar>b', 'foo' => '_foo_', 'bar' => 5) # rubocop:disable Style/FormatStringToken : Template tokens needed for purposes of test
-                      .and_return('string _foo_ and integer 101')
-  end
-end
diff --git a/spec/functions/squeeze_spec.rb b/spec/functions/squeeze_spec.rb
deleted file mode 100644
index 28184617..00000000
--- a/spec/functions/squeeze_spec.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'squeeze' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('', '', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(1).and_raise_error(NoMethodError) }
-  it { is_expected.to run.with_params({}).and_raise_error(NoMethodError) }
-  it { is_expected.to run.with_params(true).and_raise_error(NoMethodError) }
-
-  context 'when squeezing a single string' do
-    it { is_expected.to run.with_params('').and_return('') }
-    it { is_expected.to run.with_params('a').and_return('a') }
-    it { is_expected.to run.with_params('aaaaaaaaa').and_return('a') }
-    it { is_expected.to run.with_params('aaaaaaaaa', 'a').and_return('a') }
-    it { is_expected.to run.with_params('aaaaaaaaabbbbbbbbbbcccccccccc', 'b-c').and_return('aaaaaaaaabc') }
-  end
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params('ậậậậậậậậậậậậậậậậậậậậ').and_return('ậ') }
-    it { is_expected.to run.with_params('語語語語語語語', '語').and_return('語') }
-    it { is_expected.to run.with_params('ậậậậậậậậậậậậậậậậậ語語語語©©©©©', '©').and_return('ậậậậậậậậậậậậậậậậậ語語語語©') }
-  end
-
-  context 'when squeezing values in an array' do
-    it {
-      is_expected.to run \
-        .with_params(['', 'a', 'aaaaaaaaa', 'aaaaaaaaabbbbbbbbbbcccccccccc']) \
-        .and_return(['', 'a', 'a', 'abc'])
-    }
-    it {
-      is_expected.to run \
-        .with_params(['', 'a', 'aaaaaaaaa', 'aaaaaaaaabbbbbbbbbbcccccccccc'], 'a') \
-        .and_return(['', 'a', 'a', 'abbbbbbbbbbcccccccccc'])
-    }
-    it {
-      is_expected.to run \
-        .with_params(['', 'a', 'aaaaaaaaa', 'aaaaaaaaabbbbbbbbbbcccccccccc'], 'b-c') \
-        .and_return(['', 'a', 'aaaaaaaaa', 'aaaaaaaaabc'])
-    }
-  end
-
-  context 'when using a class extending String' do
-    it 'calls its squeeze method' do
-      value = AlsoString.new('aaaaaaaaa')
-      expect_any_instance_of(AlsoString).to receive(:squeeze).and_return('foo') # rubocop:disable RSpec/AnyInstance
-      expect(subject).to run.with_params(value).and_return('foo')
-    end
-  end
-end
diff --git a/spec/functions/startswith_spec.rb b/spec/functions/startswith_spec.rb
deleted file mode 100644
index a3478bb3..00000000
--- a/spec/functions/startswith_spec.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'stdlib::start_with' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{expects 2 arguments, got none}i) }
-  it { is_expected.to run.with_params('').and_raise_error(ArgumentError, %r{expects 2 arguments, got 1}) }
-
-  it { is_expected.to run.with_params('', 'foo').and_return(false) }
-  it { is_expected.to run.with_params('foobar', 'foo').and_return(true) }
-  it { is_expected.to run.with_params('foObar', ['bar', 'baz']).and_return(false) }
-end
diff --git a/spec/functions/stdlib_deferrable_epp_spec.rb b/spec/functions/stdlib_deferrable_epp_spec.rb
deleted file mode 100644
index 71e95992..00000000
--- a/spec/functions/stdlib_deferrable_epp_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-require 'spec_helper'
-
-describe 'stdlib::deferrable_epp' do
-  context 'call epp on non-deferred input' do
-    let(:pre_condition) do
-      'function epp($str, $data) { return "rendered"}'
-    end
-
-    it {
-      is_expected.to run.with_params('mymod/template.epp', { 'foo' => 'bar' }).and_return('rendered')
-    }
-  end
-
-  context 'defers rendering with deferred input' do
-    let(:pre_condition) do
-      <<~END
-        function epp($str, $data) { fail("should not have invoked epp()") }
-        function find_template($str) { return "path" }
-        function file($path) { return "foo: <%= foo %>" }
-      END
-    end
-
-    it {
-      foo = Puppet::Pops::Types::TypeFactory.deferred.create('join', [1, 2, 3])
-      # This kind_of matcher requires https://github.com/puppetlabs/rspec-puppet/pull/24
-      is_expected.to run.with_params('mymod/template.epp', { 'foo' => foo }) # .and_return(kind_of Puppet::Pops::Types::PuppetObject)
-    }
-  end
-end
diff --git a/spec/functions/stdlib_ensure_spec.rb b/spec/functions/stdlib_ensure_spec.rb
deleted file mode 100644
index 2c296c3e..00000000
--- a/spec/functions/stdlib_ensure_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'stdlib::ensure' do
-  context 'work with service resource' do
-    it { is_expected.to run.with_params('present', 'service').and_return('running') }
-    it { is_expected.to run.with_params(true, 'service').and_return('running') }
-    it { is_expected.to run.with_params('absent', 'service').and_return('stopped') }
-    it { is_expected.to run.with_params(false, 'service').and_return('stopped') }
-  end
-  ['directory', 'link', 'mounted', 'file'].each do |resource|
-    context "work with #{resource} resource" do
-      it { is_expected.to run.with_params('present', resource).and_return(resource) }
-      it { is_expected.to run.with_params(true, resource).and_return(resource) }
-      it { is_expected.to run.with_params('absent', resource).and_return('absent') }
-      it { is_expected.to run.with_params(false, resource).and_return('absent') }
-    end
-  end
-  context 'work with package resource' do
-    it { is_expected.to run.with_params('present', 'package').and_return('installed') }
-    it { is_expected.to run.with_params(true, 'package').and_return('installed') }
-    it { is_expected.to run.with_params('absent', 'package').and_return('absent') }
-    it { is_expected.to run.with_params(false, 'package').and_return('absent') }
-  end
-end
diff --git a/spec/functions/str2bool_spec.rb b/spec/functions/str2bool_spec.rb
deleted file mode 100644
index 070955ce..00000000
--- a/spec/functions/str2bool_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'str2bool' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params('true', 'extra').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{Unknown type of boolean given}) }
-
-  describe 'when testing values that mean "true"' do
-    ['TRUE', '1', 't', 'y', 'true', 'yes', true].each do |value|
-      it { is_expected.to run.with_params(value).and_return(true) }
-    end
-  end
-
-  describe 'when testing values that mean "false"' do
-    ['FALSE', '', '0', 'f', 'n', 'false', 'no', false, 'undef', 'undefined'].each do |value|
-      it { is_expected.to run.with_params(value).and_return(false) }
-    end
-  end
-end
diff --git a/spec/functions/str2resource_spec.rb b/spec/functions/str2resource_spec.rb
deleted file mode 100644
index afac627f..00000000
--- a/spec/functions/str2resource_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'stdlib::str2resource' do
-  context 'when default' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{stdlib::str2resource}) }
-  end
-
-  context 'when testing simple resource definitions exist' do
-    let :pre_condition do
-      <<-PRECOND
-        file { 'foo': }
-        file { '/foo': }
-        file { 'foot': }
-        user { 'foo': }
-      PRECOND
-    end
-
-    file_foo = Puppet::Resource.new(:file, 'foo')
-    user_foo = Puppet::Resource.new(:user, 'foo')
-
-    it { is_expected.to run.with_params('File[foo]').and_return(file_foo) }
-    it { is_expected.not_to run.with_params('File[\'foo\']') }
-    it { is_expected.not_to run.with_params('File["foo"]') }
-
-    it { is_expected.to run.with_params('User[foo]').and_return(user_foo) }
-  end
-
-  context 'when someone tries a compound definition' do
-    let :pre_condition do
-      'user { "foo, bar": }'
-    end
-
-    user_foo_bar = Puppet::Resource.new(:user, 'foo, bar')
-
-    it { is_expected.to run.with_params('User[foo, bar]').and_return(user_foo_bar) }
-  end
-
-  context 'when testing simple resource definitions no exist' do
-    it { is_expected.not_to run.with_params('File[foo]') }
-  end
-end
diff --git a/spec/functions/str2saltedpbkdf2_spec.rb b/spec/functions/str2saltedpbkdf2_spec.rb
deleted file mode 100644
index c46df7a6..00000000
--- a/spec/functions/str2saltedpbkdf2_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'str2saltedpbkdf2' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('Pa55w0rd', 2).and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(1, 'Using s0m3 s@lt', 50_000).and_raise_error(ArgumentError, %r{first argument must be a string}) }
-  it { is_expected.to run.with_params('Pa55w0rd', 1, 50_000).and_raise_error(ArgumentError, %r{second argument must be a string}) }
-  it { is_expected.to run.with_params('Pa55w0rd', 'U', 50_000).and_raise_error(ArgumentError, %r{second argument must be at least 8 bytes long}) }
-  it { is_expected.to run.with_params('Pa55w0rd', 'Using s0m3 s@lt', '50000').and_raise_error(ArgumentError, %r{third argument must be an integer}) }
-  it { is_expected.to run.with_params('Pa55w0rd', 'Using s0m3 s@lt', 1).and_raise_error(ArgumentError, %r{third argument must be between 40,000 and 70,000}) }
-
-  context 'when running with "Pa55w0rd", "Using s0m3 s@lt",and "50000" as params' do
-    # rubocop:disable Layout/LineLength
-    it {
-      is_expected.to run.with_params('Pa55w0rd', 'Using s0m3 s@lt', 50_000)
-                        .and_return('password_hex' => '3577f79f7d2e73df1cf1eecc36da16fffcd3650126d79e797a8b227492d13de4cdd0656933b43118b7361692f755e5b3c1e0536f826d12442400f3467bcc8fb4ac2235d5648b0f1b0906d0712aecd265834319b5a42e98af2ced81597fd78d1ac916f6eff6122c3577bb120a9f534e2a5c9a58c7d1209e3914c967c6a467b594',
-                                    'salt_hex'     => '5573696e672073306d332073406c74',
-                                    'iterations'   => 50_000)
-    }
-    # rubocop:enable Layout/LineLength
-  end
-end
diff --git a/spec/functions/str2saltedsha512_spec.rb b/spec/functions/str2saltedsha512_spec.rb
deleted file mode 100644
index ae50ea76..00000000
--- a/spec/functions/str2saltedsha512_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'str2saltedsha512' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('password', 2).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires a String argument}) }
-
-  context 'when running with a specific seed' do
-    # make tests deterministic
-    before(:each) { srand(2) }
-
-    it {
-      is_expected.to run.with_params('')
-                        .and_return('0f8a612f4eeed08e47b3875d00f33c5688f7926298f2d9b5fe19d1323f910bc78b6f7b5892596d2fabaa65e7a8d99b3768c102610cf0432c4827eee01f09451e3fae4f7a')
-    }
-    it {
-      is_expected.to run.with_params('password')
-                        .and_return('0f8a612f43134376566c5707718d600effcfb17581fc9d3fa64d7f447dfda317c174ffdb498d2c5bd5c2075dab41c9d7ada5afbdc6b55354980eb5ba61802371e6b64956')
-    }
-    it {
-      is_expected.to run.with_params('verylongpassword')
-                        .and_return('0f8a612f7a448537540e062daa8621f9bae326ca8ccb899e1bdb10e7c218cebfceae2530b856662565fdc4d81e986fc50cfbbc46d50436610ed9429ff5e43f2c45b5d039')
-    }
-  end
-end
diff --git a/spec/functions/strip_spec.rb b/spec/functions/strip_spec.rb
deleted file mode 100644
index 1328baa5..00000000
--- a/spec/functions/strip_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'strip', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params('', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work with}) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work with}) }
-  it { is_expected.to run.with_params('').and_return('') }
-  it { is_expected.to run.with_params(' ').and_return('') }
-  it { is_expected.to run.with_params('     ').and_return('') }
-  it { is_expected.to run.with_params("\t").and_return('') }
-  it { is_expected.to run.with_params("\t ").and_return('') }
-  it { is_expected.to run.with_params('one').and_return('one') }
-  it { is_expected.to run.with_params(' one').and_return('one') }
-  it { is_expected.to run.with_params('     one').and_return('one') }
-  it { is_expected.to run.with_params("\tone").and_return('one') }
-  it { is_expected.to run.with_params("\t one").and_return('one') }
-  it { is_expected.to run.with_params('one ').and_return('one') }
-  it { is_expected.to run.with_params(' one ').and_return('one') }
-  it { is_expected.to run.with_params('     one ').and_return('one') }
-  it { is_expected.to run.with_params("\tone ").and_return('one') }
-  it { is_expected.to run.with_params("\t one ").and_return('one') }
-  it { is_expected.to run.with_params("one \t").and_return('one') }
-  it { is_expected.to run.with_params(" one \t").and_return('one') }
-  it { is_expected.to run.with_params("     one \t").and_return('one') }
-  it { is_expected.to run.with_params("\tone \t").and_return('one') }
-  it { is_expected.to run.with_params("\t one \t").and_return('one') }
-  it { is_expected.to run.with_params(' o n e ').and_return('o n e') }
-  it { is_expected.to run.with_params('      ỏŋέ  ').and_return('ỏŋέ') }
-  it { is_expected.to run.with_params(AlsoString.new(' one ')).and_return('one') }
-end
diff --git a/spec/functions/suffix_spec.rb b/spec/functions/suffix_spec.rb
deleted file mode 100644
index 0c12100b..00000000
--- a/spec/functions/suffix_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'suffix' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the second.')
-    is_expected.to run.with_params([], 'a', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params('', '').and_raise_error(Puppet::ParseError, %r{expected first argument to be an Array}) }
-  it { is_expected.to run.with_params([], 2).and_raise_error(Puppet::ParseError, %r{expected second argument to be a String}) }
-  it { is_expected.to run.with_params([]).and_return([]) }
-  it { is_expected.to run.with_params(['one', 2]).and_return(['one', '2']) }
-  it { is_expected.to run.with_params([], '').and_return([]) }
-  it { is_expected.to run.with_params([''], '').and_return(['']) }
-  it { is_expected.to run.with_params(['one'], 'post').and_return(['onepost']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], 'post').and_return(['onepost', 'twopost', 'threepost']) }
-  it { is_expected.to run.with_params(['ỗńέ', 'ťשׂǿ', 'ŧҺř℮ə'], 'рổŝţ').and_return(['ỗńέрổŝţ', 'ťשׂǿрổŝţ', 'ŧҺř℮əрổŝţ']) }
-
-  it { is_expected.to run.with_params({}).and_return({}) }
-  it { is_expected.to run.with_params('key1' => 'value1', 2 => 3).and_return('key1' => 'value1', '2' => 3) }
-  it { is_expected.to run.with_params({}, '').and_return({}) }
-  it { is_expected.to run.with_params({ 'key' => 'value' }, '').and_return('key' => 'value') }
-  it { is_expected.to run.with_params({ 'key' => 'value' }, 'post').and_return('keypost' => 'value') }
-  it {
-    is_expected.to run \
-      .with_params({ 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }, 'post') \
-      .and_return('key1post' => 'value1', 'key2post' => 'value2', 'key3post' => 'value3')
-  }
-end
diff --git a/spec/functions/swapcase_spec.rb b/spec/functions/swapcase_spec.rb
deleted file mode 100644
index 49d2117d..00000000
--- a/spec/functions/swapcase_spec.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'swapcase' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params('a', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-  it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-  it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-  describe 'with strings as inputs' do
-    it { is_expected.to run.with_params('').and_return('') }
-    it { is_expected.to run.with_params('one').and_return('ONE') }
-    it { is_expected.to run.with_params('ONE').and_return('one') }
-    it { is_expected.to run.with_params('oNe').and_return('OnE') }
-  end
-  describe 'with arrays as inputs' do
-    it { is_expected.to run.with_params([]).and_return([]) }
-    describe 'only containing strings' do
-      it { is_expected.to run.with_params(['']).and_return(['']) }
-      it { is_expected.to run.with_params(['one']).and_return(['ONE']) }
-      it { is_expected.to run.with_params(['ONE']).and_return(['one']) }
-      it { is_expected.to run.with_params(['oNe']).and_return(['OnE']) }
-      it { is_expected.to run.with_params(['one', 'ONE']).and_return(['ONE', 'one']) }
-      it { is_expected.to run.with_params(['ONE', 'OnE']).and_return(['one', 'oNe']) }
-      it { is_expected.to run.with_params(['oNe', 'one']).and_return(['OnE', 'ONE']) }
-    end
-    describe 'containing mixed types' do
-      it { is_expected.to run.with_params(['OnE', {}]).and_return(['oNe', {}]) }
-      it { is_expected.to run.with_params(['OnE', 1]).and_return(['oNe', 1]) }
-      it { is_expected.to run.with_params(['OnE', []]).and_return(['oNe', []]) }
-      it { is_expected.to run.with_params(['OnE', ['two']]).and_return(['oNe', ['two']]) }
-    end
-  end
-  it 'accepts objects which extend String' do
-    is_expected.to run.with_params(AlsoString.new('OnE')).and_return('oNe')
-  end
-end
diff --git a/spec/functions/time_spec.rb b/spec/functions/time_spec.rb
deleted file mode 100644
index 181bb056..00000000
--- a/spec/functions/time_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'time' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params('a', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-  context 'when running at a specific time' do
-    before(:each) do
-      # get a value before stubbing the function
-      test_time = Time.utc(2006, 10, 13, 8, 15, 11)
-      allow(Time).to receive(:new).with(no_args).and_return(test_time).once
-    end
-    it { is_expected.to run.with_params.and_return(1_160_727_311) }
-    it { is_expected.to run.with_params('').and_return(1_160_727_311) }
-    it { is_expected.to run.with_params([]).and_return(1_160_727_311) }
-    it { is_expected.to run.with_params({}).and_return(1_160_727_311) }
-    it { is_expected.to run.with_params('foo').and_return(1_160_727_311) }
-    it { is_expected.to run.with_params('UTC').and_return(1_160_727_311) }
-    it { is_expected.to run.with_params('America/New_York').and_return(1_160_727_311) }
-  end
-end
diff --git a/spec/functions/to_bytes_spec.rb b/spec/functions/to_bytes_spec.rb
deleted file mode 100644
index 71ee00fe..00000000
--- a/spec/functions/to_bytes_spec.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'to_bytes' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params('1', 'extras').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params([]).and_raise_error(TypeError, %r{(can't convert|no implicit conversion of) Array (in)?to String}) }
-  it { is_expected.to run.with_params({}).and_raise_error(TypeError, %r{(can't convert|no implicit conversion of) Hash (in)?to String}) }
-  it { is_expected.to run.with_params(true).and_raise_error(TypeError, %r{(can't convert|no implicit conversion of) (TrueClass|true) (in)?to String}) }
-
-  describe 'when passing numbers' do
-    it { is_expected.to run.with_params(0).and_return(0) }
-    it { is_expected.to run.with_params(1).and_return(1) }
-    it { is_expected.to run.with_params(-1).and_return(-1) }
-    it { is_expected.to run.with_params(1.1).and_return(1.1) }
-    it { is_expected.to run.with_params(-1.1).and_return(-1.1) }
-  end
-
-  describe 'when passing numbers as strings' do
-    describe 'without a unit' do
-      it { is_expected.to run.with_params('1').and_return(1) }
-      it { is_expected.to run.with_params('-1').and_return(-1) }
-      # these are so wrong
-      it { is_expected.to run.with_params('1.1').and_return(1) }
-      it { is_expected.to run.with_params('-1.1').and_return(-1) }
-    end
-
-    describe 'with a unit' do
-      it { is_expected.to run.with_params('1k').and_return(1024) }
-      it { is_expected.to run.with_params('-1kB').and_return(-1024) }
-      it { is_expected.to run.with_params('1M').and_return(1024 * 1024) }
-      it { is_expected.to run.with_params('1G').and_return(1024 * 1024 * 1024) }
-      it { is_expected.to run.with_params('1T').and_return(1024 * 1024 * 1024 * 1024) }
-      it { is_expected.to run.with_params('1P').and_return(1024 * 1024 * 1024 * 1024 * 1024) }
-      it { is_expected.to run.with_params('1E').and_return(1024 * 1024 * 1024 * 1024 * 1024 * 1024) }
-      it { is_expected.to run.with_params('1.5e3M').and_return(1_572_864_000) }
-
-      it { is_expected.to run.with_params('4k').and_return(4 * 1024) }
-      it { is_expected.to run.with_params('-4kB').and_return(4 * -1024) }
-      it { is_expected.to run.with_params('4M').and_return(4 * 1024 * 1024) }
-      it { is_expected.to run.with_params('4G').and_return(4 * 1024 * 1024 * 1024) }
-      it { is_expected.to run.with_params('4T').and_return(4 * 1024 * 1024 * 1024 * 1024) }
-      it { is_expected.to run.with_params('4P').and_return(4 * 1024 * 1024 * 1024 * 1024 * 1024) }
-      it { is_expected.to run.with_params('4E').and_return(4 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024) }
-
-      # these are so wrong
-      it { is_expected.to run.with_params('1.0001 k').and_return(1024) }
-      it { is_expected.to run.with_params('-1.0001 kB').and_return(-1024) }
-    end
-
-    describe 'with a unknown unit' do
-      it { is_expected.to run.with_params('1KB').and_raise_error(Puppet::ParseError, %r{Unknown prefix}) }
-      it { is_expected.to run.with_params('1K').and_raise_error(Puppet::ParseError, %r{Unknown prefix}) }
-      it { is_expected.to run.with_params('1mb').and_raise_error(Puppet::ParseError, %r{Unknown prefix}) }
-      it { is_expected.to run.with_params('1m').and_raise_error(Puppet::ParseError, %r{Unknown prefix}) }
-      it { is_expected.to run.with_params('1%').and_raise_error(Puppet::ParseError, %r{Unknown prefix}) }
-      it { is_expected.to run.with_params('1 p').and_raise_error(Puppet::ParseError, %r{Unknown prefix}) }
-    end
-  end
-
-  # these are so wrong
-  describe 'when passing random stuff' do
-    it { is_expected.to run.with_params('-1....1').and_return(-1) }
-    it { is_expected.to run.with_params('-1.e.e.e.1').and_return(-1) }
-    it { is_expected.to run.with_params('-1+1').and_return(-1) }
-    it { is_expected.to run.with_params('1-1').and_return(1) }
-    it { is_expected.to run.with_params('1 kaboom').and_return(1024) }
-    it { is_expected.to run.with_params('kaboom').and_return(0) }
-  end
-end
diff --git a/spec/functions/to_json_pretty_spec.rb b/spec/functions/to_json_pretty_spec.rb
deleted file mode 100644
index 071e88a9..00000000
--- a/spec/functions/to_json_pretty_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'to_json_pretty' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params([]).and_return("[\n\n]\n") }
-  it { is_expected.to run.with_params(['one']).and_return("[\n  \"one\"\n]\n") }
-  it { is_expected.to run.with_params(['one', 'two']).and_return("[\n  \"one\",\n  \"two\"\n]\n") }
-  it { is_expected.to run.with_params({}).and_return("{\n}\n") }
-  it { is_expected.to run.with_params('key' => 'value').and_return("{\n  \"key\": \"value\"\n}\n") }
-  it {
-    is_expected.to run.with_params('one' => { 'oneA' => 'A', 'oneB' => { 'oneB1' => '1', 'oneB2' => '2' } }, 'two' => ['twoA', 'twoB'])
-                      .and_return("{\n  \"one\": {\n    \"oneA\": \"A\",\n    \"oneB\": {\n      \"oneB1\": \"1\",\n      \"oneB2\": \"2\"\n    }\n  },\n  \"two\": [\n    \"twoA\",\n    \"twoB\"\n  ]\n}\n") # rubocop:disable Layout/LineLength : Unable to reduce line to required length
-  }
-  it { is_expected.to run.with_params({ 'one' => '1', 'two' => nil }, true).and_return("{\n  \"one\": \"1\"\n}\n") }
-  it { is_expected.to run.with_params(['one', 'two', nil, 'three'], true).and_return("[\n  \"one\",\n  \"two\",\n  \"three\"\n]\n") }
-  it { is_expected.to run.with_params(['one', 'two', nil, 'three'], true, 'indent' => '@@@@').and_return("[\n@@@@\"one\",\n@@@@\"two\",\n@@@@\"three\"\n]\n") }
-
-  it {
-    pending('Current implementation only elides nil values for arrays of depth=1')
-    is_expected.to run.with_params([[nil], 'two', nil, 'three'], true).and_return("[\n  [\n\n  ],\n  \"two\",\n  \"three\"\n]\n")
-  }
-
-  it {
-    pending('Current implementation only elides nil values for hashes of depth=1')
-    is_expected.to run.with_params({ 'omg' => { 'lol' => nil }, 'what' => nil }, true).and_return("{\n}\n")
-  }
-end
diff --git a/spec/functions/to_json_spec.rb b/spec/functions/to_json_spec.rb
deleted file mode 100644
index 32184d6d..00000000
--- a/spec/functions/to_json_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'to_json' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params('').and_return('""') }
-  it { is_expected.to run.with_params(true).and_return('true') }
-  it { is_expected.to run.with_params('one').and_return('"one"') }
-  it { is_expected.to run.with_params([]).and_return('[]') }
-  it { is_expected.to run.with_params(['one']).and_return('["one"]') }
-  it { is_expected.to run.with_params(['one', 'two']).and_return('["one","two"]') }
-  it { is_expected.to run.with_params({}).and_return('{}') }
-  it { is_expected.to run.with_params('key' => 'value').and_return('{"key":"value"}') }
-  it {
-    is_expected.to run.with_params('one' => { 'oneA' => 'A', 'oneB' => { 'oneB1' => '1', 'oneB2' => '2' } }, 'two' => ['twoA', 'twoB'])
-                      .and_return('{"one":{"oneA":"A","oneB":{"oneB1":"1","oneB2":"2"}},"two":["twoA","twoB"]}')
-  }
-
-  it { is_expected.to run.with_params('‰').and_return('"‰"') }
-  it { is_expected.to run.with_params('竹').and_return('"竹"') }
-  it { is_expected.to run.with_params('Ü').and_return('"Ü"') }
-  it { is_expected.to run.with_params('∇').and_return('"∇"') }
-end
diff --git a/spec/functions/to_python_spec.rb b/spec/functions/to_python_spec.rb
deleted file mode 100644
index cea8a80c..00000000
--- a/spec/functions/to_python_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'to_python' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params('').and_return('""') }
-  it { is_expected.to run.with_params(nil).and_return('None') }
-  it { is_expected.to run.with_params(true).and_return('True') }
-  it { is_expected.to run.with_params(false).and_return('False') }
-  it { is_expected.to run.with_params('one').and_return('"one"') }
-  it { is_expected.to run.with_params(42).and_return('42') }
-  it { is_expected.to run.with_params([]).and_return('[]') }
-  it { is_expected.to run.with_params(['one']).and_return('["one"]') }
-  it { is_expected.to run.with_params(['one', 'two']).and_return('["one", "two"]') }
-  it { is_expected.to run.with_params({}).and_return('{}') }
-  it { is_expected.to run.with_params('key' => 'value').and_return('{"key": "value"}') }
-  it {
-    is_expected.to run.with_params('one' => { 'oneA' => 'A', 'oneB' => { 'oneB1' => '1', 'oneB2' => '2' } }, 'two' => ['twoA', 'twoB'])
-                      .and_return('{"one": {"oneA": "A", "oneB": {"oneB1": "1", "oneB2": "2"}}, "two": ["twoA", "twoB"]}')
-  }
-
-  it { is_expected.to run.with_params('‰').and_return('"‰"') }
-  it { is_expected.to run.with_params('竹').and_return('"竹"') }
-  it { is_expected.to run.with_params('Ü').and_return('"Ü"') }
-  it { is_expected.to run.with_params('∇').and_return('"∇"') }
-end
diff --git a/spec/functions/to_ruby_spec.rb b/spec/functions/to_ruby_spec.rb
deleted file mode 100644
index f269a878..00000000
--- a/spec/functions/to_ruby_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'to_ruby' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params('').and_return('""') }
-  it { is_expected.to run.with_params(nil).and_return('nil') }
-  it { is_expected.to run.with_params(true).and_return('true') }
-  it { is_expected.to run.with_params('one').and_return('"one"') }
-  it { is_expected.to run.with_params(42).and_return('42') }
-  it { is_expected.to run.with_params([]).and_return('[]') }
-  it { is_expected.to run.with_params(['one']).and_return('["one"]') }
-  it { is_expected.to run.with_params(['one', 'two']).and_return('["one", "two"]') }
-  it { is_expected.to run.with_params({}).and_return('{}') }
-  it { is_expected.to run.with_params('key' => 'value').and_return('{"key" => "value"}') }
-  it {
-    is_expected.to run.with_params('one' => { 'oneA' => 'A', 'oneB' => { 'oneB1' => '1', 'oneB2' => '2' } }, 'two' => ['twoA', 'twoB'])
-                      .and_return('{"one" => {"oneA" => "A", "oneB" => {"oneB1" => "1", "oneB2" => "2"}}, "two" => ["twoA", "twoB"]}')
-  }
-
-  it { is_expected.to run.with_params('‰').and_return('"‰"') }
-  it { is_expected.to run.with_params('竹').and_return('"竹"') }
-  it { is_expected.to run.with_params('Ü').and_return('"Ü"') }
-  it { is_expected.to run.with_params('∇').and_return('"∇"') }
-end
diff --git a/spec/functions/to_toml_spec.rb b/spec/functions/to_toml_spec.rb
deleted file mode 100644
index 7a409049..00000000
--- a/spec/functions/to_toml_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'to_toml' do
-  context 'fails on invalid params' do
-    it { is_expected.not_to eq(nil) }
-    [
-      nil,
-      '',
-      'foobar',
-      1,
-      true,
-      false,
-      [],
-    ].each do |value|
-      it { is_expected.to run.with_params(value).and_raise_error(ArgumentError) }
-    end
-  end
-
-  context 'returns TOML string on valid params' do
-    it { is_expected.to run.with_params({}).and_return('') }
-    it { is_expected.to run.with_params(foo: 'bar').and_return("foo = \"bar\"\n") }
-    it { is_expected.to run.with_params(foo: { bar: 'baz' }).and_return("[foo]\nbar = \"baz\"\n") }
-    it { is_expected.to run.with_params(foo: ['bar', 'baz']).and_return("foo = [\"bar\", \"baz\"]\n") }
-    it { is_expected.to run.with_params(foo: [{ bar: {}, baz: {} }]).and_return("[[foo]]\n[foo.bar]\n[foo.baz]\n") }
-  end
-end
diff --git a/spec/functions/to_yaml_spec.rb b/spec/functions/to_yaml_spec.rb
deleted file mode 100644
index de0e392e..00000000
--- a/spec/functions/to_yaml_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'to_yaml' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params('').and_return("--- ''\n") }
-  it { is_expected.to run.with_params(true).and_return(%r{--- true\n}) }
-  it { is_expected.to run.with_params('one').and_return(%r{--- one\n}) }
-  it { is_expected.to run.with_params([]).and_return("--- []\n") }
-  it { is_expected.to run.with_params(['one']).and_return("---\n- one\n") }
-  it { is_expected.to run.with_params(['one', 'two']).and_return("---\n- one\n- two\n") }
-  it { is_expected.to run.with_params({}).and_return("--- {}\n") }
-  it { is_expected.to run.with_params('key' => 'value').and_return("---\nkey: value\n") }
-  it {
-    is_expected.to run.with_params('one' => { 'oneA' => 'A', 'oneB' => { 'oneB1' => '1', 'oneB2' => '2' } }, 'two' => ['twoA', 'twoB'])
-                      .and_return("---\none:\n  oneA: A\n  oneB:\n    oneB1: '1'\n    oneB2: '2'\ntwo:\n- twoA\n- twoB\n")
-  }
-
-  it { is_expected.to run.with_params('‰').and_return("--- \"‰\"\n") }
-  it { is_expected.to run.with_params('∇').and_return("--- \"∇\"\n") }
-
-  it { is_expected.to run.with_params({ 'foo' => { 'bar' => true, 'baz' => false } }, 'indentation' => 4).and_return("---\nfoo:\n    bar: true\n    baz: false\n") }
-end
diff --git a/spec/functions/try_get_value_spec.rb b/spec/functions/try_get_value_spec.rb
deleted file mode 100644
index 2b9b96c6..00000000
--- a/spec/functions/try_get_value_spec.rb
+++ /dev/null
@@ -1,114 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'try_get_value' do
-  let(:data) do
-    {
-      'a' => {
-        'g' => '2',
-        'e' => [
-          'f0',
-          'f1',
-          {
-            'x' => {
-              'y' => 'z',
-            },
-          },
-          'f3',
-        ],
-      },
-      'b' => true,
-      'c' => false,
-      'd' => '1',
-    }
-  end
-
-  context 'with single values' do
-    it 'exists' do
-      is_expected.not_to eq(nil)
-    end
-
-    it 'is able to return a single value' do
-      is_expected.to run.with_params('test').and_return('test')
-    end
-
-    it 'uses the default value if data is a single value and path is present' do
-      is_expected.to run.with_params('test', 'path', 'default').and_return('default')
-    end
-
-    it 'returns default if there is no data' do
-      is_expected.to run.with_params(nil, nil, 'default').and_return('default')
-    end
-
-    it 'is able to use data structures as default values' do
-      is_expected.to run.with_params('test', 'path', data).and_return(data)
-    end
-  end
-
-  context 'with structure values' do
-    it 'is able to extracts a single hash value' do
-      is_expected.to run.with_params(data, 'd', 'default').and_return('1')
-    end
-
-    it 'is able to extract a deeply nested hash value' do
-      is_expected.to run.with_params(data, 'a/g', 'default').and_return('2')
-    end
-
-    it 'returns the default value if the path is not found' do
-      is_expected.to run.with_params(data, 'missing', 'default').and_return('default')
-    end
-
-    it 'returns the default value if the path is too long' do
-      is_expected.to run.with_params(data, 'a/g/c/d', 'default').and_return('default')
-    end
-
-    it 'supports an array index in the path' do
-      is_expected.to run.with_params(data, 'a/e/1', 'default').and_return('f1')
-    end
-
-    it 'returns the default value if an array index is not a number' do
-      is_expected.to run.with_params(data, 'a/b/c', 'default').and_return('default')
-    end
-
-    it 'returns the default value if and index is out of array length' do
-      is_expected.to run.with_params(data, 'a/e/5', 'default').and_return('default')
-    end
-
-    it 'is able to path though both arrays and hashes' do
-      is_expected.to run.with_params(data, 'a/e/2/x/y', 'default').and_return('z')
-    end
-
-    it 'is able to return "true" value: default' do
-      is_expected.to run.with_params(data, 'b', 'default').and_return(true)
-    end
-
-    it 'is able to return "true" value' do
-      is_expected.to run.with_params(data, 'm', true).and_return(true)
-    end
-
-    it 'is able to return "false" value: default' do
-      is_expected.to run.with_params(data, 'c', 'default').and_return(false)
-    end
-
-    it 'is able to return "false" value' do
-      is_expected.to run.with_params(data, 'm', false).and_return(false)
-    end
-
-    it 'returns "nil" if value is not found and no default value is provided' do
-      is_expected.to run.with_params(data, 'a/1').and_return(nil)
-    end
-
-    it 'is able to use a custom path separator' do
-      is_expected.to run.with_params(data, 'a::g', 'default', '::').and_return('2')
-    end
-
-    it 'is able to use a custom path separator: default' do
-      is_expected.to run.with_params(data, 'a::c', 'default', '::').and_return('default')
-    end
-
-    it 'is able to throw an error with incorrect params' do
-      is_expected.to run.with_params.and_raise_error(ArgumentError, %r{Wrong number of arguments}i)
-    end
-  end
-end
diff --git a/spec/functions/type3x_spec.rb b/spec/functions/type3x_spec.rb
deleted file mode 100644
index 75075262..00000000
--- a/spec/functions/type3x_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'type3x' do
-  it 'exists' do
-    expect(Puppet::Parser::Functions.function('type3x')).to eq('function_type3x')
-  end
-
-  it 'raises a ParseError if there is less than 1 arguments' do
-    expect { scope.function_type3x([]) }.to(raise_error(Puppet::ParseError))
-  end
-
-  it 'returns string when given a string' do
-    result = scope.function_type3x(['aaabbbbcccc'])
-    expect(result).to(eq('string'))
-  end
-
-  it 'returns array when given an array' do
-    result = scope.function_type3x([['aaabbbbcccc', 'asdf']])
-    expect(result).to(eq('array'))
-  end
-
-  it 'returns hash when given a hash' do
-    result = scope.function_type3x([{ 'a' => 1, 'b' => 2 }])
-    expect(result).to(eq('hash'))
-  end
-
-  it 'returns integer when given an integer' do
-    result = scope.function_type3x(['1'])
-    expect(result).to(eq('integer'))
-  end
-
-  it 'returns float when given a float' do
-    result = scope.function_type3x(['1.34'])
-    expect(result).to(eq('float'))
-  end
-
-  it 'returns boolean when given a boolean' do
-    result = scope.function_type3x([true])
-    expect(result).to(eq('boolean'))
-  end
-end
diff --git a/spec/functions/type_of_spec.rb b/spec/functions/type_of_spec.rb
deleted file mode 100644
index 243b1735..00000000
--- a/spec/functions/type_of_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-if ENV['FUTURE_PARSER'] == 'yes'
-  describe 'type_of' do
-    pending 'teach rspec-puppet to load future-only functions under 3.7.5' do
-      it { is_expected.not_to eq(nil) }
-    end
-  end
-end
-
-if Puppet.version.to_f >= 4.0
-  describe 'type_of' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError) }
-    it { is_expected.to run.with_params('', '').and_raise_error(ArgumentError) }
-
-    it 'gives the type of a string' do
-      expect(subject.call({}, 'hello world')).to be_kind_of(Puppet::Pops::Types::PStringType)
-    end
-
-    it 'gives the type of an integer' do
-      expect(subject.call({}, 5)).to be_kind_of(Puppet::Pops::Types::PIntegerType)
-    end
-  end
-end
diff --git a/spec/functions/type_spec.rb b/spec/functions/type_spec.rb
deleted file mode 100644
index 8a0f2a11..00000000
--- a/spec/functions/type_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'type' do
-  it 'exists' do
-    expect(Puppet::Parser::Functions.function('type')).to eq('function_type')
-  end
-
-  it 'gives a deprecation warning when called' do
-    expect(scope).to receive(:warning).with("type() DEPRECATED: This function will cease to function on Puppet 4; please use type3x() before upgrading to puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.") # rubocop:disable Layout/LineLength : Unable to reduce to required length
-    scope.function_type(['aoeu'])
-  end
-
-  it 'returns string when given a string' do
-    result = scope.function_type(['aaabbbbcccc'])
-    expect(result).to(eq('string'))
-  end
-
-  it 'returns array when given an array' do
-    result = scope.function_type([['aaabbbbcccc', 'asdf']])
-    expect(result).to(eq('array'))
-  end
-
-  it 'returns hash when given a hash' do
-    result = scope.function_type([{ 'a' => 1, 'b' => 2 }])
-    expect(result).to(eq('hash'))
-  end
-
-  it 'returns integer when given an integer' do
-    result = scope.function_type(['1'])
-    expect(result).to(eq('integer'))
-  end
-
-  it 'returns float when given a float' do
-    result = scope.function_type(['1.34'])
-    expect(result).to(eq('float'))
-  end
-
-  it 'returns boolean when given a boolean' do
-    result = scope.function_type([true])
-    expect(result).to(eq('boolean'))
-  end
-end
diff --git a/spec/functions/union_spec.rb b/spec/functions/union_spec.rb
deleted file mode 100644
index d5ab6173..00000000
--- a/spec/functions/union_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'union' do
-  describe 'argument checking' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('one', []).and_raise_error(Puppet::ParseError, %r{Every parameter must be an array}) }
-    it { is_expected.to run.with_params([], 'two').and_raise_error(Puppet::ParseError, %r{Every parameter must be an array}) }
-    it { is_expected.to run.with_params({}, {}).and_raise_error(Puppet::ParseError, %r{Every parameter must be an array}) }
-  end
-
-  it { is_expected.to run.with_params([], []).and_return([]) }
-  it { is_expected.to run.with_params([], ['one']).and_return(['one']) }
-  it { is_expected.to run.with_params(['one'], []).and_return(['one']) }
-  it { is_expected.to run.with_params(['one'], ['one']).and_return(['one']) }
-  it { is_expected.to run.with_params(['one'], ['two']).and_return(['one', 'two']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], ['two', 'three']).and_return(['one', 'two', 'three']) }
-  it { is_expected.to run.with_params(['one', 'two', 'two', 'three'], ['two', 'three']).and_return(['one', 'two', 'three']) }
-  it { is_expected.to run.with_params(['one', 'two', 'three'], ['two', 'two', 'three']).and_return(['one', 'two', 'three']) }
-  it { is_expected.to run.with_params(['one', 'two'], ['two', 'three'], ['one', 'three']).and_return(['one', 'two', 'three']) }
-  it { is_expected.to run.with_params(['one', 'two'], ['three', 'four'], ['one', 'two', 'three'], ['four']).and_return(['one', 'two', 'three', 'four']) }
-  it { is_expected.to run.with_params(['ốńə', 'ţשׂợ'], ['ŧĥяếệ', 'ƒởųŗ'], ['ốńə', 'ţשׂợ', 'ŧĥяếệ'], ['ƒởųŗ']).and_return(['ốńə', 'ţשׂợ', 'ŧĥяếệ', 'ƒởųŗ']) }
-  it 'does not confuse types' do is_expected.to run.with_params(['1', '2', '3'], [1, 2]).and_return(['1', '2', '3', 1, 2]) end
-end
diff --git a/spec/functions/unique_spec.rb b/spec/functions/unique_spec.rb
deleted file mode 100644
index 92234fae..00000000
--- a/spec/functions/unique_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'unique' do
-  if Puppet.version.to_f < 5.0
-    describe 'signature validation' do
-      it { is_expected.not_to eq(nil) }
-      it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-      it {
-        pending('Current implementation ignores parameters after the first.')
-        is_expected.to run.with_params([], 'extra').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-      }
-      it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-      it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-      it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-    end
-
-    context 'when called with an array' do
-      it { is_expected.to run.with_params([]).and_return([]) }
-      it { is_expected.to run.with_params(['a']).and_return(['a']) }
-      it { is_expected.to run.with_params(['a', 'b', 'a']).and_return(['a', 'b']) }
-      it { is_expected.to run.with_params(['ã', 'ъ', 'ã']).and_return(['ã', 'ъ']) }
-    end
-
-    context 'when called with a string' do
-      it { is_expected.to run.with_params('').and_return('') }
-      it { is_expected.to run.with_params('a').and_return('a') }
-      it { is_expected.to run.with_params('aaba').and_return('ab') }
-      it { is_expected.to run.with_params('ããъã').and_return('ãъ') }
-    end
-  end
-end
diff --git a/spec/functions/unix2dos_spec.rb b/spec/functions/unix2dos_spec.rb
deleted file mode 100644
index cd94e150..00000000
--- a/spec/functions/unix2dos_spec.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'unix2dos' do
-  context 'when checking parameter validity' do
-    it { is_expected.not_to eq(nil) }
-    it do
-      is_expected.to run.with_params.and_raise_error(ArgumentError, %r{Wrong number of arguments})
-    end
-    it do
-      is_expected.to run.with_params('one', 'two').and_raise_error(ArgumentError, %r{Wrong number of arguments})
-    end
-    it do
-      is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError)
-    end
-    it do
-      is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError)
-    end
-    it do
-      is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError)
-    end
-  end
-
-  context 'when converting from unix to dos format' do
-    sample_text    = "Hello\nWorld\n"
-    desired_output = "Hello\r\nWorld\r\n"
-
-    it 'outputs dos format' do
-      is_expected.to run.with_params(sample_text).and_return(desired_output)
-    end
-  end
-
-  context 'when converting from dos to dos format' do
-    sample_text    = "Hello\r\nWorld\r\n"
-    desired_output = "Hello\r\nWorld\r\n"
-
-    it 'outputs dos format' do
-      is_expected.to run.with_params(sample_text).and_return(desired_output)
-    end
-  end
-end
diff --git a/spec/functions/upcase_spec.rb b/spec/functions/upcase_spec.rb
deleted file mode 100644
index d110ee10..00000000
--- a/spec/functions/upcase_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'upcase', if: Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') < 0 do
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires an array, hash or object that responds to upcase}) }
-    it { is_expected.to run.with_params([1]).and_raise_error(Puppet::ParseError, %r{Requires an array, hash or object that responds to upcase}) }
-  end
-
-  describe 'normal string handling' do
-    it { is_expected.to run.with_params('abc').and_return('ABC') }
-    it { is_expected.to run.with_params('Abc').and_return('ABC') }
-    it { is_expected.to run.with_params('ABC').and_return('ABC') }
-  end
-
-  describe 'handling classes derived from String' do
-    it { is_expected.to run.with_params(AlsoString.new('ABC')).and_return('ABC') }
-  end
-
-  describe 'strings in arrays handling' do
-    it { is_expected.to run.with_params([]).and_return([]) }
-    it { is_expected.to run.with_params(['One', 'twO']).and_return(['ONE', 'TWO']) }
-  end
-end
diff --git a/spec/functions/uriescape_spec.rb b/spec/functions/uriescape_spec.rb
deleted file mode 100644
index 81b27c37..00000000
--- a/spec/functions/uriescape_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'uriescape' do
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it {
-      pending('Current implementation ignores parameters after the first.')
-      is_expected.to run.with_params('', '').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-    }
-    it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-    it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-    it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{Requires either array or string to work}) }
-  end
-
-  describe 'handling normal strings' do
-    it 'calls ruby\'s URI::DEFAULT_PARSER.escape function' do
-      expect(URI::DEFAULT_PARSER).to receive(:escape).with('uri_string').and_return('escaped_uri_string').once
-      is_expected.to run.with_params('uri_string').and_return('escaped_uri_string')
-    end
-  end
-
-  describe 'handling classes derived from String' do
-    it 'calls ruby\'s URI::DEFAULT_PARSER.escape function' do
-      uri_string = AlsoString.new('uri_string')
-      expect(URI::DEFAULT_PARSER).to receive(:escape).with(uri_string).and_return('escaped_uri_string').once
-      is_expected.to run.with_params(uri_string).and_return('escaped_uri_string')
-    end
-  end
-
-  describe 'strings in arrays handling' do
-    it { is_expected.to run.with_params([]).and_return([]) }
-    it { is_expected.to run.with_params(['one}', 'two']).and_return(['one%7D', 'two']) }
-    it { is_expected.to run.with_params(['one}', 1, true, {}, 'two']).and_return(['one%7D', 1, true, {}, 'two']) }
-  end
-end
diff --git a/spec/functions/validate_absolute_path_spec.rb b/spec/functions/validate_absolute_path_spec.rb
deleted file mode 100644
index 4365229b..00000000
--- a/spec/functions/validate_absolute_path_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_absolute_path' do
-  after(:each) do
-    ENV.delete('STDLIB_LOG_DEPRECATIONS')
-  end
-
-  # Checking for deprecation warning
-  it 'displays a single deprecation' do
-    ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-    expect(scope).to receive(:warning).with(include('This method is deprecated'))
-    is_expected.to run.with_params('c:/')
-  end
-
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  end
-
-  describe 'valid paths handling' do
-    ['C:/', 'C:\\', 'C:\\WINDOWS\\System32', 'C:/windows/system32', 'X:/foo/bar', 'X:\\foo\\bar', '\\\\host\\windows', '//host/windows', '/', '/var/tmp', '/var/opt/../lib/puppet'].each do |path|
-      it { is_expected.to run.with_params(path) }
-      it { is_expected.to run.with_params(['/tmp', path]) }
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'with garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-      ].each do |path|
-        it { is_expected.to run.with_params(path).and_raise_error(Puppet::ParseError, %r{is not an absolute path}) }
-        it { is_expected.to run.with_params([path]).and_raise_error(Puppet::ParseError, %r{is not an absolute path}) }
-        it { is_expected.to run.with_params(['/tmp', path]).and_raise_error(Puppet::ParseError, %r{is not an absolute path}) }
-      end
-    end
-
-    context 'with relative paths' do
-      ['relative1', '.', '..', './foo', '../foo', 'etc/puppetlabs/puppet', 'relative\\windows'].each do |path|
-        it { is_expected.to run.with_params(path).and_raise_error(Puppet::ParseError, %r{is not an absolute path}) }
-        it { is_expected.to run.with_params([path]).and_raise_error(Puppet::ParseError, %r{is not an absolute path}) }
-        it { is_expected.to run.with_params(['/tmp', path]).and_raise_error(Puppet::ParseError, %r{is not an absolute path}) }
-      end
-    end
-  end
-end
diff --git a/spec/functions/validate_array_spec.rb b/spec/functions/validate_array_spec.rb
deleted file mode 100644
index da8b093c..00000000
--- a/spec/functions/validate_array_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_array' do
-  describe 'signature validation' do
-    after(:each) do
-      ENV.delete('STDLIB_LOG_DEPRECATIONS')
-    end
-    it { is_expected.not_to eq(nil) }
-    # Checking for deprecation warning
-    it 'displays a single deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-      expect(scope).to receive(:warning).with(include('This method is deprecated'))
-      is_expected.to run.with_params([])
-    end
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-    describe 'valid inputs' do
-      it { is_expected.to run.with_params([]) }
-      it { is_expected.to run.with_params(['one']) }
-      it { is_expected.to run.with_params([], ['two']) }
-      it { is_expected.to run.with_params(['one'], ['two']) }
-    end
-
-    describe 'invalid inputs' do
-      it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{is not an Array}) }
-      it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{is not an Array}) }
-      it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{is not an Array}) }
-      it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{is not an Array}) }
-      it { is_expected.to run.with_params([], {}).and_raise_error(Puppet::ParseError, %r{is not an Array}) }
-      it { is_expected.to run.with_params([], 1).and_raise_error(Puppet::ParseError, %r{is not an Array}) }
-      it { is_expected.to run.with_params([], true).and_raise_error(Puppet::ParseError, %r{is not an Array}) }
-      it { is_expected.to run.with_params([], 'one').and_raise_error(Puppet::ParseError, %r{is not an Array}) }
-      it { is_expected.to run.with_params(nil).and_raise_error(Puppet::ParseError, %r{is not an Array}) }
-    end
-  end
-end
diff --git a/spec/functions/validate_augeas_spec.rb b/spec/functions/validate_augeas_spec.rb
deleted file mode 100644
index 04ee0eb3..00000000
--- a/spec/functions/validate_augeas_spec.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_augeas' do
-  if Puppet.features.augeas?
-    describe 'signature validation' do
-      it { is_expected.not_to eq(nil) }
-      it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-      it { is_expected.to run.with_params('').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-      it { is_expected.to run.with_params('', '', [], '', 'extra').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-      it { is_expected.to run.with_params('one', 'one', 'MSG to User', '4th arg').and_raise_error(NoMethodError) }
-    end
-
-    describe 'valid inputs' do
-      inputs = [
-        ["root:x:0:0:root:/root:/bin/bash\n", 'Passwd.lns'],
-        ["proc /proc   proc    nodev,noexec,nosuid     0       0\n", 'Fstab.lns'],
-      ]
-
-      inputs.each do |input|
-        it { is_expected.to run.with_params(*input) }
-      end
-    end
-
-    describe 'valid inputs which fail augeas validation' do
-      # The intent here is to make sure valid inputs raise exceptions when they
-      # don't specify an error message to display.  This is the behvior in
-      # 2.2.x and prior.
-      inputs = [
-        ["root:x:0:0:root\n", 'Passwd.lns'],
-        ["127.0.1.1\n", 'Hosts.lns'],
-      ]
-
-      inputs.each do |input|
-        it { is_expected.to run.with_params(*input).and_raise_error(Puppet::ParseError, %r{validate_augeas.*?matched less than it should}) }
-      end
-    end
-
-    describe 'when specifying nice error messages' do
-      # The intent here is to make sure the function returns the 4th argument
-      # in the exception thrown
-      inputs = [
-        ["root:x:0:0:root\n", 'Passwd.lns', [], 'Failed to validate passwd content'],
-        ["127.0.1.1\n", 'Hosts.lns', [], 'Wrong hosts content'],
-      ]
-
-      inputs.each do |input|
-        it { is_expected.to run.with_params(*input).and_raise_error(Puppet::ParseError, %r{#{input[3]}}) }
-      end
-    end
-
-    describe 'matching additional tests' do
-      inputs = [
-        ["root:x:0:0:root:/root:/bin/bash\n", 'Passwd.lns', ['$file/foobar']],
-        ["root:x:0:0:root:/root:/bin/bash\n", 'Passwd.lns', ['$file/root/shell[.="/bin/sh"]', 'foobar']],
-      ]
-
-      inputs.each do |input|
-        it { is_expected.to run.with_params(*input) }
-      end
-    end
-
-    describe 'failing additional tests' do
-      inputs = [
-        ["foobar:x:0:0:root:/root:/bin/bash\n", 'Passwd.lns', ['$file/foobar']],
-        ["root:x:0:0:root:/root:/bin/sh\n", 'Passwd.lns', ['$file/root/shell[.="/bin/sh"]', 'foobar']],
-      ]
-
-      inputs.each do |input|
-        it { is_expected.to run.with_params(*input).and_raise_error(Puppet::ParseError, %r{testing path}) }
-      end
-    end
-  else
-    skip 'ruby-augeas not installed'
-  end
-end
diff --git a/spec/functions/validate_bool_spec.rb b/spec/functions/validate_bool_spec.rb
deleted file mode 100644
index ffcf1ba0..00000000
--- a/spec/functions/validate_bool_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_bool' do
-  after(:each) do
-    ENV.delete('STDLIB_LOG_DEPRECATIONS')
-  end
-
-  # Checking for deprecation warning
-  it 'displays a single deprecation' do
-    ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-    expect(scope).to receive(:warning).with(include('This method is deprecated'))
-    is_expected.to run.with_params(true)
-  end
-
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  end
-
-  describe 'acceptable values' do
-    it { is_expected.to run.with_params(true) }
-    it { is_expected.to run.with_params(false) }
-    it { is_expected.to run.with_params(true, false, false, true) }
-  end
-
-  describe 'validation failures' do
-    it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{is not a boolean}) }
-    it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{is not a boolean}) }
-    it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{is not a boolean}) }
-    it { is_expected.to run.with_params(true, 'one').and_raise_error(Puppet::ParseError, %r{is not a boolean}) }
-    it { is_expected.to run.with_params('one', false).and_raise_error(Puppet::ParseError, %r{is not a boolean}) }
-    it { is_expected.to run.with_params('true').and_raise_error(Puppet::ParseError, %r{is not a boolean}) }
-    it { is_expected.to run.with_params('false').and_raise_error(Puppet::ParseError, %r{is not a boolean}) }
-    it { is_expected.to run.with_params(true, 'false').and_raise_error(Puppet::ParseError, %r{is not a boolean}) }
-    it { is_expected.to run.with_params('true', false).and_raise_error(Puppet::ParseError, %r{is not a boolean}) }
-    it { is_expected.to run.with_params('true', false, false, false, false, false).and_raise_error(Puppet::ParseError, %r{is not a boolean}) }
-  end
-end
diff --git a/spec/functions/validate_cmd_spec.rb b/spec/functions/validate_cmd_spec.rb
deleted file mode 100644
index 7d8a8a16..00000000
--- a/spec/functions/validate_cmd_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_cmd', unless: Puppet::Util::Platform.windows? do
-  let(:touch) { File.exist?('/usr/bin/touch') ? '/usr/bin/touch' : '/bin/touch' }
-
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('', '', '', 'extra').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it {
-      pending('should implement stricter type checking')
-      is_expected.to run.with_params([], '', '').and_raise_error(Puppet::ParseError, %r{content must be a string})
-    }
-    it {
-      pending('should implement stricter type checking')
-      is_expected.to run.with_params('', [], '').and_raise_error(Puppet::ParseError, %r{checkscript must be a string})
-    }
-    it {
-      pending('should implement stricter type checking')
-      is_expected.to run.with_params('', '', []).and_raise_error(Puppet::ParseError, %r{custom error message must be a string})
-    }
-  end
-
-  context 'when validation fails' do
-    context 'with % placeholder' do
-      it {
-        is_expected.to run
-          .with_params('', "#{touch} % /no/such/file").and_raise_error(Puppet::ParseError, %r{Execution of '#{touch} \S+ \/no\/such\/file' returned 1:.*(cannot touch|o such file or)})
-      }
-      it { is_expected.to run.with_params('', "#{touch} % /no/such/file", 'custom error').and_raise_error(Puppet::ParseError, %r{custom error}) }
-    end
-    context 'without % placeholder' do
-      it {
-        is_expected.to run
-          .with_params('', "#{touch} /no/such/file").and_raise_error(Puppet::ParseError, %r{Execution of '#{touch} \/no\/such\/file \S+' returned 1:.*(cannot touch|o such file or)})
-      }
-      it { is_expected.to run.with_params('', "#{touch} /no/such/file", 'custom error').and_raise_error(Puppet::ParseError, %r{custom error}) }
-    end
-  end
-end
diff --git a/spec/functions/validate_domain_name_spec.rb b/spec/functions/validate_domain_name_spec.rb
deleted file mode 100644
index f48d31ab..00000000
--- a/spec/functions/validate_domain_name_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_domain_name' do
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  end
-
-  describe 'valid inputs' do
-    it { is_expected.to run.with_params('com', 'com.') }
-    it { is_expected.to run.with_params('x.com', 'x.com.') }
-    it { is_expected.to run.with_params('foo.example.com', 'foo.example.com.') }
-    it { is_expected.to run.with_params('2foo.example.com', '2foo.example.com.') }
-    it { is_expected.to run.with_params('www.2foo.example.com', 'www.2foo.example.com.') }
-    it { is_expected.to run.with_params('domain.tld', 'puppet.com') }
-  end
-
-  describe 'invalid inputs' do
-    it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-
-    it { is_expected.to run.with_params('foo.example.com', []).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('foo.example.com', {}).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('foo.example.com', 1).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('foo.example.com', true).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-
-    it { is_expected.to run.with_params('').and_raise_error(Puppet::ParseError, %r{is not a syntactically correct domain name}) }
-    it { is_expected.to run.with_params('invalid domain').and_raise_error(Puppet::ParseError, %r{is not a syntactically correct domain name}) }
-    it { is_expected.to run.with_params('-foo.example.com').and_raise_error(Puppet::ParseError, %r{is not a syntactically correct domain name}) }
-    it { is_expected.to run.with_params('www.example.2com').and_raise_error(Puppet::ParseError, %r{is not a syntactically correct domain name}) }
-    it { is_expected.to run.with_params('192.168.1.1').and_raise_error(Puppet::ParseError, %r{is not a syntactically correct domain name}) }
-  end
-end
diff --git a/spec/functions/validate_email_address_spec.rb b/spec/functions/validate_email_address_spec.rb
deleted file mode 100644
index 9d87061b..00000000
--- a/spec/functions/validate_email_address_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_email_address' do
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  end
-
-  describe 'valid inputs' do
-    it { is_expected.to run.with_params('bob@gmail.com') }
-    it { is_expected.to run.with_params('alice+puppetlabs.com@gmail.com') }
-  end
-
-  describe 'invalid inputs' do
-    it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{is not a valid email}) }
-    it { is_expected.to run.with_params('bob@gmail.com', {}).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('bob@gmail.com', true).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('bob@gmail.com', 'one').and_raise_error(Puppet::ParseError, %r{is not a valid email}) }
-  end
-end
diff --git a/spec/functions/validate_hash_spec.rb b/spec/functions/validate_hash_spec.rb
deleted file mode 100644
index 89fe882e..00000000
--- a/spec/functions/validate_hash_spec.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_hash' do
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-    describe 'check for deprecation warning' do
-      after(:each) do
-        ENV.delete('STDLIB_LOG_DEPRECATIONS')
-      end
-      # Checking for deprecation warning
-      it 'displays a single deprecation' do
-        ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-        expect(scope).to receive(:warning).with(include('This method is deprecated'))
-        is_expected.to run.with_params('key' => 'value')
-      end
-    end
-
-    describe 'valid inputs' do
-      it { is_expected.to run.with_params({}) }
-      it { is_expected.to run.with_params('key' => 'value') }
-      it { is_expected.to run.with_params({}, 'key' => 'value') }
-      it { is_expected.to run.with_params({ 'key1' => 'value1' }, 'key2' => 'value2') }
-    end
-
-    describe 'invalid inputs' do
-      it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{is not a Hash}) }
-      it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{is not a Hash}) }
-      it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{is not a Hash}) }
-      it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{is not a Hash}) }
-      it { is_expected.to run.with_params({}, []).and_raise_error(Puppet::ParseError, %r{is not a Hash}) }
-      it { is_expected.to run.with_params({}, 1).and_raise_error(Puppet::ParseError, %r{is not a Hash}) }
-      it { is_expected.to run.with_params({}, true).and_raise_error(Puppet::ParseError, %r{is not a Hash}) }
-      it { is_expected.to run.with_params({}, 'one').and_raise_error(Puppet::ParseError, %r{is not a Hash}) }
-      it { is_expected.to run.with_params("{ 'number' => 'one' }").and_raise_error(Puppet::ParseError, %r{is not a Hash}) }
-    end
-  end
-end
diff --git a/spec/functions/validate_integer_spec.rb b/spec/functions/validate_integer_spec.rb
deleted file mode 100644
index 6252a6dc..00000000
--- a/spec/functions/validate_integer_spec.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_integer' do
-  after(:each) do
-    ENV.delete('STDLIB_LOG_DEPRECATIONS')
-  end
-
-  # Checking for deprecation warning
-  it 'displays a single deprecation' do
-    ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-    expect(scope).to receive(:warning).with(include('This method is deprecated'))
-    is_expected.to run.with_params(3)
-  end
-
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params(1, 2, 3, 4).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-    [true, 'true', false, 'false', 'iAmAString', '1test', '1 test', 'test 1', 'test 1 test', 7.0, -7.0, {}, { 'key' => 'value' }, { 1 => 2 }, '', :undef, 'x'].each do |invalid|
-      it { is_expected.to run.with_params(invalid).and_raise_error(Puppet::ParseError, %r{to be an Integer}) }
-      it { is_expected.to run.with_params(invalid, 10).and_raise_error(Puppet::ParseError, %r{to be an Integer}) }
-      it { is_expected.to run.with_params(invalid, 10, -10).and_raise_error(Puppet::ParseError, %r{to be an Integer}) }
-      it { is_expected.to run.with_params([0, 1, 2, invalid, 3, 4], 10, -10).and_raise_error(Puppet::ParseError, %r{to be an Integer}) }
-    end
-
-    context 'when running on modern rubies', unless: RUBY_VERSION == '1.8.7' do
-      it { is_expected.to run.with_params([0, 1, 2, { 1 => 2 }, 3, 4], 10, -10).and_raise_error(Puppet::ParseError, %r{to be an Integer}) }
-    end
-
-    context 'when running on ruby, which munges hashes weirdly', if: RUBY_VERSION == '1.8.7' do
-      it { is_expected.to run.with_params([0, 1, 2, { 1 => 2 }, 3, 4], 10, -10).and_raise_error(Puppet::ParseError) }
-      it { is_expected.to run.with_params([0, 1, 2, { 0 => 2 }, 3, 4], 10, -10).and_raise_error(Puppet::ParseError) }
-    end
-
-    it { is_expected.to run.with_params(1, '').and_raise_error(Puppet::ParseError, %r{to be unset or an Integer}) }
-    it { is_expected.to run.with_params(1, 2, '').and_raise_error(Puppet::ParseError, %r{to be unset or an Integer}) }
-    it { is_expected.to run.with_params(1, 2, 3).and_raise_error(Puppet::ParseError, %r{second argument to be larger than third argument}) }
-  end
-
-  context 'with no range constraints' do
-    it { is_expected.to run.with_params(1) }
-    it { is_expected.to run.with_params(-1) }
-    it { is_expected.to run.with_params('1') }
-    it { is_expected.to run.with_params('-1') }
-    it { is_expected.to run.with_params([1, 2, 3, 4]) }
-    it { is_expected.to run.with_params([1, '2', '3', 4]) }
-  end
-
-  context 'with a maximum limit of 10' do
-    describe 'rejects numbers greater than the limit' do
-      it { is_expected.to run.with_params(11, 10).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-      it { is_expected.to run.with_params(100, 10).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-      it { is_expected.to run.with_params(2**65, 10).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-      it { is_expected.to run.with_params([1, 2, 10, 100], 10).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-    end
-
-    describe 'accepts numbers less or equal to the limit' do
-      it { is_expected.to run.with_params(10, 10) }
-      it { is_expected.to run.with_params(1, 10) }
-      it { is_expected.to run.with_params(-1, 10) }
-      it { is_expected.to run.with_params('1', 10) }
-      it { is_expected.to run.with_params('-1', 10) }
-      it { is_expected.to run.with_params([1, 2, 3, 4], 10) }
-      it { is_expected.to run.with_params([1, '2', '3', 4], 10) }
-    end
-  end
-
-  context 'with a minimum limit of -10' do
-    describe 'rejects numbers greater than the upper limit' do
-      it { is_expected.to run.with_params(11, 10, -10).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-      it { is_expected.to run.with_params(100, 10, -10).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-      it { is_expected.to run.with_params(2**65, 10, -10).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-      it { is_expected.to run.with_params([1, 2, 10, 100], 10, -10).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-    end
-
-    describe 'rejects numbers smaller than the lower limit' do
-      it { is_expected.to run.with_params(-11, 10, -10).and_raise_error(Puppet::ParseError, %r{to be greater or equal}) }
-      it { is_expected.to run.with_params(-100, 10, -10).and_raise_error(Puppet::ParseError, %r{to be greater or equal}) }
-      it { is_expected.to run.with_params(-2**65, 10, -10).and_raise_error(Puppet::ParseError, %r{to be greater or equal}) }
-      it { is_expected.to run.with_params([-10, 1, 2, 10, -100], 10, -10).and_raise_error(Puppet::ParseError, %r{to be greater or equal}) }
-    end
-
-    describe 'accepts numbers between and including the limits' do
-      it { is_expected.to run.with_params(10, 10, -10) }
-      it { is_expected.to run.with_params(-10, 10, -10) }
-      it { is_expected.to run.with_params(1, 10, -10) }
-      it { is_expected.to run.with_params(-1, 10, -10) }
-      it { is_expected.to run.with_params('1', 10, -10) }
-      it { is_expected.to run.with_params('-1', 10, -10) }
-      it { is_expected.to run.with_params([1, 2, 3, 4], 10, -10) }
-      it { is_expected.to run.with_params([1, '2', '3', 4], 10, -10) }
-    end
-  end
-
-  it { is_expected.to run.with_params(10, 10, 10) }
-
-  describe 'empty upper limit is interpreted as infinity' do
-    it { is_expected.to run.with_params(11, '', 10) }
-  end
-end
diff --git a/spec/functions/validate_ip_address_spec.rb b/spec/functions/validate_ip_address_spec.rb
deleted file mode 100644
index ded6df97..00000000
--- a/spec/functions/validate_ip_address_spec.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_ip_address' do
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  end
-
-  describe 'valid inputs' do
-    it { is_expected.to run.with_params('0.0.0.0') }
-    it { is_expected.to run.with_params('8.8.8.8') }
-    it { is_expected.to run.with_params('127.0.0.1') }
-    it { is_expected.to run.with_params('10.10.10.10') }
-    it { is_expected.to run.with_params('194.232.104.150') }
-    it { is_expected.to run.with_params('244.24.24.24') }
-    it { is_expected.to run.with_params('255.255.255.255') }
-    it { is_expected.to run.with_params('1.2.3.4', '5.6.7.8') }
-    it { is_expected.to run.with_params('3ffe:0505:0002::') }
-    it { is_expected.to run.with_params('3ffe:0505:0002::', '3ffe:0505:0002::2') }
-    it { is_expected.to run.with_params('::1/64') }
-    it { is_expected.to run.with_params('fe80::a00:27ff:fe94:44d6/64') }
-
-    context 'Checking for deprecation warning', if: Puppet.version.to_f < 4.0 do
-      after(:each) do
-        ENV.delete('STDLIB_LOG_DEPRECATIONS')
-      end
-      # Checking for deprecation warning, which should only be provoked when the env variable for it is set.
-      it 'displays a single deprecation' do
-        ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-        expect(scope).to receive(:warning).with(include('This method is deprecated'))
-        is_expected.to run.with_params('1.2.3.4')
-      end
-      it 'displays no warning for deprecation' do
-        ENV['STDLIB_LOG_DEPRECATIONS'] = 'false'
-        expect(scope).to receive(:warning).with(include('This method is deprecated')).never
-        is_expected.to run.with_params('1.2.3.4')
-      end
-    end
-
-    context 'with netmasks' do
-      it { is_expected.to run.with_params('8.8.8.8/0') }
-      it { is_expected.to run.with_params('8.8.8.8/16') }
-      it { is_expected.to run.with_params('8.8.8.8/32') }
-      it { is_expected.to run.with_params('8.8.8.8/255.255.0.0') }
-    end
-  end
-
-  describe 'invalid inputs' do
-    it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{is not a valid IP}) }
-    it { is_expected.to run.with_params('0.0.0').and_raise_error(Puppet::ParseError, %r{is not a valid IP}) }
-    it { is_expected.to run.with_params('0.0.0.256').and_raise_error(Puppet::ParseError, %r{is not a valid IP}) }
-    it { is_expected.to run.with_params('0.0.0.0.0').and_raise_error(Puppet::ParseError, %r{is not a valid IP}) }
-    it { is_expected.to run.with_params('1.2.3.4', {}).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('1.2.3.4', 1).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('1.2.3.4', true).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('1.2.3.4', 'one').and_raise_error(Puppet::ParseError, %r{is not a valid IP}) }
-    it { is_expected.to run.with_params('::1', {}).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('::1', true).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('::1', 'one').and_raise_error(Puppet::ParseError, %r{is not a valid IP}) }
-  end
-end
diff --git a/spec/functions/validate_ipv4_address_spec.rb b/spec/functions/validate_ipv4_address_spec.rb
deleted file mode 100644
index bc8ed764..00000000
--- a/spec/functions/validate_ipv4_address_spec.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_ipv4_address' do
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  end
-
-  context 'Checking for deprecation warning', if: Puppet.version.to_f < 4.0 do
-    after(:each) do
-      ENV.delete('STDLIB_LOG_DEPRECATIONS')
-    end
-    # Checking for deprecation warning, which should only be provoked when the env variable for it is set.
-    it 'displays a single deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-      expect(scope).to receive(:warning).with(include('This method is deprecated'))
-      is_expected.to run.with_params(SharedData::IPV4_PATTERNS.first)
-    end
-    it 'displays no warning for deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'false'
-      expect(scope).to receive(:warning).with(include('This method is deprecated')).never
-      is_expected.to run.with_params(SharedData::IPV4_PATTERNS.first)
-    end
-  end
-
-  SharedData::IPV4_PATTERNS.each do |value|
-    it { is_expected.to run.with_params(value) }
-  end
-
-  SharedData::IPV4_NEGATIVE_PATTERNS.each do |value|
-    it { is_expected.to run.with_params(value).and_raise_error(Puppet::ParseError, %r{is not a valid IPv4}) }
-  end
-
-  describe 'invalid inputs' do
-    [{}, [], 1, true].each do |invalid|
-      it { is_expected.to run.with_params(invalid).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-      it { is_expected.to run.with_params(SharedData::IPV4_PATTERNS.first, invalid).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    end
-  end
-
-  describe 'multiple inputs' do
-    it { is_expected.to run.with_params(SharedData::IPV4_PATTERNS[0], SharedData::IPV4_PATTERNS[1]) }
-    it { is_expected.to run.with_params(SharedData::IPV4_PATTERNS[0], 'invalid ip').and_raise_error(Puppet::ParseError, %r{is not a valid IPv4}) }
-  end
-end
diff --git a/spec/functions/validate_ipv6_address_spec.rb b/spec/functions/validate_ipv6_address_spec.rb
deleted file mode 100644
index 3e1563ed..00000000
--- a/spec/functions/validate_ipv6_address_spec.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_ipv6_address' do
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  end
-
-  context 'Checking for deprecation warning', if: Puppet.version.to_f < 4.0 do
-    after(:each) do
-      ENV.delete('STDLIB_LOG_DEPRECATIONS')
-    end
-    # Checking for deprecation warning, which should only be provoked when the env variable for it is set.
-    it 'displays a single deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-      expect(scope).to receive(:warning).with(include('This method is deprecated'))
-      is_expected.to run.with_params('3ffe:0505:0002::')
-    end
-    it 'displays no warning for deprecation' do
-      ENV['STDLIB_LOG_DEPRECATIONS'] = 'false'
-      expect(scope).to receive(:warning).with(include('This method is deprecated')).never
-      is_expected.to run.with_params('3ffe:0505:0002::')
-    end
-  end
-
-  describe 'valid inputs' do
-    it { is_expected.to run.with_params('3ffe:0505:0002::') }
-    it { is_expected.to run.with_params('3ffe:0505:0002::', '3ffe:0505:0002::2') }
-    it { is_expected.to run.with_params('::1/64') }
-    it { is_expected.to run.with_params('fe80::a00:27ff:fe94:44d6/64') }
-    it { is_expected.to run.with_params('fe80:0000:0000:0000:0204:61ff:fe9d:f156') }
-    it { is_expected.to run.with_params('fe80:0:0:0:204:61ff:fe9d:f156') }
-    it { is_expected.to run.with_params('fe80::204:61ff:fe9d:f156') }
-    it { is_expected.to run.with_params('fe80:0:0:0:0204:61ff:254.157.241.86') }
-    it { is_expected.to run.with_params('::1') }
-    it { is_expected.to run.with_params('fe80::') }
-    it { is_expected.to run.with_params('2001::') }
-  end
-
-  describe 'invalid inputs' do
-    it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{is not a valid IPv6}) }
-    it { is_expected.to run.with_params('0.0.0').and_raise_error(Puppet::ParseError, %r{is not a valid IPv6}) }
-    it { is_expected.to run.with_params('0.0.0.256').and_raise_error(Puppet::ParseError, %r{is not a valid IPv6}) }
-    it { is_expected.to run.with_params('0.0.0.0.0').and_raise_error(Puppet::ParseError, %r{is not a valid IPv6}) }
-    it { is_expected.to run.with_params('::ffff:2.3.4').and_raise_error(Puppet::ParseError, %r{is not a valid IPv6}) }
-    it { is_expected.to run.with_params('::ffff:257.1.2.3').and_raise_error(Puppet::ParseError, %r{is not a valid IPv6}) }
-    it { is_expected.to run.with_params('::ffff:12345678901234567890.1.26').and_raise_error(Puppet::ParseError, %r{is not a valid IPv6}) }
-    it { is_expected.to run.with_params('affe:beef').and_raise_error(Puppet::ParseError, %r{is not a valid IPv6}) }
-    it { is_expected.to run.with_params('::1', {}).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('::1', true).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    it { is_expected.to run.with_params('::1', 'one').and_raise_error(Puppet::ParseError, %r{is not a valid IPv6}) }
-    context 'unless running on ruby 1.8.7', if: RUBY_VERSION != '1.8.7' do
-      it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-      it { is_expected.to run.with_params('::1', 1).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    end
-  end
-end
diff --git a/spec/functions/validate_legacy_spec.rb b/spec/functions/validate_legacy_spec.rb
deleted file mode 100644
index 0998cf61..00000000
--- a/spec/functions/validate_legacy_spec.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-if Puppet::Util::Package.versioncmp(Puppet.version, '4.4.0') >= 0
-  describe 'validate_legacy' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(ArgumentError) }
-
-    describe 'when passing the type assertion and passing the previous validation' do
-      it 'passes without notice' do
-        expect(scope).to receive(:function_validate_foo).with([5]).once
-        expect(Puppet).to receive(:notice).never
-        is_expected.to run.with_params('Integer', 'validate_foo', 5)
-      end
-    end
-
-    describe 'when passing the type assertion and failing the previous validation' do
-      it 'passes with a notice about newly accepted value' do
-        expect(scope).to receive(:function_validate_foo).with([5]).and_raise(Puppet::ParseError, 'foo').once
-        expect(Puppet).to receive(:notice).with(include('Accepting previously invalid value for target type'))
-        is_expected.to run.with_params('Integer', 'validate_foo', 5)
-      end
-    end
-
-    describe 'when failing the type assertion and passing the previous validation' do
-      it 'passes with a deprecation message' do
-        expect(scope).to receive(:function_validate_foo).with(['5']).once
-        expect(subject.func).to receive(:call_function).with('deprecation', 'validate_legacy', include('Integer')).once
-        is_expected.to run.with_params('Integer', 'validate_foo', '5')
-      end
-    end
-
-    describe 'when failing the type assertion and failing the previous validation' do
-      it 'fails with a helpful message' do
-        expect(scope).to receive(:function_validate_foo).with(['5']).and_raise(Puppet::ParseError, 'foo').once
-        expect(subject.func).to receive(:call_function).with('fail', include('Integer')).once
-        is_expected.to run.with_params('Integer', 'validate_foo', '5')
-      end
-    end
-
-    describe 'when passing in undef' do
-      it 'works' do
-        expect(scope).to receive(:function_validate_foo).with([:undef]).once
-        expect(Puppet).to receive(:notice).never
-        is_expected.to run.with_params('Optional[Integer]', 'validate_foo', :undef)
-      end
-    end
-
-    describe 'when passing in multiple arguments' do
-      it 'passes with a deprecation message' do
-        expect(scope).to receive(:function_validate_foo).with([:undef, 1, 'foo']).once
-        expect(Puppet).to receive(:notice).never
-        is_expected.to run.with_params('Optional[Integer]', 'validate_foo', :undef, 1, 'foo')
-      end
-    end
-  end
-end
diff --git a/spec/functions/validate_numeric_spec.rb b/spec/functions/validate_numeric_spec.rb
deleted file mode 100644
index 8b593c31..00000000
--- a/spec/functions/validate_numeric_spec.rb
+++ /dev/null
@@ -1,102 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_numeric' do
-  after(:each) do
-    ENV.delete('STDLIB_LOG_DEPRECATIONS')
-  end
-
-  # Checking for deprecation warning
-  it 'displays a single deprecation' do
-    ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-    expect(scope).to receive(:warning).with(include('This method is deprecated'))
-    is_expected.to run.with_params(3)
-  end
-
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params(1, 2, 3, 4).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-    [true, 'true', false, 'false', 'iAmAString', '1test', '1 test', 'test 1', 'test 1 test', {}, { 'key' => 'value' }, { 1 => 2 }, '', :undef, 'x'].each do |invalid|
-      it { is_expected.to run.with_params(invalid).and_raise_error(Puppet::ParseError, %r{to be a Numeric}) }
-      it { is_expected.to run.with_params(invalid, 10.0).and_raise_error(Puppet::ParseError, %r{to be a Numeric}) }
-      it { is_expected.to run.with_params(invalid, 10.0, -10.0).and_raise_error(Puppet::ParseError, %r{to be a Numeric}) }
-    end
-
-    context 'when running on modern rubies', unless: RUBY_VERSION == '1.8.7' do
-      it { is_expected.to run.with_params([0, 1, 2, { 1 => 2 }, 3, 4], 10, -10).and_raise_error(Puppet::ParseError, %r{to be a Numeric}) }
-    end
-
-    context 'when running on ruby, which munges hashes weirdly', if: RUBY_VERSION == '1.8.7' do
-      it { is_expected.to run.with_params([0, 1, 2, { 1 => 2 }, 3, 4], 10, -10).and_raise_error(Puppet::ParseError) }
-      it { is_expected.to run.with_params([0, 1, 2, { 0 => 2 }, 3, 4], 10, -10).and_raise_error(Puppet::ParseError) }
-    end
-
-    it { is_expected.to run.with_params(1, '').and_raise_error(Puppet::ParseError, %r{to be unset or a Numeric}) }
-    it { is_expected.to run.with_params(1, 2, '').and_raise_error(Puppet::ParseError, %r{to be unset or a Numeric}) }
-    it { is_expected.to run.with_params(1, 2, 3).and_raise_error(Puppet::ParseError, %r{second argument to be larger than third argument}) }
-  end
-
-  context 'with no range constraints' do
-    it { is_expected.to run.with_params(1) }
-    it { is_expected.to run.with_params(-1) }
-    it { is_expected.to run.with_params('1') }
-    it { is_expected.to run.with_params('-1') }
-    it { is_expected.to run.with_params([1, 2, 3, 4]) }
-    it { is_expected.to run.with_params([1, '2', '3', 4]) }
-  end
-
-  context 'with a maximum limit of 10.0' do
-    describe 'rejects numbers greater than the limit' do
-      it { is_expected.to run.with_params(11, 10.0).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-      it { is_expected.to run.with_params(100, 10.0).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-      it { is_expected.to run.with_params(2**65, 10.0).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-      it { is_expected.to run.with_params([1, 2, 10.0, 100], 10.0).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-    end
-
-    describe 'accepts numbers less or equal to the limit' do
-      it { is_expected.to run.with_params(10.0, 10.0) }
-      it { is_expected.to run.with_params(1, 10.0) }
-      it { is_expected.to run.with_params(-1, 10.0) }
-      it { is_expected.to run.with_params('1', 10.0) }
-      it { is_expected.to run.with_params('-1', 10.0) }
-      it { is_expected.to run.with_params([1, 2, 3, 4], 10.0) }
-      it { is_expected.to run.with_params([1, '2', '3', 4], 10.0) }
-    end
-  end
-
-  context 'with a minimum limit of -10.0' do
-    describe 'rejects numbers greater than the upper limit' do
-      it { is_expected.to run.with_params(11, 10.0, -10.0).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-      it { is_expected.to run.with_params(100, 10.0, -10.0).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-      it { is_expected.to run.with_params(2**65, 10.0, -10.0).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-      it { is_expected.to run.with_params([1, 2, 10.0, 100], 10.0, -10.0).and_raise_error(Puppet::ParseError, %r{to be smaller or equal}) }
-    end
-
-    describe 'rejects numbers smaller than the lower limit' do
-      it { is_expected.to run.with_params(-11, 10.0, -10.0).and_raise_error(Puppet::ParseError, %r{to be greater or equal}) }
-      it { is_expected.to run.with_params(-100, 10.0, -10.0).and_raise_error(Puppet::ParseError, %r{to be greater or equal}) }
-      it { is_expected.to run.with_params(-2**65, 10.0, -10.0).and_raise_error(Puppet::ParseError, %r{to be greater or equal}) }
-      it { is_expected.to run.with_params([-10.0, 1, 2, 10.0, -100], 10.0, -10.0).and_raise_error(Puppet::ParseError, %r{to be greater or equal}) }
-    end
-
-    describe 'accepts numbers between and including the limits' do
-      it { is_expected.to run.with_params(10.0, 10.0, -10.0) }
-      it { is_expected.to run.with_params(-10.0, 10.0, -10.0) }
-      it { is_expected.to run.with_params(1, 10.0, -10.0) }
-      it { is_expected.to run.with_params(-1, 10.0, -10.0) }
-      it { is_expected.to run.with_params('1', 10.0, -10.0) }
-      it { is_expected.to run.with_params('-1', 10.0, -10.0) }
-      it { is_expected.to run.with_params([1, 2, 3, 4], 10.0, -10.0) }
-      it { is_expected.to run.with_params([1, '2', '3', 4], 10.0, -10.0) }
-    end
-  end
-
-  it { is_expected.to run.with_params(10.0, 10.0, 10.0) }
-
-  describe 'empty upper limit is interpreted as infinity' do
-    it { is_expected.to run.with_params(11, '', 10.0) }
-  end
-end
diff --git a/spec/functions/validate_re_spec.rb b/spec/functions/validate_re_spec.rb
deleted file mode 100644
index bfa824e6..00000000
--- a/spec/functions/validate_re_spec.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_re' do
-  after(:each) do
-    ENV.delete('STDLIB_LOG_DEPRECATIONS')
-  end
-
-  # Checking for deprecation warning
-  it 'displays a single deprecation' do
-    ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-    expect(scope).to receive(:warning).with(include('This method is deprecated'))
-    is_expected.to run.with_params('', '')
-  end
-
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('', '', '', 'extra').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-    describe 'valid inputs' do
-      it { is_expected.to run.with_params('', '') }
-      it { is_expected.to run.with_params('', ['']) }
-      it { is_expected.to run.with_params('', [''], 'custom error') }
-      it { is_expected.to run.with_params('one', '^one') }
-      it { is_expected.to run.with_params('one', ['^one', '^two']) }
-      it { is_expected.to run.with_params('one', ['^one', '^two'], 'custom error') }
-    end
-
-    describe 'invalid inputs' do
-      it { is_expected.to run.with_params('', []).and_raise_error(Puppet::ParseError, %r{does not match}) }
-      it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{does not match}) }
-      it { is_expected.to run.with_params('', 'two').and_raise_error(Puppet::ParseError, %r{does not match}) }
-      it { is_expected.to run.with_params('', ['two']).and_raise_error(Puppet::ParseError, %r{does not match}) }
-      it { is_expected.to run.with_params('', ['two'], 'custom error').and_raise_error(Puppet::ParseError, %r{custom error}) }
-      it { is_expected.to run.with_params('notone', '^one').and_raise_error(Puppet::ParseError, %r{does not match}) }
-      it { is_expected.to run.with_params('notone', ['^one', '^two']).and_raise_error(Puppet::ParseError, %r{does not match}) }
-      it { is_expected.to run.with_params('notone', ['^one', '^two'], 'custom error').and_raise_error(Puppet::ParseError, %r{custom error}) }
-    end
-
-    describe 'non-string inputs' do
-      [
-        1,                  # Fixnum
-        3.14,               # Float
-        nil,                # NilClass
-        true,               # TrueClass
-        false,              # FalseClass
-        ['10'],             # Array
-        :key,               # Symbol
-        { key: 'val' },  # Hash
-      ].each do |input|
-        it { is_expected.to run.with_params(input, '.*').and_raise_error(Puppet::ParseError, %r{needs to be a String}) }
-      end
-    end
-  end
-end
diff --git a/spec/functions/validate_slength_spec.rb b/spec/functions/validate_slength_spec.rb
deleted file mode 100644
index 6ff44c73..00000000
--- a/spec/functions/validate_slength_spec.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_slength' do
-  after(:each) do
-    ENV.delete('STDLIB_LOG_DEPRECATIONS')
-  end
-
-  # Checking for deprecation warning
-  it 'displays a single deprecation' do
-    ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-    expect(scope).to receive(:warning).with(include('This method is deprecated'))
-    is_expected.to run.with_params('1234567890', 10)
-  end
-
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('', 2, 3, 'extra').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params('', '').and_raise_error(Puppet::ParseError, %r{second argument to be a positive Numeric}) }
-    it { is_expected.to run.with_params('', -1).and_raise_error(Puppet::ParseError, %r{second argument to be a positive Numeric}) }
-    it { is_expected.to run.with_params('', 1, '').and_raise_error(Puppet::ParseError, %r{third argument to be unset or a positive Numeric}) }
-    it { is_expected.to run.with_params('', 1, -1).and_raise_error(Puppet::ParseError, %r{third argument to be unset or a positive Numeric}) }
-    it { is_expected.to run.with_params('', 1, 2).and_raise_error(Puppet::ParseError, %r{argument to be equal to or larger than third argument}) }
-  end
-
-  context 'with a maximum length of 10' do
-    describe 'rejects strings longer than the limit' do
-      it { is_expected.to run.with_params('1234567890a', 10).and_raise_error(Puppet::ParseError, %r{Expected length}) }
-      it { is_expected.to run.with_params('1234567890abcdef', 10).and_raise_error(Puppet::ParseError, %r{Expected length}) }
-      it { is_expected.to run.with_params(['one', '1234567890abcdef'], 10).and_raise_error(Puppet::ParseError, %r{Expected length}) }
-    end
-
-    describe 'accepts strings shorter or equal to the limit' do
-      it { is_expected.to run.with_params('1234567890', 10) }
-      it { is_expected.to run.with_params('12345', 10) }
-      it { is_expected.to run.with_params(['one', 'two'], 10) }
-    end
-  end
-
-  context 'with a minimum length of 5' do
-    describe 'rejects strings longer than the upper limit' do
-      it { is_expected.to run.with_params('1234567890a', 10, 5).and_raise_error(Puppet::ParseError, %r{Expected length}) }
-      it { is_expected.to run.with_params('1234567890abcdef', 10, 5).and_raise_error(Puppet::ParseError, %r{Expected length}) }
-    end
-
-    describe 'rejects numbers shorter than the lower limit' do
-      it { is_expected.to run.with_params('one', 10, 5).and_raise_error(Puppet::ParseError, %r{Expected length}) }
-      it { is_expected.to run.with_params(['12345678', 'two'], 10, 5).and_raise_error(Puppet::ParseError, %r{Expected length}) }
-    end
-
-    describe 'accepts strings of length between and including the limits' do
-      it { is_expected.to run.with_params('12345', 10, 5) }
-      it { is_expected.to run.with_params('123456', 10, 5) }
-      it { is_expected.to run.with_params('1234567', 10, 5) }
-      it { is_expected.to run.with_params('12345678', 10, 5) }
-      it { is_expected.to run.with_params('123456789', 10, 5) }
-      it { is_expected.to run.with_params('1234567890', 10, 5) }
-      it { is_expected.to run.with_params(['1233456', '12345678'], 10, 5) }
-    end
-  end
-
-  describe 'corner cases' do
-    it {
-      pending('this should work')
-      is_expected.to run.with_params('', 0, 0)
-    }
-    it { is_expected.to run.with_params('1234567890', 10, 10) }
-  end
-
-  describe 'empty upper limit is interpreted as infinity' do
-    it {
-      pending('not implemented')
-      is_expected.to run.with_params('1234567890ab', '', 10)
-    }
-    it {
-      pending('not implemented')
-      is_expected.to run.with_params('12345678', '', 10).and_raise_error(Puppet::ParseError, %r{Expected length})
-    }
-  end
-end
diff --git a/spec/functions/validate_string_spec.rb b/spec/functions/validate_string_spec.rb
deleted file mode 100644
index 515747f8..00000000
--- a/spec/functions/validate_string_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_string' do
-  after(:each) do
-    ENV.delete('STDLIB_LOG_DEPRECATIONS')
-  end
-
-  # Checking for deprecation warning
-  it 'displays a single deprecation' do
-    ENV['STDLIB_LOG_DEPRECATIONS'] = 'true'
-    expect(scope).to receive(:warning).with(include('This method is deprecated'))
-    is_expected.to run.with_params('', '')
-  end
-
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-
-    describe 'valid inputs' do
-      it { is_expected.to run.with_params('') }
-      it { is_expected.to run.with_params(nil) }
-      it { is_expected.to run.with_params('one') }
-      it { is_expected.to run.with_params('one', 'two') }
-    end
-
-    describe 'invalid inputs' do
-      it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-      it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-      it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-      it { is_expected.to run.with_params(true).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-      it { is_expected.to run.with_params('one', 2).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    end
-  end
-end
diff --git a/spec/functions/validate_x509_rsa_key_pair_spec.rb b/spec/functions/validate_x509_rsa_key_pair_spec.rb
deleted file mode 100644
index 08a24234..00000000
--- a/spec/functions/validate_x509_rsa_key_pair_spec.rb
+++ /dev/null
@@ -1,181 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'validate_x509_rsa_key_pair' do
-  let(:valid_cert) do
-    <<DOC
------BEGIN CERTIFICATE-----
-MIIC9jCCAeCgAwIBAgIRAK11n3X7aypJ7FPM8UFyAeowCwYJKoZIhvcNAQELMBIx
-EDAOBgNVBAoTB0FjbWUgQ28wHhcNMTUxMTIzMjIzOTU4WhcNMTYxMTIyMjIzOTU4
-WjASMRAwDgYDVQQKEwdBY21lIENvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAz9bY/piKahD10AiJSfbI2A8NG5UwRz0r9T/WfvNVdhgrsGFgNQjvpUoZ
-nNJpQIHBbgMOiXqfATFjJl5FjEkSf7GUHohlGVls9MX2JmVvknzsiitd75H/EJd+
-N+k915lix8Vqmj8d1CTlbF/8tEjzANI67Vqw5QTuqebO7rkIUvRg6yiRfSo75FK1
-RinCJyl++kmleBwQZBInQyg95GvJ5JTqMzBs67DeeyzskDhTeTePRYVF2NwL8QzY
-htvLIBERTNsyU5i7nkxY5ptUwgFUwd93LH4Q19tPqL5C5RZqXxhE51thOOwafm+a
-W/cRkqYqV+tv+j1jJ3WICyF1JNW0BQIDAQABo0swSTAOBgNVHQ8BAf8EBAMCAKAw
-EwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAUBgNVHREEDTALggls
-b2NhbGhvc3QwCwYJKoZIhvcNAQELA4IBAQAzRo0hpVTrFQZLIXpwvKwZVGvJdCkV
-P95DTsSk/VTGV+/YtxrRqks++hJZnctm2PbnTsCAoIP3AMx+vicCKiKrxvpsLU8/
-+6cowUbcuGMdSQktwDqbAgEhQlLsETll06w1D/KC+ejOc4+LRn3GQcEyGDtMk/EX
-IeAvBZHr4/kVXWnfo6kzCLcku1f8yE/yDEFClZe9XV1Lk/s+3YfXVtNnMJJ1giZI
-QVOe6CkmuQq+4AtIeW8aLkvlfp632jag1F77a1y+L268koKkj0hBMrtcErVQaxmq
-xym0+soR4Tk4pTIGckeFglrLxkP2JpM/yTwSEAVlmG9vgTliYKyR0uMl
------END CERTIFICATE-----
-DOC
-  end
-
-  let(:valid_key) do
-    <<DOC
------BEGIN RSA PRIVATE KEY-----
-MIIEogIBAAKCAQEAz9bY/piKahD10AiJSfbI2A8NG5UwRz0r9T/WfvNVdhgrsGFg
-NQjvpUoZnNJpQIHBbgMOiXqfATFjJl5FjEkSf7GUHohlGVls9MX2JmVvknzsiitd
-75H/EJd+N+k915lix8Vqmj8d1CTlbF/8tEjzANI67Vqw5QTuqebO7rkIUvRg6yiR
-fSo75FK1RinCJyl++kmleBwQZBInQyg95GvJ5JTqMzBs67DeeyzskDhTeTePRYVF
-2NwL8QzYhtvLIBERTNsyU5i7nkxY5ptUwgFUwd93LH4Q19tPqL5C5RZqXxhE51th
-OOwafm+aW/cRkqYqV+tv+j1jJ3WICyF1JNW0BQIDAQABAoIBADAiZ/r+xP+vkd5u
-O61/lCBFzBlZQecdybJw6HJaVK6XBndA9hESUr4LHUdui6W+51ddKd65IV4bXAUk
-zCKjQb+FFvLDT/bA+TTvLATUdTSN7hJJ3OWBAHuNOlQklof6JCB0Hi4+89+P8/pX
-eKUgR/cmuTMDT/iaXdPHeqFbBQyA1ZpQFRjN5LyyJMS/9FkywuNc5wlpsArtc51T
-gIKENUZCuPhosR+kMFc2iuTNvqZWPhvouSrmhi2O6nSqV+oy0+irlqSpCF2GsCI8
-72TtLpq94Grrq0BEH5avouV+Lp4k83vO65OKCQKUFQlxz3Xkxm2U3J7KzxqnRtM3
-/b+cJ/kCgYEA6/yOnaEYhH/7ijhZbPn8RujXZ5VGJXKJqIuaPiHMmHVS5p1j6Bah
-2PcnqJA2IlLs3UloN+ziAxAIH6KCBiwlQ/uPBNMMaJsIjPNBEy8axjndKhKUpidg
-R0OJ7RQqMShOJ8akrSfWdPtXC/GBuwCYE//t77GgZaIMO3FcT9EKA48CgYEA4Xcx
-Fia0Jg9iyAhNmUOXI6hWcGENavMx01+x7XFhbnMjIKTZevFfTnTkrX6HyLXyGtMU
-gHOn+k4PE/purI4ARrKO8m5wYEKqSIt4dBMTkIXXirfQjXgfjR8E4T/aPe5fOFZo
-7OYuxLRtzmG1C2sW4txwKAKX1LaWcVx/RLSttSsCgYBbcj8Brk+F6OJcqYFdzXGJ
-OOlf5mSMVlopyg83THmwCqbZXtw8L6kAHqZrl5airmfDSJLuOQlMDoZXW+3u3mSC
-d5TwVahVUN57YDgzaumBLyMZDqIz0MZqVy23hTzkV64Rk9R0lR9xrYQJyMhw4sYL
-2f0mCTsSpzz+O+t9so+i2QKBgEC38gMlwPhb2kMI/x1LZYr6uzUu5qcYf+jowy4h
-KZKGwkKQj0zXFEB1FV8nvtpCP+irRmtIx6L13SYi8LnfWPzyLE4ynVdES5TfVAgd
-obQOdzx+XwL8xDHCAaiWp5K3ZeXKB/xYZnxYPlzLdyh76Ond1OPnOqX4c16+6llS
-c7pZAoGATd9NckT0XtXLEsF3IraDivq8dP6bccX2DNfS8UeEvRRrRwpFpSRrmuGb
-jbG4yzoIX4RjQfj/z48hwhJB+cKiN9WwcPsFXtHe7v3F6BRwK0JUfrCiXad8/SGZ
-KAf7Dfqi608zBdnPWHacre2Y35gPHB00nFQOLS6u46aBNSq07YA=
------END RSA PRIVATE KEY-----
-DOC
-  end
-
-  let(:another_valid_key) do
-    <<DOC
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAoISxYJBTPAeAzFnm+lE/ljLlmGal2Xr3vwZKkvJiuKA/m4QJ
-0ZNdtkBSDOVuG2dXVv6W4sChRtsCdvuVe7bjTYvlU8TWM3VEJDL9l9cRXScxxlKQ
-Xwb35y1yV35NJfaK/jzm9KcErtQQs1RxvGlWRaohmLM8uQcuhjZfMsSlQoHQD5LX
-sbPtk82RPyxYc1dj2vsaoi1VvuP2+jv4xLQOmNJY1bT5GTurqiltmxEtWhNNmGg0
-2wtK00ifqLVO5HNc3gXQCDM2M99Sbmn1YtbrgsU9xMYfcPmvQvb+YoKskyoqck+c
-HR//hi7vslbxABrny15LBkEfRc4TickphSGYXwIDAQABAoIBAATEzGw8/WwMIQRx
-K06GeWgh7PZBHm4+m/ud2TtSXiJ0CE+7dXs3cJJIiOd/LW08/bhE6gCkjmYHfaRB
-Ryicv1X/cPmzIFX5BuQ4a5ZGOmrVDkKBE27vSxAgJoR46RvWnjx9XLMp/xaekDxz
-psldK8X4DvV1ZbltgDFWji947hvyqUtHdKnkQnc5j7aCIFJf9GMfzaeeDPMaL8WF
-mVL4iy9EAOjNOHBshZj/OHyU5FbJ8ROwZQlCOiLCdFegftSIXt8EYDnjB3BdsALH
-N6hquqrD7xDKyRbTD0K7lqxUubuMwTQpi61jZD8TBTXEPyFVAnoMpXkc0Y+np40A
-YiIsR+kCgYEAyrc4Bh6fb9gt49IXGXOSRZ5i5+TmJho4kzIONrJ7Ndclwx9wzHfh
-eGBodWaw5CxxQGMf4vEiaZrpAiSFeDffBLR+Wa2TFE5aWkdYkR34maDjO00m4PE1
-S+YsZoGw7rGmmj+KS4qv2T26FEHtUI+F31RC1FPohLsQ22Jbn1ORipsCgYEAyrYB
-J2Ncf2DlX1C0GfxyUHQOTNl0V5gpGvpbZ0WmWksumYz2kSGOAJkxuDKd9mKVlAcz
-czmN+OOetuHTNqds2JJKKJy6hJbgCdd9aho3dId5Xs4oh4YwuFQiG8R/bJZfTlXo
-99Qr02L7MmDWYLmrR3BA/93UPeorHPtjqSaYU40CgYEAtmGfWwokIglaSDVVqQVs
-3YwBqmcrla5TpkMLvLRZ2/fktqfL4Xod9iKu+Klajv9ZKTfFkXWno2HHL7FSD/Yc
-hWwqnV5oDIXuDnlQOse/SeERb+IbD5iUfePpoJQgbrCQlwiB0TNGwOojR2SFMczf
-Ai4aLlQLx5dSND9K9Y7HS+8CgYEAixlHQ2r4LuQjoTs0ytwi6TgqE+vn3K+qDTwc
-eoods7oBWRaUn1RCKAD3UClToZ1WfMRQNtIYrOAsqdveXpOWqioAP0wE5TTOuZIo
-GiWxRgIsc7TNtOmNBv+chCdbNP0emxdyjJUIGb7DFnfCw47EjHnn8Guc13uXaATN
-B2ZXgoUCgYAGa13P0ggUf5BMJpBd8S08jKRyvZb1CDXcUCuGtk2yEx45ern9U5WY
-zJ13E5z9MKKO8nkGBqrRfjJa8Xhxk4HKNFuzHEet5lvNE7IKCF4YQRb0ZBhnb/78
-+4ZKjFki1RrWRNSw9TdvrK6qaDKgTtCTtfRVXAYQXUgq7lSFOTtL3A==
------END RSA PRIVATE KEY-----
-DOC
-  end
-  # rubocop:enable Layout/IndentHeredoc
-
-  let(:valid_cert_but_indented) do
-    valid_cert.gsub(%r{^}, '  ')
-  end
-
-  let(:valid_key_but_indented) do
-    valid_key.gsub(%r{^}, '  ')
-  end
-
-  let(:malformed_cert) do
-    truncate_middle(valid_cert)
-  end
-
-  let(:malformed_key) do
-    truncate_middle(valid_key)
-  end
-
-  let(:bad_cert) do
-    'foo'
-  end
-
-  let(:bad_key) do
-    'bar'
-  end
-
-  context 'with function signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params(0, 1, 2, 3).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  end
-
-  context 'with valid input' do
-    describe 'valid certificate and key' do
-      it { is_expected.to run.with_params(valid_cert, valid_key) }
-    end
-  end
-
-  context 'with bad input' do
-    describe 'valid certificate, valid but indented key' do
-      it { is_expected.to run.with_params(valid_cert, valid_key_but_indented).and_raise_error(Puppet::ParseError, %r{Not a valid RSA key}) }
-    end
-
-    describe 'valid certificate, malformed key' do
-      it { is_expected.to run.with_params(valid_cert, malformed_key).and_raise_error(Puppet::ParseError, %r{Not a valid RSA key}) }
-    end
-
-    describe 'valid certificate, bad key' do
-      it { is_expected.to run.with_params(valid_cert, bad_key).and_raise_error(Puppet::ParseError, %r{Not a valid RSA key}) }
-    end
-
-    describe 'valid but indented certificate, valid key' do
-      it { is_expected.to run.with_params(valid_cert_but_indented, valid_key).and_raise_error(Puppet::ParseError, %r{Not a valid x509 certificate}) }
-    end
-
-    describe 'malformed certificate, valid key' do
-      it { is_expected.to run.with_params(malformed_cert, valid_key).and_raise_error(Puppet::ParseError, %r{Not a valid x509 certificate}) }
-    end
-
-    describe 'bad certificate, valid key' do
-      it { is_expected.to run.with_params(bad_cert, valid_key).and_raise_error(Puppet::ParseError, %r{Not a valid x509 certificate}) }
-    end
-
-    describe 'validate certificate and key; certficate not signed by key' do
-      it { is_expected.to run.with_params(valid_cert, another_valid_key).and_raise_error(Puppet::ParseError, %r{Certificate signature does not match supplied key}) }
-    end
-
-    describe 'valid cert and key but arguments in wrong order' do
-      it { is_expected.to run.with_params(valid_key, valid_cert).and_raise_error(Puppet::ParseError, %r{Not a valid x509 certificate}) }
-    end
-
-    describe 'non-string arguments' do
-      it { is_expected.to run.with_params({}, {}).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-      it { is_expected.to run.with_params(1, 1).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-      it { is_expected.to run.with_params(true, true).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-      it { is_expected.to run.with_params('foo', {}).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-      it { is_expected.to run.with_params(1, 'bar').and_raise_error(Puppet::ParseError, %r{is not a string}) }
-      it { is_expected.to run.with_params('baz', true).and_raise_error(Puppet::ParseError, %r{is not a string}) }
-    end
-  end
-
-  def truncate_middle(string)
-    chars_to_truncate = 48
-    middle = (string.length / 2).floor
-    start_pos = middle - (chars_to_truncate / 2)
-    end_pos = middle + (chars_to_truncate / 2)
-
-    string[0..start_pos] + string[end_pos..-1]
-  end
-end
diff --git a/spec/functions/values_at_spec.rb b/spec/functions/values_at_spec.rb
deleted file mode 100644
index 61c9f4d2..00000000
--- a/spec/functions/values_at_spec.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'values_at' do
-  describe 'signature validation' do
-    it { is_expected.not_to eq(nil) }
-    it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-    it {
-      pending('Current implementation ignores parameters after the first two.')
-      is_expected.to run.with_params([], 0, 1).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-    }
-    it { is_expected.to run.with_params('', 1).and_raise_error(Puppet::ParseError, %r{Requires array}i) }
-    it { is_expected.to run.with_params({}, 1).and_raise_error(Puppet::ParseError, %r{Requires array}i) }
-    it { is_expected.to run.with_params(true, 1).and_raise_error(Puppet::ParseError, %r{Requires array}i) }
-    it { is_expected.to run.with_params(1, 1).and_raise_error(Puppet::ParseError, %r{Requires array}i) }
-    it { is_expected.to run.with_params([0, 1, 2], 'two').and_raise_error(Puppet::ParseError, %r{Unknown format of given index}) }
-    it { is_expected.to run.with_params([0, 1, 2], []).and_raise_error(Puppet::ParseError, %r{provide at least one positive index}) }
-    it { is_expected.to run.with_params([0, 1, 2], '-1-1').and_raise_error(Puppet::ParseError, %r{Unknown format of given index}) }
-    it { is_expected.to run.with_params([0, 1, 2], '2-1').and_raise_error(Puppet::ParseError, %r{Stop index in given indices range is smaller than the start index}) }
-  end
-
-  context 'when requesting a single item' do
-    it { is_expected.to run.with_params([0, 1, 2], -1).and_raise_error(Puppet::ParseError, %r{Unknown format of given index}) }
-    it { is_expected.to run.with_params([0, 1, 2], 0).and_return([0]) }
-    it { is_expected.to run.with_params([0, 1, 2], 1).and_return([1]) }
-    it { is_expected.to run.with_params([0, 1, 2], [1]).and_return([1]) }
-    it { is_expected.to run.with_params([0, 1, 2], '1').and_return([1]) }
-    it { is_expected.to run.with_params([0, 1, 2], '1-1').and_return([1]) }
-    it { is_expected.to run.with_params([0, 1, 2], 2).and_return([2]) }
-    it { is_expected.to run.with_params([0, 1, 2], 3).and_raise_error(Puppet::ParseError, %r{index exceeds array size}) }
-  end
-
-  context 'when requesting a single item using UTF8 and double byte characters' do
-    it { is_expected.to run.with_params(['ẩ', 'β', 'с', 'ď'], 0).and_return(['ẩ']) }
-    it { is_expected.to run.with_params(['文', '字', 'の', '値'], 2).and_return(['の']) }
-  end
-
-  context 'when requesting multiple items' do
-    it { is_expected.to run.with_params([0, 1, 2], [1, -1]).and_raise_error(Puppet::ParseError, %r{Unknown format of given index}) }
-    it { is_expected.to run.with_params([0, 1, 2], [0, 2]).and_return([0, 2]) }
-    it { is_expected.to run.with_params([0, 1, 2], ['0-2', 1, 2]).and_return([0, 1, 2, 1, 2]) }
-    it { is_expected.to run.with_params([0, 1, 2], [3, 2]).and_raise_error(Puppet::ParseError, %r{index exceeds array size}) }
-
-    describe 'different range syntaxes' do
-      it { is_expected.to run.with_params([0, 1, 2], '0-2').and_return([0, 1, 2]) }
-      it { is_expected.to run.with_params([0, 1, 2], '0..2').and_return([0, 1, 2]) }
-      it { is_expected.to run.with_params([0, 1, 2], '0...2').and_return([0, 1]) }
-      it {
-        pending('fix this bounds check')
-        is_expected.to run.with_params([0, 1, 2], '0...3').and_return([0, 1, 2])
-      }
-    end
-  end
-end
diff --git a/spec/functions/values_spec.rb b/spec/functions/values_spec.rb
deleted file mode 100644
index b2c3e4b0..00000000
--- a/spec/functions/values_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'values', if: Puppet::Util::Package.versioncmp(Puppet.version, '5.5.0') < 0 do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the first.')
-    is_expected.to run.with_params({}, 'extra').and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params('').and_raise_error(Puppet::ParseError, %r{Requires hash to work with}) }
-  it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError, %r{Requires hash to work with}) }
-  it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{Requires hash to work with}) }
-  it { is_expected.to run.with_params({}).and_return([]) }
-  it { is_expected.to run.with_params('key' => 'value').and_return(['value']) }
-  it 'returns the array of values' do
-    result = subject.call([{ 'key1' => 'value1', 'key2' => 'value2', 'duplicate_value_key' => 'value2' }])
-    expect(result).to match_array(['value1', 'value2', 'value2'])
-  end
-
-  it 'runs with UTF8 and double byte characters' do
-    result = subject.call([{ 'かぎ' => '使用', 'ҝĕұ' => '√ẩŀứệ', 'ҝĕұďŭрļǐçằťè' => '√ẩŀứệ' }])
-    expect(result).to match_array(['使用', '√ẩŀứệ', '√ẩŀứệ'])
-  end
-end
diff --git a/spec/functions/xml_encode_spec.rb b/spec/functions/xml_encode_spec.rb
deleted file mode 100644
index 6337db51..00000000
--- a/spec/functions/xml_encode_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'stdlib::xml_encode' do
-  let(:string) { 'this is "my" complicated <String>' }
-
-  it 'exists' do
-    is_expected.not_to be_nil
-  end
-
-  describe 'for XML text' do
-    let(:expected_result) { 'this is "my" complicated &lt;String&gt;' }
-
-    context 'with `type` parameter not explicity set' do
-      it { is_expected.to run.with_params(string).and_return(expected_result) }
-    end
-
-    context 'with `type` parameter set to `text`' do
-      it { is_expected.to run.with_params(string, 'text').and_return(expected_result) }
-    end
-  end
-
-  describe 'for XML attributes' do
-    it { is_expected.to run.with_params(string, 'attr').and_return('"this is &quot;my&quot; complicated &lt;String&gt;"') }
-  end
-end
diff --git a/spec/functions/zip_spec.rb b/spec/functions/zip_spec.rb
deleted file mode 100644
index 77c7f943..00000000
--- a/spec/functions/zip_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'zip' do
-  it { is_expected.not_to eq(nil) }
-  it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it { is_expected.to run.with_params([]).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i) }
-  it {
-    pending('Current implementation ignores parameters after the third.')
-    is_expected.to run.with_params([], [], true, []).and_raise_error(Puppet::ParseError, %r{wrong number of arguments}i)
-  }
-  it { is_expected.to run.with_params([], []).and_return([]) }
-  it { is_expected.to run.with_params([1, 2, 3], [4, 5, 6]).and_return([[1, 4], [2, 5], [3, 6]]) }
-  it { is_expected.to run.with_params([1, 2, 3], [4, 5, 6], false).and_return([[1, 4], [2, 5], [3, 6]]) }
-  it { is_expected.to run.with_params([1, 2, 3], [4, 5, 6], true).and_return([1, 4, 2, 5, 3, 6]) }
-  it { is_expected.to run.with_params([1, 2, 'four'], [true, true, false]).and_return([[1, true], [2, true], ['four', false]]) }
-  it { is_expected.to run.with_params([1, 2, 3], [4, 5]).and_return([[1, 4], [2, 5], [3, nil]]) }
-  it { is_expected.to run.with_params('A string', [4, 5]).and_raise_error(Puppet::ParseError, %r{Requires array}i) }
-
-  context 'with UTF8 and double byte characters' do
-    it { is_expected.to run.with_params(['ầ', 'ь', 'ć'], ['đ', 'ề', 'ƒ']).and_return([['ầ', 'đ'], ['ь', 'ề'], ['ć', 'ƒ']]) }
-    it { is_expected.to run.with_params(['ペ', '含', '値'], ['ッ', '文', 'イ']).and_return([['ペ', 'ッ'], ['含', '文'], ['値', 'イ']]) }
-  end
-end
diff --git a/spec/monkey_patches/alias_should_to_must.rb b/spec/monkey_patches/alias_should_to_must.rb
deleted file mode 100644
index beb36bff..00000000
--- a/spec/monkey_patches/alias_should_to_must.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# frozen_string_literal: true
-
-require 'rspec'
-# class Object
-class Object
-  # This is necessary because the RAL has a 'should'
-  # method.
-  alias must should
-  alias must_not should_not
-end
diff --git a/spec/monkey_patches/publicize_methods.rb b/spec/monkey_patches/publicize_methods.rb
deleted file mode 100644
index 91eca2f6..00000000
--- a/spec/monkey_patches/publicize_methods.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-# frozen_string_literal: true
-
-# Some monkey-patching to allow us to test private methods.
-class Class
-  def publicize_methods(*methods)
-    saved_private_instance_methods = methods.empty? ? private_instance_methods : methods
-
-    class_eval { public(*saved_private_instance_methods) }
-    yield
-    class_eval { private(*saved_private_instance_methods) }
-  end
-end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
deleted file mode 100644
index 07db7342..00000000
--- a/spec/spec_helper.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-# frozen_string_literal: true
-
-RSpec.configure do |c|
-  c.mock_with :rspec
-end
-
-require 'puppetlabs_spec_helper/module_spec_helper'
-require 'rspec-puppet-facts'
-
-require 'spec_helper_local' if File.file?(File.join(File.dirname(__FILE__), 'spec_helper_local.rb'))
-
-include RspecPuppetFacts
-
-default_facts = {
-  puppetversion: Puppet.version,
-  facterversion: Facter.version,
-}
-
-default_fact_files = [
-  File.expand_path(File.join(File.dirname(__FILE__), 'default_facts.yml')),
-  File.expand_path(File.join(File.dirname(__FILE__), 'default_module_facts.yml')),
-]
-
-default_fact_files.each do |f|
-  next unless File.exist?(f) && File.readable?(f) && File.size?(f)
-
-  begin
-    default_facts.merge!(YAML.safe_load(File.read(f), [], [], true))
-  rescue => e
-    RSpec.configuration.reporter.message "WARNING: Unable to load #{f}: #{e}"
-  end
-end
-
-# read default_facts and merge them over what is provided by facterdb
-default_facts.each do |fact, value|
-  add_custom_fact fact, value
-end
-
-RSpec.configure do |c|
-  c.default_facts = default_facts
-  c.before :each do
-    # set to strictest setting for testing
-    # by default Puppet runs at warning level
-    Puppet.settings[:strict] = :warning
-    Puppet.settings[:strict_variables] = true
-  end
-  c.filter_run_excluding(bolt: true) unless ENV['GEM_BOLT']
-  c.after(:suite) do
-    RSpec::Puppet::Coverage.report!(0)
-  end
-
-  # Filter backtrace noise
-  backtrace_exclusion_patterns = [
-    %r{spec_helper},
-    %r{gems},
-  ]
-
-  if c.respond_to?(:backtrace_exclusion_patterns)
-    c.backtrace_exclusion_patterns = backtrace_exclusion_patterns
-  elsif c.respond_to?(:backtrace_clean_patterns)
-    c.backtrace_clean_patterns = backtrace_exclusion_patterns
-  end
-end
-
-# Ensures that a module is defined
-# @param module_name Name of the module
-def ensure_module_defined(module_name)
-  module_name.split('::').reduce(Object) do |last_module, next_module|
-    last_module.const_set(next_module, Module.new) unless last_module.const_defined?(next_module, false)
-    last_module.const_get(next_module, false)
-  end
-end
-
-# 'spec_overrides' from sync.yml will appear below this line
diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb
deleted file mode 100644
index 4ac8d7e0..00000000
--- a/spec/spec_helper_acceptance.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-# frozen_string_literal: true
-
-require 'puppet_litmus'
-require 'spec_helper_acceptance_local' if File.file?(File.join(File.dirname(__FILE__), 'spec_helper_acceptance_local.rb'))
-
-PuppetLitmus.configure!
diff --git a/spec/spec_helper_local.rb b/spec/spec_helper_local.rb
deleted file mode 100644
index 87729439..00000000
--- a/spec/spec_helper_local.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# frozen_string_literal: true
-
-# automatically load any shared examples or contexts
-Dir['./spec/support/**/*.rb'].sort.each { |f| require f }
-
-# HACK: to enable all the expect syntax (like allow_any_instance_of) in rspec-puppet examples
-RSpec::Mocks::Syntax.enable_expect(RSpec::Puppet::ManifestMatchers)
-
-RSpec.configure do |config|
-  # supply tests with a possibility to test for the future parser
-  config.add_setting :puppet_future
-  config.puppet_future = Puppet.version.to_f >= 4.0
-
-  config.before :each do
-    # Ensure that we don't accidentally cache facts and environment between
-    # test cases.  This requires each example group to explicitly load the
-    # facts being exercised with something like
-    # Facter.collection.loader.load(:ipaddress)
-    Facter.clear
-    Facter.clear_messages
-
-    RSpec::Mocks.setup
-  end
-
-  config.after :each do
-    RSpec::Mocks.verify
-    RSpec::Mocks.teardown
-  end
-end
-
-# Helper class to test handling of arguments which are derived from string
-class AlsoString < String
-end
diff --git a/spec/support/shared_data.rb b/spec/support/shared_data.rb
deleted file mode 100644
index e19f8248..00000000
--- a/spec/support/shared_data.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-module SharedData
-  IPV4_PATTERNS = [
-    '0.0.0.0',
-    '1.2.3.4',
-    '10.10.10.10',
-    '127.0.0.1',
-    '192.88.99.0',
-    '194.232.104.150',
-    '224.0.0.0',
-    '244.24.24.24',
-    '255.255.255.255',
-    '8.8.8.8',
-    '8.8.8.8/0',
-    '8.8.8.8/16',
-    '8.8.8.8/255.255.0.0',
-    '8.8.8.8/32',
-  ].freeze
-  IPV4_NEGATIVE_PATTERNS = [
-    '',
-    '0000',
-    '0.0.0.0.',
-    '0.0.0.0./0.0.0.0.',
-    '0.0.0.0./1',
-    '0.0.0.0.0',
-    '0.0.0.0/0.0.0.0.',
-    '0.0.0.256',
-    '0.0.0',
-    '1.2.3.4.5',
-    '1.2.3',
-    '10.010.10.10',
-    '2001:0db8:85a3:0000:0000:8a2e:0370:73342001:0db8:85a3:0000:0000:8a2e:0370:7334',
-    '4.4.4',
-    '77',
-    '9999.9999.9999.9999',
-    'affe::beef',
-    'nope',
-  ].freeze
-end
diff --git a/spec/type_aliases/absolute_path_spec.rb b/spec/type_aliases/absolute_path_spec.rb
deleted file mode 100644
index b4c9ca46..00000000
--- a/spec/type_aliases/absolute_path_spec.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Compat::Absolute_path' do
-  describe 'valid paths handling' do
-    ['C:/', 'C:\\', 'C:\\WINDOWS\\System32', 'C:/windows/system32', 'X:/foo/bar', 'X:\\foo\\bar', '\\\\host\\windows', '//host/windows', '/', '/var/tmp', '/var/opt/../lib/puppet',
-     '/var/opt//lib/puppet', '/var/ůťƒ8', '/var/ネット'].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'with garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-
-    context 'with relative paths' do
-      ['relative1', '.', '..', './foo', '../foo', 'etc/puppetlabs/puppet', 'opt/puppet/bin', 'relative\\windows', '\\var\\ůťƒ8', '\\var\\ネット'].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/array_spec.rb b/spec/type_aliases/array_spec.rb
deleted file mode 100644
index e47e5339..00000000
--- a/spec/type_aliases/array_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Compat::Array' do
-  describe 'accepts arrays' do
-    [
-      [],
-      ['one'],
-      [1],
-      [{}],
-      [[]],
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      '',
-      'one',
-      '1',
-      {},
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/base32_spec.rb b/spec/type_aliases/base32_spec.rb
deleted file mode 100644
index b882058b..00000000
--- a/spec/type_aliases/base32_spec.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Base32' do
-  describe 'valid handling' do
-    ['ASDASDDASD3453453', 'ASDASDDASD3453453=', 'ASDASDDASD3453453==', 'ASDASDDASD3453453===', 'ASDASDDASD3453453====', 'ASDASDDASD3453453=====', 'ASDASDDASD3453453======', 'asdasddasd3453453',
-     'asdasddasd3453453=', 'asdasddasd3453453==', 'asdasddasd3453453===', 'asdasddasd3453453====', 'asdasddasd3453453=====', 'asdasddasd3453453======'].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'garbage inputs' do
-      [
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        "\nASDASDDASD3453453",
-        "\nASDASDDASD3453453\n",
-        "ASDASDDASD3453453\n",
-        '',
-        'asdasd!@#$',
-        '=asdasd9879876876+/',
-        'asda=sd9879876876+/',
-        'asdaxsd9879876876+/===',
-        'asdads asdasd',
-        'asdasddasd3453453=======',
-        'asdaSddasd',
-        'asdasddasd1',
-        'asdasddasd9',
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/base64_spec.rb b/spec/type_aliases/base64_spec.rb
deleted file mode 100644
index 0f3d2e3d..00000000
--- a/spec/type_aliases/base64_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Base64' do
-  describe 'valid handling' do
-    ['asdasdASDSADA342386832/746+=', 'asdasdASDSADA34238683274/6+', 'asdasdASDSADA3423868327/46+=='].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'garbage inputs' do
-      [
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        "\nasdasdASDSADA342386832/746+=",
-        "\nasdasdASDSADA342386832/746+=\n",
-        "asdasdASDSADA342386832/746+=\n",
-        'asdasd!@#$',
-        '=asdasd9879876876+/',
-        'asda=sd9879876876+/',
-        'asdaxsd9879876876+/===',
-        'asdads asdasd',
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/bool_spec.rb b/spec/type_aliases/bool_spec.rb
deleted file mode 100644
index e295393d..00000000
--- a/spec/type_aliases/bool_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Compat::Bool' do
-  describe 'accepts booleans' do
-    [
-      true,
-      false,
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      [1],
-      [{}],
-      [true],
-      'true',
-      'false',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/compat__ip_address.rb b/spec/type_aliases/compat__ip_address.rb
deleted file mode 100644
index b6d3b1c0..00000000
--- a/spec/type_aliases/compat__ip_address.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Compat::Ip_address' do
-  describe 'accepts ipv4 and ipv6 addresses' do
-    [
-      '224.0.0.0',
-      '255.255.255.255',
-      '0.0.0.0',
-      '192.88.99.0',
-      '2001:0db8:85a3:0000:0000:8a2e:0370:7334',
-      'fa76:8765:34ac:0823:ab76:eee9:0987:1111',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-  describe 'rejects other values' do
-    [
-      nil,
-      [nil],
-      [nil, nil],
-      { 'foo' => 'bar' },
-      {},
-      '',
-      'nope',
-      '77',
-      '4.4.4',
-      '2001:0db8:85a3:000000:0000:8a2e:0370:7334',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/compat__ipv4_spec.rb b/spec/type_aliases/compat__ipv4_spec.rb
deleted file mode 100644
index 627fa354..00000000
--- a/spec/type_aliases/compat__ipv4_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Compat::Ipv4' do
-  describe 'accepts ipv4 addresses' do
-    SharedData::IPV4_PATTERNS.each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-  describe 'rejects other values' do
-    SharedData::IPV4_NEGATIVE_PATTERNS.each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/compat__ipv6_spec.rb b/spec/type_aliases/compat__ipv6_spec.rb
deleted file mode 100644
index 906a5764..00000000
--- a/spec/type_aliases/compat__ipv6_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Compat::Ipv6' do
-  describe 'accepts ipv6 addresses' do
-    [
-      '2001:0db8:85a3:0000:0000:8a2e:0370:7334',
-      'fa76:8765:34ac:0823:ab76:eee9:0987:1111',
-      'fe80:0000:0000:0000:0204:61ff:fe9d:f156',
-      'fe80:0:0:0:204:61ff:fe9d:f156',
-      'fe80::204:61ff:fe9d:f156',
-      'fe80:0:0:0:0204:61ff:254.157.241.86',
-      '::1',
-      'fe80::',
-      '2001::',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-  describe 'rejects other values' do
-    [
-      nil,
-      [nil],
-      [nil, nil],
-      { 'foo' => 'bar' },
-      {},
-      '',
-      'nope',
-      '77',
-      '4.4.4',
-      '2000:7334',
-      '::ffff:2.3.4',
-      '::ffff:257.1.2.3',
-      '::ffff:12345678901234567890.1.26',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/createresources_spec.rb b/spec/type_aliases/createresources_spec.rb
deleted file mode 100644
index fac70bb7..00000000
--- a/spec/type_aliases/createresources_spec.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::CreateResources' do
-  it { is_expected.to allow_value({ 'name' => { 'ensure' => 'present', 'key' => 1 } }) }
-end
diff --git a/spec/type_aliases/datasize_spec.rb b/spec/type_aliases/datasize_spec.rb
deleted file mode 100644
index 0f469cc2..00000000
--- a/spec/type_aliases/datasize_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Datasize' do
-  describe 'valid handling' do
-    ['42b', '42B', '42k', '42K', '42m', '42M', '42g', '42G', '42t', '42T',
-     '42kb', '42Kb', '42mb', '42Mb', '42gb', '42Gb', '42Tb', '42Tb',
-     '42kB', '42KB', '42mB', '42MB', '42gB', '42GB', '42TB', '42TB'].each do |value|
-       describe value.inspect do
-         it { is_expected.to allow_value(value) }
-       end
-     end
-  end
-
-  describe 'invalid path handling' do
-    context 'garbage inputs' do
-      [
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        1024,
-        '1024',
-        '1024byte',
-        '1024bit',
-        '1024Gig',
-        '1024Meg',
-        '1024BM',
-        '1024bg',
-        '1024Meb',
-        'asdaSddasd',
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/email_spec.rb b/spec/type_aliases/email_spec.rb
deleted file mode 100644
index add96eef..00000000
--- a/spec/type_aliases/email_spec.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-# Test cases are a combination of the test cases used in MediaWiki[1] and a
-# Reference found on line[2].  Some of the test cases in the later list have
-# been dropped as the regex used in the HTML5 specification[3] (and in this type)
-# allows for wilful violation of the RFC's
-#
-# [1]https://github.com/wikimedia/mediawiki/blob/master/tests/phpunit/integration \
-#   /includes/SanitizerValidateEmailTest.php
-# [2]https://gist.github.com/cjaoude/fd9910626629b53c4d25
-# [3]https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
-
-describe 'Stdlib::Email' do
-  describe 'valid handling' do
-    ['email@example.com',
-     'EMAIL@example.com',
-     'email@EXAMPLE.com',
-     'email@192.0.2.1',
-     '_______@example.com',
-     'firstname.lastname@example.com',
-     'firstname+lastname@example.com',
-     'firstname-lastname@example.com',
-     '1234567890@example.com',
-     'email@subdomain.example.com',
-     'email@example-one.com',
-     'email@example.name',
-     'email@example.museum',
-     'email@example.co.jp',
-     'email@example',
-     'user@example.1234',
-     'user@a'].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-  describe 'invalid handling' do
-    ['plainaddress',
-     '#@%^%#$@#$@#.com',
-     '@example.com',
-     ' email@example.com',
-     'email@example.com ',
-     "email@example.com\t",
-     'user email@example.com',
-     'useremail@example com',
-     'user,email@example.com',
-     'useremail@example,com',
-     'useremail@.',
-     'useremail@.example.org',
-     'useremail@a......',
-     'useràexample.com',
-     'Joe Smith <email@example.com>',
-     'email.example.com',
-     'email@example@example.com',
-     'あいうえお@example.com',
-     'email@example.com (Joe Smith)',
-     'email@-example.com',
-     'email@example..com',
-     'random stuff multiline
-     valid@email.com
-     more random stuff $^*!',
-     '”(),:;<>[\]@example.com',
-     'just”not”right@example.com',
-     'this\ is"really"not\allowed@example.com'].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/filemode_spec.rb b/spec/type_aliases/filemode_spec.rb
deleted file mode 100644
index 56b5d805..00000000
--- a/spec/type_aliases/filemode_spec.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-# coding: utf-8
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Filemode' do
-  describe 'valid modes' do
-    [
-      '7',
-      '12',
-      '666',
-
-      '0000',
-      '0644',
-      '1644',
-      '2644',
-      '4644',
-      '0123',
-      '0777',
-
-      'a=,o-r,u+X,g=w',
-      'a=Xr,+0',
-      'u=rwx,g+rX',
-      'u+s,g-s',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid modes' do
-    context 'with garbage inputs' do
-      [
-        true,
-        false,
-        :keyword,
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        "\n0644",
-        "\n0644\n",
-        "0644\n",
-        'ネット',
-        '55555',
-        '0x123',
-        '0649',
-
-        '=8,X',
-        'x=r,a=wx',
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/filesource_spec.rb b/spec/type_aliases/filesource_spec.rb
deleted file mode 100644
index 38e533ca..00000000
--- a/spec/type_aliases/filesource_spec.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Filesource' do
-  describe 'valid handling' do
-    [
-      'https://hello.com',
-      'https://notcreative.org',
-      'https://canstillaccepthttps.co.uk',
-      'http://anhttp.com',
-      'http://runningoutofideas.gov',
-      'file:///hello/bla',
-      'file:///foo/bar.log',
-      'puppet:///modules/foo/bar.log',
-      'puppet://pm.example.com/modules/foo/bar.log',
-      'puppet://192.0.2.1/modules/foo/bar.log',
-      '/usr2/username/bin:/usr/local/bin:/usr/bin:.',
-      'C:/',
-      'C:\\',
-      'C:\\WINDOWS\\System32',
-      'C:/windows/system32',
-      'X:/foo/bar',
-      'X:\\foo\\bar',
-      '\\\\host\\windows',
-      '//host/windows',
-      '/var/tmp',
-      '/var/opt/../lib/puppet',
-      'puppet:///a_custom_mount_point/foo/bar/foobar.conf',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        "\nfile:///foo/bar.log",
-        "\nfile:///foo/bar.log\n",
-        "file:///foo/bar.log\n",
-        "\npuppet:///modules/foo/bar.log",
-        "\npuppet:///modules/foo/bar.log\n",
-        "puppet:///modules/foo/bar.log\n",
-        '*/Users//nope',
-        '\\Users/hc/wksp/stdlib',
-        'C:noslashes',
-        '\\var\\tmp',
-        'puppet://bob@pm.example.com/modules/foo/bar.log',
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/float_spec.rb b/spec/type_aliases/float_spec.rb
deleted file mode 100644
index 4a1c52f4..00000000
--- a/spec/type_aliases/float_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Compat::Float' do
-  describe 'accepts floats' do
-    [
-      3.7,
-      '3.7',
-      -3.7,
-      '-342.2315e-12',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [true, 'true', false, 'false', 'iAmAString', '1test', '1 test', 'test 1', 'test 1 test', {}, { 'key' => 'value' }, { 1 => 2 }, '', :undef, 'x', 3, '3', -3, '-3'].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/fqdn_spec.rb b/spec/type_aliases/fqdn_spec.rb
deleted file mode 100644
index 09ed393b..00000000
--- a/spec/type_aliases/fqdn_spec.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Fqdn' do
-  describe 'valid handling' do
-    ['example', 'example.com', 'www.example.com'].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'garbage inputs' do
-      [
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        "\nexample",
-        "\nexample\n",
-        "example\n",
-        '2001:DB8::1',
-        'www www.example.com',
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/hash_spec.rb b/spec/type_aliases/hash_spec.rb
deleted file mode 100644
index 2e5bb91e..00000000
--- a/spec/type_aliases/hash_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Compat::Hash' do
-  describe 'accepts hashes' do
-    [
-      {},
-      { 'one' => 'two' },
-      { 'wan' => 3 },
-      { '001' => 'helly' },
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-  describe 'rejects other values' do
-    [
-      '',
-      'one',
-      '1',
-      [],
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/host_spec.rb b/spec/type_aliases/host_spec.rb
deleted file mode 100644
index cfd23ee2..00000000
--- a/spec/type_aliases/host_spec.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Host' do
-  describe 'valid handling' do
-    ['example', 'example.com', 'www.example.com', '2001:0db8:85a3:0000:0000:8a2e:0370:7334', 'fa76:8765:34ac:0823:ab76:eee9:0987:1111', '2001:0db8::1', '224.0.0.0', '255.255.255.255',
-     '0.0.0.0', '192.88.99.0'].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid handling' do
-    context 'garbage inputs' do
-      [
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        'www www.example.com',
-        'bob@example.com',
-        '%.example.com',
-        '2001:0d8',
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/httpstatus_spec.rb b/spec/type_aliases/httpstatus_spec.rb
deleted file mode 100644
index 2f5d53a2..00000000
--- a/spec/type_aliases/httpstatus_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::HttpStatus' do
-  describe 'valid HTTP Status' do
-    [
-      200,
-      302,
-      404,
-      418,
-      503,
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        'https',
-        '199',
-        600,
-        1_000,
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/httpsurl_spec.rb b/spec/type_aliases/httpsurl_spec.rb
deleted file mode 100644
index e1ac0278..00000000
--- a/spec/type_aliases/httpsurl_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::HTTPSUrl' do
-  describe 'valid handling' do
-    ['https://hello.com', 'https://notcreative.org', 'https://notexciting.co.uk', 'https://graphemica.com/❤', 'https://graphemica.com/緩', 'HTTPS://FOO.com'].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'with garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        "\nhttps://hello.com",
-        "\nhttps://hello.com\n",
-        "https://hello.com\n",
-        'httds://notquiteright.org',
-        'hptts:/nah',
-        'https;//notrightbutclose.org',
-        'http://graphemica.com/❤',
-        'http://graphemica.com/緩',
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/httpurl_spec.rb b/spec/type_aliases/httpurl_spec.rb
deleted file mode 100644
index 97c18a96..00000000
--- a/spec/type_aliases/httpurl_spec.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::HTTPUrl' do
-  describe 'valid handling' do
-    ['https://hello.com', 'https://notcreative.org', 'https://canstillaccepthttps.co.uk', 'http://anhttp.com', 'http://runningoutofideas.gov',
-     'http://', 'http://graphemica.com/❤', 'http://graphemica.com/緩', 'HTTPS://FOO.COM', 'HTTP://BAR.COM'].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'with garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        "\nhttp://hello.com",
-        "\nhttp://hello.com\n",
-        "http://hello.com\n",
-        'httds://notquiteright.org',
-        'hptts:/nah',
-        'https;//notrightbutclose.org',
-        'hts://graphemica.com/❤',
-        'https:graphemica.com/緩',
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/integer_spec.rb b/spec/type_aliases/integer_spec.rb
deleted file mode 100644
index 76ec2675..00000000
--- a/spec/type_aliases/integer_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Compat::Integer' do
-  describe 'accepts integers' do
-    [
-      3,
-      '3',
-      -3,
-      '-3',
-      "123\nfoo",
-      "foo\n123",
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    ["foo\nbar", true, 'true', false, 'false', 'iAmAString', '1test', '1 test', 'test 1', 'test 1 test',
-     {}, { 'key' => 'value' }, { 1 => 2 }, '', :undef, 'x', 3.7, '3.7', -3.7, '-342.2315e-12'].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/ip_address_nosubnet_spec.rb b/spec/type_aliases/ip_address_nosubnet_spec.rb
deleted file mode 100644
index a87e1499..00000000
--- a/spec/type_aliases/ip_address_nosubnet_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::IP::Address::Nosubnet' do
-  describe 'accepts ipv4 and ipv6 addresses without subnets' do
-    [
-      '224.0.0.0',
-      '255.255.255.255',
-      '0.0.0.0',
-      '192.88.99.0',
-      '2001:0db8:85a3:0000:0000:8a2e:0370:7334',
-      'fa76:8765:34ac:0823:ab76:eee9:0987:1111',
-      '127.0.0.1',
-      '8.8.4.4',
-      '52.10.10.141',
-      'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210',
-      'FF01:0:0:0:0:0:0:101',
-      'FF01::101',
-      '::',
-      '12AB::CD30:192.168.0.1',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      '10.1.240.4/24',
-      'FF01:0:0:0:0:0:0:101/32',
-      'FF01::101/60',
-      'nope',
-      '77',
-      '4.4.4',
-      '2001:0db8:85a3:000000:0000:8a2e:0370:7334',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/ip_address_spec.rb b/spec/type_aliases/ip_address_spec.rb
deleted file mode 100644
index 08d9917b..00000000
--- a/spec/type_aliases/ip_address_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::IP::Address' do
-  describe 'accepts ipv4 and ipv6 addresses' do
-    [
-      '224.0.0.0',
-      '255.255.255.255',
-      '0.0.0.0',
-      '192.88.99.0',
-      '2001:0db8:85a3:0000:0000:8a2e:0370:7334',
-      'fa76:8765:34ac:0823:ab76:eee9:0987:1111',
-      '127.0.0.1',
-      '8.8.4.4',
-      '10.1.240.4/24',
-      '52.10.10.141',
-      'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210',
-      'FF01:0:0:0:0:0:0:101',
-      'FF01::101',
-      'FF01:0:0:0:0:0:0:101/32',
-      'FF01::101/60',
-      '::',
-      '12AB::CD30:192.168.0.1',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      'nope',
-      '77',
-      '4.4.4',
-      '2001:0db8:85a3:000000:0000:8a2e:0370:7334',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/ip_address_v4_nosubnet_spec.rb b/spec/type_aliases/ip_address_v4_nosubnet_spec.rb
deleted file mode 100644
index f4e75037..00000000
--- a/spec/type_aliases/ip_address_v4_nosubnet_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::IP::Address::V4::Nosubnet' do
-  describe 'accepts ipv4 addresses without subnets' do
-    [
-      '127.0.0.1',
-      '8.8.4.4',
-      '52.10.10.141',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      '10.1.240.4/24',
-      '192.168.1',
-      'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210',
-      '12AB::CD30:192.168.0.1',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/ip_address_v4_spec.rb b/spec/type_aliases/ip_address_v4_spec.rb
deleted file mode 100644
index 8036f0ca..00000000
--- a/spec/type_aliases/ip_address_v4_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::IP::Address::V4' do
-  describe 'accepts ipv4 addresses' do
-    [
-      '127.0.0.1',
-      '8.8.4.4',
-      '10.1.240.4/24',
-      '52.10.10.141',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      '192.168.1',
-      'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210',
-      '12AB::CD30:192.168.0.1',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/ip_address_v6_alternative_spec.rb b/spec/type_aliases/ip_address_v6_alternative_spec.rb
deleted file mode 100644
index 74cfdb7b..00000000
--- a/spec/type_aliases/ip_address_v6_alternative_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::IP::Address::V6::Alternative' do
-  describe 'accepts ipv6 addresses in alternative format' do
-    [
-      '0:0:0:0:0:0:13.1.68.3',
-      '0:0:0:0:0:FFFF:129.144.52.38',
-      '0:0:0:0:0:FFFF:129.144.52.38/60',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      'nope',
-      '127.0.0.1',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/ip_address_v6_cidr_spec.rb b/spec/type_aliases/ip_address_v6_cidr_spec.rb
deleted file mode 100644
index 246fe54b..00000000
--- a/spec/type_aliases/ip_address_v6_cidr_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::IP::Address::V6::CIDR' do
-  describe 'accepts ipv6 addresses in cidr format' do
-    [
-      'FF01:0:0:0:0:0:0:101/32',
-      'FF01::101/60',
-      '::/0',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210',
-      'FF01:0:0:0:0:0:0:101',
-      'FF01::101',
-      '12AB::CD30:192.168.0.1',
-      '127.0.0.1',
-      '10.1.240.4/24',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/ip_address_v6_compressed_spec.rb b/spec/type_aliases/ip_address_v6_compressed_spec.rb
deleted file mode 100644
index 1ddd9c4d..00000000
--- a/spec/type_aliases/ip_address_v6_compressed_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::IP::Address::V6::Compressed' do
-  describe 'accepts ipv6 addresses in compressed format' do
-    [
-      '1080::8:800:200C:417A',
-      '1080::8:800:200C:417A/60',
-      'FF01::101',
-      '::1',
-      '::',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      'nope',
-      '127.0.0.1',
-      'FEDC::BA98:7654:3210::3210',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/ip_address_v6_full_spec.rb b/spec/type_aliases/ip_address_v6_full_spec.rb
deleted file mode 100644
index 70aac9ce..00000000
--- a/spec/type_aliases/ip_address_v6_full_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::IP::Address::V6::Full' do
-  describe 'accepts ipv6 addresses in full format' do
-    [
-      'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210',
-      'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210/60',
-      '1080:0:0:0:8:800:200C:417A',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      'nope',
-      '127.0.0.1',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/ip_address_v6_nosubnet_alternative_spec.rb b/spec/type_aliases/ip_address_v6_nosubnet_alternative_spec.rb
deleted file mode 100644
index 4a01b7f5..00000000
--- a/spec/type_aliases/ip_address_v6_nosubnet_alternative_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::IP::Address::V6::Nosubnet::Alternative' do
-  describe 'accepts ipv6 addresses in alternative format without subnets' do
-    [
-      '0:0:0:0:0:0:13.1.68.3',
-      '0:0:0:0:0:FFFF:129.144.52.38',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      '0:0:0:0:0:FFFF:129.144.52.38/60',
-      'nope',
-      '127.0.0.1',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/ip_address_v6_nosubnet_compressed_spec.rb b/spec/type_aliases/ip_address_v6_nosubnet_compressed_spec.rb
deleted file mode 100644
index b6b7fa89..00000000
--- a/spec/type_aliases/ip_address_v6_nosubnet_compressed_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::IP::Address::V6::Nosubnet::Compressed' do
-  describe 'accepts ipv6 addresses in compressed format without subnets' do
-    [
-      '1080::8:800:200C:417A',
-      'FF01::101',
-      '::1',
-      '::',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      '1080::8:800:200C:417A/60',
-      'nope',
-      '127.0.0.1',
-      'FEDC::BA98:7654:3210::3210',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/ip_address_v6_nosubnet_full_spec.rb b/spec/type_aliases/ip_address_v6_nosubnet_full_spec.rb
deleted file mode 100644
index 8272d4d2..00000000
--- a/spec/type_aliases/ip_address_v6_nosubnet_full_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::IP::Address::V6::Nosubnet::Full' do
-  describe 'accepts ipv6 addresses in full format without subnets' do
-    [
-      'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210',
-      '1080:0:0:0:8:800:200C:417A',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210/60',
-      'nope',
-      '127.0.0.1',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/ip_address_v6_spec.rb b/spec/type_aliases/ip_address_v6_spec.rb
deleted file mode 100644
index 36e9ef7e..00000000
--- a/spec/type_aliases/ip_address_v6_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::IP::Address::V6' do
-  describe 'accepts ipv6 addresses' do
-    [
-      'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210',
-      'FF01:0:0:0:0:0:0:101',
-      'FF01::101',
-      'FF01:0:0:0:0:0:0:101/32',
-      'FF01::101/60',
-      '::',
-      '12AB::CD30:192.168.0.1',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      '127.0.0.1',
-      '10.1.240.4/24',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/mac_spec.rb b/spec/type_aliases/mac_spec.rb
deleted file mode 100644
index 492b07cd..00000000
--- a/spec/type_aliases/mac_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::MAC' do
-  describe 'valid handling' do
-    [
-      '00:a0:1f:12:7f:a0',
-      '00:A0:1F:12:7F:A0',
-      '00-A0-1F-12-7F-A0',
-      '80:00:02:09:fe:80:00:00:00:00:00:00:00:24:65:ff:ff:91:a3:12',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'with garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        'one',
-        '00:00:00:00:00:0g',
-        "\n00:a0:1f:12:7f:a0",
-        "\n00:a0:1f:12:7f:a0\n",
-        "00:a0:1f:12:7f:a0\n",
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/numeric_spec.rb b/spec/type_aliases/numeric_spec.rb
deleted file mode 100644
index 31e57a89..00000000
--- a/spec/type_aliases/numeric_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Compat::Numeric' do
-  describe 'accepts numerics' do
-    [
-      3,
-      '3',
-      -3,
-      '-3',
-      3.7,
-      '3.7',
-      -3.7,
-      '-342.2315e-12',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [true, 'true', false, 'false', 'iAmAString', '1test', '1 test', 'test 1', 'test 1 test', {}, { 'key' => 'value' }, { 1 => 2 }, '', :undef, 'x'].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/objectstore_gsuri_spec.rb b/spec/type_aliases/objectstore_gsuri_spec.rb
deleted file mode 100644
index d75812e1..00000000
--- a/spec/type_aliases/objectstore_gsuri_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::ObjectStore::GSUri' do
-  describe 'accepts case-sensitive google cloud gs uris' do
-    [
-      'gs://mybucket/myfile.csv',
-      'gs://bucket/path/to/file.tar.gz',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      '',
-      "\ngs://mybucket/myfile.csv",
-      "\ngs://mybucket/myfile.csv\n",
-      "gs://mybucket/myfile.csv\n",
-      'GS://mybucket/myfile.csv',
-      5,
-      'gs//mybucket/myfile.csv',
-      'gs:/mybucket/myfile.csv',
-      'gs:mybucket/myfile.csv',
-      'gs-mybucket/myfile.csv',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/objectstore_s3uri_spec.rb b/spec/type_aliases/objectstore_s3uri_spec.rb
deleted file mode 100644
index 4c774ed9..00000000
--- a/spec/type_aliases/objectstore_s3uri_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::ObjectStore::S3Uri' do
-  describe 'accepts case-sensitive amazon web services s3 uris' do
-    [
-      's3://bucket-name/path',
-      's3://bucket/path/to/file.txt',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      '',
-      "\ns3://bucket-name/path",
-      "\ns3://bucket-name/path\n",
-      "s3://bucket-name/path\n",
-      'S3://bucket-name/path',
-      3,
-      's3:/bucket-name/path',
-      's3//bucket-name/path',
-      's3:bucket-name/path',
-      's3-bucket-name/path',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/objectstore_spec.rb b/spec/type_aliases/objectstore_spec.rb
deleted file mode 100644
index f5780e65..00000000
--- a/spec/type_aliases/objectstore_spec.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::ObjectStore' do
-  describe 'accepts case-sensitive google cloud gs or amazon web services s3 uris' do
-    [
-      's3://bucket-name/path',
-      's3://bucket/path/to/file.txt',
-      'gs://mybucket/myfile.csv',
-      'gs://bucket/path/to/file.tar.gz',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      '',
-      'S3://bucket/path',
-      'GS://bucket/path',
-      5,
-      3,
-      'gs//bucket/path/to/file',
-      's3//bucket/path/to/file',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/port__dynamic_spec.rb b/spec/type_aliases/port__dynamic_spec.rb
deleted file mode 100644
index 69cb0190..00000000
--- a/spec/type_aliases/port__dynamic_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Port::Ephemeral' do
-  describe 'valid ephemeral port' do
-    [
-      49_152,
-      51_337,
-      65_000,
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        'https',
-        '443',
-        -1,
-        80,
-        443,
-        1023,
-        1337,
-        8080,
-        28_080,
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/port__privileged_spec.rb b/spec/type_aliases/port__privileged_spec.rb
deleted file mode 100644
index c09bd2bc..00000000
--- a/spec/type_aliases/port__privileged_spec.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Port::Privileged' do
-  describe 'valid ports' do
-    [
-      80,
-      443,
-      1023,
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        'https',
-        '443',
-        -1,
-        1337,
-        1024,
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/port__unprivileged_spec.rb b/spec/type_aliases/port__unprivileged_spec.rb
deleted file mode 100644
index 16c63463..00000000
--- a/spec/type_aliases/port__unprivileged_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Port::Unprivileged' do
-  describe 'valid unprivilegedport' do
-    [
-      1024,
-      1337,
-      65_000,
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        'https',
-        '443',
-        -1,
-        80,
-        443,
-        1023,
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/port__user_spec.rb b/spec/type_aliases/port__user_spec.rb
deleted file mode 100644
index a86ff8e4..00000000
--- a/spec/type_aliases/port__user_spec.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Port::User' do
-  describe 'valid user' do
-    [
-      1024,
-      1337,
-      49_151,
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        'https',
-        '443',
-        -1,
-        80,
-        443,
-        1023,
-        49_152,
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/port_spec.rb b/spec/type_aliases/port_spec.rb
deleted file mode 100644
index 3ed3a8d1..00000000
--- a/spec/type_aliases/port_spec.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Port' do
-  describe 'valid ports' do
-    [
-      80,
-      443,
-      1337,
-      65_000,
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        'https',
-        '443',
-        -1,
-        65_536,
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/string_spec.rb b/spec/type_aliases/string_spec.rb
deleted file mode 100644
index d977d32f..00000000
--- a/spec/type_aliases/string_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Compat::String' do
-  describe 'accepts strings' do
-    [
-      '',
-      'one',
-      nil,
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'rejects other values' do
-    [
-      [],
-      {},
-      1,
-      true,
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.not_to allow_value(value) }
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/unixpath_spec.rb b/spec/type_aliases/unixpath_spec.rb
deleted file mode 100644
index 2ec64159..00000000
--- a/spec/type_aliases/unixpath_spec.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Unixpath' do
-  describe 'valid handling' do
-    ['/usr2/username/bin:/usr/local/bin:/usr/bin:.', '/var/tmp', '/Users/helencampbell/workspace/puppetlabs-stdlib', '/var/ůťƒ8', '/var/ネット', '/var//tmp', '/var/../tmp'].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'with garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        "\n/var/tmp",
-        "\n/var/tmp\n",
-        "/var/tmp\n",
-        'C:/whatever',
-        '\\var\\tmp',
-        '\\Users/hc/wksp/stdlib',
-        '*/Users//nope',
-        "var\ůťƒ8",
-        "var\ネット",
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/windowspath_spec.rb b/spec/type_aliases/windowspath_spec.rb
deleted file mode 100644
index f8bd1cc2..00000000
--- a/spec/type_aliases/windowspath_spec.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Windowspath' do
-  describe 'valid handling' do
-    ['C:\\', 'C:\\WINDOWS\\System32', 'C:/windows/system32', 'X:/foo/bar', 'X:\\foo\\bar', '\\\\host\\windows', 'X:/var/ůťƒ8', 'X:/var/ネット'].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid path handling' do
-    context 'with garbage inputs' do
-      [
-        nil,
-        [nil],
-        [nil, nil],
-        { 'foo' => 'bar' },
-        {},
-        "\nC:\\",
-        "\nC:\\\n",
-        "C:\\\n",
-        '',
-        'httds://notquiteright.org',
-        '/usr2/username/bin:/usr/local/bin:/usr/bin:.',
-        'C;//notright/here',
-        'C:noslashes',
-        'C:ネット',
-        'C:ůťƒ8',
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/type_aliases/yes_no_spec.rb b/spec/type_aliases/yes_no_spec.rb
deleted file mode 100644
index b61d10a7..00000000
--- a/spec/type_aliases/yes_no_spec.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-# coding: utf-8
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'Stdlib::Yes_no' do
-  describe 'valid types' do
-    [
-      'yes',
-      'no',
-      'YES',
-      'Yes',
-      'NO',
-      'No',
-    ].each do |value|
-      describe value.inspect do
-        it { is_expected.to allow_value(value) }
-      end
-    end
-  end
-
-  describe 'invalid types' do
-    context 'with garbage inputs' do
-      [
-        true,
-        false,
-        :keyword,
-        nil,
-        ['yes', 'no'],
-        { 'foo' => 'bar' },
-        {},
-        '',
-        'ネット',
-        '55555',
-        '0x123',
-        'yess',
-        'nooo',
-      ].each do |value|
-        describe value.inspect do
-          it { is_expected.not_to allow_value(value) }
-        end
-      end
-    end
-  end
-end
diff --git a/spec/unit/facter/package_provider_spec.rb b/spec/unit/facter/package_provider_spec.rb
deleted file mode 100644
index 3e75c287..00000000
--- a/spec/unit/facter/package_provider_spec.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require 'puppet/type'
-require 'puppet/type/package'
-
-describe 'package_provider', type: :fact do
-  before(:each) { Facter.clear }
-  after(:each) { Facter.clear }
-
-  ['4.2.2', '3.7.1 (Puppet Enterprise 3.2.1)'].each do |puppetversion|
-    describe "on puppet ''#{puppetversion}''" do
-      before :each do
-        allow(Facter).to receive(:value).and_return(puppetversion)
-      end
-
-      context 'when darwin' do
-        it 'returns pkgdmg' do
-          provider = Puppet::Type.type(:package).provider(:pkgdmg)
-          allow(Puppet::Type.type(:package)).to receive(:defaultprovider).and_return(provider)
-
-          expect(Facter.fact(:package_provider).value).to eq('pkgdmg')
-        end
-      end
-
-      context 'when centos 7' do
-        it 'returns yum' do
-          provider = Puppet::Type.type(:package).provider(:yum)
-          allow(Puppet::Type.type(:package)).to receive(:defaultprovider).and_return(provider)
-
-          expect(Facter.fact(:package_provider).value).to eq('yum')
-        end
-      end
-
-      context 'when ubuntu' do
-        it 'returns apt' do
-          provider = Puppet::Type.type(:package).provider(:apt)
-          allow(Puppet::Type.type(:package)).to receive(:defaultprovider).and_return(provider)
-
-          expect(Facter.fact(:package_provider).value).to eq('apt')
-        end
-      end
-    end
-  end
-end
diff --git a/spec/unit/facter/pe_version_spec.rb b/spec/unit/facter/pe_version_spec.rb
deleted file mode 100644
index e152548f..00000000
--- a/spec/unit/facter/pe_version_spec.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'PE Version specs' do
-  # we mock calls for the puppetversion fact, it is not normal to expect nil responses when mocking.
-  RSpec::Mocks.configuration.allow_message_expectations_on_nil = true
-  context 'when puppetversion is nil' do
-    before :each do
-      allow(Facter.fact(:puppetversion)).to receive(:value).and_return(nil)
-    end
-
-    it 'puppetversion is nil' do
-      expect(Facter.fact(:puppetversion).value).to be_nil
-    end
-
-    it 'pe_version is nil' do
-      expect(Facter.fact(:pe_version).value).to be_nil
-    end
-  end
-
-  context 'when PE is installed' do
-    ['2.6.1', '2.10.300'].each do |version|
-      puppetversion = "2.7.19 (Puppet Enterprise #{version})"
-      context "puppetversion => #{puppetversion}" do
-        before :each do
-          allow(Facter).to receive(:value).with(anything).and_call_original
-          allow(Facter).to receive(:value).with('puppetversion').and_return(puppetversion)
-        end
-
-        (major, minor, patch) = version.split('.')
-
-        it 'returns true' do
-          expect(Facter.fact(:is_pe).value).to eq(true)
-        end
-
-        it "has a version of #{version}" do
-          expect(Facter.fact(:pe_version).value).to eq(version)
-        end
-
-        it "has a major version of #{major}" do
-          expect(Facter.fact(:pe_major_version).value).to eq(major)
-        end
-
-        it "has a minor version of #{minor}" do
-          expect(Facter.fact(:pe_minor_version).value).to eq(minor)
-        end
-
-        it "has a patch version of #{patch}" do
-          expect(Facter.fact(:pe_patch_version).value).to eq(patch)
-        end
-      end
-    end
-  end
-
-  context 'when PE is not installed' do
-    before :each do
-      allow(Facter.fact(:puppetversion)).to receive(:value).and_return('2.7.19')
-    end
-
-    it 'is_pe is false' do
-      expect(Facter.fact(:is_pe).value).to eq(false)
-    end
-
-    it 'pe_version is nil' do
-      expect(Facter.fact(:pe_version).value).to be_nil
-    end
-
-    it 'pe_major_version is nil' do
-      expect(Facter.fact(:pe_major_version).value).to be_nil
-    end
-
-    it 'pe_minor_version is nil' do
-      expect(Facter.fact(:pe_minor_version).value).to be_nil
-    end
-
-    it 'has a patch version' do
-      expect(Facter.fact(:pe_patch_version).value).to be_nil
-    end
-  end
-end
diff --git a/spec/unit/facter/root_home_spec.rb b/spec/unit/facter/root_home_spec.rb
deleted file mode 100644
index 5421f3e6..00000000
--- a/spec/unit/facter/root_home_spec.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require 'facter/root_home'
-describe 'Root Home Specs' do
-  describe Facter::Util::RootHome do
-    context 'when solaris' do
-      let(:root_ent) { 'root:x:0:0:Super-User:/:/sbin/sh' }
-      let(:expected_root_home) { '/' }
-
-      it 'returns /' do
-        expect(Facter::Util::Resolution).to receive(:exec).with('getent passwd root').and_return(root_ent)
-        expect(described_class.returnt_root_home).to eq(expected_root_home)
-      end
-    end
-    context 'when linux' do
-      let(:root_ent) { 'root:x:0:0:root:/root:/bin/bash' }
-      let(:expected_root_home) { '/root' }
-
-      it 'returns /root' do
-        expect(Facter::Util::Resolution).to receive(:exec).with('getent passwd root').and_return(root_ent)
-        expect(described_class.returnt_root_home).to eq(expected_root_home)
-      end
-    end
-    context 'when windows' do
-      it 'is nil on windows' do
-        expect(Facter::Util::Resolution).to receive(:exec).with('getent passwd root').and_return(nil)
-        expect(described_class.returnt_root_home).to be_nil
-      end
-    end
-  end
-
-  describe 'root_home', type: :fact do
-    before(:each) { Facter.clear }
-    after(:each) { Facter.clear }
-
-    context 'when macosx' do
-      before(:each) do
-        allow(Facter.fact(:kernel)).to receive(:value).and_return('Darwin')
-        allow(Facter.fact(:osfamily)).to receive(:value).and_return('Darwin')
-      end
-      let(:expected_root_home) { '/var/root' }
-
-      sample_dscacheutil = File.read(fixtures('dscacheutil', 'root'))
-
-      it 'returns /var/root' do
-        allow(Facter::Util::Resolution).to receive(:exec).with('dscacheutil -q user -a name root').and_return(sample_dscacheutil)
-        expect(Facter.fact(:root_home).value).to eq(expected_root_home)
-      end
-    end
-
-    context 'when aix' do
-      before(:each) do
-        allow(Facter.fact(:kernel)).to receive(:value).and_return('AIX')
-        allow(Facter.fact(:osfamily)).to receive(:value).and_return('AIX')
-      end
-      let(:expected_root_home) { '/root' }
-
-      sample_lsuser = File.read(fixtures('lsuser', 'root'))
-
-      it 'returns /root' do
-        allow(Facter::Util::Resolution).to receive(:exec).with('lsuser -c -a home root').and_return(sample_lsuser)
-        expect(Facter.fact(:root_home).value).to eq(expected_root_home)
-      end
-    end
-  end
-end
diff --git a/spec/unit/facter/service_provider_spec.rb b/spec/unit/facter/service_provider_spec.rb
deleted file mode 100644
index 4d7d4e10..00000000
--- a/spec/unit/facter/service_provider_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require 'puppet/type'
-require 'puppet/type/service'
-
-describe 'service_provider', type: :fact do
-  before(:each) { Facter.clear }
-  after(:each) { Facter.clear }
-
-  context 'when macosx' do
-    it 'returns launchd' do
-      provider = Puppet::Type.type(:service).provider(:launchd)
-      allow(Puppet::Type.type(:service)).to receive(:defaultprovider).and_return(provider)
-
-      expect(Facter.fact(:service_provider).value).to eq('launchd')
-    end
-  end
-
-  context 'when systemd' do
-    it 'returns systemd' do
-      provider = Puppet::Type.type(:service).provider(:systemd)
-      allow(Puppet::Type.type(:service)).to receive(:defaultprovider).and_return(provider)
-
-      expect(Facter.fact(:service_provider).value).to eq('systemd')
-    end
-  end
-
-  context 'when redhat' do
-    it 'returns redhat' do
-      provider = Puppet::Type.type(:service).provider(:redhat)
-      allow(Puppet::Type.type(:service)).to receive(:defaultprovider).and_return(provider)
-
-      expect(Facter.fact(:service_provider).value).to eq('redhat')
-    end
-  end
-end
diff --git a/spec/unit/facter/util/puppet_settings_spec.rb b/spec/unit/facter/util/puppet_settings_spec.rb
deleted file mode 100644
index edd63a86..00000000
--- a/spec/unit/facter/util/puppet_settings_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require 'facter/util/puppet_settings'
-
-describe Facter::Util::PuppetSettings do
-  describe '#with_puppet' do
-    context 'without Puppet loaded' do
-      before(:each) do
-        allow(Module).to receive(:const_get).with('Puppet').and_raise(NameError)
-      end
-
-      it 'is nil' do
-        expect(subject.with_puppet { Puppet[:vardir] }).to be_nil
-      end
-      it 'does not yield to the block' do
-        expect(Puppet).to receive(:[]).never
-        expect(subject.with_puppet { Puppet[:vardir] }).to be_nil
-      end
-    end
-    context 'with Puppet loaded' do
-      # module Puppet
-      module Puppet; end
-      let(:vardir) { '/var/lib/puppet' }
-
-      before :each do
-        allow(Puppet).to receive(:[]).with(:vardir).and_return(vardir)
-      end
-
-      it 'yields to the block' do
-        subject.with_puppet { Puppet[:vardir] }
-      end
-      it 'returns the nodes vardir' do
-        expect(subject.with_puppet { Puppet[:vardir] }).to eq vardir
-      end
-    end
-  end
-end
diff --git a/spec/unit/puppet/parser/functions/enclose_ipv6_spec.rb b/spec/unit/puppet/parser/functions/enclose_ipv6_spec.rb
deleted file mode 100644
index ca815de6..00000000
--- a/spec/unit/puppet/parser/functions/enclose_ipv6_spec.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'the enclose_ipv6 function' do
-  let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
-
-  it 'exists' do
-    expect(Puppet::Parser::Functions.function('enclose_ipv6')).to eq('function_enclose_ipv6')
-  end
-
-  it 'raises a ParseError if there is less than 1 arguments' do
-    expect { scope.function_enclose_ipv6([]) }.to(raise_error(Puppet::ParseError))
-  end
-
-  it 'raises a ParseError if there is more than 1 arguments' do
-    expect { scope.function_enclose_ipv6(['argument1', 'argument2']) }.to(raise_error(Puppet::ParseError))
-  end
-
-  it 'raises a ParseError when given garbage' do
-    expect { scope.function_enclose_ipv6(['garbage']) }.to(raise_error(Puppet::ParseError))
-  end
-
-  it 'raises a ParseError when given something else than a string or an array' do
-    expect { scope.function_enclose_ipv6([['1' => '127.0.0.1']]) }.to(raise_error(Puppet::ParseError))
-  end
-
-  it 'does not raise a ParseError when given a single ip string' do
-    expect { scope.function_enclose_ipv6(['127.0.0.1']) }.not_to raise_error
-  end
-
-  it 'does not raise a ParseError when given * as ip string' do
-    expect { scope.function_enclose_ipv6(['*']) }.not_to raise_error
-  end
-
-  it 'does not raise a ParseError when given an array of ip strings' do
-    expect { scope.function_enclose_ipv6([['127.0.0.1', 'fe80::1']]) }.not_to raise_error
-  end
-
-  it 'does not raise a ParseError when given differently notations of ip addresses' do
-    expect { scope.function_enclose_ipv6([['127.0.0.1', 'fe80::1', '[fe80::1]']]) }.not_to raise_error
-  end
-
-  it 'raises a ParseError when given a wrong ipv4 address' do
-    expect { scope.function_enclose_ipv6(['127..0.0.1']) }.to(raise_error(Puppet::ParseError))
-  end
-
-  it 'raises a ParseError when given a ipv4 address with square brackets' do
-    expect { scope.function_enclose_ipv6(['[127.0.0.1]']) }.to(raise_error(Puppet::ParseError))
-  end
-
-  it 'raises a ParseError when given a wrong ipv6 address' do
-    expect { scope.function_enclose_ipv6(['fe80:::1']) }.to(raise_error(Puppet::ParseError))
-  end
-
-  it 'embraces ipv6 adresses within an array of ip addresses' do
-    result = scope.function_enclose_ipv6([['127.0.0.1', 'fe80::1', '[fe80::2]']])
-    expect(result).to(eq(['127.0.0.1', '[fe80::1]', '[fe80::2]']))
-  end
-
-  it 'embraces a single ipv6 adresse' do
-    result = scope.function_enclose_ipv6(['fe80::1'])
-    expect(result).to(eq(['[fe80::1]']))
-  end
-
-  it 'does not embrace a single ipv4 adresse' do
-    result = scope.function_enclose_ipv6(['127.0.0.1'])
-    expect(result).to(eq(['127.0.0.1']))
-  end
-end
diff --git a/spec/unit/puppet/parser/functions/is_absolute_path_spec.rb b/spec/unit/puppet/parser/functions/is_absolute_path_spec.rb
deleted file mode 100644
index 097b3db1..00000000
--- a/spec/unit/puppet/parser/functions/is_absolute_path_spec.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe 'is_absolute_path' do
-  let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
-
-  let(:function_args) do
-    []
-  end
-
-  let(:function) do
-    scope.function_is_absolute_path(function_args)
-  end
-
-  describe 'validate arity' do
-    let(:function_args) do
-      [1, 2]
-    end
-
-    it 'raises a ParseError if there is more than 1 arguments' do
-      -> { function }.should(raise_error(ArgumentError))
-    end
-  end
-
-  it 'exists' do
-    Puppet::Parser::Functions.function(subject).should == "function_#{subject}"
-  end
-
-  # help enforce good function defination
-  it 'contains arity' do
-  end
-
-  it 'raises a ParseError if there is less than 1 arguments' do
-    -> { function }.should(raise_error(ArgumentError))
-  end
-
-  describe 'should retrun true' do
-    let(:return_value) do
-      true
-    end
-
-    describe 'windows' do
-      let(:function_args) do
-        ['c:\temp\test.txt']
-      end
-
-      it 'returns data' do
-        function.should eq(return_value)
-      end
-    end
-
-    describe 'non-windows' do
-      let(:function_args) do
-        ['/temp/test.txt']
-      end
-
-      it 'returns data' do
-        function.should eq(return_value)
-      end
-    end
-  end
-
-  describe 'should return false' do
-    let(:return_value) do
-      false
-    end
-
-    describe 'windows' do
-      let(:function_args) do
-        ['..\temp\test.txt']
-      end
-
-      it 'returns data' do
-        function.should eq(return_value)
-      end
-    end
-
-    describe 'non-windows' do
-      let(:function_args) do
-        ['../var/lib/puppet']
-      end
-
-      it 'returns data' do
-        function.should eq(return_value)
-      end
-    end
-  end
-end
diff --git a/spec/unit/puppet/provider/file_line/ruby_spec.rb b/spec/unit/puppet/provider/file_line/ruby_spec.rb
deleted file mode 100644
index 506160be..00000000
--- a/spec/unit/puppet/provider/file_line/ruby_spec.rb
+++ /dev/null
@@ -1,260 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-provider_class = Puppet::Type.type(:file_line).provider(:ruby)
-#  These tests fail on windows when run as part of the rake task. Individually they pass
-describe provider_class, unless: Puppet::Util::Platform.windows? do
-  include PuppetlabsSpec::Files
-
-  let :tmpfile do
-    tmpfilename('file_line_test')
-  end
-  let :content do
-    ''
-  end
-  let :params do
-    {}
-  end
-  let :resource do
-    Puppet::Type::File_line.new({
-      name: 'foo',
-      path: tmpfile,
-      line: 'foo',
-    }.merge(params))
-  end
-  let :provider do
-    provider_class.new(resource)
-  end
-
-  before :each do
-    File.open(tmpfile, 'w') do |fh|
-      fh.write(content)
-    end
-  end
-
-  describe 'line parameter' do
-    context 'when line exists' do
-      let(:content) { 'foo' }
-
-      it 'detects the line' do
-        expect(provider).to be_exists
-      end
-    end
-    context 'when line does not exist' do
-      let(:content) { 'foo bar' }
-
-      it 'requests changes' do
-        expect(provider).not_to be_exists
-      end
-      it 'appends the line' do
-        provider.create
-        expect(File.read(tmpfile).chomp).to eq("foo bar\nfoo")
-      end
-    end
-  end
-
-  describe 'match parameter' do
-    let(:params) { { match: '^bar' } }
-
-    describe 'does not match line - line does not exist - replacing' do
-      let(:content) { "foo bar\nbar" }
-
-      it 'requests changes' do
-        expect(provider).not_to be_exists
-      end
-      it 'replaces the match' do
-        provider.create
-        expect(File.read(tmpfile).chomp).to eq("foo bar\nfoo")
-      end
-    end
-
-    describe 'does not match line - line does not exist - appending' do
-      let(:params) { super().merge(replace: false) }
-      let(:content) { "foo bar\nbar" }
-
-      it 'does not request changes' do
-        expect(provider).to be_exists
-      end
-    end
-
-    context 'when does not match line - line exists' do
-      let(:content) { "foo\nbar" }
-
-      it 'detects the line' do
-        expect(provider).to be_exists
-      end
-    end
-
-    context 'when matches line - line exists' do
-      let(:params) { { match: '^foo' } }
-      let(:content) { "foo\nbar" }
-
-      it 'detects the line' do
-        expect(provider).to be_exists
-      end
-    end
-
-    context 'when matches line - line does not exist' do
-      let(:params) { { match: '^foo' } }
-      let(:content) { "foo bar\nbar" }
-
-      it 'requests changes' do
-        expect(provider).not_to be_exists
-      end
-      it 'replaces the match' do
-        provider.create
-        expect(File.read(tmpfile).chomp).to eq("foo\nbar")
-      end
-    end
-  end
-
-  describe 'append_on_no_match' do
-    let(:params) do
-      {
-        append_on_no_match: false,
-        match: '^foo1$',
-      }
-    end
-
-    context 'when matching' do
-      let(:content) { "foo1\nbar" }
-
-      it 'requests changes' do
-        expect(provider).not_to be_exists
-      end
-      it 'replaces the match' do
-        provider.create
-        expect(File.read(tmpfile).chomp).to eql("foo\nbar")
-      end
-    end
-    context 'when not matching' do
-      let(:content) { "foo3\nbar" }
-
-      it 'does not affect the file' do
-        expect(provider).to be_exists
-      end
-    end
-  end
-
-  describe 'replace_all_matches_not_matching_line' do
-    context 'when replace is false' do
-      let(:params) do
-        {
-          replace_all_matches_not_matching_line: true,
-          replace: false,
-        }
-      end
-
-      it 'raises an error' do
-        expect { provider.exists? }.to raise_error(Puppet::Error, %r{replace must be true})
-      end
-    end
-
-    context 'when match matches line - when there are more matches than lines' do
-      let(:params) do
-        {
-          replace_all_matches_not_matching_line: true,
-          match: '^foo',
-          multiple: true,
-        }
-      end
-      let(:content) { "foo\nfoo bar\nbar\nfoo baz" }
-
-      it 'requests changes' do
-        expect(provider).not_to be_exists
-      end
-      it 'replaces the matches' do
-        provider.create
-        expect(File.read(tmpfile).chomp).to eql("foo\nfoo\nbar\nfoo")
-      end
-    end
-
-    context 'when match matches line - when there are the same matches and lines' do
-      let(:params) do
-        {
-          replace_all_matches_not_matching_line: true,
-          match: '^foo',
-          multiple: true,
-        }
-      end
-      let(:content) { "foo\nfoo\nbar" }
-
-      it 'does not request changes' do
-        expect(provider).to be_exists
-      end
-    end
-
-    context 'when match does not match line - when there are more matches than lines' do
-      let(:params) do
-        {
-          replace_all_matches_not_matching_line: true,
-          match: '^bar',
-          multiple: true,
-        }
-      end
-      let(:content) { "foo\nfoo bar\nbar\nbar baz" }
-
-      it 'requests changes' do
-        expect(provider).not_to be_exists
-      end
-      it 'replaces the matches' do
-        provider.create
-        expect(File.read(tmpfile).chomp).to eql("foo\nfoo bar\nfoo\nfoo")
-      end
-    end
-
-    context 'when match does not match line - when there are the same matches and lines' do
-      let(:params) do
-        {
-          replace_all_matches_not_matching_line: true,
-          match: '^bar',
-          multiple: true,
-        }
-      end
-      let(:content) { "foo\nfoo\nbar\nbar baz" }
-
-      it 'requests changes' do
-        expect(provider).not_to be_exists
-      end
-      it 'replaces the matches' do
-        provider.create
-        expect(File.read(tmpfile).chomp).to eql("foo\nfoo\nfoo\nfoo")
-      end
-    end
-  end
-
-  context 'when match does not match line - when there are no matches' do
-    let(:params) do
-      {
-        replace_all_matches_not_matching_line: true,
-        match: '^bar',
-        multiple: true,
-      }
-    end
-    let(:content) { "foo\nfoo bar" }
-
-    it 'does not request changes' do
-      expect(provider).to be_exists
-    end
-  end
-
-  context 'when match does not match line - when there are no matches or lines' do
-    let(:params) do
-      {
-        replace_all_matches_not_matching_line: true,
-        match: '^bar',
-        multiple: true,
-      }
-    end
-    let(:content) { 'foo bar' }
-
-    it 'requests changes' do
-      expect(provider).not_to be_exists
-    end
-    it 'appends the line' do
-      provider.create
-      expect(File.read(tmpfile).chomp).to eql("foo bar\nfoo")
-    end
-  end
-end
diff --git a/spec/unit/puppet/provider/file_line/ruby_spec_alter.rb b/spec/unit/puppet/provider/file_line/ruby_spec_alter.rb
deleted file mode 100644
index f6f7e934..00000000
--- a/spec/unit/puppet/provider/file_line/ruby_spec_alter.rb
+++ /dev/null
@@ -1,376 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-provider_class = Puppet::Type.type(:file_line).provider(:ruby)
-#  These tests fail on windows when run as part of the rake task. Individually they pass
-describe provider_class, unless: Puppet::Util::Platform.windows? do
-  include PuppetlabsSpec::Files
-
-  let :tmpfile do
-    tmpfilename('file_line_test')
-  end
-  let :content do
-    ''
-  end
-  let :params do
-    {}
-  end
-  let :resource do
-    Puppet::Type::File_line.new({
-      name: 'foo',
-      path: tmpfile,
-      line: 'foo',
-    }.merge(params))
-  end
-  let :provider do
-    provider_class.new(resource)
-  end
-
-  before :each do
-    File.open(tmpfile, 'w') do |fh|
-      fh.write(content)
-    end
-  end
-
-  describe '#create' do
-    context 'when adding' do
-      pending('To be added.')
-    end
-    context 'when replacing' do
-      let :params do
-        {
-          line: 'foo = bar',
-          match: '^foo\s*=.*$',
-          replace: false,
-        }
-      end
-      let(:content) { "foo1\nfoo=blah\nfoo2\nfoo3" }
-
-      it "providor 'be_exists'" do
-        expect(provider).to be_exists
-      end
-      it 'does not replace the matching line' do
-        provider.create
-        expect(File.read(tmpfile).chomp).to eql("foo1\nfoo=blah\nfoo2\nfoo3")
-      end
-      it 'appends the line if no matches are found' do
-        File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo2") }
-        expect(provider.exists?).to be false
-        provider.create
-        expect(File.read(tmpfile).chomp).to eql("foo1\nfoo2\nfoo = bar")
-      end
-      it 'raises an error with invalid values' do
-        expect {
-          @resource = Puppet::Type::File_line.new(
-            name: 'foo', path: tmpfile, line: 'foo = bar', match: '^foo\s*=.*$', replace: 'asgadga',
-          )
-        }.to raise_error(Puppet::Error, %r{Invalid value "asgadga"\. Valid values are true, false\.})
-      end
-    end
-  end
-  describe '#destroy' do
-    pending('To be added?')
-  end
-  context 'when matching' do
-    # rubocop:disable RSpec/InstanceVariable : replacing before with let breaks the tests, variables need to be altered within it block : multi
-    before :each do
-      @resource = Puppet::Type::File_line.new(
-        name: 'foo',
-        path: tmpfile,
-        line: 'foo = bar',
-        match: '^foo\s*=.*$',
-      )
-      @provider = provider_class.new(@resource)
-    end
-    describe 'using match' do
-      it 'raises an error if more than one line matches, and should not have modified the file' do
-        File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo=blah\nfoo2\nfoo=baz") }
-        expect { @provider.create }.to raise_error(Puppet::Error, %r{More than one line.*matches})
-        expect(File.read(tmpfile)).to eql("foo1\nfoo=blah\nfoo2\nfoo=baz")
-      end
-
-      it 'replaces all lines that matches' do
-        @resource = Puppet::Type::File_line.new(name: 'foo', path: tmpfile, line: 'foo = bar', match: '^foo\s*=.*$', multiple: true)
-        @provider = provider_class.new(@resource)
-        File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo=blah\nfoo2\nfoo=baz") }
-        @provider.create
-        expect(File.read(tmpfile).chomp).to eql("foo1\nfoo = bar\nfoo2\nfoo = bar")
-      end
-
-      it 'replaces all lines that match, even when some lines are correct' do
-        @resource = Puppet::Type::File_line.new(name: 'neil', path: tmpfile, line: "\thard\tcore\t0\n", match: '^[ \t]hard[ \t]+core[ \t]+.*', multiple: true)
-        @provider = provider_class.new(@resource)
-        File.open(tmpfile, 'w') { |fh| fh.write("\thard\tcore\t90\n\thard\tcore\t0\n") }
-        @provider.create
-        expect(File.read(tmpfile).chomp).to eql("\thard\tcore\t0\n\thard\tcore\t0")
-      end
-
-      it 'raises an error with invalid values' do
-        expect {
-          @resource = Puppet::Type::File_line.new(
-            name: 'foo', path: tmpfile, line: 'foo = bar', match: '^foo\s*=.*$', multiple: 'asgadga',
-          )
-        }.to raise_error(Puppet::Error, %r{Invalid value "asgadga"\. Valid values are true, false\.})
-      end
-
-      it 'replaces a line that matches' do
-        File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo=blah\nfoo2") }
-        @provider.create
-        expect(File.read(tmpfile).chomp).to eql("foo1\nfoo = bar\nfoo2")
-      end
-      it 'adds a new line if no lines match' do
-        File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo2") }
-        @provider.create
-        expect(File.read(tmpfile)).to eql("foo1\nfoo2\nfoo = bar\n")
-      end
-      it 'does nothing if the exact line already exists' do
-        File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo = bar\nfoo2") }
-        @provider.create
-        expect(File.read(tmpfile).chomp).to eql("foo1\nfoo = bar\nfoo2")
-      end
-    end
-    describe 'using match+append_on_no_match - when there is a match' do
-      it 'replaces line' do
-        @resource = Puppet::Type::File_line.new(name: 'foo', path: tmpfile, line: 'inserted = line', match: '^foo3$', append_on_no_match: false)
-        @provider = provider_class.new(@resource)
-        File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo = blah\nfoo2\nfoo = baz") }
-        expect(File.read(tmpfile).chomp).to eql("foo1\nfoo = blah\nfoo2\nfoo = baz")
-      end
-    end
-    describe 'using match+append_on_no_match - when there is no match' do
-      it 'does not add line after no matches found' do
-        @resource = Puppet::Type::File_line.new(name: 'foo', path: tmpfile, line: 'inserted = line', match: '^foo3$', append_on_no_match: false)
-        @provider = provider_class.new(@resource)
-        File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo = blah\nfoo2\nfoo = baz") }
-        expect(File.read(tmpfile).chomp).to eql("foo1\nfoo = blah\nfoo2\nfoo = baz")
-      end
-    end
-  end
-  context 'when match+replace+append_on_no_match' do
-    pending('to do')
-  end
-  context 'when after' do
-    let :resource do
-      Puppet::Type::File_line.new(
-        name: 'foo',
-        path: tmpfile,
-        line: 'inserted = line',
-        after: '^foo1',
-      )
-    end
-
-    let :provider do
-      provider_class.new(resource)
-    end
-
-    context 'when match and after set' do
-      shared_context 'when resource_create' do
-        let(:match) { '^foo2$' }
-        let(:after) { '^foo1$' }
-        let(:resource) do
-          Puppet::Type::File_line.new(
-            name: 'foo',
-            path: tmpfile,
-            line: 'inserted = line',
-            after: after,
-            match: match,
-          )
-        end
-      end
-      before :each do
-        File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo2\nfoo = baz") }
-      end
-      describe 'inserts at match' do
-        include_context 'resource_create'
-        it {
-          provider.create
-          expect(File.read(tmpfile).chomp).to eq("foo1\ninserted = line\nfoo = baz")
-        }
-      end
-      describe 'inserts a new line after when no match' do
-        include_context 'resource_create' do
-          let(:match) { '^nevergoingtomatch$' }
-        end
-        it {
-          provider.create
-          expect(File.read(tmpfile).chomp).to eq("foo1\ninserted = line\nfoo2\nfoo = baz")
-        }
-      end
-      describe 'append to end of file if no match for both after and match' do
-        include_context 'resource_create' do
-          let(:match) { '^nevergoingtomatch$' }
-          let(:after) { '^stillneverafter' }
-        end
-        it {
-          provider.create
-          expect(File.read(tmpfile).chomp).to eq("foo1\nfoo2\nfoo = baz\ninserted = line")
-        }
-      end
-    end
-    context 'with one line matching the after expression' do
-      before :each do
-        File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo = blah\nfoo2\nfoo = baz") }
-      end
-
-      it 'inserts the specified line after the line matching the "after" expression' do
-        provider.create
-        expect(File.read(tmpfile).chomp).to eql("foo1\ninserted = line\nfoo = blah\nfoo2\nfoo = baz")
-      end
-    end
-    context 'with multiple lines matching the after expression' do
-      before :each do
-        File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo = blah\nfoo2\nfoo1\nfoo = baz") }
-      end
-
-      it 'errors out stating "One or no line must match the pattern"' do
-        expect { provider.create }.to raise_error(Puppet::Error, %r{One or no line must match the pattern})
-      end
-
-      it 'adds the line after all lines matching the after expression' do
-        @resource = Puppet::Type::File_line.new(name: 'foo', path: tmpfile, line: 'inserted = line', after: '^foo1$', multiple: true)
-        @provider = provider_class.new(@resource)
-        @provider.create
-        expect(File.read(tmpfile).chomp).to eql("foo1\ninserted = line\nfoo = blah\nfoo2\nfoo1\ninserted = line\nfoo = baz")
-      end
-    end
-    context 'with no lines matching the after expression' do
-      let :content do
-        "foo3\nfoo = blah\nfoo2\nfoo = baz\n"
-      end
-
-      before :each do
-        File.open(tmpfile, 'w') { |fh| fh.write(content) }
-      end
-
-      it 'appends the specified line to the file' do
-        provider.create
-        expect(File.read(tmpfile)).to eq(content << resource[:line] << "\n")
-      end
-    end
-  end
-  context 'when removing with a line' do
-    before :each do
-      # TODO: these should be ported over to use the PuppetLabs spec_helper
-      #  file fixtures once the following pull request has been merged:
-      # https://github.com/puppetlabs/puppetlabs-stdlib/pull/73/files
-      @resource = Puppet::Type::File_line.new(
-        name: 'foo',
-        path: tmpfile,
-        line: 'foo',
-        ensure: 'absent',
-      )
-      @provider = provider_class.new(@resource)
-    end
-    it 'removes the line if it exists' do
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo\nfoo2") }
-      @provider.destroy
-      expect(File.read(tmpfile)).to eql("foo1\nfoo2")
-    end
-    it 'removes the line without touching the last new line' do
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo\nfoo2\n") }
-      @provider.destroy
-      expect(File.read(tmpfile)).to eql("foo1\nfoo2\n")
-    end
-    it 'removes any occurence of the line' do
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo\nfoo2\nfoo\nfoo") }
-      @provider.destroy
-      expect(File.read(tmpfile)).to eql("foo1\nfoo2\n")
-    end
-    it 'example in the docs' do
-      @resource = Puppet::Type::File_line.new(name: 'bashrc_proxy', ensure: 'absent', path: tmpfile, line: 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128')
-      @provider = provider_class.new(@resource)
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo2\nexport HTTP_PROXY=http://squid.puppetlabs.vm:3128\nfoo4\n") }
-      @provider.destroy
-      expect(File.read(tmpfile)).to eql("foo1\nfoo2\nfoo4\n")
-    end
-  end
-  context 'when removing with a match' do
-    before :each do
-      @resource = Puppet::Type::File_line.new(
-        name: 'foo',
-        path: tmpfile,
-        line: 'foo2',
-        ensure: 'absent',
-        match: 'o$',
-        match_for_absence: true,
-      )
-      @provider = provider_class.new(@resource)
-    end
-
-    it 'finds a line to match' do
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo\nfoo2") }
-      expect(@provider.exists?).to be true
-    end
-
-    it 'removes one line if it matches' do
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo\nfoo2") }
-      @provider.destroy
-      expect(File.read(tmpfile)).to eql("foo1\nfoo2")
-    end
-
-    it 'the line parameter is actually not used at all but is silently ignored if here' do
-      @resource = Puppet::Type::File_line.new(name: 'foo', path: tmpfile, line: 'supercalifragilisticexpialidocious', ensure: 'absent', match: 'o$', match_for_absence: true)
-      @provider = provider_class.new(@resource)
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo\nfoo2") }
-      @provider.destroy
-      expect(File.read(tmpfile)).to eql("foo1\nfoo2")
-    end
-
-    it 'and may not be here and does not need to be here' do
-      @resource = Puppet::Type::File_line.new(name: 'foo', path: tmpfile, ensure: 'absent', match: 'o$', match_for_absence: true)
-      @provider = provider_class.new(@resource)
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo\nfoo2") }
-      @provider.destroy
-      expect(File.read(tmpfile)).to eql("foo1\nfoo2")
-    end
-
-    it 'raises an error if more than one line matches' do
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo\nfoo2\nfoo\nfoo") }
-      expect { @provider.destroy }.to raise_error(Puppet::Error, %r{More than one line})
-    end
-
-    it 'removes multiple lines if :multiple is true' do
-      @resource = Puppet::Type::File_line.new(name: 'foo', path: tmpfile, line: 'foo2', ensure: 'absent', match: 'o$', multiple: true, match_for_absence: true)
-      @provider = provider_class.new(@resource)
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo\nfoo2\nfoo\nfoo") }
-      @provider.destroy
-      expect(File.read(tmpfile)).to eql("foo1\nfoo2\n")
-    end
-
-    it 'ignores the match if match_for_absence is not specified' do
-      @resource = Puppet::Type::File_line.new(name: 'foo', path: tmpfile, line: 'foo2', ensure: 'absent', match: 'o$')
-      @provider = provider_class.new(@resource)
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo\nfoo2") }
-      @provider.destroy
-      expect(File.read(tmpfile)).to eql("foo1\nfoo\n")
-    end
-
-    it 'ignores the match if match_for_absence is false' do
-      @resource = Puppet::Type::File_line.new(name: 'foo', path: tmpfile, line: 'foo2', ensure: 'absent', match: 'o$', match_for_absence: false)
-      @provider = provider_class.new(@resource)
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo\nfoo2") }
-      @provider.destroy
-      expect(File.read(tmpfile)).to eql("foo1\nfoo\n")
-    end
-
-    it 'example in the docs' do
-      @resource = Puppet::Type::File_line.new(
-        name: 'bashrc_proxy', ensure: 'absent', path: tmpfile, line: 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',
-        match: '^export\ HTTP_PROXY\=', match_for_absence: true
-      )
-      @provider = provider_class.new(@resource)
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo2\nexport HTTP_PROXY=foo\nfoo4\n") }
-      @provider.destroy
-      expect(File.read(tmpfile)).to eql("foo1\nfoo2\nfoo4\n")
-    end
-
-    it 'example in the docs showing line is redundant' do
-      @resource = Puppet::Type::File_line.new(name: 'bashrc_proxy', ensure: 'absent', path: tmpfile, match: '^export\ HTTP_PROXY\=', match_for_absence: true)
-      @provider = provider_class.new(@resource)
-      File.open(tmpfile, 'w') { |fh| fh.write("foo1\nfoo2\nexport HTTP_PROXY=foo\nfoo4\n") }
-      @provider.destroy
-      expect(File.read(tmpfile)).to eql("foo1\nfoo2\nfoo4\n")
-    end
-  end
-end
diff --git a/spec/unit/puppet/provider/file_line/ruby_spec_use_cases.rb b/spec/unit/puppet/provider/file_line/ruby_spec_use_cases.rb
deleted file mode 100644
index 456ddd61..00000000
--- a/spec/unit/puppet/provider/file_line/ruby_spec_use_cases.rb
+++ /dev/null
@@ -1,137 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-provider_class = Puppet::Type.type(:file_line).provider(:ruby)
-#  These tests fail on windows when run as part of the rake task. Individually they pass
-describe provider_class, unless: Puppet::Util::Platform.windows? do
-  include PuppetlabsSpec::Files
-
-  let :tmpfile do
-    tmpfilename('file_line_test')
-  end
-  let :content do
-    ''
-  end
-  let :params do
-    {}
-  end
-  let :resource do
-    Puppet::Type::File_line.new({
-      name: 'foo',
-      path: tmpfile,
-      line: 'foo',
-    }.merge(params))
-  end
-  let :provider do
-    provider_class.new(resource)
-  end
-
-  before :each do
-    File.open(tmpfile, 'w') do |fh|
-      fh.write(content)
-    end
-  end
-
-  describe 'customer use cases - no lines' do
-    describe 'MODULES-5003' do
-      let(:params) do
-        {
-          line: "*\thard\tcore\t0",
-          match: "^[ \t]*\\*[ \t]+hard[ \t]+core[ \t]+.*",
-          multiple: true,
-        }
-      end
-      let(:content) { "*	hard	core	90\n*	hard	core	10\n" }
-
-      it 'requests changes' do
-        expect(provider).not_to be_exists
-      end
-      it 'replaces the matches' do
-        provider.create
-        expect(File.read(tmpfile).chomp).to eq("*	hard	core	0\n*	hard	core	0")
-      end
-    end
-
-    describe 'MODULES-5003 - one match, one line - just ensure the line exists' do
-      let(:params) do
-        {
-          line: "*\thard\tcore\t0",
-          match: "^[ \t]*\\*[ \t]+hard[ \t]+core[ \t]+.*",
-          multiple: true,
-        }
-      end
-      let(:content) { "*	hard	core	90\n*	hard	core	0\n" }
-
-      it 'does not request changes' do
-        expect(provider).to be_exists
-      end
-    end
-
-    describe 'MODULES-5003 - one match, one line - replace all matches, even when line exists' do
-      let(:params) do
-        {
-          line: "*\thard\tcore\t0",
-          match: "^[ \t]*\\*[ \t]+hard[ \t]+core[ \t]+.*",
-          multiple: true,
-
-        }.merge(replace_all_matches_not_matching_line: true)
-      end
-      let(:content) { "*	hard	core	90\n*	hard	core	0\n" }
-
-      it 'requests changes' do
-        expect(provider).not_to be_exists
-      end
-      it 'replaces the matches' do
-        provider.create
-        expect(File.read(tmpfile).chomp).to eq("*	hard	core	0\n*	hard	core	0")
-      end
-    end
-
-    describe 'MODULES-5651 - match, no line' do
-      let(:params) do
-        {
-          line: 'LogLevel=notice',
-          match: '^#LogLevel$',
-        }
-      end
-      let(:content) { "#LogLevel\nstuff" }
-
-      it 'requests changes' do
-        expect(provider).not_to be_exists
-      end
-      it 'replaces the match' do
-        provider.create
-        expect(File.read(tmpfile).chomp).to eq("LogLevel=notice\nstuff")
-      end
-    end
-
-    describe 'MODULES-5651 - match, line' do
-      let(:params) do
-        {
-          line: 'LogLevel=notice',
-          match: '^#LogLevel$',
-        }
-      end
-      let(:content) { "#Loglevel\nLogLevel=notice\nstuff" }
-
-      it 'does not request changes' do
-        expect(provider).to be_exists
-      end
-    end
-
-    describe 'MODULES-5651 - no match, line' do
-      let(:params) do
-        {
-          line: 'LogLevel=notice',
-          match: '^#LogLevel$',
-        }
-      end
-      let(:content) { "LogLevel=notice\nstuff" }
-
-      it 'does not request changes' do
-        expect(provider).to be_exists
-      end
-    end
-  end
-end
diff --git a/spec/unit/puppet/type/anchor_spec.rb b/spec/unit/puppet/type/anchor_spec.rb
deleted file mode 100644
index 9dc4ebd6..00000000
--- a/spec/unit/puppet/type/anchor_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-anchor = Puppet::Type.type(:anchor).new(name: 'ntp::begin')
-
-describe anchor do
-  it 'stringifies normally' do
-    expect(anchor.to_s).to eq('Anchor[ntp::begin]')
-  end
-end
diff --git a/spec/unit/puppet/type/file_line_spec.rb b/spec/unit/puppet/type/file_line_spec.rb
deleted file mode 100644
index e506b133..00000000
--- a/spec/unit/puppet/type/file_line_spec.rb
+++ /dev/null
@@ -1,113 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require 'tempfile'
-describe Puppet::Type.type(:file_line) do
-  let :tmp_path do
-    if Puppet::Util::Platform.windows?
-      'C:\tmp\path'
-    else
-      '/tmp/path'
-    end
-  end
-  let :my_path do
-    if Puppet::Util::Platform.windows?
-      'C:\my\path'
-    else
-      '/my/path'
-    end
-  end
-  let :file_line do
-    Puppet::Type.type(:file_line).new(name: 'foo', line: 'line', path: tmp_path)
-  end
-
-  it 'accepts a line' do
-    file_line[:line] = 'my_line'
-    expect(file_line[:line]).to eq('my_line')
-  end
-  it 'accepts a path' do
-    file_line[:path] = my_path
-    expect(file_line[:path]).to eq(my_path)
-  end
-  it 'accepts a match regex' do
-    file_line[:match] = '^foo.*$'
-    expect(file_line[:match]).to eq('^foo.*$')
-  end
-
-  it 'accepts a match regex that does not match the specified line' do
-    expect {
-      Puppet::Type.type(:file_line).new(
-        name: 'foo', path: my_path, line: 'foo=bar', match: '^bar=blah$',
-      )
-    }.not_to raise_error
-  end
-  it 'accepts a match regex that does match the specified line' do
-    expect {
-      Puppet::Type.type(:file_line).new(
-        name: 'foo', path: my_path, line: 'foo=bar', match: '^\s*foo=.*$',
-      )
-    }.not_to raise_error
-  end
-  it 'accepts utf8 characters' do
-    expect {
-      Puppet::Type.type(:file_line).new(
-        name: 'ƒồỗ', path: my_path, line: 'ƒồỗ=ьåя', match: '^ьåя=βļάħ$',
-      )
-    }.not_to raise_error
-  end
-  it 'accepts double byte characters' do
-    expect {
-      Puppet::Type.type(:file_line).new(
-        name: 'フーバー', path: my_path, line: 'この=それ', match: '^この=ああ$',
-      )
-    }.not_to raise_error
-  end
-  it 'accepts posix filenames' do
-    file_line[:path] = tmp_path
-    expect(file_line[:path]).to eq(tmp_path)
-  end
-  it 'does not accept unqualified path' do
-    expect { file_line[:path] = 'file' }.to raise_error(Puppet::Error, %r{File paths must be fully qualified})
-  end
-  it 'requires that a line is specified' do
-    expect { Puppet::Type.type(:file_line).new(name: 'foo', path: tmp_path) }.to raise_error(Puppet::Error, %r{line is a required attribute})
-  end
-  it 'does not require that a line is specified when matching for absence' do
-    expect { Puppet::Type.type(:file_line).new(name: 'foo', path: tmp_path, ensure: :absent, match_for_absence: :true, match: 'match') }.not_to raise_error
-  end
-  it 'although if a line is specified anyway when matching for absence it still works and the line is silently ignored' do
-    expect { Puppet::Type.type(:file_line).new(name: 'foo', path: tmp_path, line: 'i_am_irrelevant', ensure: :absent, match_for_absence: :true, match: 'match') }.not_to raise_error
-  end
-  it 'requires that a file is specified' do
-    expect { Puppet::Type.type(:file_line).new(name: 'foo', line: 'path') }.to raise_error(Puppet::Error, %r{path is a required attribute})
-  end
-  it 'defaults to ensure => present' do
-    expect(file_line[:ensure]).to eq :present
-  end
-  it 'defaults to replace => true' do
-    expect(file_line[:replace]).to eq :true
-  end
-  it 'defaults to encoding => UTF-8' do
-    expect(file_line[:encoding]).to eq 'UTF-8'
-  end
-  it 'accepts encoding => iso-8859-1' do
-    expect { Puppet::Type.type(:file_line).new(name: 'foo', path: tmp_path, ensure: :present, encoding: 'iso-8859-1', line: 'bar') }.not_to raise_error
-  end
-
-  it 'autorequires the file it manages' do
-    catalog = Puppet::Resource::Catalog.new
-    file = Puppet::Type.type(:file).new(name: tmp_path)
-    catalog.add_resource file
-    catalog.add_resource file_line
-    relationship = file_line.autorequire.find do |rel|
-      (rel.source.to_s == "File[#{tmp_path}]") && (rel.target.to_s == file_line.to_s)
-    end
-    expect(relationship).to be_a Puppet::Relationship
-  end
-
-  it 'does not autorequire the file it manages if it is not managed' do
-    catalog = Puppet::Resource::Catalog.new
-    catalog.add_resource file_line
-    expect(file_line.autorequire).to be_empty
-  end
-end
diff --git a/types/ensure/package.pp b/types/ensure/package.pp
new file mode 100644
index 00000000..3f6ad47c
--- /dev/null
+++ b/types/ensure/package.pp
@@ -0,0 +1,2 @@
+# @summary Validate the value of the ensure parameter for a package
+type Stdlib::Ensure::Package = Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]
diff --git a/types/http/method.pp b/types/http/method.pp
new file mode 100644
index 00000000..3b50ff0b
--- /dev/null
+++ b/types/http/method.pp
@@ -0,0 +1,43 @@
+# @summary Valid HTTP method verbs
+# @see https://www.iana.org/assignments/http-methods/http-methods.xhtml
+type Stdlib::Http::Method = Enum[
+  'ACL',
+  'BASELINE-CONTROL',
+  'BIND',
+  'CHECKIN',
+  'CHECKOUT',
+  'CONNECT',
+  'COPY',
+  'DELETE',
+  'GET',
+  'HEAD',
+  'LABEL',
+  'LINK',
+  'LOCK',
+  'MERGE',
+  'MKACTIVITY',
+  'MKCALENDAR',
+  'MKCOL',
+  'MKREDIRECTREF',
+  'MKWORKSPACE',
+  'MOVE',
+  'OPTIONS',
+  'ORDERPATCH',
+  'PATCH',
+  'POST',
+  'PRI',
+  'PROPFIND',
+  'PROPPATCH',
+  'PUT',
+  'REBIND',
+  'REPORT',
+  'SEARCH',
+  'TRACE',
+  'UNBIND',
+  'UNCHECKOUT',
+  'UNLINK',
+  'UNLOCK',
+  'UPDATE',
+  'UPDATEREDIRECTREF',
+  'VERSION-CONTROL',
+]
diff --git a/types/http/status.pp b/types/http/status.pp
new file mode 100644
index 00000000..08a23fdc
--- /dev/null
+++ b/types/http/status.pp
@@ -0,0 +1,3 @@
+# @summary A valid HTTP status code per RFC9110
+# @see https://httpwg.org/specs/rfc9110.html#overview.of.status.codes
+type Stdlib::Http::Status = Integer[100, 599]
diff --git a/types/httpstatus.pp b/types/httpstatus.pp
index 4199d8ac..1a73221e 100644
--- a/types/httpstatus.pp
+++ b/types/httpstatus.pp
@@ -1,2 +1,4 @@
 # @summary Validate a HTTP status code
-type Stdlib::HttpStatus = Integer[100, 599]
+# @deprecated Use Stdlib::Http::Status
+# @see Stdlib::Http::Status
+type Stdlib::HttpStatus = Stdlib::Http::Status

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/share/puppet/modules.available/puppetlabs-stdlib/lib/puppet/functions/stdlib/crc32.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/puppetlabs-stdlib/lib/puppet/functions/stdlib/sha256.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/puppetlabs-stdlib/types/ensure/package.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/puppetlabs-stdlib/types/http/method.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/puppetlabs-stdlib/types/http/status.pp

No differences were encountered in the control files

More details

Full run details