Skip to content

Instantly share code, notes, and snippets.

View JayBazuzi's full-sized avatar

Jay Bazuzi JayBazuzi

View GitHub Profile
namespace CPPUNIT_NS
{
template <template <typename...> class C, typename... T> struct assertion_traits<C<T...>>
{
inline static bool equal(C<T...> const& left, C<T...> const& right)
{
return std::equal(
left.cbegin(), left.cend(), right.cbegin(), assertion_traits<decltype(*(left.cbegin()))>::equal);
}
@JayBazuzi
JayBazuzi / BLOG:three kinds of code.md
Last active March 17, 2017 05:06
Three Kinds of Code

I propose a refactoring "Extract Open Source Project".

We build software systems to some purpose. But when I read code, I see that some of that code directly serves that purpose while other code does not. I see three categories:

Features

This is the stuff you and your customers care about. It's the reason your software system exists.

In an e-commerce system, that's code that says "when a customer uses a discount code, the discount is applied to the order."

public class MyViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = delegate {};
string _name;
public string Name
{
get { return _name; }
set
{
vector<Card> cards = ...
for (i = 0; i < cards.length(); i++)
{
Assert(card[i].value == i % 13);
Assert(card[i].suit == i / 13);
}
#define Example(name) Example_(name, __COUNTER__)
#define Example_(name, counter) Example__(name, counter)
#define Example__(name, counter) \
void Example##counter(); \
struct ExampleInitializer##counter \
{ \
ExampleInitializer##counter() \
{ \
allExamples.Add({__FILE__, name, Example##counter}); \
} \
#define Example(name, body) Example_(name, body, __COUNTER__)
#define Example_(name, body, counter) Example__(name, body, counter)
#define Example__(name, body, counter) \
struct ExampleInitializer##counter \
{ \
ExampleInitializer##counter() \
{ \
allExamples.Add({__FILE__, name, body}); \
} \
} ExampleInitializer##counter##Instance; \
int F(...)
{
// ...
if (...)
/* start */
{
if (...)
{
// ...
// Given:
Y y = ...
Action action = () => {
var x = F(y);
G(x);
};
action();
@JayBazuzi
JayBazuzi / async void event handler.cs
Created August 28, 2016 20:26
Demonstrating an alternative to `async void` event handlers. Both print out messages in the order listed (1/2/3/4). Also, if you remove the Sleep(), neither prints out #4 because the process exits first.
static void Main()
{
MyEvent += Handle;
Console.WriteLine("1. Before invoking event");
MyEvent(null, null);
Console.WriteLine("3. After invoking event");
Thread.Sleep(1000);
}
// Given:
var y = ...;
{
var x = F(y);
G(x);
}
// After
Action action = () => {