add suanfa
This commit is contained in:
Vendored
+4
-4
@@ -35,16 +35,16 @@ pipeline {
|
|||||||
echo '🚀 开始部署前端文件...'
|
echo '🚀 开始部署前端文件...'
|
||||||
script {
|
script {
|
||||||
// 确保目标目录存在
|
// 确保目标目录存在
|
||||||
sh 'mkdir -p /app/www'
|
sh 'mkdir -p /app/suanfa/www'
|
||||||
// 清空旧文件
|
// 清空旧文件
|
||||||
sh 'rm -rf /app/www/*'
|
sh 'rm -rf /app/suanfa/www/*'
|
||||||
// 复制新构建的 dist 文件到挂载目录
|
// 复制新构建的 dist 文件到挂载目录
|
||||||
sh 'cp -r dist/* /app/www/'
|
sh 'cp -r dist/* /app/suanfa/www/'
|
||||||
|
|
||||||
echo '✅ 前端文件部署到 Web 服务目录完成!'
|
echo '✅ 前端文件部署到 Web 服务目录完成!'
|
||||||
|
|
||||||
// 可选:列出部署的文件以便验证
|
// 可选:列出部署的文件以便验证
|
||||||
sh 'ls -la /app/www/ | head -10'
|
sh 'ls -la /app/suanfa/www/ | head -10'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,102 @@
|
|||||||
|
import { describe, it, expect } from 'vitest'
|
||||||
|
import { factorial, isPrime, fibonacci, gcd, lcm } from '../utils/mathUtils.js'
|
||||||
|
|
||||||
|
describe('factorial', () => {
|
||||||
|
it('should return 1 for 0!', () => {
|
||||||
|
expect(factorial(0)).toBe(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return 1 for 1!', () => {
|
||||||
|
expect(factorial(1)).toBe(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should calculate 5! = 120', () => {
|
||||||
|
expect(factorial(5)).toBe(120)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should calculate 10! = 3628800', () => {
|
||||||
|
expect(factorial(10)).toBe(3628800)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should throw error for negative numbers', () => {
|
||||||
|
expect(() => factorial(-1)).toThrow('负数没有阶乘')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('isPrime', () => {
|
||||||
|
it('should return false for numbers <= 1', () => {
|
||||||
|
expect(isPrime(0)).toBe(false)
|
||||||
|
expect(isPrime(1)).toBe(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return true for 2', () => {
|
||||||
|
expect(isPrime(2)).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return true for prime numbers', () => {
|
||||||
|
expect(isPrime(7)).toBe(true)
|
||||||
|
expect(isPrime(13)).toBe(true)
|
||||||
|
expect(isPrime(97)).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return false for composite numbers', () => {
|
||||||
|
expect(isPrime(4)).toBe(false)
|
||||||
|
expect(isPrime(15)).toBe(false)
|
||||||
|
expect(isPrime(100)).toBe(false)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('fibonacci', () => {
|
||||||
|
it('should return 0 for fib(0)', () => {
|
||||||
|
expect(fibonacci(0)).toBe(0)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return 1 for fib(1)', () => {
|
||||||
|
expect(fibonacci(1)).toBe(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should calculate fib(10) = 55', () => {
|
||||||
|
expect(fibonacci(10)).toBe(55)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should calculate fib(20) = 6765', () => {
|
||||||
|
expect(fibonacci(20)).toBe(6765)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should throw error for negative input', () => {
|
||||||
|
expect(() => fibonacci(-5)).toThrow('下标不能为负数')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('gcd', () => {
|
||||||
|
it('should return 6 for gcd(18, 24)', () => {
|
||||||
|
expect(gcd(18, 24)).toBe(6)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return 1 for coprime numbers', () => {
|
||||||
|
expect(gcd(7, 13)).toBe(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should handle zero', () => {
|
||||||
|
expect(gcd(0, 5)).toBe(5)
|
||||||
|
expect(gcd(5, 0)).toBe(5)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should handle negative numbers', () => {
|
||||||
|
expect(gcd(-18, 24)).toBe(6)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('lcm', () => {
|
||||||
|
it('should calculate lcm(4, 6) = 12', () => {
|
||||||
|
expect(lcm(4, 6)).toBe(12)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should calculate lcm(7, 13) = 91', () => {
|
||||||
|
expect(lcm(7, 13)).toBe(91)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return 0 if either number is 0', () => {
|
||||||
|
expect(lcm(0, 5)).toBe(0)
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/**
|
||||||
|
* 基础数学工具函数 - 算法教学辅助
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算阶乘 (n!)
|
||||||
|
* @param {number} n - 非负整数
|
||||||
|
* @returns {number} n 的阶乘
|
||||||
|
*/
|
||||||
|
export function factorial(n) {
|
||||||
|
if (n < 0) throw new Error('负数没有阶乘')
|
||||||
|
if (n === 0 || n === 1) return 1
|
||||||
|
let result = 1
|
||||||
|
for (let i = 2; i <= n; i++) {
|
||||||
|
result *= i
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断一个数是否为质数
|
||||||
|
* @param {number} n - 正整数
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
export function isPrime(n) {
|
||||||
|
if (n <= 1) return false
|
||||||
|
if (n <= 3) return true
|
||||||
|
if (n % 2 === 0 || n % 3 === 0) return false
|
||||||
|
for (let i = 5; i * i <= n; i += 6) {
|
||||||
|
if (n % i === 0 || n % (i + 2) === 0) return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算斐波那契数列的第 n 项 (迭代法)
|
||||||
|
* @param {number} n - 非负整数
|
||||||
|
* @returns {number} 第 n 个斐波那契数
|
||||||
|
*/
|
||||||
|
export function fibonacci(n) {
|
||||||
|
if (n < 0) throw new Error('下标不能为负数')
|
||||||
|
if (n === 0) return 0
|
||||||
|
if (n === 1) return 1
|
||||||
|
let a = 0, b = 1
|
||||||
|
for (let i = 2; i <= n; i++) {
|
||||||
|
const tmp = a + b
|
||||||
|
a = b
|
||||||
|
b = tmp
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 求两个数的最大公约数 (辗转相除法)
|
||||||
|
* @param {number} a
|
||||||
|
* @param {number} b
|
||||||
|
* @returns {number} 最大公约数
|
||||||
|
*/
|
||||||
|
export function gcd(a, b) {
|
||||||
|
a = Math.abs(a)
|
||||||
|
b = Math.abs(b)
|
||||||
|
while (b !== 0) {
|
||||||
|
const tmp = b
|
||||||
|
b = a % b
|
||||||
|
a = tmp
|
||||||
|
}
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 求两个数的最小公倍数
|
||||||
|
* @param {number} a
|
||||||
|
* @param {number} b
|
||||||
|
* @returns {number} 最小公倍数
|
||||||
|
*/
|
||||||
|
export function lcm(a, b) {
|
||||||
|
if (a === 0 || b === 0) return 0
|
||||||
|
return Math.abs(a * b) / gcd(a, b)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user