Module: FieldTest::BinaryTest

Defined in:
ext/field_test/ext.c

Class Method Summary collapse

Class Method Details

.probabilities(results) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'ext/field_test/ext.c', line 5

static VALUE probabilities(VALUE self, VALUE results)
{
    Check_Type(results, T_ARRAY);

    long count = RARRAY_LEN(results);
    if (count > 4) {
        rb_raise(rb_eArgError, "too many variants");
    }

    int participants[4];
    int conversions[4];
    double probabilities[4];

    VALUE *results_ptr = RARRAY_PTR(results);
    for (long i = 0; i < count; i++) {
        VALUE v = results_ptr[i];
        participants[i] = NUM2INT(rb_hash_aref(v, ID2SYM(rb_intern("participated"))));
        conversions[i] = NUM2INT(rb_hash_aref(v, ID2SYM(rb_intern("converted"))));
    }

    int status = bayestest_binary((int) count, participants, conversions, probabilities);
    if (status != 0) {
        rb_raise(rb_eRuntimeError, "bad status");
    }

    VALUE rb_probabilities = rb_ary_new_capa(count);
    for (long i = 0; i < count; i++) {
        rb_ary_push(rb_probabilities, DBL2NUM(probabilities[i]));
    }
    return rb_probabilities;
}