This seems spec.

When the number of argument for Hash[] is 1,
the argument must be a hash (or hash like object) or an array (or array like).

And the array object must be an array of two or one length array.
Your code is an array of integer, so the code returns the empty hash.


following is the source code of this process.

rb_hash_s_create(int argc, VALUE *argv, VALUE klass)
{
    VALUE hash, tmp;
    int i;

    if (argc == 1) {
        tmp = rb_hash_s_try_convert(Qnil, argv[0]);
        if (!NIL_P(tmp)) {
            hash = hash_alloc(klass);
            if (RHASH(tmp)->ntbl) {
                RHASH(hash)->ntbl = st_copy(RHASH(tmp)->ntbl);
            }
            return hash;
        }

        tmp = rb_check_array_type(argv[0]);
        if (!NIL_P(tmp)) {
            long i;

            hash = hash_alloc(klass);
            for (i = 0; i < RARRAY_LEN(tmp); ++i) {
                VALUE v = rb_check_array_type(RARRAY_PTR(tmp)[i]);
                VALUE key, val = Qnil;

                if (NIL_P(v)) continue;
                switch (RARRAY_LEN(v)) {
                  case 2:
                    val = RARRAY_PTR(v)[1];
                  case 1:
                    key = RARRAY_PTR(v)[0];
                    rb_hash_aset(hash, key, val);
                }
            }
            return hash;
        }
    }
    if (argc % 2 != 0) {
        rb_raise(rb_eArgError, "odd number of arguments for Hash");
    }

    hash = hash_alloc(klass);
    for (i=0; i<argc; i+=2) {
        rb_hash_aset(hash, argv[i], argv[i + 1]);
    }

    return hash;
}

-- 
NARUSE, Yui  <naruse / airemix.jp>