{"version":3,"file":"compareStdoutAsSpaceSeparatedTokens.cjs","names":[],"sources":["../../src/helpers/compareStdoutAsSpaceSeparatedTokens.ts"],"sourcesContent":["const ACCEPTABLE_FLOAT_ERROR = 1e-6;\n\nexport function compareStdoutAsSpaceSeparatedTokens(received: string, expected: string): boolean {\n  // Consecutive white spaces (including tabs, page breaks, and line breaks) are treated as one space character.\n  const receivedTokens = received.trim().split(/\\s+/);\n  const expectedTokens = expected.trim().split(/\\s+/);\n\n  if (receivedTokens.length !== expectedTokens.length) return false;\n\n  for (const [i, expectedToken] of expectedTokens.entries()) {\n    const receivedToken = receivedTokens[i];\n\n    const isDecimal = !Number.isNaN(Number(expectedToken)) && expectedToken.includes('.');\n    if (isDecimal) {\n      const receivedNumber = Number(receivedToken);\n      const expectedNumber = Number(expectedToken);\n\n      if (Number.isNaN(expectedNumber)) throw new TypeError(`invalid token in test case: ${expectedToken}`);\n      if (Number.isNaN(receivedNumber)) return false;\n\n      const absoluteError = Math.abs(receivedNumber - expectedNumber);\n      const relativeError = expectedNumber === 0 ? Number.POSITIVE_INFINITY : Math.abs(absoluteError / expectedNumber);\n      if (absoluteError > ACCEPTABLE_FLOAT_ERROR && relativeError > ACCEPTABLE_FLOAT_ERROR) return false;\n    } else {\n      if (receivedToken !== expectedToken) return false;\n    }\n  }\n\n  return true;\n}\n"],"mappings":"aAAA,MAAM,EAAyB,KAE/B,SAAgB,EAAoC,EAAkB,EAA2B,CAE/F,IAAM,EAAiB,EAAS,KAAK,CAAC,CAAC,MAAM,KAAK,EAC5C,EAAiB,EAAS,KAAK,CAAC,CAAC,MAAM,KAAK,EAElD,GAAI,EAAe,SAAW,EAAe,OAAQ,MAAO,GAE5D,IAAK,GAAM,CAAC,EAAG,KAAkB,EAAe,QAAQ,EAAG,CACzD,IAAM,EAAgB,EAAe,GAGrC,GADkB,CAAC,OAAO,MAAM,OAAO,CAAa,CAAC,GAAK,EAAc,SAAS,GAAG,EACrE,CACb,IAAM,EAAiB,OAAO,CAAa,EACrC,EAAiB,OAAO,CAAa,EAE3C,GAAI,OAAO,MAAM,CAAc,EAAG,MAAU,UAAU,+BAA+B,GAAe,EACpG,GAAI,OAAO,MAAM,CAAc,EAAG,MAAO,GAEzC,IAAM,EAAgB,KAAK,IAAI,EAAiB,CAAc,EACxD,EAAgB,IAAmB,EAAI,IAA2B,KAAK,IAAI,EAAgB,CAAc,EAC/G,GAAI,EAAgB,GAA0B,EAAgB,EAAwB,MAAO,EAC/F,MACE,GAAI,IAAkB,EAAe,MAAO,EAEhD,CAEA,MAAO,EACT"}