Featured image of post CMU 15-445|Project0 开始做一个数据库内核

CMU 15-445|Project0 开始做一个数据库内核

CMU 15-445 (FALL 2022) Project #0 一些注意事项

We will make the auto-grader for each assignment available to non-CMU students on Gradescope after their due date for CMU students. In exchange for making this available to the public, we ask that you do not make your project implementations public on Github or other source code repositories.

CMU为外校的学生提供了自动测试平台和公开课,代价是什么呢?那就是不要直接公开代码在网上。还请大家遵守。

这篇博客记录一些踩的坑,欢迎交流

知识点

语言基础

  • C++基础语法
  • unique_ptr的用法
  • std::move可以将左值显示转化为右值
  • 并发锁的使用

算法要求

  • Trie本身的原理很简单,可以实现O(length)的增删改查操作,当然缺点就是空间换时间
  • 可以先做这道题。也可以直接做

开发环境

我是在自己的Ubuntu22.04的服务器上搭建环境的。但是用的本地Clion开发。如果要用win,记得一定要先在linux上面把源文件下好,不然脚本会出现错误(因为换行符的原因,如果出错了可以进行替换)。

本地测试

==注意在make前把想要测试的题目Test文件中的DISABLED_给去掉。== 因为GTest的宏,测试名前面有DISABLED_会被跳过测试。 测试

  • 然后你可以通过自己写代码增加一些样例
  • 比如
TEST(MyStarterTest,MyTest1)
{
  {
    Trie trie;
    bool success;

    trie.Insert<int>("aaa",1);
    success=trie.Insert<int>("aa",1);
    EXPECT_EQ(success, true);
  }
}
TEST(MyStarterTest,MyTest2)
{
  {
    Trie trie;
    bool success;

    trie.Insert<int>("abc",1);
    success=trie.Insert<int>("abed",1);
    EXPECT_EQ(success, true);
  }
}
  • MyStarterTest就是一个测试组,函数的第二个参数是测试的名字。通过对值比较判断测试是否通过
  • 比如EXPECT_EQ(success, true),就是判断变量success是否为true
  • EXPECT_EQ((*child_node)->GetKeyChar(), 'c');判断该节点是否key为c
  • EXPECT_NE(child_node, nullptr);判断child_node是否不等于nullptr
  • 自定义测试效果 在这里插入图片描述

网上评测

在这里插入图片描述 网址是gradescope。然后填入上面的邀请码,学校记得写CMU。

==提交记得用zip==不能用github!!!

代码格式

在这里插入图片描述 本地测试通过之后直接去网上提交之前,记得格式化自己的代码。 在这里插入图片描述 总之记得通过这个检查自己的代码格式是否正确。

在这里插入图片描述 然后经历过无数次debug后发现自己有个初值没赋。

然后这个OJ有个比较好的地方就是你可以通过cout打印出你想要的信息 在这里插入图片描述

注意事项

  • 遇到问题尝试在不同的地方输出测试信息,然后顺着程序控制流看,如果多次找不到错误一定要仔细,想想自己是不是哪里看漏了