首页 > 其他分享 >测试λ 函数的一种方法:通过全局 λ 函数表,保存所有λ 函数

测试λ 函数的一种方法:通过全局 λ 函数表,保存所有λ 函数

时间:2024-05-30 20:45:05浏览次数:22  
标签:std lambdaMap 函数 while 测试 全局 include name

下面的方式,把任意的局部代码包装在λ 函数里,就地调用,同时把λ 函数保存到全局表,在外部访问。

#include <iostream>
#include <vector>
#include <functional>
#include <map>
#include <any>

// 全局的 map,用于保存 foo 函数内部的 lambda 函数
std::map<std::string, std::any> lambdaMap;

// 定义宏,用于在 foo 函数中插入 lambda 测试代码
#define LAMBDA_TEST_BEGIN(name, params) \
    auto lambda_##name = [&](params) {

#define LAMBDA_TEST_END(name, args) \
    }; \
    lambdaMap[#name] = lambda_##name;

void foo() {
    // 容器
    std::vector<int> container = {1, 2, 3, 4, 5};
    
    // 在原始 while 循环的前后分别插入宏定义
    LAMBDA_TEST_BEGIN(while, std::vector<int>& vec)
        // 只有当容器非空时才执行逻辑
        while (!vec.empty()) {
            // 在容器非空时的逻辑
            std::cout << "容器不为空,大小为 " << vec.size() << std::endl;
            // 在这里可以添加更多逻辑
            // ...
            vec.pop_back(); // 为了避免无限循环,这里简单地从容器中删除最后一个元素
        }
        // 容器为空时的逻辑
        std::cout << "容器为空" << std::endl;
    LAMBDA_TEST_END(while, container)
}

int main() {
    foo(); // 调用 foo 函数

    // 在 main 函数中测试 lambda 函数的逻辑
    std::vector<int> emptyContainer;
    std::vector<int> nonEmptyContainer = {1, 2, 3};

    // 测试容器为空时的逻辑
    std::cout << "测试容器为空时的逻辑:" << std::endl;
    std::any_cast<std::function<void(std::vector<int>&)>>(lambdaMap["while"])(emptyContainer);
    std::cout << std::endl;

    // 测试容器非空时的逻辑
    std::cout << "测试容器非空时的逻辑:" << std::endl;
    std::any_cast<std::function<void(std::vector<int>&)>>(lambdaMap["while"])(nonEmptyContainer);
    
    return 0;
}

标签:std,lambdaMap,函数,while,测试,全局,include,name
From: https://www.cnblogs.com/math/p/18223178/a-method-2-test-lambda-f

相关文章

  • java单元测试:spring测试模块
    Spring测试模块为开发者提供了一套强大的工具,用于在Spring应用中进行单元测试、集成测试和端到端测试。1.测试框架集成Spring测试模块与多个测试框架集成,最常用的是JUnit5和TestNG。JUnit5集成使用@ExtendWith(SpringExtension.class)注解来启用Spring测......
  • 宝塔7.9.7绿色版本,个人使用测试
    警告本破解版仅可用于个人使用、学习!若发现其他使用用途,本人及插件制作者不承担任何责任请支持正版安装脚本1,Centos安装命令(默认安装是7.8.0直接在线升级7.9.7):yuminstall-ywget&&wget-Oinstall.shhttp://io.bt.sy/install/install_6.0.sh&&shinstall.sh2,......
  • uoj项目部署的学习实践和基于JUnit进行的项目测试
    基于JUnit进行的项目测试对不同功能点进行测试:检测忘记密码功能、注册功能能否正常使用脚本文件:registerTest.java1.检测忘记密码功能。事先注册好一个账号用于测试测试步骤:输入账号输入电子邮箱输入验证码1)用例标题:验证码错误情况测试数据:账号2021127电子邮箱2848250......
  • 基于JUnit进行的项目测试
    基于JUnit进行的项目测试对不同功能点进行测试:检测忘记密码功能、注册功能能否正常使用脚本文件:registerTest.java1.检测忘记密码功能。事先注册好一个账号用于测试测试步骤:输入账号输入电子邮箱输入验证码1)用例标题:验证码错误情况测试数据:账号2021127电子邮箱2848250......
  • 【软件测试】软件测试概念 | 测试用例 | BUG | 开发模型 | 测试模型 | 生命周期
    文章目录一、什么是软件测试1.什么是软件测试2.软件测试和调试的区别测试人员需要的素养二、软件测试概念1.需求1.需求的定义2.测试人员眼中的需求2.测试用例1.测试用例概念3.BUG软件错误4、开发模型和测试模型1.软件的生命周期2.开发模型1.瀑布模型2.螺旋模型3.......
  • 粒子群算法及蜂群算法求多维函数极值对比
    1.粒子群算法    1.1粒子群算法简单介绍    粒子群优化算法源于对鸟群活动的研究。20世纪70年代许多学者对鸟群的群体性活动进行了深入研究。生物学家Reynolds提出了Boids模型,用来模拟鸟群聚集飞行的行为。在这个模型中每个个体都遵守三条规则:避免碰......
  • Lua封装函数模块并由其他模块调用
    在Lua中,封装函数通常意味着将一组相关的功能组织在一起,然后通过模块的形式提供给其他脚本调用。Lua的模块可以是简单的脚本文件,也可以是返回一个表的脚本,表中包含了模块的所有公共函数和变量。以下是创建和使用Lua模块的基本步骤:1.创建模块创建一个Lua文件,比如mymodule.lua,并......
  • 通过send函数发送10GB的数据,epoll
    在处理大量数据发送时,如尝试通过send函数发送10GB的数据,由于TCPsocket缓冲区大小限制,单次send调用可能并不会完全发送所有数据。例如,首次调用可能仅成功发送约256KB的数据,之后再次调用send可能会因为缓冲区已满而立即返回错误码EAGAIN,这表明必须等待缓冲区有更多空间才能继续发......
  • python 构造函数
    在Python中,构造函数是一个特殊的方法,用于在创建类的实例(对象)时自动调用,以初始化对象的属性。构造函数在类中是通过__init__方法来定义的。它的主要作用是为新创建的对象设置初始状态,即初始化对象的属性。以下是构造函数的几个关键点:方法名称固定:构造函数的名称必须是__in......
  • malloc()函数
    malloc()函数malloc是动态内存分配函数,用于申请一块连续的指定大小的内存块区域,以void*类型返回分配的内存区域地址。函数原型void*malloc(unsignedintnum_bytes);分配长度为num_bytes字节的内存块。使用时要包含头文件stdlib.h,也可以使用#include<malloc.h>,但并不建议,......