在温度函数中运行磁带测试

问题描述

我是后端功能的新手,我有这些功能,我需要使用 Tape 运行自动化测试,这个功能是计算三次样条曲线有人可以帮助我吗? 我尝试仅在 getTemperature 中运行测试但没有成功,我不太了解磁带,因此非常感谢任何帮助

export default class CubicSpline {
    splines

    constructor(points){
        this.splines = this.calculateCurves(points)
    }

    public getTemperature(x){        
        let n = this.splines.length
        let spline = null;
        
        if (x <= this.splines[0].x0) {
            spline = this.splines[0]
        } else if (x >= this.splines[n - 1].x0) {
            spline = this.splines[n - 1]
        } else {
            var i = 0
            var j = n - 1
            while (i + 1 < j) {
                // let k = i + (j - i) / 2 // Todo this was original line from swift. discuss with Nate
                let k = i + Math.floor((j - i) / 2)
                if (x <= this.splines[k].x0) {
                    j = k
                } else {
                    i = k
                }
            }
            spline = this.splines[j]
        }

        return this.calculateTemperature(spline,x);
    }

    private calculateTemperature(spline,x){
        return spline.coeficients.a + spline.coeficients.b * (x - spline.x0) + spline.coeficients.c / 2.0 * Math.pow(x - spline.x0,2) + spline.coeficients.d / 6.0 * Math.pow(x - spline.x0,3)
    }

    private calculateCurves(points){
        let n = points.length
        let x = points.map(point => point.x)
        let y = points.map(point => point.y)
        
        var splines = []

        for(let i = 0; i<n; i++) {
            let spline = {x0: x[i],coeficients: {a: y[i],b: 0,c: 0,d: 0}}
            splines.push(spline)
        }

        splines[0].coeficients.c = 0
        splines[n-1].coeficients.c = 0
        
        // Resolve 3diagonal quation system with Thomas method
        var alpha = new Array(n-1).fill(0)
        var beta  = new Array(n-1).fill(0)

        for(let i = 1; i<n-1; i++) {
            let hi      = x[i] - x[i - 1]
            let hi1     = x[i + 1] - x[i]
            let A = hi
            let C = 2.0 * (hi + hi1)
            let B = hi1
            let F = 6.0 * ((y[i + 1] - y[i]) / hi1 - (y[i] - y[i - 1]) / hi)
            let z = (A * alpha[i - 1] + C)
            alpha[i] = -B / z
            beta[i] = (F - A * beta[i - 1]) / z
        }
        
        // Find solution:
        for(let i = n-2; i>=0; i--) {
            splines[i].coeficients.c = alpha[i] * splines[i + 1].coeficients.c + beta[i]
        }
        
        for(let i = n-1; i>=1; i--) {
            let hi = x[i] - x[i - 1]
            splines[i].coeficients.d = (splines[i].coeficients.c - splines[i - 1].coeficients.c) / hi
            splines[i].coeficients.b = hi * (2.0 * splines[i].coeficients.c + splines[i - 1].coeficients.c) / 6.0 + (y[i] - y[i - 1]) / hi
        }
        
        return splines
    }
}

我使用 Nodejs 和磁带在后端运行这个

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)