|
469 | 469 | describe "#div" do |
470 | 470 | it "divides Money by Integer and returns Money" do |
471 | 471 | ts = [ |
472 | | - { a: Money.new(13, :USD), b: 4, c: Money.new(3, :USD) }, |
473 | | - { a: Money.new(13, :USD), b: -4, c: Money.new(-3, :USD) }, |
474 | | - { a: Money.new(-13, :USD), b: 4, c: Money.new(-3, :USD) }, |
475 | | - { a: Money.new(-13, :USD), b: -4, c: Money.new(3, :USD) }, |
| 472 | + { a: Money.new(13, :USD), b: 4, c: Money.new(3, :USD) }, |
| 473 | + { a: Money.new(13, :USD), b: -4, c: Money.new(-3, :USD) }, |
| 474 | + { a: Money.new(-13, :USD), b: 4, c: Money.new(-3, :USD) }, |
| 475 | + { a: Money.new(-13, :USD), b: -4, c: Money.new(3, :USD) }, |
476 | 476 | ] |
477 | 477 | ts.each do |t| |
478 | 478 | expect(t[:a].div(t[:b])).to eq t[:c] |
|
481 | 481 |
|
482 | 482 | it "divides Money by Money (same currency) and returns Float" do |
483 | 483 | ts = [ |
484 | | - { a: Money.new(13, :USD), b: Money.new(4, :USD), c: 3.25 }, |
485 | | - { a: Money.new(13, :USD), b: Money.new(-4, :USD), c: -3.25 }, |
486 | | - { a: Money.new(-13, :USD), b: Money.new(4, :USD), c: -3.25 }, |
487 | | - { a: Money.new(-13, :USD), b: Money.new(-4, :USD), c: 3.25 }, |
| 484 | + { a: Money.new(13, :USD), b: Money.new(4, :USD), c: 3.25 }, |
| 485 | + { a: Money.new(13, :USD), b: Money.new(-4, :USD), c: -3.25 }, |
| 486 | + { a: Money.new(-13, :USD), b: Money.new(4, :USD), c: -3.25 }, |
| 487 | + { a: Money.new(-13, :USD), b: Money.new(-4, :USD), c: 3.25 }, |
488 | 488 | ] |
489 | 489 | ts.each do |t| |
490 | 490 | expect(t[:a].div(t[:b])).to eq t[:c] |
|
493 | 493 |
|
494 | 494 | it "divides Money by Money (different currency) and returns Float" do |
495 | 495 | ts = [ |
496 | | - { a: Money.new(13, :USD), b: Money.new(4, :EUR), c: 1.625 }, |
497 | | - { a: Money.new(13, :USD), b: Money.new(-4, :EUR), c: -1.625 }, |
498 | | - { a: Money.new(-13, :USD), b: Money.new(4, :EUR), c: -1.625 }, |
499 | | - { a: Money.new(-13, :USD), b: Money.new(-4, :EUR), c: 1.625 }, |
| 496 | + { a: Money.new(13, :USD), b: Money.new(4, :EUR), c: 1.625 }, |
| 497 | + { a: Money.new(13, :USD), b: Money.new(-4, :EUR), c: -1.625 }, |
| 498 | + { a: Money.new(-13, :USD), b: Money.new(4, :EUR), c: -1.625 }, |
| 499 | + { a: Money.new(-13, :USD), b: Money.new(-4, :EUR), c: 1.625 }, |
500 | 500 | ] |
501 | 501 | ts.each do |t| |
502 | 502 | expect(t[:b]).to receive(:exchange_to).once.with(t[:a].currency).and_return(Money.new(t[:b].cents * 2, :USD)) |
|
522 | 522 | describe "#divmod" do |
523 | 523 | it "calculates division and modulo with Integer" do |
524 | 524 | ts = [ |
525 | | - { a: Money.new(13, :USD), b: 4, c: [Money.new(3, :USD), Money.new(1, :USD)] }, |
526 | | - { a: Money.new(13, :USD), b: -4, c: [Money.new(-4, :USD), Money.new(-3, :USD)] }, |
527 | | - { a: Money.new(-13, :USD), b: 4, c: [Money.new(-4, :USD), Money.new(3, :USD)] }, |
528 | | - { a: Money.new(-13, :USD), b: -4, c: [Money.new(3, :USD), Money.new(-1, :USD)] }, |
| 525 | + { a: Money.new(13, :USD), b: 4, c: [Money.new(3, :USD), Money.new(1, :USD)] }, |
| 526 | + { a: Money.new(13, :USD), b: -4, c: [Money.new(-4, :USD), Money.new(-3, :USD)] }, |
| 527 | + { a: Money.new(-13, :USD), b: 4, c: [Money.new(-4, :USD), Money.new(3, :USD)] }, |
| 528 | + { a: Money.new(-13, :USD), b: -4, c: [Money.new(3, :USD), Money.new(-1, :USD)] }, |
529 | 529 | ] |
530 | 530 | ts.each do |t| |
531 | 531 | expect(t[:a].divmod(t[:b])).to eq t[:c] |
|
534 | 534 |
|
535 | 535 | it "calculates division and modulo with Money (same currency)" do |
536 | 536 | ts = [ |
537 | | - { a: Money.new(13, :USD), b: Money.new(4, :USD), c: [3, Money.new(1, :USD)] }, |
538 | | - { a: Money.new(13, :USD), b: Money.new(-4, :USD), c: [-4, Money.new(-3, :USD)] }, |
539 | | - { a: Money.new(-13, :USD), b: Money.new(4, :USD), c: [-4, Money.new(3, :USD)] }, |
540 | | - { a: Money.new(-13, :USD), b: Money.new(-4, :USD), c: [3, Money.new(-1, :USD)] }, |
| 537 | + { a: Money.new(13, :USD), b: Money.new(4, :USD), c: [3, Money.new(1, :USD)] }, |
| 538 | + { a: Money.new(13, :USD), b: Money.new(-4, :USD), c: [-4, Money.new(-3, :USD)] }, |
| 539 | + { a: Money.new(-13, :USD), b: Money.new(4, :USD), c: [-4, Money.new(3, :USD)] }, |
| 540 | + { a: Money.new(-13, :USD), b: Money.new(-4, :USD), c: [3, Money.new(-1, :USD)] }, |
541 | 541 | ] |
542 | 542 | ts.each do |t| |
543 | 543 | expect(t[:a].divmod(t[:b])).to eq t[:c] |
|
546 | 546 |
|
547 | 547 | it "calculates division and modulo with Money (different currency)" do |
548 | 548 | ts = [ |
549 | | - { a: Money.new(13, :USD), b: Money.new(4, :EUR), c: [1, Money.new(5, :USD)] }, |
550 | | - { a: Money.new(13, :USD), b: Money.new(-4, :EUR), c: [-2, Money.new(-3, :USD)] }, |
551 | | - { a: Money.new(-13, :USD), b: Money.new(4, :EUR), c: [-2, Money.new(3, :USD)] }, |
552 | | - { a: Money.new(-13, :USD), b: Money.new(-4, :EUR), c: [1, Money.new(-5, :USD)] }, |
| 549 | + { a: Money.new(13, :USD), b: Money.new(4, :EUR), c: [1, Money.new(5, :USD)] }, |
| 550 | + { a: Money.new(13, :USD), b: Money.new(-4, :EUR), c: [-2, Money.new(-3, :USD)] }, |
| 551 | + { a: Money.new(-13, :USD), b: Money.new(4, :EUR), c: [-2, Money.new(3, :USD)] }, |
| 552 | + { a: Money.new(-13, :USD), b: Money.new(-4, :EUR), c: [1, Money.new(-5, :USD)] }, |
553 | 553 | ] |
554 | 554 | ts.each do |t| |
555 | 555 | expect(t[:b]).to receive(:exchange_to).once.with(t[:a].currency).and_return(Money.new(t[:b].cents * 2, :USD)) |
|
560 | 560 | context "with infinite_precision", :default_infinite_precision_true do |
561 | 561 | it "uses BigDecimal division" do |
562 | 562 | ts = [ |
563 | | - { a: Money.new(13, :USD), b: 4, c: [Money.new(3, :USD), Money.new(1, :USD)] }, |
564 | | - { a: Money.new(13, :USD), b: -4, c: [Money.new(-4, :USD), Money.new(-3, :USD)] }, |
565 | | - { a: Money.new(-13, :USD), b: 4, c: [Money.new(-4, :USD), Money.new(3, :USD)] }, |
566 | | - { a: Money.new(-13, :USD), b: -4, c: [Money.new(3, :USD), Money.new(-1, :USD)] }, |
| 563 | + { a: Money.new(13, :USD), b: 4, c: [Money.new(3, :USD), Money.new(1, :USD)] }, |
| 564 | + { a: Money.new(13, :USD), b: -4, c: [Money.new(-4, :USD), Money.new(-3, :USD)] }, |
| 565 | + { a: Money.new(-13, :USD), b: 4, c: [Money.new(-4, :USD), Money.new(3, :USD)] }, |
| 566 | + { a: Money.new(-13, :USD), b: -4, c: [Money.new(3, :USD), Money.new(-1, :USD)] }, |
567 | 567 | ] |
568 | 568 | ts.each do |t| |
569 | 569 | expect(t[:a].divmod(t[:b])).to eq t[:c] |
|
610 | 610 | describe "#modulo" do |
611 | 611 | it "calculates modulo with Integer" do |
612 | 612 | ts = [ |
613 | | - { a: Money.new(13, :USD), b: 4, c: Money.new(1, :USD) }, |
614 | | - { a: Money.new(13, :USD), b: -4, c: Money.new(-3, :USD) }, |
615 | | - { a: Money.new(-13, :USD), b: 4, c: Money.new(3, :USD) }, |
616 | | - { a: Money.new(-13, :USD), b: -4, c: Money.new(-1, :USD) }, |
| 613 | + { a: Money.new(13, :USD), b: 4, c: Money.new(1, :USD) }, |
| 614 | + { a: Money.new(13, :USD), b: -4, c: Money.new(-3, :USD) }, |
| 615 | + { a: Money.new(-13, :USD), b: 4, c: Money.new(3, :USD) }, |
| 616 | + { a: Money.new(-13, :USD), b: -4, c: Money.new(-1, :USD) }, |
617 | 617 | ] |
618 | 618 | ts.each do |t| |
619 | 619 | expect(t[:a].modulo(t[:b])).to eq t[:c] |
|
622 | 622 |
|
623 | 623 | it "calculates modulo with Money (same currency)" do |
624 | 624 | ts = [ |
625 | | - { a: Money.new(13, :USD), b: Money.new(4, :USD), c: Money.new(1, :USD) }, |
626 | | - { a: Money.new(13, :USD), b: Money.new(-4, :USD), c: Money.new(-3, :USD) }, |
627 | | - { a: Money.new(-13, :USD), b: Money.new(4, :USD), c: Money.new(3, :USD) }, |
628 | | - { a: Money.new(-13, :USD), b: Money.new(-4, :USD), c: Money.new(-1, :USD) }, |
| 625 | + { a: Money.new(13, :USD), b: Money.new(4, :USD), c: Money.new(1, :USD) }, |
| 626 | + { a: Money.new(13, :USD), b: Money.new(-4, :USD), c: Money.new(-3, :USD) }, |
| 627 | + { a: Money.new(-13, :USD), b: Money.new(4, :USD), c: Money.new(3, :USD) }, |
| 628 | + { a: Money.new(-13, :USD), b: Money.new(-4, :USD), c: Money.new(-1, :USD) }, |
629 | 629 | ] |
630 | 630 | ts.each do |t| |
631 | 631 | expect(t[:a].modulo(t[:b])).to eq t[:c] |
|
634 | 634 |
|
635 | 635 | it "calculates modulo with Money (different currency)" do |
636 | 636 | ts = [ |
637 | | - { a: Money.new(13, :USD), b: Money.new(4, :EUR), c: Money.new(5, :USD) }, |
638 | | - { a: Money.new(13, :USD), b: Money.new(-4, :EUR), c: Money.new(-3, :USD) }, |
639 | | - { a: Money.new(-13, :USD), b: Money.new(4, :EUR), c: Money.new(3, :USD) }, |
640 | | - { a: Money.new(-13, :USD), b: Money.new(-4, :EUR), c: Money.new(-5, :USD) }, |
| 637 | + { a: Money.new(13, :USD), b: Money.new(4, :EUR), c: Money.new(5, :USD) }, |
| 638 | + { a: Money.new(13, :USD), b: Money.new(-4, :EUR), c: Money.new(-3, :USD) }, |
| 639 | + { a: Money.new(-13, :USD), b: Money.new(4, :EUR), c: Money.new(3, :USD) }, |
| 640 | + { a: Money.new(-13, :USD), b: Money.new(-4, :EUR), c: Money.new(-5, :USD) }, |
641 | 641 | ] |
642 | 642 | ts.each do |t| |
643 | 643 | expect(t[:b]).to receive(:exchange_to).once.with(t[:a].currency).and_return(Money.new(t[:b].cents * 2, :USD)) |
|
649 | 649 | describe "#%" do |
650 | 650 | it "calculates modulo with Integer" do |
651 | 651 | ts = [ |
652 | | - { a: Money.new(13, :USD), b: 4, c: Money.new(1, :USD) }, |
653 | | - { a: Money.new(13, :USD), b: -4, c: Money.new(-3, :USD) }, |
654 | | - { a: Money.new(-13, :USD), b: 4, c: Money.new(3, :USD) }, |
655 | | - { a: Money.new(-13, :USD), b: -4, c: Money.new(-1, :USD) }, |
| 652 | + { a: Money.new(13, :USD), b: 4, c: Money.new(1, :USD) }, |
| 653 | + { a: Money.new(13, :USD), b: -4, c: Money.new(-3, :USD) }, |
| 654 | + { a: Money.new(-13, :USD), b: 4, c: Money.new(3, :USD) }, |
| 655 | + { a: Money.new(-13, :USD), b: -4, c: Money.new(-1, :USD) }, |
656 | 656 | ] |
657 | 657 | ts.each do |t| |
658 | 658 | expect(t[:a] % t[:b]).to eq t[:c] |
|
661 | 661 |
|
662 | 662 | it "calculates modulo with Money (same currency)" do |
663 | 663 | ts = [ |
664 | | - { a: Money.new(13, :USD), b: Money.new(4, :USD), c: Money.new(1, :USD) }, |
665 | | - { a: Money.new(13, :USD), b: Money.new(-4, :USD), c: Money.new(-3, :USD) }, |
666 | | - { a: Money.new(-13, :USD), b: Money.new(4, :USD), c: Money.new(3, :USD) }, |
667 | | - { a: Money.new(-13, :USD), b: Money.new(-4, :USD), c: Money.new(-1, :USD) }, |
| 664 | + { a: Money.new(13, :USD), b: Money.new(4, :USD), c: Money.new(1, :USD) }, |
| 665 | + { a: Money.new(13, :USD), b: Money.new(-4, :USD), c: Money.new(-3, :USD) }, |
| 666 | + { a: Money.new(-13, :USD), b: Money.new(4, :USD), c: Money.new(3, :USD) }, |
| 667 | + { a: Money.new(-13, :USD), b: Money.new(-4, :USD), c: Money.new(-1, :USD) }, |
668 | 668 | ] |
669 | 669 | ts.each do |t| |
670 | 670 | expect(t[:a] % t[:b]).to eq t[:c] |
|
673 | 673 |
|
674 | 674 | it "calculates modulo with Money (different currency)" do |
675 | 675 | ts = [ |
676 | | - { a: Money.new(13, :USD), b: Money.new(4, :EUR), c: Money.new(5, :USD) }, |
677 | | - { a: Money.new(13, :USD), b: Money.new(-4, :EUR), c: Money.new(-3, :USD) }, |
678 | | - { a: Money.new(-13, :USD), b: Money.new(4, :EUR), c: Money.new(3, :USD) }, |
679 | | - { a: Money.new(-13, :USD), b: Money.new(-4, :EUR), c: Money.new(-5, :USD) }, |
| 676 | + { a: Money.new(13, :USD), b: Money.new(4, :EUR), c: Money.new(5, :USD) }, |
| 677 | + { a: Money.new(13, :USD), b: Money.new(-4, :EUR), c: Money.new(-3, :USD) }, |
| 678 | + { a: Money.new(-13, :USD), b: Money.new(4, :EUR), c: Money.new(3, :USD) }, |
| 679 | + { a: Money.new(-13, :USD), b: Money.new(-4, :EUR), c: Money.new(-5, :USD) }, |
680 | 680 | ] |
681 | 681 | ts.each do |t| |
682 | 682 | expect(t[:b]).to receive(:exchange_to).once.with(t[:a].currency).and_return(Money.new(t[:b].cents * 2, :USD)) |
|
688 | 688 | describe "#remainder" do |
689 | 689 | it "calculates remainder with Integer" do |
690 | 690 | ts = [ |
691 | | - { a: Money.new(13, :USD), b: 4, c: Money.new(1, :USD) }, |
692 | | - { a: Money.new(13, :USD), b: -4, c: Money.new(1, :USD) }, |
693 | | - { a: Money.new(-13, :USD), b: 4, c: Money.new(-1, :USD) }, |
694 | | - { a: Money.new(-13, :USD), b: -4, c: Money.new(-1, :USD) }, |
| 691 | + { a: Money.new(13, :USD), b: 4, c: Money.new(1, :USD) }, |
| 692 | + { a: Money.new(13, :USD), b: -4, c: Money.new(1, :USD) }, |
| 693 | + { a: Money.new(-13, :USD), b: 4, c: Money.new(-1, :USD) }, |
| 694 | + { a: Money.new(-13, :USD), b: -4, c: Money.new(-1, :USD) }, |
695 | 695 | ] |
696 | 696 | ts.each do |t| |
697 | 697 | expect(t[:a].remainder(t[:b])).to eq t[:c] |
|
0 commit comments