Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments...
Transcript of Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments...
![Page 1: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/1.jpg)
6.S096 Lecture 8 – Project EnvironmentsIterators, N-Body Problem, Setup
Andre Kessler
Andre Kessler 6.S096 Lecture 8 – Project Environments 1 / 41
![Page 2: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/2.jpg)
Outline
1 Assignment 3 - Recap
2 Final Project (nbody)
3 Unit Testing
4 Wrap-up
Andre Kessler 6.S096 Lecture 8 – Project Environments 2 / 41
![Page 3: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/3.jpg)
Assignment 3 - Recap
Sample Solution
class List {
size_t _length;
ListNode *_begin, *_back;
public:
class iterator {
friend class List;
ListNode *_node;
public:
iterator( ListNode *theNode );
iterator& operator++();
int& operator*();
bool operator==( const iterator &rhs );
bool operator!=( const iterator &rhs );
}; // ...etc
Andre Kessler 6.S096 Lecture 8 – Project Environments 3 / 41
![Page 4: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/4.jpg)
Assignment 3 - Recap
Sample Solution
iterator begin();
iterator back();
iterator end();
Iterators allow us to write a fast reduce function like this:
int ReduceFunction::reduce( const List &lis ) const {
int result = identity();
for( auto it = lis.begin(); it != lis.end(); ++it ) {
result = function( result, *it );
}
return result;
}
Andre Kessler 6.S096 Lecture 8 – Project Environments 4 / 41
![Page 5: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/5.jpg)
Assignment 3 - Recap
Iterator Implementation
List::iterator::iterator( ListNode *theNode ) :
_node{theNode} {}
List::iterator& List::iterator::operator++() {
_node = _node->next();
return *this;
}
int& List::iterator::operator*() {
return _node->value();
}
Andre Kessler 6.S096 Lecture 8 – Project Environments 5 / 41
![Page 6: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/6.jpg)
Assignment 3 - Recap
Const Iterator Implementation
List::const_iterator::const_iterator( ListNode *p ) :
_node{p} {}
List::const_iterator&
List::const_iterator::operator++() {
_node = _node->next();
return *this;
}
const int& List::const_iterator::operator*() {
return _node->value();
}
Andre Kessler 6.S096 Lecture 8 – Project Environments 6 / 41
![Page 7: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/7.jpg)
Assignment 3 - Recap
More in the code...
Let’s look into the code...
Andre Kessler 6.S096 Lecture 8 – Project Environments 7 / 41
![Page 8: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/8.jpg)
Final Project (nbody)
Final Project
Groups of 2-4 people; 3 recommended
Andre Kessler 6.S096 Lecture 8 – Project Environments 8 / 41
![Page 9: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/9.jpg)
Final Project (nbody)
N-Body Gravity Simulation
The Problem
Have N point masses with initial positions ri , velocities vi , accelerationsai , and masses mi . Compute all-pairs forces
GmFij = − imj
(r|ri − rj |
i3− rj)
and update the locations.
Andre Kessler 6.S096 Lecture 8 – Project Environments 9 / 41
![Page 10: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/10.jpg)
Final Project (nbody)
Most basic integrator
void System::integrateSystem( float dt ) {
Vector3f r, v, a;
for( size_t i = 0; i < _nBodies; ++i ) {
r = _body[i].position();
v = _body[i].velocity();
a = _body[i].acc();
v = v + ( a * dt );
r = r + v * dt;
_body[i].position() = r;
_body[i].velocity() = v;
}
}
Andre Kessler 6.S096 Lecture 8 – Project Environments 10 / 41
![Page 11: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/11.jpg)
Final Project (nbody)
Components
Requirements
25% Physics Engine - quality and extensibility of simulation code
25% Visualization - OpenGL; getting a good visualization working
15% Unit testing - gtest, quality and coverage of tests
15% Software Process - code reviews, overall integration of project
10% Interactive - user interactivity with simulation (keyboard, mouse, etc)
10% Do something cool - make it look cool, add a useful feature, dosomething interesting!
Extra 5% available in all areas for exceptional effort.
Andre Kessler 6.S096 Lecture 8 – Project Environments 11 / 41
![Page 12: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/12.jpg)
Final Project (nbody)
“Do Something Cool”
Just a few examples of potential areas:
Advanced OpenGL
Threading with <thread>
Parallelize with OpenMP
More interactive (other forms of input)
Andre Kessler 6.S096 Lecture 8 – Project Environments 12 / 41
![Page 13: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/13.jpg)
Final Project (nbody)
Physics Engine
You should be producing a library called libnbody.a. The only strictrequirement is that you will wrap all of your code in a namespace nbody
and provide the following interface:
namespace nbody {
class Simulation {
// ...
public:
void loadRun( std::istream &in );
void evolveSystemFor( float time );
void saveRun( std::ostream &out ) const;
// ...
};
} // namespace nbody
Andre Kessler 6.S096 Lecture 8 – Project Environments 13 / 41
![Page 14: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/14.jpg)
Final Project (nbody)
Physics Engine
void nbody::Simulation::loadRun( std::istream &in );
Constructor to read in a common “state” file.
Andre Kessler 6.S096 Lecture 8 – Project Environments 14 / 41
![Page 15: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/15.jpg)
Final Project (nbody)
Physics Engine
void nbody::Simulation::evolveSystemFor( float time );
Evolve the system forward in time by time (inseconds).
Andre Kessler 6.S096 Lecture 8 – Project Environments 15 / 41
![Page 16: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/16.jpg)
Final Project (nbody)
Physics Engine
void nbody::Simulation::saveRun( std::ostream &out )
const;
Function to write out a common “state” file.
Andre Kessler 6.S096 Lecture 8 – Project Environments 16 / 41
![Page 17: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/17.jpg)
Final Project (nbody)
Your team should take the initiative! Look up various ways of do theintegration to improve accuracy, different size time steps, unit systems,and so forth. I’ll be adding hints throughout the week.
Physics Engine
Why so little specification?
Andre Kessler 6.S096 Lecture 8 – Project Environments 17 / 41
![Page 18: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/18.jpg)
Final Project (nbody)
Physics Engine
Why so little specification?Your team should take the initiative! Look up various ways of do theintegration to improve accuracy, different size time steps, unit systems,and so forth. I’ll be adding hints throughout the week.
Andre Kessler 6.S096 Lecture 8 – Project Environments 17 / 41
![Page 19: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/19.jpg)
Final Project (nbody)
Binary Star System Example 1
Andre Kessler 6.S096 Lecture 8 – Project Environments 18 / 41
![Page 20: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/20.jpg)
Final Project (nbody)
Binary Star System Example 2
Andre Kessler 6.S096 Lecture 8 – Project Environments 19 / 41
![Page 21: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/21.jpg)
Final Project (nbody)
Binary Star System Example 3
Andre Kessler 6.S096 Lecture 8 – Project Environments 20 / 41
![Page 22: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/22.jpg)
Final Project (nbody)
Binary Star System Example 4
Andre Kessler 6.S096 Lecture 8 – Project Environments 21 / 41
![Page 23: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/23.jpg)
Final Project (nbody)
Binary Star System Example 5
Andre Kessler 6.S096 Lecture 8 – Project Environments 22 / 41
![Page 24: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/24.jpg)
Final Project (nbody)
Binary Star System Example 6
Andre Kessler 6.S096 Lecture 8 – Project Environments 23 / 41
![Page 25: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/25.jpg)
Final Project (nbody)
Binary Star System Example 7
Andre Kessler 6.S096 Lecture 8 – Project Environments 24 / 41
![Page 26: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/26.jpg)
Final Project (nbody)
Binary Star System Example 8
Andre Kessler 6.S096 Lecture 8 – Project Environments 25 / 41
![Page 27: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/27.jpg)
Final Project (nbody)
Binary Star System Example 9
Andre Kessler 6.S096 Lecture 8 – Project Environments 26 / 41
![Page 28: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/28.jpg)
Final Project (nbody)
Binary Star System Example 10
Andre Kessler 6.S096 Lecture 8 – Project Environments 27 / 41
![Page 29: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/29.jpg)
Final Project (nbody)
Visualization
OpenGL; sample code provided tomorrow and Wednesday.
Andre Kessler 6.S096 Lecture 8 – Project Environments
Courtesy of Aaron M. Geller. Used with permission.
28 / 41
![Page 30: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/30.jpg)
Final Project (nbody)
Interactive
Your final product should be easy to use.
- Mouse integration (moving the view)
- Keyboard controls
- Command line arguments
Andre Kessler 6.S096 Lecture 8 – Project Environments 29 / 41
![Page 31: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/31.jpg)
Final Project (nbody)
Content Provided
Vector3.h
So that you don’t have to write (all) of your own vector math, feel free touse the header available.
It’s a templated 3-d vector class that can be widely useful and isguaranteed fast (“plain old data type”)
Andre Kessler 6.S096 Lecture 8 – Project Environments 30 / 41
![Page 32: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/32.jpg)
Final Project (nbody)
Content Provided - Vector3.h
template<typename T>
class Vector3 {
T _x, _y, _z;
public:
Vector3() : _x{}, _y{}, _z{} {}
Vector3( T x_, T y_, T z_ ) :
_x{x_}, _y{y_}, _z{z_} {}
inline T x() const { return _x; }
inline T y() const { return _y; }
inline T z() const { return _z; }
T norm() const;
T normsq() const;
};
Andre Kessler 6.S096 Lecture 8 – Project Environments 31 / 41
![Page 33: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/33.jpg)
Final Project (nbody)
Content Provided - Vector3.h
All the overloads and helpful functions you could want:
template<typename T> inline
const Vector3<T> operator+( const Vector3<T> &a,
const Vector3<T> &b ) {
return Vector3<T>{ a.x() + b.x(),
a.y() + b.y(),
a.z() + b.z() };
}
//..etc
template<typename T> inline
T dot( const Vector3<T> &a, const Vector3<T> &b ) {
return a.x() * b.x() + a.y() * b.y() + a.z() * b.z();
}
Andre Kessler 6.S096 Lecture 8 – Project Environments 32 / 41
![Page 34: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/34.jpg)
Final Project (nbody)
Code Reviews
- You should be doing reviews of all committedcode within your group.
- Each group member should send me one suchreview by Wednesday.
- There will also be an inter-group review that I willorganize.
Andre Kessler 6.S096 Lecture 8 – Project Environments 33 / 41
![Page 35: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/35.jpg)
Final Project (nbody)
What you send to me
Your name and the name of the person whose code you are reviewing.
The snippet of code you are reviewing: more than 30 lines, less than100.
Your comments interspersed in their code.
A summary of main points relating to the review (what they did well,major areas for improvement, common issues, general observations).
You should choose a bite-sized chunk that will take you 45 mins to 1 hourto fully review.
Andre Kessler 6.S096 Lecture 8 – Project Environments 34 / 41
![Page 36: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/36.jpg)
Final Project (nbody)
What you send to me
Your name and the name of the person whose code you are reviewing.
The snippet of code you are reviewing: more than 30 lines, less than100.
Your comments interspersed in their code.
A summary of main points relating to the review (what they did well,major areas for improvement, common issues, general observations).
You should choose a bite-sized chunk that will take you 45 mins to 1 hourto fully review.
Andre Kessler 6.S096 Lecture 8 – Project Environments 34 / 41
![Page 37: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/37.jpg)
Final Project (nbody)
Tips for effective code review
Most important features for the code: correctness, maintainability,reliability, and performance. Consistent style is good, but those otherpoints come first!
Keep your review short and to the point.
Check the code for compliance with the class coding standards.
Take the time for a proper review, but don’t spend much more thanan hour; additionally, don’t review much more than about 200 lines ofcode at once.
Andre Kessler 6.S096 Lecture 8 – Project Environments 35 / 41
![Page 38: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/38.jpg)
Final Project (nbody)
Structure of Final Project Source
Live demonstration of project setup
Andre Kessler 6.S096 Lecture 8 – Project Environments 36 / 41
![Page 39: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/39.jpg)
Final Project (nbody)
Separation of build and source
Have a clean build.
Since this is definitely under revision control, we want to keep ourdirectories free from clutter
Hence, all object (.o) files will go in the bin/ directory.
Third-party libraries live in their own directory third party/gtest
or whatever.
Headers for our project named “project” are deployed to the installdirectory.
Be able to build in one step
We have an upper-level Makefile so that we can still just make ourproject.
However, that’s been split up into more modular sub-makefiles(make/*.mk).
Andre Kessler 6.S096 Lecture 8 – Project Environments 37 / 41
![Page 40: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/40.jpg)
Unit Testing
Unit Testing and Test-Driven Development
Testing your source code, one function or “unit” ofcode at a time.
Test-driven development: write the tests first and then write codewhich makes the tests pass
Decide how you want the interface to work in general, write sometests, and go develop the specifics.
Andre Kessler 6.S096 Lecture 8 – Project Environments 38 / 41
![Page 41: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/41.jpg)
Unit Testing
gtest: the Google C++ Testing Framework
Highly cross-platform, available from here.
Runs your full suite of tests (potentially each time you compile)
Tests are very portable and reusable across multiple architectures
Powerful, but very few dependencies.
Example from their primer:
ASSERT_EQ(x.size(), y.size()) << "unequal length";
for (int i = 0; i < x.size(); ++i) {
EXPECT_EQ(x[i], y[i]) << "differ at index " << i;
}
Andre Kessler 6.S096 Lecture 8 – Project Environments 39 / 41
![Page 42: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/42.jpg)
Unit Testing
Examples
Let’s see some examples...
Andre Kessler 6.S096 Lecture 8 – Project Environments 40 / 41
![Page 43: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/43.jpg)
Wrap-up
Wrap-up & Wednesday
Final project due Saturday
You need to begin work on it *now*!
Class on Wed.
OpenGL, templates, more on large projects
Questions?Office hours Mon, Tues
Andre Kessler 6.S096 Lecture 8 – Project Environments 41 / 41
![Page 44: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project](https://reader034.fdocuments.in/reader034/viewer/2022050208/5f5aee64e93b3b7cfd75dfb2/html5/thumbnails/44.jpg)
MIT OpenCourseWarehttp://ocw.mit.edu
6.S096 Effective Programming in C and C++IAP 2014
For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.