Avatar of 4d47

4d47's solution

to Hello World in the Crystal Track

Test suite

The classical introductory exercise. Just say "Hello, World!".

"Hello, World!" is the traditional first program for beginning programming in a new language or environment.

The objectives are simple:

  • Write a function that returns the string "Hello, World!".
  • Run the test suite and make sure that it succeeds.
  • Submit your solution and check it at the website.

If everything goes well, you will be ready to fetch your first real exercise.

Project Structure

  • src contains your solution to the exercise
  • spec contains the tests to run for the exercise

Running Tests

If you're in the right directory (i.e. the one containing src and spec), you can run the tests for that exercise by running crystal spec:

$ pwd

$ ls
GETTING_STARTED.md README.md          spec               src

$ crystal spec

This will run all of the test files in the spec directory.

In each test file, all but the first test have been skipped.

Once you get a test passing, you can unskip the next one by changing pending to it.

Submitting Your Solution

Be sure to submit the source file in the src directory when submitting your solution:

$ exercism submit src/hello_world.cr


Follow the setup instructions for Crystal here:


More help installing can be found here:


Making the Test Suit Pass

Execute the tests with:

$ crystal spec

In each test suite all but the first test have been skipped.

Once you get a test passing, you can unskip the next one by changing pending to it.


This is an exercise to introduce users to using Exercism http://en.wikipedia.org/wiki/%22Hello,_world!%22_program

Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.


require "spec"
require "../src/*"

describe "HelloWorld" do
  it "Say Hi!" do
    HelloWorld.hello.should eq("Hello, World!")
module HelloWorld
  extend self

  def hello(name : String = "World") : String
    "Hello, #{name}!"

What can you learn from this solution?

A huge amount can be learnt from reading other people’s code. This is why we wanted to give exercism users the option of making their solutions public.

Here are some questions to help you reflect on this solution and learn the most from it.

  • What compromises have been made?
  • Are there new concepts here that I could read more about to develop my understanding?