--- /dev/null
+#ifndef __COCO_IR_STRIDE_2D_H__
+#define __COCO_IR_STRIDE_2D_H__
+
+#include <cstdint>
+
+namespace coco
+{
+
+class Stride2D
+{
+public:
+ Stride2D() : _vertical{0}, _horizontal{0}
+ {
+ // DO NOTHING
+ }
+
+public:
+ Stride2D(uint32_t vertical, uint32_t horizontal) : _vertical{vertical}, _horizontal{horizontal}
+ {
+ // DO NOTHING
+ }
+
+public:
+ uint32_t vertical(void) const { return _vertical; }
+ Stride2D &vertical(uint32_t value);
+
+public:
+ uint32_t horizontal(void) const { return _horizontal; }
+ Stride2D &horizontal(uint32_t value);
+
+private:
+ uint32_t _vertical;
+ uint32_t _horizontal;
+};
+
+} // namespace coco
+
+#endif // __COCO_IR_STRIDE_2D_H__
--- /dev/null
+#include "coco/IR/Stride2D.h"
+
+namespace coco
+{
+
+Stride2D &Stride2D::vertical(uint32_t value)
+{
+ _vertical = value;
+ return (*this);
+}
+
+Stride2D &Stride2D::horizontal(uint32_t value)
+{
+ _horizontal = value;
+ return (*this);
+}
+
+} // namespace coco
--- /dev/null
+#include "coco/IR/Stride2D.h"
+
+#include <gtest/gtest.h>
+
+TEST(IR_STRIDE_2D, default_constructor)
+{
+ coco::Stride2D stride;
+
+ ASSERT_EQ(stride.vertical(), 0);
+ ASSERT_EQ(stride.horizontal(), 0);
+}
+
+TEST(IR_STRIDE_2D, explicit_constructor_4)
+{
+ coco::Stride2D stride{1, 2};
+
+ ASSERT_EQ(stride.vertical(), 1);
+ ASSERT_EQ(stride.horizontal(), 2);
+}
+
+TEST(IR_STRIDE_2D, update)
+{
+ coco::Stride2D stride;
+
+ stride.vertical(1).horizontal(2);
+
+ ASSERT_EQ(stride.vertical(), 1);
+ ASSERT_EQ(stride.horizontal(), 2);
+}