static void dice_parse_test(void) { struct dice dice; dice = dice_parse("0"); assert(0 == dice.count); assert(1 == dice.sides); assert(0 == dice.modifier); assert(1 == dice.multiplier); dice = dice_parse("1"); assert(1 == dice.count); assert(1 == dice.sides); assert(0 == dice.modifier); assert(1 == dice.multiplier); dice = dice_parse("5"); assert(5 == dice.count); assert(1 == dice.sides); assert(0 == dice.modifier); assert(1 == dice.multiplier); dice = dice_parse("0d4+2"); assert(0 == dice.count); assert(4 == dice.sides); assert(2 == dice.modifier); assert(1 == dice.multiplier); dice = dice_parse("1d6"); assert(1 == dice.count); assert(6 == dice.sides); assert(0 == dice.modifier); assert(1 == dice.multiplier); dice = dice_parse("2D6"); assert(2 == dice.count); assert(6 == dice.sides); assert(0 == dice.modifier); assert(1 == dice.multiplier); dice = dice_parse("10+1"); assert(10 == dice.count); assert(1 == dice.sides); assert(1 == dice.modifier); assert(1 == dice.multiplier); dice = dice_parse("1d6+1"); assert(1 == dice.count); assert(6 == dice.sides); assert(1 == dice.modifier); assert(1 == dice.multiplier); dice = dice_parse("2d4-1"); assert(2 == dice.count); assert(4 == dice.sides); assert(-1 == dice.modifier); assert(1 == dice.multiplier); dice = dice_parse("5*10"); assert(5 == dice.count); assert(1 == dice.sides); assert(0 == dice.modifier); assert(10 == dice.multiplier); dice = dice_parse("1d6*10"); assert(1 == dice.count); assert(6 == dice.sides); assert(0 == dice.modifier); assert(10 == dice.multiplier); dice = dice_parse("5D4X-5"); assert(5 == dice.count); assert(4 == dice.sides); assert(0 == dice.modifier); assert(-5 == dice.multiplier); dice = dice_parse("2d10+4x100"); assert(2 == dice.count); assert(10 == dice.sides); assert(4 == dice.modifier); assert(100 == dice.multiplier); }
int roll(char const *dice_string, struct rnd *rnd) { return dice_roll(dice_parse(dice_string), rnd, NULL); }