Changeset 7799f79


Ignore:
Timestamp:
Dec 13, 2019, 7:41:58 PM (4 years ago)
Author:
Dmitry Kobets <dkobets@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
ae09808
Parents:
ae3db00
Message:

Add various mathematical operations to vec2 + tests

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/vec/vec2.hfa

    rae3db00 r7799f79  
    4242    // Primitive mathematical operations
    4343
    44     // Subtraction
    45 
    4644    forall(| subtract(T)) {
    4745    vec2(T) ?-?(vec2(T) u, vec2(T) v) { // TODO( can't make this const ref )
     
    5351    }
    5452    }
    55 
    56     forall(| negate(T)) {
     53    forall(| negate(T))
    5754    vec2(T) -?(vec2(T) v) with (v) {
    5855        return [-x, -y];
    5956    }
    60     }
    61 
    62     // Addition
     57
     58    forall(| { T --?(T&); }) {
     59    vec2(T)& --?(vec2(T)& v) {
     60        --v.x;
     61        --v.y;
     62        return v;
     63    }
     64    vec2(T)& ?--(vec2(T)& v) {
     65        vec2(T) copy = v;
     66        --v;
     67        return copy;
     68    }
     69    }
     70
    6371    forall(| add(T)) {
    6472    vec2(T) ?+?(vec2(T) u, vec2(T) v) { // TODO( can't make this const ref )
     
    7179    }
    7280
    73     // Scalar Multiplication
     81    forall(| { T ++?(T&); }) {
     82    vec2(T)& ++?(vec2(T)& v) {
     83        ++v.x;
     84        ++v.y;
     85        return v;
     86    }
     87    vec2(T)& ?++(vec2(T)& v) {
     88        vec2(T) copy = v;
     89        ++v;
     90        return copy;
     91    }
     92    }
     93
    7494    forall(| multiply(T)) {
    7595    vec2(T) ?*?(vec2(T) v, T scalar) with (v) { // TODO (can't make this const ref)
     
    7999        return v * scalar;
    80100    }
     101    vec2(T) ?*?(vec2(T) u, vec2(T) v) {
     102        return [u.x * v.x, u.y * v.y];
     103    }
    81104    vec2(T)& ?*=?(vec2(T)& v, T scalar) {
    82105        v = v * scalar;
    83106        return v;
    84107    }
    85     }
    86 
    87     // Scalar Division
     108    vec2(T) ?*=?(vec2(T)& u, vec2(T) v) {
     109        u = u * v;
     110        return u;
     111    }
     112    }
     113
    88114    forall(| divide(T)) {
    89115    vec2(T) ?/?(vec2(T) v, T scalar) with (v) {
    90116        return [x / scalar, y / scalar];
    91117    }
     118    vec2(T) ?/?(vec2(T) u, vec2(T) v) {
     119        return [u.x / v.x, u.y / v.y];
     120    }
    92121    vec2(T)& ?/=?(vec2(T)& v, T scalar) with (v) {
    93122        v = v / scalar;
    94123        return v;
    95124    }
     125    vec2(T) ?/=?(vec2(T)& u, vec2(T) v) {
     126        u = u / v;
     127        return u;
     128    }
     129    }
     130
     131    forall(| { T ?%?(T,T); }) {
     132    vec2(T) ?%?(vec2(T) v, T scalar) with (v) {
     133        return [x % scalar, y % scalar];
     134    }
     135    vec2(T)& ?%=?(vec2(T)& u, T scalar) {
     136        u = u % scalar;
     137        return u;
     138    }
     139    vec2(T) ?%?(vec2(T) u, vec2(T) v) {
     140        return [u.x % v.x, u.y % v.y];
     141    }
     142    vec2(T)& ?%=?(vec2(T)& u, vec2(T) v) {
     143        u = u % v;
     144        return u;
     145    }
     146    }
     147
     148    forall(| { T ?&?(T,T); }) {
     149    vec2(T) ?&?(vec2(T) v, T scalar) with (v) {
     150        return [x & scalar, y & scalar];
     151    }
     152    vec2(T)& ?&=?(vec2(T)& u, T scalar) {
     153        u = u & scalar;
     154        return u;
     155    }
     156    vec2(T) ?&?(vec2(T) u, vec2(T) v) {
     157        return [u.x & v.x, u.y & v.y];
     158    }
     159    vec2(T)& ?&=?(vec2(T)& u, vec2(T) v) {
     160        u = u & v;
     161        return u;
     162    }
     163    }
     164
     165    forall(| { T ?|?(T,T); }) {
     166    vec2(T) ?|?(vec2(T) v, T scalar) with (v) {
     167        return [x | scalar, y | scalar];
     168    }
     169    vec2(T)& ?|=?(vec2(T)& u, T scalar) {
     170        u = u | scalar;
     171        return u;
     172    }
     173    vec2(T) ?|?(vec2(T) u, vec2(T) v) {
     174        return [u.x | v.x, u.y | v.y];
     175    }
     176    vec2(T)& ?|=?(vec2(T)& u, vec2(T) v) {
     177        u = u | v;
     178        return u;
     179    }
     180    }
     181
     182    forall(| { T ?^?(T,T); }) {
     183    vec2(T) ?^?(vec2(T) v, T scalar) with (v) {
     184        return [x ^ scalar, y ^ scalar];
     185    }
     186    vec2(T)& ?^=?(vec2(T)& u, T scalar) {
     187        u = u ^ scalar;
     188        return u;
     189    }
     190    vec2(T) ?^?(vec2(T) u, vec2(T) v) {
     191        return [u.x ^ v.x, u.y ^ v.y];
     192    }
     193    vec2(T)& ?^=?(vec2(T)& u, vec2(T) v) {
     194        u = u ^ v;
     195        return u;
     196    }
     197    }
     198
     199    forall(| { T ?<<?(T,T); }) {
     200    vec2(T) ?<<?(vec2(T) v, T scalar) with (v) {
     201        return [x << scalar, y << scalar];
     202    }
     203    vec2(T)& ?<<=?(vec2(T)& u, T scalar) {
     204        u = u << scalar;
     205        return u;
     206    }
     207    vec2(T) ?<<?(vec2(T) u, vec2(T) v) {
     208        return [u.x << v.x, u.y << v.y];
     209    }
     210    vec2(T)& ?<<=?(vec2(T)& u, vec2(T) v) {
     211        u = u << v;
     212        return u;
     213    }
     214    }
     215
     216    forall(| { T ?>>?(T,T); }) {
     217    vec2(T) ?>>?(vec2(T) v, T scalar) with (v) {
     218        return [x >> scalar, y >> scalar];
     219    }
     220    vec2(T)& ?>>=?(vec2(T)& u, T scalar) {
     221        u = u >> scalar;
     222        return u;
     223    }
     224    vec2(T) ?>>?(vec2(T) u, vec2(T) v) {
     225        return [u.x >> v.x, u.y >> v.y];
     226    }
     227    vec2(T)& ?>>=?(vec2(T)& u, vec2(T) v) {
     228        u = u >> v;
     229        return u;
     230    }
     231    }
     232
     233    forall(| { T ~?(T); })
     234    vec2(T) ~?(vec2(T) v) with (v) {
     235        return [~v.x, ~v.y];
    96236    }
    97237
     
    123263    }
    124264}
    125 
  • tests/vector/.expect/vec2_float.txt

    rae3db00 r7799f79  
    1414s*v:<4.5,8.25>
    1515?*=?:<4.5,8.25>
     16?*?(vec)<2.64,-17.4>
     17?*=?(vec)<2.64,-17.4>
    1618?/?:<0.666667,-0.0333333>
    1719?/=?:<0.666667,-0.0333333>
     20?/?(vec)<0.545455,-1.93333>
     21?/=?(vec)<0.545455,-1.93333>
     22++?<2.2,-2.5>
     23--?<2.2,-2.5>
     24?++(part 1)<1.2,-3.5>
     25?++(part 2)<2.2,-2.5>
     26?--(part 1)<1.2,-3.5>
     27?--(part 2)<0.2,-4.5>
    1828dot_1:0.
    1929dot_2:8.6
  • tests/vector/.expect/vec2_int.txt

    rae3db00 r7799f79  
    1414s*v:<45,825>
    1515?*=?:<45,825>
     16?*?(vec)<2,-15>
     17?*=?(vec)<2,-15>
    1618?/?:<7,-3>
    1719?/=?:<7,-3>
     20?/?(vec)<5,-1>
     21?/=?(vec)<5,-1>
     22++?<2,-2>
     23--?<2,-2>
     24?++(part 1)<1,-3>
     25?++(part 2)<2,-2>
     26?--(part 1)<1,-3>
     27?--(part 2)<0,-4>
     28?%?(int)<0,1>
     29?%=?(int)<0,1>
     30?%?(vec)<-2,3>
     31?%=?(vec)<-2,3>
     32?&?(int)<0,8>
     33?&=?(int)<0,8>
     34?&?(vec)<1,6>
     35?&=?(vec)<1,6>
     36?|?(int)<7,3>
     37?|=?(int)<7,3>
     38?|?(vec)<7,1>
     39?|=?(vec)<7,1>
     40?^?(int)<12,0>
     41?^=?(int)<12,0>
     42?^?(vec)<12,5>
     43?^=?(vec)<12,5>
     44?<<?(int)<4,2>
     45?<<=?(int)<4,2>
     46?<<?(vec)<32,4>
     47?<<=?(vec)<32,4>
     48~?<-6,-3>
    1849dot_1:0
    1950dot_2:32
  • tests/vector/vec2_float.cfa

    rae3db00 r7799f79  
    4747    sout | "?*=?:" | v1;
    4848
     49    {
     50        vec2(float) u = {1.2f, -5.8f};
     51        vec2(float) v = {2.2f, 3};
     52        sout | "?*?(vec)" | (u * v);
     53        sout | "?*=?(vec)" | (u *= v);
     54    }
     55
     56
    4957    v1 = (vec2(float)){2, -0.1f};
    5058    sout | "?/?:" | (v1 / 3);
     
    5260    v1 /= 3;
    5361    sout | "?/=?:" | v1;
     62
     63    {
     64        vec2(float) u = {1.2f, -5.8f};
     65        vec2(float) v = {2.2f, 3};
     66        sout | "?/?(vec)" | (u / v);
     67        sout | "?/=?(vec)" | (u /= v);
     68    }
     69
     70    {
     71        vec2(float) u = {1.2f, -3.5f};
     72        sout | "++?" | ++u;
     73    }
     74    {
     75        vec2(float) u = {1.2f, -3.5f};
     76        sout | "--?" | ++u;
     77    }
     78    {
     79        vec2(float) u = {1.2f, -3.5f};
     80        sout | "?++(part 1)" | u++;
     81        sout | "?++(part 2)" | u;
     82    }
     83    {
     84        vec2(float) u = {1.2f, -3.5f};
     85        sout | "?--(part 1)" | u--;
     86        sout | "?--(part 2)" | u;
     87    }
    5488
    5589    v1 = (vec2(float)){2, 3};
  • tests/vector/vec2_int.cfa

    rae3db00 r7799f79  
    4848    sout | "?*=?:" | v1;
    4949
     50    {
     51        vec2(int) u = {1, -5};
     52        vec2(int) v = {2, 3};
     53        sout | "?*?(vec)" | (u * v);
     54        sout | "?*=?(vec)" | (u *= v);
     55    }
     56
    5057    v1 = (vec2(int)){21, -10};
    5158    sout | "?/?:" | (v1 / 3);
     
    5360    v1 /= 3;
    5461    sout | "?/=?:" | v1;
     62
     63    {
     64        vec2(int) u = {11, -5};
     65        vec2(int) v = {2, 3};
     66        sout | "?/?(vec)" | (u / v);
     67        sout | "?/=?(vec)" | (u /= v);
     68    }
     69
     70    {
     71        vec2(int) u = {1, -3};
     72        sout | "++?" | ++u;
     73    }
     74    {
     75        vec2(int) u = {1, -3};
     76        sout | "--?" | ++u;
     77    }
     78    {
     79        vec2(int) u = {1, -3};
     80        sout | "?++(part 1)" | u++;
     81        sout | "?++(part 2)" | u;
     82    }
     83    {
     84        vec2(int) u = {1, -3};
     85        sout | "?--(part 1)" | u--;
     86        sout | "?--(part 2)" | u;
     87    }
     88
     89    // %
     90    {
     91        vec2(int) u = {-12, 123};
     92        sout | "?%?(int)" | (u % 2);
     93        sout | "?%=?(int)" | (u %= 2);
     94    }
     95    {
     96        vec2(int) u = {-12, 27};
     97        vec2(int) v = {5, 4};
     98        sout | "?%?(vec)" | (u % v);
     99        sout | "?%=?(vec)" | (u %= v);
     100    }
     101
     102
     103    // &
     104    {
     105        vec2(int) u = {5, 8};
     106        sout | "?&?(int)" | (u & (1 << 3));
     107        sout | "?&=?(int)" | (u &= (1 << 3));
     108    }
     109    {
     110        vec2(int) u = {5, 6};
     111        vec2(int) v = {3, 7};
     112        sout | "?&?(vec)" | (u & v);
     113        sout | "?&=?(vec)" | (u &= v);
     114    }
     115
     116    // |
     117    {
     118        vec2(int) u = {5, 1};
     119        sout | "?|?(int)" | (u | 2);
     120        sout | "?|=?(int)" | (u |= 2);
     121    }
     122    {
     123        vec2(int) u = {5, 1};
     124        vec2(int) v = {2, 1};
     125        sout | "?|?(vec)" | (u | v);
     126        sout | "?|=?(vec)" | (u |= v);
     127    }
     128
     129    // ^
     130    {
     131        vec2(int) u = {9, 5};
     132        sout | "?^?(int)" | (u ^ 5);
     133        sout | "?^=?(int)" | (u ^= 5);
     134    }
     135    {
     136        vec2(int) u = {9, 5};
     137        vec2(int) v = {5, 0};
     138        sout | "?^?(vec)" | (u ^ v);
     139        sout | "?^=?(vec)" | (u ^= v);
     140    }
     141
     142    // <<
     143    {
     144        vec2(int) u = {2, 1};
     145        sout | "?<<?(int)" | (u << 1);
     146        sout | "?<<=?(int)" | (u <<= 1);
     147    }
     148    {
     149        vec2(int) u = {1, 1};
     150        vec2(int) v = {5, 2};
     151        sout | "?<<?(vec)" | (u << v);
     152        sout | "?<<=?(vec)" | (u <<= v);
     153    }
     154
     155    // ~
     156    {
     157        vec2(int) u = {5, 2};
     158        sout | "~?" | (~u);
     159    }
    55160
    56161    v1 = (vec2(int)){2, 3};
Note: See TracChangeset for help on using the changeset viewer.