Best JavaScript code snippet using fast-check-monorepo
Docs.md.spec.ts
Source:Docs.md.spec.ts  
1import * as fs from 'fs';2import fc from '../../../src/fast-check';3// For ES Modules:4//import { dirname } from 'path';5//import { fileURLToPath } from 'url';6//const __filename = fileURLToPath(import.meta.url);7//const __dirname = dirname(__filename);8const TargetNumExamples = 5;9const JsBlockStart = '```js';10const JsBlockEnd = '```';11const CommentForGeneratedValues = '// Examples of generated values:';12const CommentForArbitraryIndicator = '// Use the arbitrary:';13const CommentForStatistics = '// Computed statistics for 10k generated values:';14describe('Docs.md', () => {15  it('Should check code snippets validity and fix generated values', () => {16    const originalFileContent = fs.readFileSync(`${__dirname}/../../../documentation/Arbitraries.md`).toString();17    const { content: fileContent } = refreshContent(originalFileContent);18    if (Number(process.versions.node.split('.')[0]) < 12) {19      // There were some updates regarding how to stringify invalid surrogate pairs20      // between node 10 and node 12 with JSON.stringify.21      // It directly impacts fc.stringify.22      //23      // In node 10: JSON.stringify("\udff5") === '"\udff5"'24      // In node 12: JSON.stringify("\udff5") === '"\\udff5"'25      // You may try with: JSON.stringify("\udff5").split('').map(c => c.charCodeAt(0).toString(16))26      console.warn(`Unable to properly check code snippets defined in the documentation...`);27      const sanitize = (s: string) => s.replace(/(\\)(u[0-9a-f]{4})/g, (c) => JSON.parse('"' + c + '"'));28      expect(sanitize(fileContent)).toEqual(sanitize(originalFileContent));29      if (process.env.UPDATE_CODE_SNIPPETS) {30        throw new Error('You must use a more recent release of node to update code snippets (>=12)');31      }32      return;33    }34    if (fileContent !== originalFileContent && process.env.UPDATE_CODE_SNIPPETS) {35      console.warn(`Updating code snippets defined in the documentation...`);36      fs.writeFileSync(`${__dirname}/../../../documentation/Arbitraries.md`, fileContent);37    }38    if (!process.env.UPDATE_CODE_SNIPPETS) {39      expect(fileContent).toEqual(originalFileContent);40    }41  });42});43// Helpers44function extractJsCodeBlocks(content: string): string[] {45  const lines = content.split('\n');46  const blocks: string[] = [];47  let isJsBlock = false;48  let currentBlock: string[] = [];49  for (const line of lines) {50    if (isJsBlock) {51      currentBlock.push(line);52      if (line === JsBlockEnd) {53        blocks.push(currentBlock.join('\n') + '\n');54        isJsBlock = false;55        currentBlock = [];56      }57    } else if (line === JsBlockStart) {58      blocks.push(currentBlock.join('\n') + '\n');59      isJsBlock = true;60      currentBlock = [line];61    } else {62      currentBlock.push(line);63    }64  }65  if (currentBlock.length !== 0) {66    blocks.push(currentBlock.join('\n'));67  }68  return blocks;69}70function isJsCodeBlock(blockContent: string): boolean {71  return blockContent.startsWith(`${JsBlockStart}\n`) && blockContent.endsWith(`${JsBlockEnd}\n`);72}73function trimJsCodeBlock(blockContent: string): string {74  const startLength = `${JsBlockStart}\n`.length;75  const endLength = `${JsBlockEnd}\n`.length;76  return blockContent.substr(startLength, blockContent.length - startLength - endLength);77}78function addJsCodeBlock(blockContent: string): string {79  return `${JsBlockStart}\n${blockContent}${JsBlockEnd}\n`;80}81function refreshContent(originalContent: string): { content: string; numExecutedSnippets: number } {82  // Re-run all the code (supported) snippets83  // Re-generate all the examples84  let numExecutedSnippets = 0;85  // Extract code blocks86  const extractedBlocks = extractJsCodeBlocks(originalContent);87  // Execute code blocks88  const refinedBlocks = extractedBlocks.map((block) => {89    if (!isJsCodeBlock(block)) return block;90    // Remove list of examples and statistics91    const cleanedBlock = trimJsCodeBlock(block)92      .replace(new RegExp(`${CommentForGeneratedValues}[^\n]*(\n//.*)*`, 'mg'), CommentForGeneratedValues)93      .replace(new RegExp(`${CommentForStatistics}[^\n]*(\n//.*)*`, 'mg'), CommentForStatistics);94    // Extract code snippets95    const snippets = cleanedBlock96      .split(`\n${CommentForGeneratedValues}`)97      .map((snippet, index, all) => (index !== all.length - 1 ? `${snippet}\n${CommentForGeneratedValues}` : snippet));98    // Execute blocks and set examples99    const updatedSnippets = snippets.map((snippet) => {100      if (!snippet.endsWith(CommentForGeneratedValues)) return snippet;101      ++numExecutedSnippets;102      // eslint-disable-next-line @typescript-eslint/no-unused-vars103      const generatedValues = (function (fc): string[] {104        const numRuns = 5 * TargetNumExamples;105        const lastIndexCommentForStatistics = snippet.lastIndexOf(CommentForStatistics);106        const refinedSnippet =107          lastIndexCommentForStatistics !== -1 ? snippet.substring(lastIndexCommentForStatistics) : snippet;108        const seed = refinedSnippet.replace(/\s*\/\/.*/g, '').replace(/\s+/gm, ' ').length;109        const indexArbitraryPart = refinedSnippet.indexOf(CommentForArbitraryIndicator);110        const preparationPart = indexArbitraryPart !== -1 ? refinedSnippet.substring(0, indexArbitraryPart) : '';111        const arbitraryPart = indexArbitraryPart !== -1 ? refinedSnippet.substring(indexArbitraryPart) : refinedSnippet;112        const evalCode = `${preparationPart}\nfc.sample(${arbitraryPart}\n, { numRuns: ${numRuns}, seed: ${seed} }).map(v => fc.stringify(v))`;113        try {114          return eval(evalCode);115        } catch (err) {116          throw new Error(`Failed to run code snippet:\n\n${evalCode}\n\nWith error message: ${err}`);117        }118      })(fc);119      const uniqueGeneratedValues = Array.from(new Set(generatedValues)).slice(0, TargetNumExamples);120      // If the display for generated values is too long, we split it into a list of items121      if (122        uniqueGeneratedValues.some((value) => value.includes('\n')) ||123        uniqueGeneratedValues.reduce((totalLength, value) => totalLength + value.length, 0) > 120124      ) {125        return `${snippet}${[...uniqueGeneratedValues, 'â¦']126          .map((v) => `\n// ⢠${v.replace(/\n/gm, '\n//   ')}`)127          .join('')}`;128      } else {129        return `${snippet} ${uniqueGeneratedValues.join(', ')}â¦`;130      }131    });132    // Extract statistics snippets133    const statisticsSnippets = updatedSnippets134      .join('')135      .split(`\n${CommentForStatistics}`)136      .map((snippet, index, all) => (index !== all.length - 1 ? `${snippet}\n${CommentForStatistics}` : snippet));137    // Execute statistics138    const updatedStatisticsSnippets = statisticsSnippets.map((snippet) => {139      if (!snippet.endsWith(CommentForStatistics)) return snippet;140      ++numExecutedSnippets;141      const computedStatitics = (baseSize: fc.Size) =>142        // eslint-disable-next-line @typescript-eslint/no-unused-vars143        (function (fc): string[] {144          const lastIndexCommentForGeneratedValues = snippet.lastIndexOf(CommentForGeneratedValues);145          const refinedSnippet =146            lastIndexCommentForGeneratedValues !== -1 ? snippet.substring(lastIndexCommentForGeneratedValues) : snippet;147          const seed = refinedSnippet.replace(/\s*\/\/.*/g, '').replace(/\s+/gm, ' ').length;148          const evalCode = refinedSnippet;149          const originalConsoleLog = console.log;150          const originalGlobal = fc.readConfigureGlobal();151          try {152            const lines: string[] = [];153            console.log = (line) => lines.push(line);154            fc.configureGlobal({ seed, numRuns: 10000, baseSize });155            eval(evalCode);156            return lines;157          } catch (err) {158            throw new Error(`Failed to run code snippet:\n\n${evalCode}\n\nWith error message: ${err}`);159          } finally {160            console.log = originalConsoleLog;161            fc.configureGlobal(originalGlobal);162          }163        })(fc);164      const formatForSize = (size: fc.Size) =>165        `// For size = "${size}":\n${computedStatitics(size)166          .slice(0, TargetNumExamples)167          .map((line) => `// ⢠${line}`)168          .join('\n')}${computedStatitics.length > TargetNumExamples ? '\n// ⢠â¦' : ''}`;169      const sizes = ['xsmall', 'small', 'medium'] as const;170      return `${snippet}\n${sizes.map((size) => formatForSize(size)).join('\n')}`;171    });172    return addJsCodeBlock(updatedStatisticsSnippets.join(''));173  });174  return { content: refinedBlocks.join(''), numExecutedSnippets };...Using AI Code Generation
1const fc = require('fast-check');2const { updatedStatisticsSnippets } = require('fast-check/lib/check/runner/statistics/Statistics');3const stats = {4};5console.log(updatedStatisticsSnippets(stats));6const fc = require('fast-check');7const { updatedStatisticsSnippets } = require('fast-check/lib/check/runner/statistics/Statistics');8const stats = {9};10console.log(updatedStatisticsSnippets(stats, 5));Using AI Code Generation
1const fc = require("fast-check");2const { updatedStatisticsSnippets } = require("fast-check/lib/statistics/StatisticsSnippets");3const { Statistics } = require("fast-check/lib/statistics/Statistics");4const { Shrinkable } = require("fast-check/lib/check/arbitrary/definition/Shrinkable");5const { Random } = require("fast-check/lib/random/generator/Random");6const { Stream } = require("fast-check/lib/stream/Stream");7const { cloneMethod } = require("fast-check/lib/check/symbols");8const { cloneMethod: cloneMethod$1 } = require("fast-check/lib/stream/symbols");9const { cloneMethod: cloneMethod$2 } = require("fast-check/lib/random/symbols");10const updatedStatisticsSnippets$1 = (s, shrunkOnce) => {11  console.log("updatedStatisticsSnippets called");12  return updatedStatisticsSnippets(s, shrunkOnce);13};14const statistics = new Statistics(10, 100);15const shrinkable = new Shrinkable(42, () => Stream.nil(), () => Stream.nil());16const random = new Random(42);17const clone = (v) => v[cloneMethod]();18const clone$1 = (v) => v[cloneMethod$1]();19const clone$2 = (v) => v[cloneMethod$2]();20fc.assert(21  fc.property(fc.integer(), fc.integer(), fc.integer(), fc.integer(), (seed, a, b, c) => {22    console.log("fc.assert called");23    const r = new Random(seed);24    const s = statistics.update(r, new Shrinkable(a, () => Stream.nil(), () => Stream.nil()));25    const s$1 = s.update(r, new Shrinkable(b, () => Stream.nil(), () => Stream.nil()));26    const s$2 = s$1.update(r, new Shrinkable(c, () => Stream.nil(), () => Stream.nil()));27    const s$3 = s$2.update(r, new Shrinkable(c, () => Stream.nil(), () => Stream.nil()));28    const s$4 = s$3.update(r, new Shrinkable(c, () => Stream.nil(), () => Stream.nilUsing AI Code Generation
1const fc = require("fast-check");2const fcMonorepo = require("fast-check-monorepo");3const monorepoTest = require("fast-check-monorepo-test");4fc.configureGlobal({5});6const updatedStatisticsSnippets = fcMonorepo.updatedStatisticsSnippets;7const createMonorepoTest = monorepoTest.createMonorepoTest;8const isString = (value) => typeof value === "string";9const isNumber = (value) => typeof value === "number";10const isBoolean = (value) => typeof value === "boolean";11const isObject = (value) => typeof value === "object" && value !== null;12const isArrayOf = (predicate) => (value) =>13  Array.isArray(value) && value.every(predicate);14const isArrayOfStrings = isArrayOf(isString);15const isArrayOfNumbers = isArrayOf(isNumber);16const isArrayOfBooleans = isArrayOf(isBoolean);17const isArrayOfObjects = isArrayOf(isObject);18const isArrayOfArrays = isArrayOf(Array.isArray);19const isArrayOfArrayOfStrings = isArrayOf(isArrayOfStrings);20const isArrayOfArrayOfNumbers = isArrayOf(isArrayOfNumbers);21const isArrayOfArrayOfBooleans = isArrayOf(isArrayOfBooleans);22const isArrayOfArrayOfObjects = isArrayOf(isArrayOfObjects);23const isArrayOfArrayOfArrayOfStrings = isArrayOf(isArrayOfArrayOfStrings);24const isArrayOfArrayOfArrayOfNumbers = isArrayOf(isArrayOfArrayOfNumbers);25const isArrayOfArrayOfArrayOfBooleans = isArrayOf(isArrayOfArrayOfBooleans);26const isArrayOfArrayOfArrayOfObjects = isArrayOf(isArrayOfArrayOfObjects);27const isArrayOfArrayOfArrayOfArrayOfStrings = isArrayOf(28);29const isArrayOfArrayOfArrayOfArrayOfNumbers = isArrayOf(30);31const isArrayOfArrayOfArrayOfArrayOfBooleans = isArrayOf(32);33const isArrayOfArrayOfArrayOfArrayOfObjects = isArrayOf(34);35const isArrayOfAny = isArrayOf((value) => value);36const isArrayOfArrayOfAny = isArrayOf(isArrayOfAny);Using AI Code Generation
1const { updatedStatisticsSnippets } = require('fast-check');2const { statistics } = updatedStatisticsSnippets(1000, 10, 100);3console.log(statistics);4const { updatedStatisticsSnippets } = require('fast-check-monorepo');5const { statistics } = updatedStatisticsSnippets(1000, 10, 100);6console.log(statistics);7const { updatedStatisticsSnippets } = require('fast-check');8const { statistics } = updatedStatisticsSnippets(1000, 10, 100);9console.log(statistics);10const { updatedStatisticsSnippets } = require('fast-check-monorepo');11const { statistics } = updatedStatisticsSnippets(1000, 10, 100);12console.log(statistics);13const { updatedStatisticsSnippets } = require('fast-check');14const { statistics } = updatedStatisticsSnippets(1000, 10, 100);15console.log(statistics);16const { updatedStatisticsSnippets } = require('fast-check-monorepo');17const { statistics } = updatedStatisticsSnippets(1000, 10, 100);18console.log(statistics);19{ mean: 8.5,20  outliers: [] }21{ mean: 8.5,22  outliers: [] }23{ mean: 8.5,Using AI Code Generation
1const fc = require('fast-check');2const fs = require('fs');3const path = require('path');4const assert = require('assert');5const child_process = require('child_process');6const util = require('util');7const exec = util.promisify(child_process.exec);8const readdir = util.promisify(fs.readdir);9const readFile = util.promisify(fs.readFile);10const writeFile = util.promisify(fs.writeFile);11const unlink = util.promisify(fs.unlink);12const stat = util.promisify(fs.stat);13const access = util.promisify(fs.access);14const mkdir = util.promisify(fs.mkdir);15const rmdir = util.promisify(fs.rmdir);16const copyFile = util.promisify(fs.copyFile);17const rename = util.promisify(fs.rename);18const exec = util.promisify(child_process.exec);19const execFile = util.promisify(child_process.execFile);20const spawn = util.promisify(child_process.spawn);21const spawnSync = util.promisify(child_process.spawnSync);22const fork = util.promisify(child_process.fork);23const forkSync = util.promisify(child_process.forkSync);24const execSync = util.promisify(child_process.execSync);25const execFileSync = util.promisify(child_process.execFileSync);26const execSync = util.promisify(child_process.execSync);Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
